微信:HuangL1121
QQ号:1224848052
团队:MATLAB/FPGA项目合作——无线基带,人工智能,图像处理以及智能控制等
地址:北京市-朝阳区
当前位置:首页 > 通信信号 > 基于MATLAB的RSSI和PLE定位算法,并通过卡尔曼滤波器减少非视距误差
项目案例
基于MATLAB的RSSI和PLE定位算法,并通过卡尔曼滤波器减少非视距误差
基于MATLAB的RSSI和PLE定位算法,并通过卡尔曼滤波器减少非视距误差
产品说明:        基于MATLAB的RSSI 和 PLE 定位算法,并通过卡尔曼滤波器减少非视距误差
        根据上面的课题要求,我们知道在室内未知信道环境下,进行RSS估计效果较差,而本课题所要求的是在室内未知PL的情况下进行定位。
        根据你的参考文献,这里我们使用RSS的算法进行定位,然后再加入卡尔曼滤波进行仿真分析(因为论文中LQI是实际测试得到,我们没法直接用这个方法)。
        相关的理论你只要参考那篇文献就可以了,这里我就不再进一步叙述,这里我们主要给你对每个仿真图的含义进行分析说明,方便您写论文使用。
        注意,由于RSSI原始的公式中的信道衰减时基于自由空间的,所以这里我们参考文献中的如下表格:
参考论文算法:RSSI+LQI+Kalman
我们的算法:RSSI+ kalman
        这是因为,LQI主要是通过测试采集得到,这里我们暂时没有这个数据
我们先对普通算法下的几个指标进行仿真。

核心代码:

clc;
clear;
close all;
warning off;
pack;
addpath 'func\'

%区域长度
RoomLength = 5;
RoomWidth  = 1;
%信标数
Num_xb     = 30;
%信标节点间的距离
Dis        = RoomLength/(Num_xb-1); 
%节点的通信距离
Good_radius= 15;
%选取的信号强度最大的节点数目
Best_xb    = 5;
%仿真采用时间
Stimes     = 50;
Alpha      = 3;
for m=1:Stimes
    m
    RandStream.setDefaultStream(RandStream('mt19937ar','seed',m));
    %生成节点坐标
    Position_X = (0.7*rand)*RoomLength;
    Position_Y = (0.7*rand)*RoomWidth;
    Position   = [Position_X,Position_Y];
    %计算节点到信标的距离
    for i=1:Num_xb
         XB(:,i)   = [i;(i-1)*Dis;0];
         Dist(:,i) = sqrt((Position_X-((i-1)*Dis))^2+Position_Y^2);
    end
    %基于RSS的定位算法  
    for i=1:Num_xb
        Number_rssi(1,i) = i;
        %每个信标节点的RSSI值
        if Dist(i) > Good_radius  
           Number_rssi(2,i) = 0;
        else
           Number_rssi(2,i) = func_RSSI_cal(Dist(i),Alpha);
        end
    end
    %将RSSI值从大到小排列  
    for i = 1:Num_xb
        for j = i:Num_xb
            if Number_rssi(2,i) < Number_rssi(2,j)
               a = Number_rssi(1,j);
               b = Number_rssi(2,j);
               Number_rssi(2,j) = Number_rssi(2,i);
               Number_rssi(1,j) = Number_rssi(1,i);
               Number_rssi(1,i) = a;
               Number_rssi(2,i) = b;
            end
        end
    end
    %RSSI值最大的信标的距离
    for i=1:Best_xb
        Dist(i) = Dis*( (func_RSSI_cal(Dis,Alpha)/Number_rssi(2,i))^(1/2.8) );
    end
    %求未知节点坐标
    for i=1:Best_xb
        Beaconn(1,i) = XB(2,Number_rssi(1,i));
        Beaconn(2,i) = XB(3,Number_rssi(1,i));
    end
    All_num=Best_xb; 
    for i=1:2
        for j=1:(All_num-1)
            a(i,j) = Beaconn(i,j)-Beaconn(i,All_num);
        end
    end
    A =-2*(a');
    for i=1:(All_num-1)
        B(i,1)=Dist(i)^2-Dist(All_num)^2-Beaconn(1,i)^2+Beaconn(1,All_num)^2-Beaconn(2,i)^2+Beaconn(2,All_num)^2;
    end
    %计算X坐标
    X1    = pinv(A'*A)*A'*B;
    X_pos = X1(1,1);
    %计算Y坐标
    z    = 0;
    for j=1:Best_xb    
        z = z + sqrt(abs(Dist(j)^2-(X_pos-Beaconn(1,j))^2));
    end
    Y_pos = z/Best_xb;
    Loc = [X_pos;Y_pos];

    %点位误差
    error1(m) = sqrt((abs(Position_X-Loc(1)))^2+(abs(Position_Y-Loc(2)))^2);
    %横坐标误差
    error2(m) = abs(Loc(1)-Position_X);
    %纵坐标误差
    error3(m) = abs(Loc(2)-Position_Y);
end

figure;
subplot(311);
stem(error1,'b-o');
legend('节点的点位误差');
subplot(312);
stem(error2,'b-o');
legend('节点的X误差');
subplot(313);
stem(error3,'b-o')
legend('节点的Y误差');
 
save result.mat error1 error2 error3



联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:




上一篇:基于最小二乘法的无线定位

版权所有: MATLAB/FPGA项目合作——无线基带,人工智能,图像处理以及智能控制等 Copyright © 2023 All rights reserved.
微信:HuangL1121 QQ:1224848052
地址:北京市-朝阳区

扫一扫,关注我们