【WSN定位】Dv-hop定位算法【Matlab代码#10】


获取资源请见文章第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. 资源获取

可以获取完整代码资源。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天`南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值