• 【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-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;];
    %为每个点添加序号,如第123。放在第1行
    data = [(1:NodeAmount);AreaC];
    %信标坐标信息
    BeaconData = data(2:3,1:BeaconAmount);%提取23行存放的坐标
    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    三、运行结果

    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

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

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

  • 相关阅读:
    【python】PyQt5可视化开发,鼠标键盘实现联动界面交互逻辑与应用实战
    DBCO-PEG-DSPE 磷脂-聚乙二醇-二苯并环辛炔用于脂质体制备
    SpringBoot的搭建(两种方式)
    spark基础
    系统配置与性能评价
    【CSS】CSS实现元素逐渐消失(实现元素透明逐渐消失/模糊)
    CleanMyMac X4中文版Macbook必备Mac应用清理工具
    jdk 8 List相关知识点
    vue3中使用setup语法糖使用
    宝塔面板用exe安装,不要用网页安装
  • 原文地址:https://blog.csdn.net/TIQCmatlab/article/details/126086083