基于Matlab----RSSI指纹定位技术性能仿真

一、题目

RSSI指纹定位技术性能仿真

二、仿真要求

要求一:RSSI的测量值由对数路径损耗模型产生,为减小波动造成的误差,其值可由多次测量取平均值来得到。
要求二:定位指纹数据库的建立是基于网格形式产生不同的指纹节点。
要求三: 比较KNN算法与WKNN算法的CDF曲线对比图,横坐标为定位误差,纵坐标为CDF。

三、主要代码

3.1、函数databaseone主要代码

函数databaseone主要代码:

%databaseone部分:
function [X]=databaseone(A,sigma)
% A is the coordinate of BSS
% sigma is the standard deviation of RSSI measurement
pd0=0;
n=3;
[m,~]=size(A);
tt=5;
coor=[];
RSSIone=[];
for i=20:20:480
    for j=20:20:480
        coor1=[i,j];
        coor=[coor;coor1];
        d1=A-ones(m,1)*coor1;
        d2=sum(d1.^2,2);
        d=d2.^(1/2);
        for k=1:tt
            rssi(:,k)=pd0-10*n*log10(d)-10^(sigma/10)*randn(m,1);
        end
        RSS_m=mean(rssi,2)';
        RSSIone=[RSSIone;RSS_m];
    end
end

3.2、全部代码

全部代码:

%RSSIone部分:
clear all; 
clc; 
BS1=[0,0];
BS2=[500,0];
BS3=[500,500];
BS4=[0,500]; 
std_var=4; 
A=[BS1;BS2;BS3;BS4];  
pd0=0;
n=3; 
tt=5; 
% the number of RSSI measurement for each BS
number=1000;
for i=1:number
    MS=[400*rand,400*rand];
    r1=A-ones(4,1)*MS;
    r2=(sum(r1.^2,2)).^(1/2);
    for k=1:tt
        rssi(:,k)=pd0-10*n*log10(r2)-10^(std_var/10)*randn(4,1);
    end
    RSSIoone=mean(rssi,2);
    %database
    X=databaseone(A,std_var);
    %matching
    [m,~]=size(X);
    for j=1:m
        distance(j)=norm(X(j,3:end)-RSSIoone');
    end
    [C,I]=sort(distance);
    %KNN algorithm
    K=3;
    match_result=X(I(1:K),1:2);
    est1=mean(match_result);
    RMSE1(i)=norm(est1-MS);
    %WKNN algorithm
    weight=1./C(1:K);
    weight=weight'/sum(weight);
    est2=sum([weight.*match_result(:,1),weight.*match_result(:,2)]);
    RMSE2(i)=norm(est2-MS);
    est3=X(I(1),1:2);
    RMSE3(i)=norm(est3-MS);
end
RMSE=0:20;
for i=1:length(RMSE)
    n1=0;
    n2=0;
    n3=0;
    for j=1:number-5
        if RMSE1(j)<=RMSE(i)
            n1=n1+1;
        end
        if RMSE2(j)<=RMSE(i)
            n2=n2+1;
        end
        if RMSE3(j)<=RMSE(i)
            n3=n3+1;
        end
    end
    p1(i)=n1/number;
    p2(i)=n2/number;
    p3(i)=n3/number;
end
% plot 
plot(RMSE,p1,'-O',RMSE,p2,'-s',RMSE,p3,'-x') 
xlabel('The localization error (m)'); 
ylabel('CDF'); 
legend('KNN','WKNN','NN');

%databaseone部分:
function [X]=databaseone(A,sigma)
% A is the coordinate of BSS
% sigma is the standard deviation of RSSI measurement
pd0=0;
n=3;
[m,~]=size(A);
tt=5;
coor=[];
RSSIone=[];
for i=20:20:480
    for j=20:20:480
        coor1=[i,j];
        coor=[coor;coor1];
        d1=A-ones(m,1)*coor1;
        d2=sum(d1.^2,2);
        d=d2.^(1/2);
        for k=1:tt
            rssi(:,k)=pd0-10*n*log10(d)-10^(sigma/10)*randn(m,1);
        end
        RSS_m=mean(rssi,2)';
        RSSIone=[RSSIone;RSS_m];
    end
end
X=[coor,RSSIone];
end

四、仿真结果

在这里插入图片描述

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
指纹定位算法是指根据指纹图像中特征点的位置和方向来进行指纹匹配的过程。在指纹识别领域中,定位算法是非常关键的一环。不同的定位算法具有不同的优缺点,本文将对常见的指纹定位算法进行介绍,并结合MATLAB进行对比分析。 常见的指纹定位算法有以下几种:交叉匹配算法、峰值匹配算法、削弱图像算法以及方向场算法。 交叉匹配算法是指将指纹图像划分成很多个小的区域,然后在区域中寻找交叉点作为指纹特征点。这种方法比较简单,但受到图像噪声和旋转变化的影响较大。 峰值匹配算法是指利用指纹中的峰值来进行匹配,这种方法具有比较高的精度和鲁棒性,但对于噪声比较敏感。 削弱图像算法是通过对指纹图像的高频分量进行削弱,来寻找指纹的特征点,这种方法在旋转变化比较大的情况下效果比较好。 方向场算法是通过分析指纹图像中每个点的方向角度来找到指纹的特征点,这种方法具有比较高的鲁棒性和精度。 在MATLAB中可以通过编写不同的指纹定位算法来进行比较分析。首先可以通过读取指纹图像,对其进行预处理,例如去除噪声和增强对比度等。然后依次运用不同的算法对指纹图像进行特征点提取和匹配,最终得出指纹识别的结果。 综上所述,不同的指纹定位算法在特征点提取和匹配方面具有各自的优劣,针对不同的应用场景可以选择相应的算法进行指纹识别。在MATLAB中可以通过编写相应的代码对不同的算法进行比较分析,为指纹识别的研究提供更多的思路和方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值