基于三角形重心扫描算法的APIT定位算法

本文详细介绍了APIT定位算法,包括APIT测试和三角形重心扫描算法。APIT测试通过面积法判断节点是否在三角形区域内,而三角形重心扫描算法通过不断求解三角形重心来逼近节点的估计坐标。最终,根据坐标值数量确定估计坐标,实现无线传感器网络中的节点定位。
摘要由CSDN通过智能技术生成

APIT定位算法的核心内容分两部分:

APIT测试(使用面积法判断三角形内点):
设待定位节点为M,要对3个参考节点A,B,C组成的三角形区域△ABC进行APIT测试.对
于节点M,假设在广播消息阶段,获得了KAnchor个参考节点的ID号、坐标以及接收信号强度,KNeighbor个邻居待定位节点的ID以及接收信号强度.则在APIT测试阶段,节点M要对C3KAnchor个锚节点组成的三角形区域进行测试.假设,经过APIT测试后,节点M判定在C3KNeighbor个锚节点组成的三角形区域中,自己位于其中N个三角形区域当中.在这N个三角形区域中,有L个三角形区域确实包括节点M,则将这L个三角形区域定义为合法三角形区域;对其他N-L个三角形区域,则定义为非法三角形区域.节点M所获得的N个三角形区域集,定义为扫描算法的支持数据集.


三角形重心扫描算法,其具体步骤如下:
步骤1.假设节点M从对C3N个三角形区域中得到了K个有效的三角形区域.则依次求出这K个三角形区域的重心坐标(x1,y1),(x2,y2),…,(xk,yk).
步骤2.把这K个重心坐标3个点一组组成新的一个三角形区域集合,如果K不能整除3,则
剩下的1个或2个重心坐标直接保留,进入下一轮循环.这时,集合中三角形的个数为
K%3(%表整除).
步骤3.再次对得到的K%3个三角形区域重复以上操作,最后得到1个或者2个坐标值.
步骤4.如果是1个坐标值,则直接将该坐标值作为估计坐标;如果是2个坐标值,将这两个坐标值的平均值作为估计坐标.

 

clear;%清除内存变量
l=200;
w=200;%区域边长200m
R=30;      %通信半径
node_num=200;%采集节点数目
anchor_num=100;%设置瞄点数目
Eo=5;  %初始能量
err_rss=0.01;%位置误差

figure(1);

%随机设置节点
for  i=1:node_num
        Node{i}.x=l*rand(1,1);
        Node{i}.y=w*rand(1,1);
        plot(Node{i}.x,Node{i}.y,'ob')
        %用蓝o表示
        hold  on
        N_E(i)=Eo;%设置初始能量为E0
        Node{i}.predict  =  0;  %能估测为1,不能为0

end

%随机设置喵节点
for  i=1:anchor_num
        anchor{i}.x=l*rand(1,1);
        anchor{i}.y=w*rand(1,1);
        plot(anchor{i}.x,anchor{i}.y,'r*');
        %用蓝o表示
        hold  on
        anchor_E(i)=Eo;%设置初始能量为E0
        
end


%信标节点广播自身位置和信号强度信息,广播范围为半径R
for  i=1:node_num
        k=0;
        for  j=1:anchor_num
                dis(i,j)=sqrt((Node{i}.x-anchor{j}.x)^2+(Node{i}.y-anchor{j}.y)^2)*(1+err_rss*(2*rand(1,1)-1));
                if  dis(i,j)<=R
                        k=k+1;
                        neb_anchor_x(i,k)  =  anchor{j}.x;
                        neb_anchor_y(i,k)  =  anchor{j}.y;          
                        
                end
        end
        neb_anchor_num(i)=k;
end

%记录每个节点的邻居未知节点信息
for  i=1:node_num
        k=0;
        for  j=1:node_num
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值