很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大、数据不全面、灵活性较小,采用仿真的方法获取RSS数据是另一种可供选择的方式。本文介绍射线跟踪技术的基本原理,以及如何得到用于定位仿真的RSS数据。在此基础上得到位置指纹库与一组测试数据,用于以后定位算法的验证。(本文的原理介绍并不严谨,但求快速理解)

对数距离损耗模型


在自由空间中,没有任何障碍物,信号从发射源向四面八方呈球面形状发射出去,各个方向上没有任何区别,因此信号的功率和距离的平方呈反比:\(P \propto \frac{1}{d^2}\)。

RSS就是功率,但是衰减的单位一般用dB来表示,那么就很容易理解RSS与距离的关系了,RSS衰减与距离的对数呈正比,假设已知一个参考距离\(d_0\)以及这个距离上的RSS为\(RSS(d_0)\),那么,\(RSS(d) = RSS(d_0) - 10n\log(\frac{d}{d_0})\)。自由空间中\(n=2\),这就是最常见的对数距离损耗模型(针对室内的传播模型还有分隔损耗、楼层间分隔损耗、Ericsson多重断点模型等)。下图中的黑线是一组在走廊中测量的实际数据,红线是对数距离损耗模型的拟合结果,可以看出模型可以反映总体趋势,但和真实室内环境下的情况还是有较大区别,注意黑线的波动不是因为噪声,而是实际的信号传播环境造成的。走廊这种场景算是比较简单的,如果在其他一下更复杂的场景下,有更多的信号遮挡、反射等因素存在,RSS不仅和距离位置有关,还和周围的各种障碍物有关系,因此在更复杂一点的场景下,可以用射线跟踪技术来分析。

射线跟踪技术


电磁波沿直线传播,可以将其近似为射线进行分析。对于一个固定的发射源,在自由空间中,利用对数距离衰减模型即可计算各个位置的RSS,但是室内环境很复杂,信号可以遇到墙壁发生反射,各个反射后的信号又可以与未经反射的信号叠加,实际中测量到的信号其实包括了各个反射、绕射、散射信号。在射线跟踪中,计算出发射点与接收点之间的多条传播路径,分别对各个路径的信号进行分析,一般包括信号强度、相位在多次反射或绕射下的计算,然后叠加得到接收点上的信号。

举个例子,下图是一个假定的空旷的房间,有一个发射源(AP)在房间左边的角落,一个接收器在房间的中央,接收器收到这个AP的信号中包含了来自1条直射路径与6条(墙壁)反射路径的信号(多次反射的影响很小,可以忽略),下图右下角的曲线是某条直线上RSS随距离的衰减,在这样稍微复杂一点的环境中,RSS与距离的关系已经不是平滑的对数衰减了。理论上我们可以计算出任意一点的的RSS,图中有6个AP,因此每个位置点可以分别计算出6个RSS。

生成用于位置指纹法的仿真数据


下面介绍一些怎么得到在位置指纹法中进行仿真所需的数据。

  • RSS仿真环境数据集:设置好房间尺寸和各个AP的位置等各种参数,使用射线跟踪计算每个位置的RSS,位置点的间隔设得小一点(0这里设为0.01m),计算一次射线跟踪后把数据保存起来,以后所有的RSS数据都从这个“RSS仿真环境数据集”中或取。

  • 一个典型的离线指纹库:模拟数据采集的过程,比如每个1m采集一次RSS数据,数据都从上面的“RSS仿真环境中”获取。也可以考虑其他的一些采集方式,或者为采集过程加入噪声,设置采集样本的个数等。

  • 在线定位测试数据:模拟一个目标在房间中运动,获得一条运动轨迹,以及每个轨迹点上的RSS,用来作为定位算法的测试数据。

这个系列的位置指纹法都使用生成的这些数据,用测试数据验证算法的性能。

代码和数据


代码地址:https://github.com/jiangqideng/codeInBlogs/tree/master/IP_raytracing

  • main.m:主程序,在仿真环境中,得到离线指纹库,以及在线阶段的测试数据,用于以后的定位测试。
  • get_rss_by_ray_tracing.m:简化场景下(空旷房间)的射线跟踪。
  • generate_radio_map.m:生成“RSS仿真环境数据集”。
  • get_random_trace.m:生成一条随机轨迹。
  • get_offline_data_random.m:模拟随机数据采集,生成位置指纹库。
  • get_offline_data_uniform.m:模拟均匀数据采集,生成位置指纹库。
  • get_online_data.m:模拟在线阶段,生成测试数据。
  • radio_map_20_15.mat:生成的“RSS仿真环境数据集”,199914996的数组,比如fingerprint(1000, 1000, 2)代表的是仿真环境中位置(100,100)上接收到的第2个AP的RSS。
  • offline_data_rss.mat:离线数据RSS,每行为一个RSS向量
  • offline_data_location.mat:离线数据位置点,每行为一个位置点x,y
  • online_data_trace.mat:生成测试数据的运动轨迹,10000*2的数组,比如trace(10, :)代表的是第10个时刻目标的位置x和y。
  • online_data_rss.mat:生成测试数据中与运行轨迹对应的RSS,10000*6的数组,比如trace(10, :)代表的是第10个时刻时目标测得的各个RSS。

