【WSN定位】基于matlab灰狼算法优化无线传感器非测距定位【含Matlab源码 2008期】

网友投稿 316 2022-11-30

【WSN定位】基于matlab灰狼算法优化无线传感器非测距定位【含Matlab源码 2008期】

一、无线传感器网络DVHop定位算法简介

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-100mclear;clear all;clc;BorderLength = 200; %区域边界范围,200x200NodeAmount = 200; %总的节点数200BeaconAmount = 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);%提取剩下的坐标为未知节点坐标%画图figureplot(BeaconData(1,:),BeaconData(2,:),'r*','linewidth',1.5);%绘制信标(锚节点)hold onplot(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 endend%% 最短路径算法计算节点跳数for k = 1:NodeAmount for i = 1:NodeAmount for j = 1:NodeAmount if h(i,k)+h(k,j)

三、运行结果

四、matlab版本及参考文献

1 matlab版本 2014a

2 参考文献 [1] 周凯,周培钊,付文涵,魏胜非.无线传感器网络的改进DV-hop定位算法研究[J].东北师大学报(自然科学版). 2021,53(04)

3 备注 简介此部分摘自互联网,仅供参考,若侵权,联系删除

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:挑战52天背完小猪佩奇(第01天)
下一篇:使用@Validated和@Valid 解决list校验的问题
相关文章

 发表评论

暂时没有评论,来抢沙发吧~