《中南大学物联网定位实验报告资料(共25页).doc》由会员分享,可在线阅读,更多相关《中南大学物联网定位实验报告资料(共25页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上物联网定位技术实验报告学生姓名关华学 号专业班级物联网工程1301班指导老师张士庚学 院信息科学与工程学院完成时间2016年6月 专心-专注-专业 目 录 实验一 Wi-Fi指纹定位系统的实现与性能评价1. 实验目标通过实现一个基于Wi-Fi指纹的室内定位系统,掌握指纹定位的原理和实现方式,并进行测试,对所实现的指纹定位系统的误差性能进行评价。2. 实验背景WIFI位置指纹定位技术是基于接收信号传播特性而进行定位的,与传统定位技术相比,其无需额外添加设备来进行角度测量与时间同步,且充分利用了己有W1FI无线网络,降低其使用成本。其次,WIFI位置指纹定位技术与传统室内
2、定位技术(如:视频信号与红外定位)相比,其扩展性更强、应用范围更广。由于WIFI信号传输时受非视距、多径衰落等因素影响较小,故基于WIFI网络的指纹定位系统稳定性较强,而基于红外或视频信号定位技术在使用时较易受限,比如:在阳光直射或突光照射下基于红外技术定位的精度将大大降低,而基于视频信号的定位技术使用前提是移动终端必须在可视条件下。在城市人口居住密集的今天,由于室内与地下的无线基站信号较弱,现有主流定位技术GPS、AGPS、Google Map等在室内与地下定位时均存在盲区,且定位精度不高,而WIFI位置指纹定位技术可通过WIFI网络中的AP进行定位,避免了对无线基站网络的依赖,从而实现了地
3、下或室内环境的准确高效定位,其在地下室内商场、停车场、物流等行业均具有潜在应用价值。3. 实验原理 3.1 wifi基础知识 W1FI网络的组成结构如下图2-1所示,主要包括了接入点(Access Point,AP)、站点(Station,STA)、无线传输介质(Wirless Medium,WM)与分布式系统(DistributionSystem,DS)。WIFI无线网络工作原理框图 3.2室内定位方法建模 传播模型定位法是根据信号传播距离与衰减的关系进行建模,并通过建立的传播模型将RSS转换成信号的传播距离,从而完成对移动终端的定位。传播模型法在定位时无需额外的硬件设备,故其定位成本很低,
4、且其在定位时不会影响到现有网络数据的传输。 虽然传播模型定位法有以上优点,但由于其定位精度不高导致其应用范围不是很广,目前播模型定位法只应用于粗略定位与测距中,其定位步骤如下:在己知室内环境下,利用接收信号强度估计此环境下的传播模型与参数值;利用中的传播模型,通过获取未知终端节点的RSS来完成对其定位。位置指纹定位法是通过移动终端的RSS与指纹库中的指纹数据进行匹配,然后再通过某种算法来计算其位置。 3.3指纹定位算法无线信号依赖传播环境,在不同位置上,其信道的多径特征也均不相同。无线信号在传播过程中经反射、折射、散射后,生成与传播环境相关且独特的信号,我们称此多径特征为“位置指纹”。信号的多
5、径特征包括信号强度、脉冲响应时间、信噪比等,本文主要釆用接收AP信号的强度值(即RSS)作为信号指纹特征。位置指纹法在定位过程中分离线/训练与在线/定位两个阶段,其定位流程如下图所示。离线/训练阶段指纹定位在离线阶段主要采集定位场所中各参考点位置上的信号多径特征(信号强度),从而建立位置指纹数据库。在线/定位阶段在实际定位过程中,移动终端首先会接收到周围AP接入点发出的信号特征记为Rss,然后则可遍历指纹数据库对此RSS矢量进行匹配,最后再采取某种指纹定位算法计算出移动终端的位置。常用的指纹定位算法有:最近邻法CNN)、K近邻法(KNN)、K加权近邻法(WKNN)、贝叶斯概率算法、BP神经网络
6、算法等.假设在定位区域中共有L个位置指纹参考点,记为F1,F2,.Fl,其与一组位置坐标L1,L2,.L7一一映射即指纹Fi在定位区域中对应的位置坐标为Li=(Xi,Yi)。在“在线/定位”阶段时,移动终端会接收到周围n个AP热点发送的信号强度矢量,记为S,其中S=(S1,S2,.Sn)。 通过贝叶斯公式计算后验概率: P(Li |S)*P(Li)=P(S)P(S| Li)*P(Li)假设选取参考点是随机的,均匀分布,即P(Li)=1/L。由于在某一位置指纹处,来自每个接入点AP的RSS(接收信号强度)互不相关,所以可以得到:P(S Li)= P(S1 Li) P(S2 Li). P(Sn L
7、i) 观察数据发现某一位置指纹处的接收信号强度服从高斯正态分布,所以可以进行近似模拟。 最后以概率值P(Li S)作为定位区域中指纹参考点的权重,并估计出移动终端的位置。4. 关键代码/* * 计算距离,并且找出最小距离的点和值。 * return */private Point calculate() minDistance = Double.MAX_VALUE;mini = -1;double tempDistance;distance = new doubletotalPoints.size() - 1;Point endPoint = totalPoints.get(totalPoin
8、ts.size() - 1);for (int i = 0; i totalPoints.size() - 1; i+) tempDistance = calculate_Distance(endPoint, totalPoints.get(i);distancei = tempDistance;if (tempDistance minDistance) minDistance = tempDistance;mini = i;return totalPoints.get(mini);/* * 计算两点之间的距离 * param point1 * param point2 * return */
9、private double calculate_Distance(Point point1, Point point2) float result = 0.0f;String str;Map tempMap1 = new HashMap();Map tempMap2 = new HashMap();int i, j;for (j = 0; j point2.aps.size(); j+) tempMap2.put(point2.aps.get(j).SSID, point2.aps.get(j).level);for (i = 0; i point1.aps.size(); i+) temp
10、Map1.put(point1.aps.get(i).SSID, point1.aps.get(i).level);Iterator iterator = totalAPs.iterator();while (iterator.hasNext() str = iterator.next();if (tempMap1.containsKey(str) & tempMap2.containsKey(str) result += (tempMap1.get(str) - tempMap2.get(str)* (tempMap1.get(str) - tempMap2.get(str);if (tem
11、pMap1.containsKey(str) & !tempMap2.containsKey(str) result += (tempMap1.get(str) - minLevel.get(str)* (tempMap1.get(str) - minLevel.get(str);if (!tempMap1.containsKey(str) & tempMap2.containsKey(str) result += (tempMap2.get(str) - minLevel.get(str)* (tempMap2.get(str) - minLevel.get(str);return Math
12、.sqrt(result);5. 实验结果代码调试截图实验界面截图第一次、第二次扫描截图wifi.txt截图 计算结果截图6. 室内定位误差分析由于室内环境比较复杂,信号在室内传播时会受到不同程度的影响,而造成此影响的因素主要有以下三种:非视距传播、多径传播、阴影效应。l 非视距传播 由于在信号的发射端与接收端之间的直射路径上存在障碍物,导致无线电波不能在收发两端进行直射传播,而只能通过反射、折射进行传播,由此在接收端测得的信号特征,如信号到达时间、信号强度、入射角、到达时间差等,将无法准确的反映出收发两端之间的真实距离,我们称这种现象为信号的非视距传播。l 多径传播 由于信号接收端所处环境复
13、杂,使得发射的电磁波在向外扩散过程中遇到各种障碍物,使得信号在传播过程中受到反射、散射、绕射等影响,导致接收到的信号为多条路径上信号的矢量和。由于每条路径上信号的强度、到达时间、到达载波相位都不相同,则产生多径干扰,这种现象即为多径传播。l 阴影效应 阴影效应是指移动终端在移动过程中,有一些大型障碍物阻挡了其无线电波的直射路径,从而导致信号接收区域中存在半盲区,在电磁场中形成了阴影,致使信号接收点场强在终端移动过程中起伏变化,我们称此现象为阴影效应。除以上三种环境客观因素外,指纹定位选取的信号传播模型、定位场景中AP与位置指纹参考点的配置以及选取的定位算法均会影响定位精度。 除此之外,定位温度
14、、方向、移动终端运动状态也均会影响定位精度。 实验二 无线传感器网络定位实验1. 实验目标 了解典型的无线传感器网络定位算法; 在所给的网络中实现所讲授的无线传感器网络定位算法并进行比较。2. 实验要求掌握典型的无线传感器网络定位算法基本原理,理解所讲的迭代式多边定位算法、DV-HOP算法、PDM定位算法、基于MDS的定位算法;利用所给的网络数据,实现两种以上的定位算法并进行比较。3. 算法介绍 3.1基本内容介绍 在本次实验中,共有四个已知的.txt文件,分别命名为:net1_pos.txt、net1_topo_error_free.txt、net1_topo_error_5以及net1_t
15、opo_error_10。 其中,文件net1_pos中给出了实验网络中节点的位置数据。每行表示一个节点的位置信息。格式如下:节点序号 节点x坐标 节点y坐标 是否锚节点(1代表锚节点,0代表待定位节点),比如: 1 17.8977 106.2282 1表示节点1, 其真实位置为(17.8977,106,2282),该节点是锚节点。再比如: 33 43.4718 95.7603 0 表示节点33,其真实位置是(43.4718,95.7603),该节点是待定位节点。利用某种定位算法计算出来待定位节点的位置后,就可以根据真实位置计算该节点的定位误差。 文件 net1_topo_error_free
16、中给出了网络中相邻节点之间的距离信息。每一行表示两个节点之间的距离。格式如下:节点1序号 节点2序号 节点之间距离测量值。比如:1 4 8.3075表示节点1和节点4可以相互测量出之间的距离,他们之间的距离是8.3075 文件net1_topo_error_5和net1_topo_error_10给出的距离分别是增加了5%和10%误差之后的扰动值。 3.2迭代多边定位算法 算法思想:利用已知信标节点和非信标节点的几组对应关系(两点间距离),对非信标节点进行定位。(某个非信标节点只要已知3个及以上信标节点与其距离即可对其进行定位。)定位成功后的非信标节点转换为信标节点,可辅助对其他非信标节点定位
17、。不断迭代定位过程,知道信标节点集合元素个数在前后两次迭代中数量不变,则迭代终止。 前提条件:已知位置的锚节点个数要超过3个;对所有节点来说,在添加完邻接矩阵关系后,是一个连通图,没有孤立节点。 特别说明:因为在使用迭代多边定位算法对未知节点进行定位时需要利用该节点与3个以上信标节点的直线距离,图是连通图但不是全连通图,所以可能会有部分节点无法定位。 3.3 DV-HOP算法 算法思想:先用Floyd算法将图的最短路径和每两个节点间的最小跳数表示出来,将特定位置的节点到参考节点的距离用网络中的节点的平均每跳距离和节点之间的跳数乘积表示,使用三角形定位的方法来获得节点的位置节点。 前提条件:已知
18、位置的锚节点个数要超过3个;对所有节点来说,在添加完邻接矩阵关系后,是一个连通图,没有孤立节点。 特别说明:图是否为连通图对于迭代多边算法影响可能不会很大,但是在DV-HOP算法中,如果有孤立节点,则会导致程序出错。 3.4 PDM算法 算法思想:PDM算法全称为计算邻近度-距离转换矩阵算法 (Proximity-to-Distance Mapping ),也就是说通过计算节点间的邻近度-距离转换矩阵来给未知节点进行定位,本算法中涉及到: 通过锚节点间协作构建邻近度-距离转换矩阵D=P*T,对于已知的锚节点,它们之间的跳数可以通过Floyd算法计算出来,即可获取关于所有锚节点的跳数矩阵P,而锚
19、节点的坐标已知,其相互之间的距离可以计算出来,即构造了距离矩阵D。利用伪逆技术增强鲁棒性,计算出转换矩阵T: 若锚节点的分布要能较准确的刻画网络拓扑性质,我们可以认为矩阵T也符合网络中的非锚节点。而非锚节点到锚节点的跳数可以用Floyd算出,即P可算出,通过D=T*P可以算出某个点到锚节点的距离,再调用算法一可以算出坐标。 前提条件:已知位置的锚节点个数要超过3个;对所有节点来说,在添加完邻接矩阵关系后,是一个连通图,没有孤立节点。 特别说明:图是否为连通图对于PDM算法影响很大,如果有孤立节点,矩阵运算就不会正确,无法定位。4.算法实现 4.1迭代多边定位算法 第一步:将数据读入内存。利用M
20、atlab中已有的函数load将文件中的内容以矩阵的方式读入内存。Data_post = load(net1_pos.txt);Data_road1 = load(net1_topo-error free.txt);Data_road2 = load(net1_topo-error 5.txt);Data_road3 = load(net1_topo-error 10.txt);culunm_post = size(Data_post); 第二步:判断锚节的个数。tempcount = 0;for i = 1:culunm_post(1) if Data_post(i,4) = 1 tempc
21、ount = tempcount+1; endendif tempcount 3 disp(锚节点少于3个,DV-hop算法无法执行); return;end 第三步:初始化距离矩阵,将与锚节点有关的路径读入距离矩阵 先将距离矩阵全部赋值为无穷大,再将每个节点到自身的距离规定为0,在边的信息中,如果有端点为锚节点的,就更新其两点间的距离。 for i = 1:culunm_road(1) if(Data_road(i,1) = anchors_n) matrix(Data_road(i,1),Data_road(i,2) = Data_road(i,3); elseif(Data_road(i
22、,2) = anchors_n) matrix(Data_road(i,2),Data_road(i,1) = Data_road(i,3); end end 第四步:迭代计算 逐一判断每一个非信标节点是否有3个以上锚节点与其相关,如果有3个以上的信标节点与其相关则根据: 其中x,y为未定位的节点的实际位置,(x1,y1),(x2,y2),是已知的锚节点到该未知节点的距离。 根据以上两个矩阵的转换,可以求得:,其中x为一个一行两列的矩阵,分别表示未知节点定位后的坐标位置x,y。 定位成功后,把该点的标号加入锚节点集合中并从非锚节点集合中删除,并在距离矩阵中加入与该节点相关的边的信息。 不断迭代
23、运行第四步,直至锚节点集合中元素个数不再变化。 核心代码如下: (1)计算未知节点位置point = temp(1,3)2 - temp(1,1)2 - temp(1,2)2;for ii = 2:k-1A(ii-1,:) = 2*temp(1,1) - temp(ii,1) temp(1,2) - temp(ii,2);b(ii-1,:) = temp(ii,3)2 - temp(ii,1)2 - temp(ii,2)2 - point;endAns = inv(transpose(A)*A)*transpose(A)*b; estimated(j,1) = Ans(1,1);estimat
24、ed(j,2) = Ans(2,1); (2)更新锚节点、非锚节点集合以及距离矩阵anchors_n_t = anchors_n_t + 1;anchors(anchors_n_t) = j;Locate=find(all = j);all(Locate) = ;for m = 1:culunm_road(1)if(Data_road(m,1) = j)matrix(Data_road(m,1),Data_road(m,2) = Data_road(m,3);elseif(Data_road(m,2) = j)matrix(Data_road(m,2),Data_road(m,1) = Dat
25、a_road(m,3);endend 第五步:计算误差,输出结果 4.2 DV-HOP算法 第一步:将数据读入内存。利用Matlab中已有的函数load将文件中的内容以矩阵的方式读入内存。 第二步:判断锚节的个数。 第三步:将所有的两点间的距离关系读入距离矩阵for i =1:culunm_road(1)matrix(Data_road(i,1),Data_road(i,2) = Data_road(i,3);matrix(Data_road(i,2),Data_road(i,1) = Data_road(i,3);endshortest_path = matrix; 第四步:利用最短路径算法
26、求得两点间的最短路径for k=1:nodes_n for i=1:nodes_n for j=1:nodes_n if shortest_path(i,k)+shortest_path(k,j)shortest_path(i,j) shortest_path(i,j) = shortest_path(i,k)+shortest_path(k,j); jump_n(i,j) = jump_n(k,j); end end endEnd 第五步:求每个信标节点的校正值 利用函数:anchor_to_anchor=shortest_path(1:anchors_n,1:anchors_n);for
27、i=1:anchors_n hopsize(i)=sum(sqrt(sum(transpose(repmat(true(i,:),anchors_n,1). - true(1:anchors_n,:).2)/sum(anchor_to_anchor(i,:);End 第六步:未知节点计算位置 先通过距离=跳数*校正值求得未知节点到每个锚节点的距离,再根据最小二乘法计算具体位置。obtained_hopsize=hopsize(find(shortest_path(i,1:anchors_n)=. min(shortest_path(i,1:anchors_n); unknown_to_anch
28、ors_dist=transpose(obtained_hopsize(1)*. shortest_path(i,1:anchors_n);A=2*(estimated(1:anchors_n-1,:)-repmat(estimated(anchors_n,:),. anchors_n-1,1);anchors_location_square=transpose(sum(transpose. (estimated(1:anchors_n,:).2);dist_square=unknown_to_anchors_dist.2;b=anchors_location_square(1:anchors
29、_n -1)-. anchors_location_square(anchors_n)-dist_square(1:anchors_n-1)+. dist_square(anchors_n);estimated(i,:)=transpose(Ab); 第七步:计算误差,输出结果 4.3 PDM算法 第一步:将数据读入内存。利用Matlab中已有的函数load将文件中的内容以矩阵的方式读入内存。 第二步:判断锚节的个数。 第三步:将所有的两点间的距离关系读入距离矩阵 第四步:利用最短路径算法求得两点间的最短路径,以及最短路径下每对节点的上一跳信息。 第五步:构造节点跳数矩阵P_all 根据上一跳
30、矩阵jump_n,通过循环判断可以得出一个32*320的矩阵P_all,P_all(i,j)表示从第i和点到第j个点最少需要多少跳。for i = 1:nodes_n for j = 1:nodes_n temp_num = last_jump(i,j); while(temp_num=i) P_all(i,j) = P_all(i,j)+1; temp_num=last_jump(i,temp_num); end endend 第六步:构造PDM算法所需要的各种矩阵 所有锚节点的跳数矩阵P_anchors、锚节点的距离矩阵D_anchors、转换矩阵T、非锚节点到锚节点的跳数P_Nancho
31、rs、未知节点到锚节点的距离D_NanchorsP_anchors = P_all(1:anchors_n,1:anchors_n); D_anchors = pdist2(true_anchors,true_anchors); D_anchors = D_anchors(1:anchors_n,1:anchors_n);T = D_anchors*transpose(P_anchors)*inv(P_anchors*transpose(P_anchors); P_Nanchors = P_all(1:anchors_n,33:320); D_Nanchors = T*P_Nanchors;
32、第七步:利用最小二乘法估算具体位置 第八步:计算误差,输出结果5.实验结果和分析 迭代多边定位算法1、实验结果(1)无扰动值时的迭代多边定位算法 说明:红色圆圈表示节点实际位置,蓝色圆点表示利用迭代多边定位算法的估计位置。(2)5%误差扰动值时的迭代多边定位算法 说明:红色圆圈表示节点实际位置,蓝色圆点表示利用迭代多边定位算法的估计位置,蓝色连线表示某个节点实际位置与估计位置的误差。(3)10%误差扰动值时的迭代多边定位算法 说明:红色圆圈表示节点实际位置,蓝色圆点表示利用迭代多边定位算法的估计位置,黄色连线表示某个节点实际位置与估计位置的误差。 2、误差分析 三次定位中,误差(方差)分别为:
33、0.、3.916、5.724。 可以看出,随着扰动比例的不断提高,该算法的定位精准度在不断下降。这是由于迭代多边定位算法是通过取N和圆的交点来进行定位的,一旦出现了扰动,将改变两点间的距离,使得用于定位的部分圆半径不正确,出现定位不准确或定位点不合实际的情况。DV-HOP算法1、 实验结果 说明:蓝色“*”表示已知点的数据,红色圆点表示无扰动值时估计数据,蓝色圆点表示5%扰动值时估计数据,黄色圆点表示10%扰动值时估计数据,连线表示误差情况。 2、误差分析 三次定位中,误差(方差)分别为:8.741、8.840、8.005。 可以看出,DV-HOP在有扰动值的情况下误差变化不大,但是定位也不是
34、很准确,误差在1以内的点极少,几乎每个点都存在误差。PDM算法1、 实验结果(1)无误差扰动值 说明:蓝色“*”表示已知点的数据,红色圆点表示无扰动值时估计数据,连线表示误差情况。 (2)5%的误差扰动值 说明:蓝色“*”表示已知点的数据,蓝色圆点表示无扰动值时估计数据,连线表示误差情况。 (3)10%的误差扰动值 说明:蓝色“*”表示已知点的数据,黄色圆点表示无扰动值时估计数据,连线表示误差情况。 2、误差分析 三次定位中,误差(方差)分别为:73.2254、61.5467、60.5671。 可以看出,此算法在没有改进时定位效果十分不好,其主要原因是在计算距离转换矩阵T的时候,利用了公式,在
35、此公式中使用了P的逆矩阵,当P的某个元素本身很小时,在进行矩阵转换的时候将会变得很大,直接导致了后面的定位不准确。应该利用一定的算法消除误差,在本实验中,由于时间的有限,就不对此进行研究了。但是,通过阅读文献,我们可以知道,PDM算法应该是三个算法中,定位最为准确的算法。 为了研究锚节点个数对定位的影响,我们将PDM算法的锚节点个数改为3个,即只有1、2、3号节点为锚节点,其定位结果如下: 可以看出,在没有对PDM算法进行改进的情况下,锚节点个数过多反而使PDM算法的定位不准确。三 实验总结在这次物联网定位技术的实验过程中,使我掌握了多种定位算法以及它们的误差特点。在阅读给定的文档过程中,遇到
36、了很多比较生涩的地方,一点点查资料、一次次演算,对WiFi指纹定位的原理和无线传感器网络迭代式多边定位算法、DV-HOP算法、PDM定位算法有了比较深入的理解。本次实验我们组在Eclipse上编写调试Android代码,加深了Eclipse功能的认识,更加熟悉了Eclipse在编程中的操作和问题解决方法。实验过程中,我们复习了关于Android方面的知识,加深了第Android开发的了解。将所学的知识一个用到了实践中去,理论与实践相结合,从理论中得出结论,在实践中解决问题,这样才能全面提高分析问题解决问题的能力。实验也存在许多不足的地方有待改进,例如操作界面不够美观,结果显示不够直观等,有待我们去更深入地学习,进一步优化。最后,感谢张士庚老师的无私指导,感谢实验过程中交流讨论、热心帮助的同学。