无线传感器网络题目:DV-hop定位算法学生:学号:完成时间: 2014.5.121一、实验目的1、掌握matlab工具的使用方法。
2、了解DV-hop算法原理,熟悉DV-hop算法代码,分析DV-hop算法实验结果。
二、实验原理DV-hop算法概述(一)基本思想:3、计算位置节点与犀鸟节点的最小跳数4、估算平均每跳的距离,利用最小跳数乘以平均每条的距离,得到未知节点与信标节点之间的估计距离5、利用三遍测量法或者极大似然估计法计算未知节点的坐标(二)定位过程1、信标节点向邻居节点广播自身未知信息的分组,其中包括跳数字段,初始化为02、接受节点记录具有到每条信标节点的最小跳数,忽略来自一个信标节点的较大跳数的分组,然后将跳数数值加1,并转发给邻居节点3、网络中所有节点能够记录下到每个信标节点最小跳数(三)计算未知节点与信标节点的实际跳段距离1、每个信标节点根据记录的其他信标节点的位置信息和相距跳数,估算平均每跳距离2、信标节点将计算的每条平均距离用带有生存期字段的分组广播至网络中,未知节点仅仅记录接受到的第一个每跳平均距离,并转发给邻居节点3、未知节点接受到平均每跳距离后,根据记录的跳数,计算到每个信标节点的跳段距离(四)利用三边测量法或者极大似然估计法计算自身位置4、位置节点利用第二阶段中记录的到每个信标节点的跳段距离,利用三边测量法或者极大似然估计法计算自身坐标三、实验容和步骤DV-hop代码如下:function DV_hop()load '../Deploy Nodes/coordinates.mat';load '../Topology Of WSN/neighbor.mat';if all_nodes.anchors_n<3disp('锚节点少于3个,DV-hop算法无法执行');return;end%~~~~~~~~~~~~~~~~~~~~~~~~~最短路经算法计算节点间跳数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~shortest_path=neighbor_matrix;shortest_path=shortest_path+eye(all_nodes.nodes_n)*2;shortest_path(shortest_path==0)=inf;shortest_path(shortest_path==2)=0;for k=1:all_nodes.nodes_nfor i=1:all_nodes.nodes_nfor j=1:all_nodes.nodes_nifshortest_path(i,k)+shortest_path(k,j)<shortest_path(i,j)%min(h(i,j),h(i,k)+h(k, j))shortest_path(i,j)=shortest_path(i,k)+shortest_path(k,j);endendendendif length(find(shortest_path==inf))~=0disp('网络不连通...需要划分连通子图...这里没有考虑这种情况');return;end%~~~~~~~~~~~~~~~~~~~~~~~~~求每个信标节点的校正值~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~anchor_to_anchor=shortest_path(1:all_nodes.anchors_n,1:all_nodes.anchors_n);for i=1:all_nodes.anchors_nhopsize(i)=sum(sqrt(sum(transpose((repmat(all_nodes.true(i,:),all_nodes.anchors _n,1)-all_nodes.true(1:all_nodes.anchors_n,:)).^2))))/sum(anchor_to_anchor(i,:) );end%~~~~~~~~~~~~~~~~~~~~~~~每个未知节点开始计算自己的位置~~~~~~~~~~~~~~~~~~~~for i=all_nodes.anchors_n+1:all_nodes.nodes_nobtained_hopsize=hopsize(find(shortest_path(i,1:all_nodes.anchors_n)==min(short est_path(i,1:all_nodes.anchors_n))));%未知节点从最近的信标获得校正值,可能到几个锚节点的跳数相同的情况unknown_to_anchors_dist=transpose(obtained_hopsize(1)*shortest_path(i,1:all_nod es.anchors_n));%计算到锚节点的距离=跳数*校正值%~~~~~~~~~~最小二乘法~~~~~~~~~~~~~~~`A=2*(all_nodes.estimated(1:all_nodes.anchors_n-1,:)-repmat(all_nodes.estimated( all_nodes.anchors_n,:),all_nodes.anchors_n-1,1));anchors_location_square=transpose(sum(transpose(all_nodes.estimated(1:all_nodes .anchors_n,:).^2)));dist_square=unknown_to_anchors_dist.^2;b=anchors_location_square(1:all_nodes.anchors_n-1)-anchors_location_square(all_ nodes.anchors_n)-dist_square(1:all_nodes.anchors_n-1)+dist_square(all_nodes.anc hors_n);all_nodes.estimated(i,:)=transpose(A\b);all_nodes.anc_flag(i)=2;end%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~save '../Localization Error/result.mat' all_nodes comm_r;end通信半径:200m锚节点的通信半径:200m通信模型:Regular Model网络的平均连通度为:31.3667网络的邻居锚节点平均数目为:6.5一共300个节点:60个锚节点,240个未知节点,0个不能被定位的未知节点定位误差为0.30127这里在计算节点与锚节点距离时使用跳数相乘距离修正值,实现了对基础DV-hop算法的改进,因此增大通信距离是不能增大算法误差的通信半径:400m锚节点的通信半径:400m通信模型:Regular Model网络的平均连通度为:100.6533网络的邻居锚节点平均数目为:19.39一共300个节点:60个锚节点,240个未知节点,0个不能被定位的未知节点定位误差为0.26588但是此算法增大锚节点密度对误差减小基本没有意义通信半径:200m锚节点的通信半径:200m通信模型:Regular Model网络的平均连通度为:31.9网络的邻居锚节点平均数目为:18.7833一共300个节点:180个锚节点,120个未知节点,0个不能被定位的未知节点定位误差为0.31443增大锚节点通信距离会显著增大误差,这是因为修正值修正到平均距离,但是锚节点通信距离与该值偏离很大通信半径:200m锚节点的通信半径:400m通信模型:Regular Model未知节点能侦听到的锚节点平均数目为:20.7417未知节点通信区域的未知节点平均数目为:25.4333一共300个节点:60个锚节点,240个未知节点,0个不能被定位的未知节点定位误差为0.63806不规则的通信也会严重影响这种基于跳数估计距离的定位算法通信半径:200m锚节点的通信半径:200m通信模型:DOI ModelDOI=0.015网络的平均连通度为:41.33网络的邻居锚节点平均数目为:7.98一共300个节点:60个锚节点,240个未知节点,0个不能被定位的未知节点定位误差为1.0595算法改进:要设计更加合理的估计跳数距离的方法,克服通信模型不规则和通信距离带来的影响。
四、实验总结虽然DV-Hop算法相对基于测距的定位技术精度较低,但不需要节点具备测距能力,无需额外硬件、能耗较低、受环境影响较小,算法简单,易于实现,对于各向同性的密集网络,可以得到合理的平均每跳距离,定位精度等方面能满足大多数应用的要求,在硬件尺寸和功耗上更适合大规模低能耗的WSN,是目前备受关注的定位机制,许多定位系统都采用了该算法来实现。
由于节点是随机部署的,未知节点与信标节点之间的跳段距离通常不是二者之间的直线距离。
在各向同性的密集网络中,校正值才能合理地估算平均每跳距离,这是基于多跳的定位算法普遍存在的问题,采用DV-Hop算法过大估计了跳段的距离;未知节点计算与信标节点之间的跳数,结果都是整数,这大约增加了0.5个平均跳数的误差。
通过DV-Hop算法中节点间距离度量的分析,可以发现利用这些距离没有反映出信标节点对节点位置的影响力的大小,影响了定位精度。