目录
1. 实验目标
2. 实验要求
3. 算法介绍
3.1 PDM算法
4. 算法实现
第一步:将数据读入内存
第二步:判断锚节的个数
第三步:将所有的两点间的距离关系读入距离矩阵
第四步:利用最短路径算法
第五步:构造节点跳数矩阵P_all
第六步:构造PDM算法所需要的各种矩阵
第七步:利用最小二乘法估算具体位置
第八步:计算误差,输出结果
5. 实验结果和分析
1、实验结果
(1)无误差扰动值
(2)5%的误差扰动值
(3)10%的误差扰动值
2、误差分析
6. 实验总结
物联网定位技术
实验报告
学生姓名 | 白** |
学 号 | 2008070101 |
专业班级 | 物联201 |
指导老师 | 曾** |
学 院 | 信息学院 |
完成时间 | 2023年4月3日 |
实验3 PDM定位算法
1. 实验目标
了解典型的无线传感器网络定位算法;
在所给的网络中实现所讲授的无线传感器网络定位算法并进行比较。
2. 实验要求
掌握典型的无线传感器网络定位算法基本原理,理解PDM定位算法、基于MDS的定位算法。
利用所给的网络数据,实现两种以上的定位算法并进行比较。
3. 算法介绍
3.1 PDM算法
算法思想:PDM算法全称为计算邻近度-距离转换矩阵算法 (Proximity-to-Distance Mapping ),也就是说通过计算节点间的邻近度-距离转换矩阵来给未知节点进行定位,本算法中涉及到:
通过锚节点间协作构建邻近度-距离转换矩阵D=P*T,对于已知的锚节点,它们之间的跳数可以通过Floyd算法计算出来,即可获取关于所有锚节点的跳数矩阵P,而锚节点的坐标已知,其相互之间的距离可以计算出来,即构造了距离矩阵D。利用伪逆技术增强鲁棒性,计算出转换矩阵T:
若锚节点的分布要能较准确的刻画网络拓扑性质,我们可以认为矩阵T也符合网络中的非锚节点。而非锚节点到锚节点的跳数可以用Floyd算出,即P可算出,通过D=T*P可以算出某个点到锚节点的距离,再调用算法一可以算出坐标。
4. 算法实现
前提条件:已知位置的锚节点个数要超过3个;对所有节点来说,在添加完邻接矩阵关系后,是一个连通图,没有孤立节点。
特别说明:图是否为连通图对于PDM算法影响很大,如果有孤立节点,矩阵运算就不会正确,无法定位。
第一步:将数据读入内存
利用Matlab中已有的函数load将文件中的内容以矩阵的方式读入内存。
第二步:判断锚节的个数
第三步:将所有的两点间的距离关系读入距离矩阵
第四步:利用最短路径算法
求得两点间的最短路径,以及最短路径下每对节点的上一跳信息。
第五步:构造节点跳数矩阵P_all
根据上一跳矩阵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
end
end
第六步:构造PDM算法所需要的各种矩阵
所有锚节点的跳数矩阵P_anchors、锚节点的距离矩阵D_anchors、转换矩阵T、非锚节点到锚节点的跳数P_Nanchors、未知节点到锚节点的距离D_Nanchors
P_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;
第七步:利用最小二乘法估算具体位置
第八步:计算误差,输出结果
5. 实验结果和分析
1、实验结果
(1)无误差扰动值
说明:蓝色“*”表示已知点的数据,红色圆点表示无扰动值时估计数据,连线表示误差情况。
(2)5%的误差扰动值
说明:蓝色“*”表示已知点的数据,蓝色圆点表示无扰动值时估计数据,连线表示误差情况。
(3)10%的误差扰动值
说明:蓝色“*”表示已知点的数据,黄色圆点表示无扰动值时估计数据,连线表示误差情况。
2、误差分析
三次定位中,误差(方差)分别为:73.2254、61.5467、60.5671。
可以看出,此算法在没有改进时定位效果十分不好,其主要原因是在计算距离转换矩阵T的时候,利用了公式,在此公式中使用了P的逆矩阵,当P的某个元素本身很小时,在进行矩阵转换的时候将会变得很大,直接导致了后面的定位不准确。应该利用一定的算法消除误差,在本实验中,由于时间的有限,就不对此进行研究了。但是,通过阅读文献,我们可以知道,PDM算法应该是三个算法中,定位最为准确的算法。
为了研究锚节点个数对定位的影响,我们将PDM算法的锚节点个数改为3个,即只有1、2、3号节点为锚节点,其定位结果如下:
6. 实验总结
可以看出,在没有对PDM算法进行改进的情况下,锚节点个数过多反而使PDM算法的定位不准确。在这次物联网定位技术的实验过程中,使我掌握了多种定位算法以及它们的误差特点。
在阅读给定的文档过程中,遇到了很多比较生涩的地方,一点点查资料、一次次演算,对WiFi指纹定位的原理和无线传感器网络迭代式多边定位算法、DV-HOP算法、PDM定位算法有了比较深入的理解。
本次实验我在Eclipse上编写调试Android代码,加深了Eclipse功能的认识,更加熟悉了Eclipse在编程中的操作和问题解决方法。实验过程中,我复习了关于Android方面的知识,加深了第Android开发的了解。将所学的知识一个用到了实践中去,理论与实践相结合,从理论中得出结论,在实践中解决问题,这样才能全面提高分析问题解决问题的能力。
实验也存在许多不足的地方有待改进,例如操作界面不够美观,结果显示不够直观等,有待我们去更深入地学习,进一步优化。