【获取资源
请见文章第4节:资源获取】
摘要:根据距离矢量和 GPS定位原理,2001年,Nieuleseu等人提出了 DV-Hop传感器节点定位算法,其只包含少数锚节点,剩余节点为未知节点,需要通过定位算法来确定它们的位置,具有无需测量距离,硬件要求低等点,在硬件条件有限的WSN得到了广泛的应用。
1. 算法原理
DV-Hop算法的定位步骤如下:
(1)各锚节点向通信范围内的邻居节点广播自身的位置信息。接收节点则记录到每个锚节点的最小跳数,同时忽略来自同一个锚节点的较大的跳数信息,而后将跳数值加1转发给邻居节点。
(2)每个锚节点根据所记录的其他锚节点的坐标信息和跳数,通过式(1)估算网络平均跳距距离。
式中,j为锚节点i数据表中的其他锚节点号,hopSij为锚节点i和j之间的跳数。
锚节点将所计算的平均跳距广播至整个网络后,未知节点仅记录所收到的第一个平均跳距,并向邻居节点转发,未知节点接收到平均跳距后,跟据所记录的跳数信息,按式(2)估算未知节点 i 到某个锚节点的距离:
(3)设P1(x1,y1), … ,Pn(xn,yn)表示n个锚节点的坐标位置,待定位节点D的位置为(x,y),其与标节点估计距离分别为d1, d2, … , dn-1,可以建立如下方程。
第一个方程组减去第后一个方程后,到得:
用线性方程组表示为AL= b,其中,
采用最小二乘法得到方程组的解为:
设定节点覆盖范围为100x100,总节点数为:100,信标节点数为3到30递增变化,通信半径为15、25、50,未知节点数等于总节点数减去锚节点数。采用归一化平均定位误差作为评价指标:
2. 部分代码展示
clear;
close all;
clc;
BorderLength=100; % 正方形区域的边长,单位:m
NodeSum=100; % 网络节点总数
R=[15,25,50]; % 节点通信距离(3类)
ASum=[3,6,9,12,15,18,21,24,27,30];
times=100; % times次测量,取平均定位误差
for rs=1:3 % R=15,25,50
for as=1:10 % 横坐标AnchorSum 变化
clear AnchorSum; % 锚节点数
clear UnodeSum; % 未知节点数=NodeSum-AnchorSum
AnchorSum=ASum(as); % 锚节点数分别为3,6,9,……
UnodeSum=NodeSum-AnchorSum; % 未知节点数
clear error;
clear Etemp;
clear Error;
clear badNo;
for T=1:times
%初始化网络拓扑,随机生成节点的坐标
clear Nxy;
clear Anchor;
clear Unode;
Anchor=BorderLength.*(rand(2,AnchorSum)-0.5); % 产生随机坐标,锚节点
Unode=BorderLength.*(rand(2,UnodeSum)-0.5); % 产生随机坐标,未知节点
Nxy=[[1:NodeSum];Anchor Unode]; % 产生带逻辑号的节点坐标(第一行节点标号1、2、3……,第二行x坐标,第三行y坐标)
% 画出节点分布图
if T==1 && rs == 1&& as == 2
figure(1)
plot(Nxy(2,1:AnchorSum),Nxy(3,1:AnchorSum),'r*') %画出锚节点分布图
hold on; %画出未知点分布
plot(Nxy(2,(AnchorSum+1):NodeSum),Nxy(3,(AnchorSum+1):NodeSum),'bo')
xlim([-BorderLength/2,BorderLength/2]);
ylim([-BorderLength/2,BorderLength/2]);
title('* 锚节点 o 未知节点')
grid on;
end
3. 结果图展示
4. 资源获取
可以获取完整代码资源。