室内定位系列(二)——仿真获取RSS数据
很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大、数据不全面、灵活性较小,采用仿真的方法获取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数据的更多相关文章
- 室内定位系列(一)——WiFi位置指纹(译)
原文:<Advanced Location-Based Technologies and Services>--chapter 2 WiFi Location Fingerprint 作者 ...
- 爬虫系列二(数据清洗--->xpath解析数据)
一 xpath介绍 XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. XPath 使用路径表达式在 XML 文档中进行导航 XPath 包 ...
- 室内定位系列(三)——位置指纹法的实现(KNN)
位置指纹法中最常用的算法是k最近邻(kNN):选取与当前RSS最邻近的k个指纹的位置估计当前位置,简单直观有效.本文介绍kNN用于定位的基本原理与具体实现(matlab.python). 基本原理 位 ...
- Python股票分析系列——系列介绍和获取股票数据.p1
本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...
- ES系列(五):获取单条数据get处理过程实现
前面讲的都是些比较大的东西,即框架层面的东西.今天咱们来个轻松点的,只讲一个点:如题,get单条记录的es查询实现. 1. get语义说明 get是用于搜索单条es的数据,是根据主键id查询数据方式. ...
- 爬虫系列二(数据清洗--->bs4解析数据)
一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...
- 面试系列二:精选大数据面试真题JVM专项-附答案详细解析
公众号(五分钟学大数据)已推出大数据面试系列文章-五分钟小面试,此系列文章将会深入研究各大厂笔面试真题,并根据笔面试题扩展相关的知识点,助力大家都能够成功入职大厂! 大数据笔面试系列文章分为两种类型: ...
- 【机器学习】WIFI室内定位
WIFI室内定位-指纹法 在A1区域内每个点上采集四个WiFi的信号数据(信号强度),五点.九点.十六点采样. 5*5=25区域*16数据=400样本,用来训练 样本数 R B G1 G2 1 2 ...
- LED室内定位算法:RSS,TOA,AOA,TDOA(转载)
转载自:https://blog.csdn.net/baidu_38197452/article/details/77115935 基于LED的室内定位算法大致可以分为四类: 1. 几何测量法 这种方 ...
随机推荐
- Squirrel: 通用SQL、NoSQL客户端
安装 配置数据库 配置驱动 配置连接 如果你的工作中,需要使用到多个数据库,又不想在多种客户端之间切换来切换去.那么就需要找一款支持多数据库的客户端工具了.如果你要连接多个关系型数据库,你就可以使用N ...
- javaweb项目jsp跳转servlet Error instantiating servlet class 问题
问题: HTTP Status 500 - Error instantiating servlet class RecommenderServlet type Exception report mes ...
- redis 缓存技术与memcache的区别
1 什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset( ...
- THINKPHP源码学习--------验证码类
TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.p ...
- spring.net 框架分析(三)ContextRegistry.GetContext()
我们通过ContextRegistry.GetContext()建立了一个IApplicationContext得实例,那么这个实例具体是怎么建立的了. 我们来分析一下容器实例建立的过程: 我们在配置 ...
- 机器学习之sklearn——聚类
生成数据集方法:sklearn.datasets.make_blobs(n_samples,n_featurs,centers)可以生成数据集,n_samples表示个数,n_features表示特征 ...
- C#计算代码执行时间
System.Diagnostics.Stopwatch watch = new Stopwatch();watch.Start(); //要计算的操作 DoSomeThing(); watch.St ...
- CSS你可能还不知道的一些知识点
一.特殊选择器 1.* 用于匹配任何的标记 2.> 用于指定父子节点关系 3.E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F 4.E ~ F 匹配所有E元素之后的同级元素F 5. ...
- 高通vuforia+Unity3D 制作ar app
很简单就可以用Unity3D做出增强现实的一个小例子 新人第一次写博客,若出现错误望指正^_^ 需要下载de东西: unity3d 5.0 http://unity3d.com/get-unity ...
- JAVA实现带图片的列表——JList
JList:显示对象列表并且允许用户选择一个或多个项的组件. JList的构造方法: 1.根据数组创建列表: JList(Object[] listData) 构造一个 JList,使其显示指定数组中 ...