基于聚类算法的静止点RSSI多次采样定位(matlab代码)

思路

对于静止点的RSSI定位,信号强度的漂移导致可以从时域方面入手,连续多次采集RSSI,定位后得到多个可能的点,聚类后,继续求平均(如果需要,也能改成加权平均,效果怎么样自行判断),得到精确的位置点。

仿真结果

在这里插入图片描述
在这里插入图片描述

程序源码

%%此程序用于试验rss定位的想法(仿真)
clc;clear;
% syms x1 y1
source=[11,11;17,11;11,13;17,13;15,12];
scatter(source(:,1),source(:,2));
axis([8,20,8,16]);
dotnum = 2;   %探测点的数量
testdot = 20;    %测试点,即测试次数(采样点)
unknowndot = [14,13;15,13];
hold on
scatter(unknowndot(1,1),unknowndot(1,2),'or');
for i=1:dotnum;
    for j=1:5;
        distance(i,j)=((unknowndot(i,1)-source(j,1))^2+(unknowndot(i,2)-source(j,2))^2)^0.5;
        rssi(i,j)=-40-10*2*log10(distance(i,j))+5;    %rssi的理论值
    end
end
% tic
ess1=0;
for i=1:testdot
    rssirand=rssi+0.5*distance.*randn(dotnum,5);  %加入随机误差的rssi
    d=10.^((-35-rssirand)/20);
    %%下面用三角定位法子函数来求解位置
    [b,n]=sort(d,2,'ascend');
    for m=1
        A=source(n(m,1),:);
        B=source(n(m,2),:);
        C=source(n(m,3),:);
        dA=d(m,n(m,1));
        dB=d(m,n(m,2));
        dC=d(m,n(m,3));
        %     P=Triangle(A,B,C,dA,dB,dC)
        [locx(m),locy(m)]=triposition(A(1),A(2),dA,B(1),B(2),dB,C(1),C(2),dC);
        ess1=ess1+((locx(1)-unknowndot(1,1))^2+(locy(1)-unknowndot(1,2))^2)^0.5;
    end
    P(i,:)=[locx(1),locy(1)];
    if A(2) == 11 || B(2) == 11 ||C(2) == 11
        scatter(locx(m),locy(m),'.B');
    else
        scatter(locx(m),locy(m),'.r');

    end
end
essmean1=ess1/testdot       %计算原始定位数据的平均误差(欧氏距离)
[IDX,Pmeans]=kmeans(P,2);   %对原始位置数据进行k-means聚类
Pfinal=Pmeans(mode(IDX),:);    %筛选出聚类后元素最多的簇的质心
scatter(mean(P(:,1)),mean(P(:,2)),'*r');
title('按照选取的信号源划分');
xlabel('x轴方向位置(米)');
ylabel('y轴方向位置(米)');
figure;
scatter(source(:,1),source(:,2));
hold on
axis([8,20,8,16]);
scatter(unknowndot(1,1),unknowndot(1,2),'or');
for i=1:testdot
    if IDX(i) == 1
        scatter(P(i,1),P(i,2),'.B');
    else
        scatter(P(i,1),P(i,2),'.r');
    end
end
scatter(Pfinal(1),Pfinal(2),'*r');
title('按照k-means聚类划分');
xlabel('x轴方向位置(米)');
ylabel('y轴方向位置(米)');
essmean2=((Pfinal(1)-unknowndot(1,1))^2+(Pfinal(2)-unknowndot(1,2))^2)^0.5     %新算法的误差
essmean1/essmean2
% toc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值