文章目录
-
- 【可更换其他算法,`获取资源`请见文章第5节:资源获取】
- [1. Dvhop定位算法](#1. Dvhop定位算法)
- [2. 异构Dvhop定位算法](#2. 异构Dvhop定位算法)
- [3. 部分代码展示](#3. 部分代码展示)
- [4. 仿真结果展示](#4. 仿真结果展示)
- [5. 资源获取](#5. 资源获取)
【可更换其他算法,获取资源
请见文章第5节:资源获取】
1. Dvhop定位算法
根据距离矢量和 GPS定位原理,2001年,Nieuleseu等人提出了 DV-Hop传感器节点定位算法,其只包含少数锚节点,剩余节点为未知节点,需要通过定位算法来确定它们的位置,具有无需测量距离,硬件要求低等点,在硬件条件有限的WSN得到了广泛的应用。
DV-Hop算法的定位步骤如下:
(1)各锚节点向通信范围内的邻居节点广播自身的位置信息。接收节点则记录到每个锚节点的最小跳数,同时忽略来自同一个锚节点的较大的跳数信息,而后将跳数值加1转发给邻居节点。
(2)每个锚节点根据所记录的其他锚节点的坐标信息和跳数,通过式(1)估算网络平均跳距距离。
式中(少了z坐标
),j为锚节点i数据表中的其他锚节点号,hopSij为锚节点i和j之间的跳数。
锚节点将所计算的平均跳距广播至整个网络后,未知节点仅记录所收到的第一个平均跳距,并向邻居节点转发,未知节点接收到平均跳距后,跟据所记录的跳数信息,按式(2)估算未知节点 i 到某个锚节点的距离:
(3)设P1(x1,y1,z1), ... ,Pn(xm,ym,zm)表示m个锚节点的坐标位置,待定位节点D的位置为(x,y,z),其与标节点估计距离分别为d1, d2, ... , dm,可以建立如下方程。
用线性方程组表示为AL= b,其中,
采用最小二乘法得到方程组的解为:
该仿真需要设定节点覆盖范围,总节点数,信标节点数,通信半径等参数,未知节点数等于总节点数减去锚节点数。(下面式子中少了z坐标
)采用归一化平均定位误差作为评价指标:
2. 异构Dvhop定位算法
图1 异构无线传感器网络示意图
同构无线传感器网络指的是网络中的所有传感器节点具有相同的硬件配置、能量储备、计算能力以及通信能力,这意味着通信半径一致
:每个节点能够与相同距离范围内的其他节点进行通信。
而区别于同构无线传感器网络,异构无线传感器网络由不同类型的传感器节点组成,这些节点可以有不同的硬件配置、能量储备、计算能力和通信能力,在这种网络中通信半径不一致
:不同的节点可能具有不同的通信半径。例如,某些节点可能只能与近距离的节点(短通信半径)通信,而其他节点则可能拥有更强大的无线电设备,从而允许它们与较远距离的节点(长通信半径)进行通信。从上面图1可以看出来,U1节点的通信距离相比于A1节点要小一点,所以U1节点仅可直接A1、U2节点通信,而A1节点可以与U1、U2、U3、U4节点直接通信。
3. 部分代码展示
matlab
%% 计算每个信标节点的校正值(计算每个锚节点的平均每跳距离)
hBeacon = h(1:BeaconAmount,1:BeaconAmount);%跳数
DBeacon = Dall(1:BeaconAmount,1:BeaconAmount);%距离
for i = 1:BeaconAmount
dhop(i) = sum(DBeacon(i,:)) / sum(hBeacon(i,:));
end
%% 计算每个未知节点的校正值
clear dhopUN
DUN = Dall(1:BeaconAmount,(BeaconAmount+1):NodeAmount); %BeaconAmount行UNAmount列 信标节点到未知节点的距离
for i = 1:BeaconAmount
for j = 1:UnAmount
if min(DUN(:,j)) == DUN(i,j)
dhopUN(j) = dhop(i); %未知节点从最近的信标获得校正值
end %用离该未知节点最近的锚节点的平均每跳距离作为该节点的每跳距离
end
end
%% 用跳数估计距离(计算每个未知节点到各锚节点的距离)
hop1 = h(1:BeaconAmount,(BeaconAmount+1):end); %未知节点到信标跳数,BeaconAmount行,UnAmount列
clear d
for i = 1:UnAmount
hop = dhopUN(i); %hop为从最近信标获得的校正值
d(:,i) = hop * hop1(:,i); %BeaconAount行UnAmount列
end
4. 仿真结果展示

5. 资源获取
可更换其他群智能优化算法,获取完整代码资源。👇👇👇👀名片