1 传统DV-hop算法定位算法原理
DV-hop算法中主要将节点分为锚节点与未知节点,锚节点在整个网络中占有一定的比例,因为锚节点本身带有GPS定位系统,而未知节点本身不具有定位系统,所以该算法主要利用待定位节点与锚节点的跳数与跳距来计算两者之间的距离,该算法主要分为3个步骤,分别为确定最小跳数、计算未知节点到锚节点之间的距离、确定未知节点的坐标.
1.1 确定未知节点与锚节点之间的最小跳数
已知自身位置的锚节点通过洪泛协议以其通信半径向外广播带有自身位置和跳数初始化的数据包,当邻居节点接收到锚节点的数据包之后,更新数据包中的跳数信息,也就是跳数加一,然后继续将数据包转发,同时未知节点会忽略来自同一锚节点的较大的跳数数据包,保存到锚节点最小跳数的数据包,通过此种转发方式,每个节点都得到了到网络中每个锚节点的最小跳数与最短路径.
1.2 计算未知节点到锚节点之间的距离
图1 DV-hop算法中节点分布示意图
传统DV-hop算法在计算距离时,主要采用距离待定位节点最近的锚节点的平均跳距作为计算到每个锚节点的平均跳距,如图1所示,离待定位节点B最近的锚节点为L2,L2的平均跳距计算过程为
此时B节点将(1)式计算出来的跳距作为自身的跳距,分别计算到3个锚节点的距离:
1.3 确定未知节点的坐标
利用三边测距法或者是最大似然估计法来计算未知节点的坐标.三边测量法是节点定位中计算未知节点坐标常用的方法,假设未知节点的坐标是(x,y),已知3个锚节点的坐标分别为(x1,y1),(x2,y2),(x3,y3),具体的计算过程为
将上面3个式子展开之后,用第3个式子分别与上述3个式子相减,可以将(3)式转化为如(4)式矩阵相乘的形式,将3个式子中的距离记为d1,d2,d3未知节点的坐标,通过对矩阵运算获得
AX=B; (4)
然后通过计算该坐标矩阵即可获得未知节点的坐标.
在实际的无线传感器网络中,锚节点与未知节点是随机分布的,可能参与到未知节点坐标计算的锚节点个数为n(n≥3)个,此时采用最大似然估计法来计算未知节点的坐标误差更小,最大似然估计法的计算过程与上述过程相同,区别是参与到未知节点定位的锚节点的个数不同导致的方程个数不同,其次在最后使用最小二乘法来计算未知节点的坐标为
X=(ATA)-1ATB. (8)
2 传统DV-hop算法误差分析
DV-hop算法用平均跳距乘以到锚节点最小跳数的乘积来近似表示未知节点到锚节点的距离[12],所以在后续计算过程中计算出来的坐标值也是不准确的.首先在该算法中,跳数不合理是一个重要原因,假设锚节点通信半径为50 m, 在广播阶段,与之相距直线距离为5和40 m的节点都在其通信半径范围内,所以将两者的跳数都记为1跳,这是不合理的,在后续的计算过程中会进一步加大误差;同时,未知节点在计算与相邻锚节点的距离时,通常采用离未知节点最近的锚节点的跳距,没有考虑到全局网络以及锚节点的分布情况,这样就会忽略其他锚节点的跳距,在计算距离时会增大定位的不确定性;最后,在计算节点位置时,通常采用最小二乘法,普通的最小二乘法认为每项误差对总体回归直线的偏离程度全部相同,等价于权值都赋为1,各方程可信度相同.然而由于模型中误差项存在异方差性,每项误差对总体回归直线的偏离程度不同,此时普通最小二乘法无法确定各锚节点参与定位的可信度,得到的估计值不满足最优估计.
%% 基于灰狼改进的无线传感器网络DVHop定位算法
%BorderLength ----- 正方形区域的边长,单位m
%NodeAmount ----- 网络节点的个数
%BeaconAmount ----- 信标节点数
%UnAmount ----- 未知节点数
%Sxy ----- 用于存储节点的序号,横坐标,纵坐标的矩阵
%Beacon ----- 信标节点坐标矩阵
%UN ----- 未知节点坐标矩阵
%Distance ----- 未知节点到信标节点距离矩阵
%h ----- 节点间初始跳数矩阵
%X ----- 节点估计坐标初始矩阵,X = [x,y]
%R ----- 节点间的通信距离,一般为10-100m
clear;
clear all;
clc;
BorderLength = 200; %区域边界范围,200x200
NodeAmount = 200; %总的节点数200
BeaconAmount = 30; %信标节点数(锚节点)
UnAmount = NodeAmount - BeaconAmount; %未知节点数
R = 30; %通信距离
%在区域范围内随机生成节点,即总节点数NodeAmount个坐标
AreaC = BorderLength.*rand(2,NodeAmount);%[x1,...,xn;y1,...,yn;];
%为每个点添加序号,如第1,2,3。放在第1行
data = [(1:NodeAmount);AreaC];
%信标坐标信息
BeaconData = data(2:3,1:BeaconAmount);%提取2,3行存放的坐标
UnKnownData = data(2:3,BeaconAmount+1:end);%提取剩下的坐标为未知节点坐标
%画图
figure
plot(BeaconData(1,:),BeaconData(2,:),'r*','linewidth',1.5);%绘制信标(锚节点)
hold on
plot(UnKnownData(1,:),UnKnownData(2,:),'bo','linewidth',1.5)%绘制未知节点
grid on;
title('* 红色信标节点 蓝色未知节点')
%% 初始化节点间距离,跳数
Dall = zeros(NodeAmount,NodeAmount);%距离矩阵
h = zeros(NodeAmount,NodeAmount);%跳数矩阵
for i = 1:NodeAmount
for j = 1:NodeAmount
Dall(i,j)=norm(data(2:3,i) - data(2:3,j),2); %计算距离
if (Dall(i,j)<=R)&&(Dall(i,j)>0)
h(i,j) = 1;
elseif i == j
h(i,j)=0;
else
h(i,j)=inf; %无效值
end
end
end
%% 最短路径算法计算节点跳数
for k = 1:NodeAmount
for i = 1:NodeAmount
for j = 1:NodeAmount
if h(i,k)+h(k,j)<h(i,j)
h(i,j)=h(i,k)+h(k,j);
end
end
end
end
1 matlab版本
2014a
2 参考文献
[1] 周凯,周培钊,付文涵,魏胜非.无线传感器网络的改进DV-hop定位算法研究[J].东北师大学报(自然科学版). 2021,53(04)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除