www.gusucode.com > 无线传感器网络定位算法 matlab源代码 包含七个算法matlab源码程序 > Localization/RSSI/RSSI_second.m

    function RSSI_second()
% 未知节点一旦被定位就充当起锚节点的功能,向周围邻居发送自己的估计坐标信息
% 未知节点把已经定位的未知节点与锚节点同等对待
% 根据接收信号强度转化为距离。规则传播模型下得到的距离跟实际距离没有误差
% 不规则通信模型下,规则传播模型下得到的距离跟实际距离存在误差
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    load '../Deploy Nodes/coordinates.mat';
    load '../Topology Of WSN/neighbor.mat';    
    directory=cd;
    cd '../Topology Of WSN/Transmission Model/';    
    cd(model);
    unknown_node_index=all_nodes.anchors_n+1:all_nodes.nodes_n;
    while true
        for i=unknown_node_index
            neighboring_anchor_index=intersect(find(neighbor_matrix(i,:)==1),find(all_nodes.anc_flag~=0));%已经定位的未知节点也视为锚节点
            neighboring_anchor_n=length(neighboring_anchor_index);
            if neighboring_anchor_n>=3
                try
                    dist=rss2dist(neighbor_rss(neighboring_anchor_index,i),1);
                catch
                    dist=rss2dist(neighbor_rss(neighboring_anchor_index,i));
                end
                neighboring_anchor_location=all_nodes.estimated(neighboring_anchor_index,:);
                %~~~~~~~~~~~~~~~~~~~~~~~~~三边测量法(最小二乘法)
                A=2*(neighboring_anchor_location(1:neighboring_anchor_n-1,:)-repmat(neighboring_anchor_location(neighboring_anchor_n,:),neighboring_anchor_n-1,1));
                neighboring_anchor_location_square=transpose(sum(transpose(neighboring_anchor_location.^2)));
                dist_square=dist.^2;
                b=neighboring_anchor_location_square(1:neighboring_anchor_n-1)-neighboring_anchor_location_square(neighboring_anchor_n)-dist_square(1:neighboring_anchor_n-1)+dist_square(neighboring_anchor_n);
                all_nodes.estimated(i,:)=transpose(A\b);
                all_nodes.anc_flag(i)=2;
            end
        end
        try
           unknown_node_index==transpose(find(all_nodes.anc_flag==0));
           break;
        catch
            unknown_node_index=transpose(find(all_nodes.anc_flag==0));
        end
    end
    %~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    cd(directory);
    save '../Localization Error/result.mat' all_nodes comm_r;
end