很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大、数据不全面、灵活性较小,采用仿真的方法获取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. javascript设计模式-工厂方法模式

    工厂方法模式笔记  通过对产品类的抽象使其创建业务主要负责用于创建多类产品的实例  对于创建多类对象,简单工厂不太实用,这是简单工厂模式的应用局限,当然这正是工厂方法模式的价值之所在  通过工厂方法模 ...

  2. JAVA NIO Scatter/Gather(矢量IO)

    矢量IO=Scatter/Gather:   在多个缓冲区上实现一个简单的IO操作.减少或避免了缓冲区拷贝和系统调用(IO)   write:Gather 数据从几个缓冲区顺序抽取并沿着通道发送,就好 ...

  3. [Hadoop]-从数据去重认识MapReduce

    这学期刚好开了一门大数据的课,就是完完全全简简单单的介绍的那种,然后就接触到这里面最被人熟知的Hadoop了.看了官网的教程[吐槽一下,果然英语还是很重要!],嗯啊,一知半解地搭建了本地和伪分布式的, ...

  4. 无法安装Windows Live“OnCatalogResult:0x80190194”错误的解决方法

    今天想安装一个博客客户端,结果安装一直报错"OnCatalogResult:0x80190194",百度查到了解决发放再此记录下来,以备后用. 到官网下载了一个在线安装程序,可是一 ...

  5. xshell不能输入中文,显示为??

    不知不觉间发现自己使用xshell的时候不能输入中文了,输入的中文会变成"??",开始以为是编码问题,看了一下编码设置后发现没有任何问题,而且显示中文没有出现乱码问题,只是在输入的 ...

  6. 使用Servlet和JSP实现一个简单的Web聊天室系统

    1 问题描述                                                利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...

  7. [转]C# 使用Nlog记录日志到数据库

    本文转自:http://www.cnblogs.com/weixing/archive/2013/04/26/3044422.html 摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输 ...

  8. Spring事务之详解--三种实现方式

    实现购买股票案例: 一.引入JAR文件: 二.开始搭建分层架构---创建账户(Account)和股票(Stock)实体类 Account: /* * 账户 */ public class Accoun ...

  9. 新手!mass 设置问题

    mass就是你那个物体的质量啊质量越大,惯性也越大重力也越大.假如你的刚体的mass为1,那么你只要给这个物体9.81N向上的力,你就可以抵消重力,让这个物体悬浮着:但假如这个物体的mass为10,你 ...

  10. [No000097]程序员面试题集【下】

    1.下面中共包含()个正方形?40 计算规律,设大长方形长是5,宽是4,小正方形边长是1,那么图中.小正方形的个数是,4*5个,边长是2的正方形的个数是3*4个,边长是3的正方形的个数是2*3个,边长 ...