【三维Dvhop定位】基于麻雀搜索算法的多通信半径和跳距加权的三维Dvhop定位算法【Matlab代码#81】

文章目录

    • 【可更换其他算法,`获取资源`请见文章第6节:资源获取】
    • [1. Dvhop定位算法](#1. Dvhop定位算法)
    • [2. 麻雀搜索算法](#2. 麻雀搜索算法)
    • [3. 多通信半径和跳距加权策略](#3. 多通信半径和跳距加权策略)
      • [3.1 多通信半径策略](#3.1 多通信半径策略)
      • [3.2 跳距加权策略](#3.2 跳距加权策略)
    • [4. 部分代码展示](#4. 部分代码展示)
    • [5. 仿真结果展示](#5. 仿真结果展示)
    • [6. 资源获取](#6. 资源获取)

【可更换其他算法,获取资源请见文章第6节:资源获取】


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. 麻雀搜索算法

此处不再介绍。

3. 多通信半径和跳距加权策略

3.1 多通信半径策略

设网络通信半径为 R R R,将锚节点与邻居节点间分为 m m m级,网络中各信标节点与其邻居节点的实际距离为 d d d,跳数记为 H H H。
H = { 1 m , 0 < d ≤ R m i m , ( i − 1 ) R m < d ≤ i R m 1 , ( m − 1 ) R m < d ≤ R (1) H=\begin{cases} & \frac{1}{m} , 0<d\le \frac{R}{m} \\ & \frac{i}{m} , \frac{(i-1)R}{m} <d\le \frac{iR}{m} \\ & 1 , \frac{(m-1)R}{m}<d\le R \end{cases}\tag{1} H=⎩ ⎨ ⎧m1,0<d≤mRmi,m(i−1)R<d≤miR1,m(m−1)R<d≤R(1)

经过改进后,锚节点与邻居节点的跳数值不再是整数,是更加精确的小数,与距离更接近正比关系,有效地提高了数据的精确性,减小定位误差。

3.2 跳距加权策略

在原始Dvhop定位算法中,设未知节点坐标为 D ( x , y , z ) D(x,y,z) D(x,y,z),能与该未知节点通信的锚节点为 A 1 ( x 1 , y 1 , z 1 ) , A 2 ( x 2 , y 2 , z 2 ) , . . . , A n ( x n , y n , z n ) A_{1}(x_{1},y_{1},z_{1}),A_{2}(x_{2},y_{2},z_{2}),...,A_{n}(x_{n},y_{n},z_{n}) A1(x1,y1,z1),A2(x2,y2,z2),...,An(xn,yn,zn),这些锚节点的平均每跳距离为 h o p s i z e 1 , h o p s i z e 2 , . . . , h o p s i z e n hopsize_{1},hopsize_{2},...,hopsize_{n} hopsize1,hopsize2,...,hopsizen,到 D ( x , y , z ) D(x,y,z) D(x,y,z)的跳数为 h o p 1 , h o p 2 , . . . , h o p n hop_{1},hop_{2},...,hop_{n} hop1,hop2,...,hopn,那么 D ( x , y , z ) D(x,y,z) D(x,y,z)到 A 1 ( x 1 , y 1 , z 1 ) A_{1}(x_{1},y_{1},z_{1}) A1(x1,y1,z1)的距离 r i r_{i} ri为:
r i = h o p i ∗ h o p s i z e (2) r_{i}=hop_{i}*hopsize\tag{2} ri=hopi∗hopsize(2)

由于 h o p s i z e hopsize hopsize是取离未知节点最近的锚节点的平均跳距作为未知节点到所有锚节点的平均跳距,但是实际网络中节点在不同区域的分布状况是不同的,平均每跳距离也是不同的,原始Dvhop算法用单一的平均跳距不能正确反应网络状况,误差较大。

本文用下面式子来修正未知节点平均跳距:
w i = 1 h o p i ∑ j = 1 n 1 h o p j (3) w_{i}=\frac{\frac{1}{hop_{i}} }{\sum_{j=1}^{n}\frac{1}{hop_{j}} }\tag{3} wi=∑j=1nhopj1hopi1(3)
h o p s i z e i = w i ∗ h o p s i z e i (4) hopsize_{i}= w_{i}*hopsize_{i}\tag{4} hopsizei=wi∗hopsizei(4)

通过上面两个式子的处理,每个能与未知节点通信的信标节点的平均跳距都参与计算未知节点平均跳距,每个信标节点平均跳距都根据与未知节点的距离远近进行了加权处理,使得每个未知节点根据平均跳距计算自身坐标时更接近网络的真实情况。

4. 部分代码展示

matlab 复制代码
%% 基于麻雀优化算法的多通信半径和跳距加权DVHop定位算法

%BorderLength ----- 正方形区域的边长,单位m
%NodeAmount ----- 网络节点的个数
%BeaconAmount ----- 信标节点数
%UnAmount ----- 未知节点数
%Sxy ----- 用于存储节点的序号,横坐标,纵坐标的矩阵
%Beacon ----- 信标节点坐标矩阵
%UN ----- 未知节点坐标矩阵
%Distance ----- 未知节点到信标节点距离矩阵
%h ----- 节点间初始跳数矩阵
%X ----- 节点估计坐标初始矩阵,X = [x,y]
%R ----- 节点间的通信距离,一般为10-100m
clear;close all;clc;

BorderLength = 40; %区域边界范围,200x200
NodeAmount = 100; %总的节点数200
BeaconAmount = 20; %信标节点数(锚节点)
UnAmount = NodeAmount - BeaconAmount; %未知节点数
R = 18; %通信距离

%在区域范围内随机生成节点,即总节点数NodeAmount个坐标
AreaC = BorderLength.*rand(3,NodeAmount);%[x1,...,xn;y1,...,yn;];
%为每个点添加序号,如第1,2,3。放在第1行
data = [(1:NodeAmount);AreaC];
%信标坐标信息
BeaconData = data(2:4,1:BeaconAmount);%提取2,3行存放的坐标
UnKnownData = data(2:4,BeaconAmount+1:end);%提取剩下的坐标为未知节点坐标
%画图
figure
plot3(BeaconData(1,:),BeaconData(2,:),BeaconData(3,:),'r*','linewidth',1.5);%绘制信标(锚节点)
hold on
plot3(UnKnownData(1,:),UnKnownData(2,:),UnKnownData(3,:),'bo','linewidth',1.5)%绘制未知节点
grid on;
title('* 红色信标节点 蓝色未知节点')

%% 原始Dvhop
[X,d]=Dvhop(BeaconAmount,UnAmount,NodeAmount,R,data,BeaconData);
%% 多通信半径和跳距加权优化的Dvhop
[X_w,d_w]=MRW_Dvhop(BeaconAmount,UnAmount,NodeAmount,R,data,BeaconData);

5. 仿真结果展示





6. 资源获取

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

相关推荐
通信仿真实验室3 小时前
(10)MATLAB莱斯(Rician)衰落信道仿真1
开发语言·matlab
hsling松子4 小时前
使用PaddleHub智能生成,献上浓情国庆福
人工智能·算法·机器学习·语言模型·paddlepaddle
dengqingrui1234 小时前
【树形DP】AT_dp_p Independent Set 题解
c++·学习·算法·深度优先·图论·dp
C++忠实粉丝4 小时前
前缀和(8)_矩阵区域和
数据结构·c++·线性代数·算法·矩阵
ZZZ_O^O5 小时前
二分查找算法——寻找旋转排序数组中的最小值&点名
数据结构·c++·学习·算法·二叉树
CV-King5 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
代码雕刻家6 小时前
数据结构-3.9.栈在递归中的应用
c语言·数据结构·算法
雨中rain6 小时前
算法 | 位运算(哈希思想)
算法
Kalika0-07 小时前
猴子吃桃-C语言
c语言·开发语言·数据结构·算法
sp_fyf_20248 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-02
人工智能·神经网络·算法·计算机视觉·语言模型·自然语言处理·数据挖掘