资源简介

本算法是DV_hop算法的改进型,对于不同的信标节点比例情况下,定位误差的对比;已经随着网络节点密度变化,定位误差的变化趋势图。 针对于 最大使然估计的方法修改于牛顿迭代的方法,提高定位精度

资源截图

代码片段和文件信息

function [ MSEVARbadnode] = DV_hop(AreaSizeNodeCountBeaconPerRangeCom);
%=======================================================
% function: DV_hop 算法 
% Inputs:
%       AreaSize        -- 节点布置区域大小,建议为正方形,单位为 m
%       NodeCount       -- 节点的总数量 = 信标节点 + 未知节点
%       BeaconPer       -- 信标节点的密度(以%表示占总节点数的比例)
%       RangeCom        -- 节点间通信距离,单位为 m,保持和 AreaSize 一致
% Outputs:
%       MSE           -- 某一信标节点密度参数下,均方误差 MSE
%       VAR         
%       badnode       -- 不能定位的点的个数
%
% Notes: Copyright by zxy in fuzhou . china . 2011 03 10 
%        Any problem conact with zhou2090@126.com
%       
%
% revsion 1.0       2011 03 11 23:11       初始版本
% revsion 1.1       2011 03 11 23:41       输入参数变化的情况下
%=======================================================
switch nargin
    case 0 AreaSize  = 100;
            NodeCount = 100;
            BeaconPer = 10;
            RangeCom  = 20;
    case 1 NodeCount = 100;
            BeaconPer = 10;
            RangeCom  = 20;
    case 2 BeaconPer = 10;
            RangeCom  = 20;
    case 3 RangeCom  = 20;  
end

% 是否利用 已存储的数据进行仿真?
Flag_quick = 0;
if Flag_quick == 1
    UNnode = load(‘UNnode_new.mat‘); 
    UNnode = UNnode.UNnode;
else
    % 生成 topo 无线传感器网络的节点 分布拓扑图 均匀随机分布
    [ topo_BEtopo_UN ] = topology(AreaSizeNodeCountBeaconPerRangeCom);

    % 设置信标节点、未知节点的相关信息:如跳数、距离等
    [ BEnode UNnode Distance_all] = hops_all( topo_BE topo_UN RangeCom);
    
    % 利用线性方程组 进行求解
    [ UNnodebadID ] = LS( UNnodetopo_BERangeCom);
end

% 实际位置和定位位置的误差 ERROR
for i=1:length(UNnode)
    error(1i) = abs( UNnode(i).X - UNnode(i).estX );
    error(2i) = abs( UNnode(i).Y - UNnode(i).estY );
    error(3i) = (error(1i)^2 + error(2i)^2)^0.5;
end

% ------------------------------------------
% 定位误差的 均方值
% 对于不能定位的点,不能考虑到误差中所以将他们的误差设置为0即不影响误差
%   但是 求平均的时候 注意分母应该为 N - length(badID)
for j=1:length(badID) 
    error(3badID(j)) = 0;      
end
alpha = 1;
if length(UNnode) - length(badID)~=0  
    % 定位误差的 均方值
    MSEtemp = sum( error(3:) ); 
    MSE = MSEtemp/(length(UNnode) - length(badID));
    % 定位误差的 方差值
    % 这里的方差是有误差的,因为有些badnode的error设置为0,这对MSE没有影响,
    % 但有VAR,是有影响的,所以参考意义不大
    VAR = var(error(3:) );    
else
    % 若所有的点都不能定位则认为,最大误差为100%*RangeCom
    disp(‘all the note can not locate...‘);
    MSE = alpha * RangeCom;
    VAR = alpha * RangeCom;
end
% 不能定位的节点数
badnode = length(badID);



%{
% 画出定位误差分布图
figure(2);
plot(error(3:)‘r-‘);
xlabel(‘ 未知节点 个数 编号 ‘);
ylabel(‘ 各个未知节点的定位误差 /m ‘);
hold on;
title(‘定位误差‘);
%}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2956  2011-03-18 10:51  DV_hop_new\DV_hop.m

     文件       6554  2011-03-18 13:22  DV_hop_new\hops_all.m

     文件       4080  2011-03-18 10:50  DV_hop_new\LS.m

     文件       7270  2011-03-18 13:17  DV_hop_new\MSE.fig

     文件        588  2011-03-12 11:28  DV_hop_new\test_verify_dis.m

     文件       2921  2011-03-18 10:32  DV_hop_new\topology.m

     文件       1541  2011-03-12 11:30  DV_hop_new\verify_distance.m

     目录          0  2011-03-23 17:24  DV_hop_new

----------- ---------  ---------- -----  ----

                25910                    8


评论

共有 条评论