作者:rubbninja

出处:http://www.cnblogs.com/rubbninja/

关于作者:目前主要研究领域为机器学习与无线定位技术,欢迎讨论与指正!

版权声明:本文版权归作者和博客园共有,转载请注明出处。

室内定位系列(二)——仿真获取RSS数据的更多相关文章

  1. 室内定位系列(一)——WiFi位置指纹(译)

    原文:<Advanced Location-Based Technologies and Services>--chapter 2 WiFi Location Fingerprint 作者 ...

  2. 爬虫系列二(数据清洗--->xpath解析数据)

    一 xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath 包 ...

  3. 室内定位系列(三)——位置指纹法的实现(KNN)

    位置指纹法中最常用的算法是k最近邻(kNN):选取与当前RSS最邻近的k个指纹的位置估计当前位置,简单直观有效.本文介绍kNN用于定位的基本原理与具体实现(matlab.python). 基本原理 位 ...

  4. Python股票分析系列——系列介绍和获取股票数据.p1

    本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...

  5. ES系列(五):获取单条数据get处理过程实现

    前面讲的都是些比较大的东西,即框架层面的东西.今天咱们来个轻松点的,只讲一个点:如题,get单条记录的es查询实现. 1. get语义说明 get是用于搜索单条es的数据,是根据主键id查询数据方式. ...

  6. 爬虫系列二(数据清洗--->bs4解析数据)

    一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...

  7. 面试系列二:精选大数据面试真题JVM专项-附答案详细解析

    公众号(五分钟学大数据)已推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型: ...

  8. 【机器学习】WIFI室内定位

    WIFI室内定位-指纹法 在A1区域内每个点上采集四个WiFi的信号数据(信号强度),五点.九点.十六点采样. 5*5=25区域*16数据=400样本,用来训练 样本数 R B G1  G2 1 2 ...

  9. LED室内定位算法:RSS,TOA,AOA,TDOA(转载)

    转载自:https://blog.csdn.net/baidu_38197452/article/details/77115935 基于LED的室内定位算法大致可以分为四类: 1. 几何测量法 这种方 ...

随机推荐

  1. css之盒模型

    盒模型由内容(content).填充(padding).边框(border).边界(margin)组成,一个盒子中主要的属性就5个:width.height.padding.border.margin ...

  2. centos6.5无法访问网络

    1.在network Adapter选中,右侧是否是选中为NAT 2.打开网络和共享中心-->更改适配器设置,VMnet8和VMnet1是否是自动获取了IP,自动获取ip连接上后 3.右击本地连 ...

  3. Jsoup系列学习(1)-发送get或post请求

    简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. 官 ...

  4. Linux NFS服务器的安装与配置

    一.NFS服务简介 NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操 ...

  5. [python]获取网页中内容为汉字的字符串的判断

    实际上是这样,将获取到网页中表单内容与汉字字符串作比较,即: a = request.POST['a'] if a == '博客园': print 'ok' else: print 'false' a ...

  6. [转]ASP.NET Core 开发-Logging 使用NLog 写日志文件

    本文转自:http://www.cnblogs.com/Leo_wl/p/5561812.html ASP.NET Core 开发-Logging 使用NLog 写日志文件. NLog 可以适用于 . ...

  7. 关于Cewu Lu等的《Combining Sketch and Tone for Pencil Drawing Production》一文铅笔画算法的理解和笔录。

     相关论文的链接:Combining Sketch and Tone for Pencil Drawing Production 第一次看<Combining Sketch and Tone f ...

  8. JUnit 4 与 TestNG 对比

    原文出处: 付学良的网志 原文出处2: http://www.importnew.com/16270.html -------------------------------------------- ...

  9. [LeetCode] Maximum Product of Word Lengths 单词长度的最大积

    Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...

  10. leecode系列--Two Sum

    学习这件事在任何时间都不能停下.准备坚持刷leecode来提高自己,也会把自己的解答过程记录下来,希望能进步. Two Sum Given an array of integers, return i ...