湖南大学无线传感器网络实验报告DV-HOP
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无线传感器网络
题目:DV-hop定位算法
学生:
学号:
完成时间: 2014.5.121
一、实验目的
1、掌握matlab工具的使用方法。
2、了解DV-hop算法原理,熟悉DV-hop算法代码,分析DV-hop算法实验结果。
二、实验原理
DV-hop算法概述
(一)基本思想:
3、计算位置节点与犀鸟节点的最小跳数
4、估算平均每跳的距离,利用最小跳数乘以平均每条的距离,得到未知节点与信标节点之间的估计距离
5、利用三遍测量法或者极大似然估计法计算未知节点的坐标
(二)定位过程
1、信标节点向邻居节点广播自身未知信息的分组,其中包括跳数字段,初始化为0
2、接受节点记录具有到每条信标节点的最小跳数,忽略来自一个信标节点的较大跳数的分组,然后将跳数数值加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<3
disp('锚节点少于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_n
for i=1:all_nodes.nodes_n
for j=1:all_nodes.nodes_n
if
shortest_path(i,k)+shortest_path(k,j) shortest_path(i,j)=shortest_path(i,k)+shortest_path(k,j); end end end end if length(find(shortest_path==inf))~=0 disp('网络不连通...需要划分连通子图...这里没有考虑这种情况'); return; end %~~~~~~~~~~~~~~~~~~~~~~~~~求每个信标节点的校正值~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ anchor_to_anchor=shortest_path(1:all_nodes.anchors_n,1:all_nodes.anchors_n); for i=1:all_nodes.anchors_n hopsize(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_n obtained_hopsize=hopsize(find(shortest_path(i,1:all_nodes.anchors_n)==min(sho rtest_path(i,1:all_nodes.anchors_n))));%未知节点从最近的信标获得校正值,可能到几个锚节点的跳数相同的情况 unknown_to_anchors_dist=transpose(obtained_hopsize(1)*shortest_path(i,1:all_n odes.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_no des.anchors_n,:).^2))); dist_square=unknown_to_anchors_dist.^2; b=anchors_location_square(1:all_nodes.anchors_n-1)-anchors_location_square(all