无线传感器网络题目: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代码如下:functionDV_hop()load'../DeployNodes/coordinates.mat';load'../TopologyOfWSN/neighbor.mat';ifall_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;fork=1:all_nodes.nodes_nfori=1:all_nodes.nodes_nforj=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);endendendendiflength(find(shortest_path==inf))~=0disp('网络不连通...需要划分连通子图...这里没有考虑这种情况');return;end%~~~~~~~~~~~~~~~~~~~~~~~~~求每个信标节点的校正值~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~anchor_to_anchor=shortest_path(1:all_nodes.anchors_n,1:all_nodes.anchors_n);fori=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%~~~~~~~~~~~~~~~~~~~~~~~每个未知节点开始计算自己的位置~~~~~~~~~~~~~~~~~~~~fori=all_nodes.anchors_n+1:all_nodes.nodes_nobtained_hopsize=hopsize(find(shortest_path(i,1:all_nodes.anchors_n)==min(shortest_path(i,1:all_nodes.anchors_n))));%未知节点从最近的信标获得校正值,可能到几个锚节点的跳数相同的情况unknown_to_anchors_dist=transpose(obtained_hopsize(1)*shortest_path(i,1:all_nodes.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.anchors_n);all_nodes.estimated(i,:)=transpose(A\b);all_nodes.anc_flag(i)=2;end%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~save'../LocalizationError/result.mat'all_nodescomm_r;end通信半径:200m锚节点的通...