首先,这几种定位是跟着老师提供的思路做的,对于将其修改成python语言,还没有完成。
至于各种定位原理,有太多人介绍了,就不逐一介绍了。

文章目录

  • 一、TOA定位算法性能仿真
    • 1.1、toa定位要求
    • 1.2、toa定位代码
    • 1.2、toa实现效果
  • 二、TDOA定位算法性能仿真
    • 2.1、tdoa定位要求
    • 2.2、tdoa定位代码
    • 2.3、tdoa实现效果
  • 三、RSSI测距定位技术性能仿真
    • 3.1、rssi测距定位要求
    • 3.2、rssi测距定位代码
    • 3.3、rssi测距实现效果
  • 四、RSSI指纹定位技术性能仿真
    • 4.1、rssi指纹定位要求
    • 4.2、rssi指纹定位代码
    • 4.3、rssi指纹实现效果

一、TOA定位算法性能仿真

1.1、toa定位要求

要求一:编写两个函数TOA_LLOP和TOA_CHAN得到位置的估计。
要求二:用RMSE实现两种算法的性能比较, 得到两种算法的RMSE曲线对比图,横坐标为噪声方差,纵坐标为RMSE。

1.2、toa定位代码

TOA:
% %% the simulation of TOA localization algorithm
clear all;
clc;
%接收机的位置坐标,简单实验就可采用少量样本,精准实验必须采用大量样本数量
BS1=[0,0];
BS2=[500,0];
BS3=[500,500];
%BS4=[0,500];
%BS5=[800,800];
MS=[250,250]; %移动台MS的估计位置
std_var=[1e-2,1e-1,1,1e1,1e2]; %范围矩阵
%A=[BS1;BS2;BS3;BS4];  %矩阵A包含基站的坐标
A=[BS1;BS2;BS3];
%A=[BS1;BS2;BS3;BS4;BS5];
number=10000;
for j=1:length(std_var) %从1循环到std_var的长度error1=0;%初始误差为0error2=0; %初始误差为0std_var1=std_var(j);for i=1:number   %多次循环%r1=A-ones(4,1)*MS;  %矩阵A减去4*1的全一矩阵乘以MSr1=A-ones(3,1)*MS;%r1=A-ones(5,1)*MS; r2=sum(r1.^2,2); %矩阵r1每个元素分别平方,得到新矩阵,在行求和,最为矩阵r2%r=r2.^(1/2)+std_var1*randn(4,1); %从移动到位置MS发射信号到达基站i的TOA测量值r=r2.^(1/2)+std_var1*randn(3,1); %r=r2.^(1/2)+std_var1*randn(5,1); theta1=TOALLOP(A,r,1); % 调用TOALLOP函数theta2=TOACHAN(A,r,std_var1^2); % 调用TOACHAN函数error1=error1+norm(MS-theta1)^2; %norm是返回MS-theta1的最大奇异值,即max(svd(MS-theta1)),error2=error2+norm(MS-theta2)^2; %移动台MS估计位置与计算的到的距离的平方end RMSE1(j)=(error1/number)^(1/2); %求TOALLOP均方根误差RMSE2(j)=(error2/number)^(1/2);%求TOACHAN均方根误差
end
% plot
semilogx(std_var,RMSE1,'-O',std_var,RMSE2,'-s') %x轴取对数,X轴范围是1e-2到1e2,Y轴的范围是变动的
xlabel('测量噪声标准差(m) ');
legend('TOALLOP','TOACHAN');
ylabel('RMSE');
legend('TOA-LLOP','TOA-CHAN')TOALLOP:
function theta=TOALLOP(A,p,j)% A is the coordinate of BSs %A是BBS的坐标
% p is the range measurement
%P是范围测量
% j is the index of reference BS
%J是参考BS的索引
[m,~]=size(A);  %size得到A的行列数赋值给[m,~],~表示占位,就是只要行m的值!
k=sum(A.^2,2);%矩阵A每个元素分别平方,得到新矩阵,在行求和,最为矩阵K
k1=k([1:j-1,j+1:m],:); %取出J行
A1=A([1:j-1,j+1:m],:); %取出J行
A2=A1-ones(m-1,1)*A(j,:); %得到D,就是j行与其余行对应值相减
p1=p([1:j-1,j+1:m],:); %取出J行
p2=p(j).^2*ones(m-1,1)-p1.^2-(k(j)*ones(m-1,1)-k1); %得到b,(Rn*Rn-R1*R1-Kn+K1)其中Kn为对应第n个x^2+y^2
theta=1/2*inv(A2'*A2)*A2'*p2; %利用最小二乘解,得
theta=theta';%转换为(x,y)形式TOACHAN:
function theta=TOACHAN(A,p,sigma)
% A is the coordinate of BSs
%A是BBS的坐标
% p is the range measurement
%P是范围测量
% sigma is the the variance of TOA measurement
%sigma是TOA测量的方差
[m,~]=size(A); %size得到A的行列数赋值给[m,~],~表示占位,就是只要行m的值!
k=sum(A.^2,2); %矩阵A每个元素分别平方,得到新矩阵,在行求和,最为矩阵K
A1=[-2*A,ones(m,1)]; %-2乘以矩阵A与一个m*1的全一矩阵,组成新矩阵A1,也就是Gn
p1=p.^2-k; %得到h
B1=diag(2*p);%得到B,基站与移动台的真实值
Q1=diag(ones(m,1)*sigma); %TOA协方差矩阵
cov1=B1*Q1*B1; %由于B1中有2,此处就可以省略4
theta1=inv(A1'*inv(cov1)*A1)*A1'*inv(cov1)*p1; %得到Za,因为B中包含MS与个基站之间的距离,Q1是未知量,需进一步近似
cov_theta1=inv(A1'*inv(cov1)*A1); %上式采用扰动算法得
A2=[1,0;0,1;1,1]; %得到Ga‘
p2=[theta1(1,1)^2;
theta1(2,1)^2;
theta1(3,1)]; %得到h‘
B2=diag([2*theta1(1,1);
2*theta1(2,1);1]); %得到B’
cov2=B2*cov_theta1*B2; %误差向量的协方差矩阵
theta2=inv(A2'*inv(cov2)*A2)*A2'*inv(cov2)*p2; %运用最大似然估计得到
theta=sign(theta1(1:2,:)).*theta2.^(1/2); %得到MS位置的估计值坐标,以及符号
theta=theta';%转换为(x,y)形式

1.2、toa实现效果

二、TDOA定位算法性能仿真

2.1、tdoa定位要求

要求一:编写两个函数TDOA_CHAN和TDOA_Taylor得到位置的估计。
要求二:用RMSE实现两种算法的性能比较, 得到两种算法的RMSE曲线对比图,横坐标为噪声方差,纵坐标为RMSE。

2.2、tdoa定位代码

TDOA部分:
% %% the simulation of TDOA localization algorithm
clear all;
clc;
%定义四个参与基站的坐标位置
BS1=[0,0];
BS2=[500,0];
BS3=[500,500];
BS4=[0,500];
%BS5=[600,500];
%移动台MS的初始估计位置
MS=[550,150];
std_var=[1e-2,5e-2,1e-1,5e-1,1]; %范围
%A=[BS1;BS2;BS3;BS4]; %矩阵A包含4个初始坐标
A=[BS1;BS2;BS3;BS4];
number=10000;
for j=1:length(std_var) %循环error1=0;%初始误差置为0error2=0; %初始误差置为0std_var1=std_var(j);%令std_var1等于当前数组的值for i=1:number %多次循环%r1=A-ones(4,1)*MS; r1=A-ones(4,1)*MS;r2=(sum(r1.^2,2)).^(1/2); %r=r2(2:end,:)-ones(3,1)*r2(1,:)+std_var1*randn(3,1); %表示从[2,i]开始MS与基站i和基站1的距离差r=r2(2:end,:)-ones(3,1)*r2(1,:)+std_var1*randn(3,1);sigma=std_var1^2; theta1=TDOACHAN(A,r,sigma); % 调用TDOACHAN函数theta2=TDOATaylor(A,r,sigma); %调用TDOATalor函数error1=error1+norm(MS-theta1)^2; %移动台MS估计位置与计算的到的距离的平方error2=error2+norm(MS-theta2)^2; %移动台MS估计位置与计算的到的距离的平方end RMSE1(j)=(error1/number)^(1/2); %均方根误差RMSE2(j)=(error2/number)^(1/2); %均方根误差
end
% plot
semilogx(std_var,RMSE1,'-O',std_var,RMSE2,'-s')% x轴取对数,X轴范围是1e-2到1,Y轴的范围是变动的
xlabel('The standard deviation of measurement noise (m)');
ylabel('RMSE');
legend('TDOA-CHAN','TDOA-Taylor');TDOA-CHAN:
function theta=TDOACHAN(A,p,sigma)
% A is the coordinate of BSs
%A是BSS的坐标
% p is the range measurement
%P是范围测量
% sigma is the the variance of TDOA measurement
%sigma是TDOA测量的方差
[m,~]=size(A); %size得到A的行列数赋值给[m,~],~表示占位,就是只要行m的值!
k=sum(A.^2,2); %矩阵A每个元素分别平方,得到新矩阵,在行求和,最为矩阵K
G1=[A(2:end,:)-ones(m-1,1)*A(1,:),p]; %得到Xm1,Ym1,Rm1,的值,m取值[2,i],构建矩阵Ga
h1=1/2*(p.^2-k(2:end,:)+ones(m-1,1)*k(1,:)); %构建矩阵h
Q=diag(ones(m-1,1)*sigma); %构建TDOA的协方差矩阵
% initial estimate
theta0=inv(G1'*inv(Q)*G1)*G1'*inv(Q)*h1; %通过一次WLS算法进行求解,
s=A(2:end,:)-ones(m-1,1)*theta0(1:2,:)';
d=sum(s.^2,2);%矩阵s每个元素分别平方,得到新矩阵,在行求和,最为矩阵d
B1=diag(d.^(1/2));
cov1=B1*Q*B1;
% first wls
theta1=inv(G1'*inv(cov1)*G1)*G1'*inv(cov1)*h1; %进行第一次WLS计算
cov_theta1=inv(G1'*inv(cov1)*G1); %得到theta1的协方差矩阵
% second wls
G2=[1,0;0,1;1,1]; %构建G'
h2=[(theta1(1,1)-A(1,1))^2;(theta1(2,1)-A(1,2))^2;theta1(3,1)^2]; %构建h'
B2=diag([theta1(1,1)-A(1,1),theta1(2,1)-A(1,2),theta1(3,1)]); %构建b'
cov2=4*B2*cov_theta1*B2; %得到误差矢量的协方差矩阵。
theta2=inv(G2'*inv(cov2)*G2)*G2'*inv(cov2)*h2; %运用最大似然估计得到
theta=theta2.^(1/2)+[A(1,1);A(1,2)]; %得到MS位置的估计值坐标,以及符号
theta=theta';%转换为(x,y)形式
TDOA-Talayor:
function theta=TDOATaylor(A,p,sigma)
% A is the coordinate of BSs% p is the range measurement
% sigma is the the variance of TOA measurement
% initial estimate
theta0=TDOACHAN(A,p,sigma); %调用TDOACHAN得到一个初始的估计位置
delta=norm(theta0); %得到范数
while norm(delta)>1e-2 %得到足够小的值[m,~]=size(A); %size得到A的行列数赋值给[m,~],~表示占位,就是只要行m的值!d=sum((A-ones(m,1)*theta0).^2,2); R=d.^(1/2); G1=ones(m-1,1)*(A(1,1)-theta0(1,1))/R(1,1)-(A(2:m,1)-theta0(1,1))./R(2:m,:);        G2=ones(m-1,1)*(A(1,2)-theta0(1,2))/R(1,1)-(A(2:m,2)-theta0(1,2))./R(2:m,:);        G=[G1,G2]; %构建Gth=p-(R(2:m,:)-ones(m-1,1)*R(1,:)); %构建HtQ=diag(ones(m-1,1)*sigma); %TDOA测量值的协方差矩阵delta=inv(G'*inv(Q)*G)*G'*inv(Q)*h; %加权最小二乘解theta0=theta0+delta'; %累加
end
theta=theta0;

2.3、tdoa实现效果

三、RSSI测距定位技术性能仿真

3.1、rssi测距定位要求

要求一:RSSI的测量值由对数路径损耗模型产生,为减小波动造成的误差,其值可由多次测量取平均值来得到。
要求二:对数路径损耗模型中的参考距离路径损耗和路径损耗因子可通过参考点相互之间的测量值估计。
要求三:完成理想情况下(参考距离路径损耗和路径损耗因子已知)与实际情况下的RMSE曲线对比图,横坐标为噪声方差,纵坐标为RMSE。

3.2、rssi测距定位代码

RSSI:
% %% the simulation of RSSI localization algorithm
clear all;
clc;
BS1=[0,0];
BS2=[500,0];
BS3=[500,500];
BS4=[0,500];
MS=[100,100];
std_var=[0,2,4,6];
A=[BS1;BS2;BS3;BS4];
number=300;
pd0=0;
n=3;
tt=5;
% the number of RSSI measurement for each BS
for j=1:length(std_var)error1=0;error2=0; std_var1=std_var(j); for i=1:number 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_var1/10)*randn(4,1); end RSSI1=mean(rssi,2);% ideal situation r1=10.^((RSSI1-pd0)/(-10*n)); % real situation [p_est,n_est]=parameter_est(A,std_var1); r2=10.^((RSSI1-p_est)/(-10*n_est)); theta1=TOALLOP(A,r1,1); theta2=TOALLOP(A,r2,1); error1=error1+norm(MS-theta1)^2; error2=error2+norm(MS-theta2)^2; end RMSE1(j)=(error1/number)^(1/2); RMSE2(j)=(error2/number)^(1/2);
end
% plot
plot(std_var,RMSE1,'-O',std_var,RMSE2,'-s')
xlabel('The standard deviation of RSS measurement (db)');
ylabel('RMSE');
legend('Ideal','Real');parameter_est部分:
function [pd0_est,n_est]=parameter_est(A,sigma)
% A is the coordinate of BSs
% sigma is the standard deviation of RSSI measurement
[m,~]=size(A);
pd0=0;
n=3;
d=zeros(m,m);
tt=5;
% the number of RSSI measurement for each BS
sigma1=10^(sigma/10);
h1=[];
G1=[];
for i=1:m for j=1:m if i~=j d(i,j)=norm(A(i,:)-A(j,:));for k=1:tt prd(k)=pd0-10*n*log10(d(i,j))-sigma1*randn; end RSSI=mean(prd);d_distance=-10*log10(d(i,j)); h1=[h1;RSSI];G1=[G1;d_distance]; endend
end
h=h1;
[m1,~]=size(h);
G=[ones(m1,1),G1];
x=inv(G'*G)*G'*h;
pd0_est=x(1,1);
n_est=x(2,1);
endTOALLOP部分:
function theta=TOALLOP(A,p,j)% A is the coordinate of BSs %A是BBS的坐标
% p is the range measurement
%P是范围测量
% j is the index of reference BS
%J是参考BS的索引
[m,~]=size(A);  %size得到A的行列数赋值给[m,~],~表示占位,就是只要行m的值!
k=sum(A.^2,2);%矩阵A每个元素分别平方,得到新矩阵,在行求和,最为矩阵K
k1=k([1:j-1,j+1:m],:); %取出J行
A1=A([1:j-1,j+1:m],:); %取出J行
A2=A1-ones(m-1,1)*A(j,:); %得到D,就是j行与其余行对应值相减
p1=p([1:j-1,j+1:m],:); %取出J行
p2=p(j).^2*ones(m-1,1)-p1.^2-(k(j)*ones(m-1,1)-k1); %得到b,(Rn*Rn-R1*R1-Kn+K1)其中Kn为对应第n个x^2+y^2
theta=1/2*inv(A2'*A2)*A2'*p2; %利用最小二乘解,得
theta=theta';%转换为(x,y)形式

3.3、rssi测距实现效果

四、RSSI指纹定位技术性能仿真

4.1、rssi指纹定位要求

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

4.2、rssi指纹定位代码

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:numberMS=[400*rand,400*rand];r1=A-ones(4,1)*MS;r2=(sum(r1.^2,2)).^(1/2);for k=1:ttrssi(:,k)=pd0-10*n*log10(r2)-10^(std_var/10)*randn(4,1);endRSSIoone=mean(rssi,2);%databaseX=databaseone(A,std_var);%matching[m,~]=size(X);for j=1:mdistance(j)=norm(X(j,3:end)-RSSIoone');end[C,I]=sort(distance);%KNN algorithmK=3;match_result=X(I(1:K),1:2);est1=mean(match_result);RMSE1(i)=norm(est1-MS);%WKNN algorithmweight=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-5if RMSE1(j)<=RMSE(i)n1=n1+1;endif RMSE2(j)<=RMSE(i)n2=n2+1;endif RMSE3(j)<=RMSE(i)n3=n3+1;endendp1(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:480for j=20:20:480coor1=[i,j];coor=[coor;coor1];d1=A-ones(m,1)*coor1;d2=sum(d1.^2,2);d=d2.^(1/2);for k=1:ttrssi(:,k)=pd0-10*n*log10(d)-10^(sigma/10)*randn(m,1);endRSS_m=mean(rssi,2)';RSSIone=[RSSIone;RSS_m];end
end
X=[coor,RSSIone];

4.3、rssi指纹实现效果

Matlab2013学习之四种定位技术(TOA、TDOA、RSSI测距、RSSI指纹)相关推荐

  1. 定位技术 TOA/TDOA/AOA/RSS

    TOA 测到达时间,需要三个基站画出三个圆,得到交点. 要求发送和接收端是严格同步的. TDOA 测两两基站的到达时间差.也需要三个基站画出三个双曲线,得到交点. 不需要同步. AOA 测信号到两个基 ...

  2. 来,学习一种数据库管理技术

    来,学习一种数据库管理技术 数据库是最重要的基础软件之一,它的重要性自然无需多言. 数据现在是非常重要的资源,而大量的数据又依赖数据库进行组织.存储和管理等. 我们国家信息化建设的要求和目标之一就是实 ...

  3. 扫地机器人常见的5种定位技术解析

    说到扫地机器人,想必大家都不陌生.它已成为众多家庭中的一位新成员,扫地机器人在早前就已兴起,近年来才逐渐普及开来,用过扫地机器人的朋友一定遇到过这样的情形,扫地机满地乱窜.杂乱无章,有些地方扫了好几遍 ...

  4. 【高精度定位】关于GPS、RTK、PPK三种定位技术的探讨

    高精度定位通常是指亚米级.厘米级以及毫米级的定位,从市场需求来看,定位的精度越高往往越好."高精度.低成本"的定位方案无疑将是未来市场的趋势. 在物联网时代,大多数的应用或多或少都 ...

  5. 细数移动机器人的5种定位技术!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 随着传感技术.智能技术和计算技术等的不断提高,智能移动机器人一定能 ...

  6. 详述机器人的5种定位技术

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 随着传感技术.智能技术和计算技术等的不断提高,智能移动机器人一定能 ...

  7. 复用和多址,手画一张图带你学习五种复用技术和四种多址技术及其区别

    很多时候我们经常碰到这些名词,频分复用.频分多址,时分复用.时分多址等等,我曾经就是被这些概念给搞混了,所以特地花了点时间来整理出下面的笔记,如下图.下面将会介绍五种复用技术和四种多址技术,然后他们之 ...

  8. UWB无线精准定位技术,超宽带测距通信交互,实时厘米级精度应用

    UWB通信又被称为是无载波的基带通信,UWB通信所需要的射频和微波器件很少,这样可以减小系统的复杂性,降低成本. 可以说低成本.低功耗.高速率.简单有效的UWB通信正是人们所期望的理想无线通信方式. ...

  9. wifi定位算法 java_几种室内定位技术方案对比,室内定位种类的优缺点一目了然...

    最近几年,随着物联网技术的发展,定位技术也随之发展起来,室内定位技能非常实用,运用广泛,如图书馆,养老院,体育馆,地下车库,学校,仓库等都能够完成对人员及物品的快速定位.目前,在苏州新导室内定位体系中 ...

最新文章

  1. Java Socket发送与接收HTTP消息简单实现
  2. Fisheye camera
  3. Exploring your Postgraduate Study Options
  4. StringBuilder与String互转
  5. C++读取numpy数据二进制文件
  6. 鸿蒙1号六年级下册课时练答案,【奥数天天练】小学1~6年级思维能力特训|第310期...
  7. 启动linux_使用 UEFI 双启动 Windows 和 Linux | Linux 中国
  8. 【java】【乱码】Java 读取本地 UTF8 txt文件乱码处理
  9. win8服务器无法安装win7系统安装,win8怎么安装win7 win8改win7教程详解【图文】
  10. 【转载】DNN6开源CMS
  11. 荐书:《PostgreSQL指南:内幕探索》| 留言送书
  12. ORACLE 日期加减操作
  13. phpstrom配置Xdebug
  14. linux内核安装指南-1
  15. Activiti5工作流实战-4
  16. 【BZOJ】3495: PA2010 Riddle 2-SAT算法
  17. 如何在 Linux 中运行.exe 程序
  18. SpringBoot使用AOP记录接口操作日志
  19. ssm共享充电宝管理系统计算机毕业设计
  20. Rais 实现单点登录SSO

热门文章

  1. 1050Ti + win10 + 虚拟机 + ubuntu18.04
  2. 服务网格 ASM 年终总结:最终用户如何使用服务网格?
  3. 华为android11新特性,华为EMUI11曝光,有新特性,看看你的手机支不支持
  4. 桥梁风工程与人工智能(综述)
  5. android自定义radiogroup,自定义RadioGroup
  6. PCL 由点云生成深度图像
  7. 面了一圈,还没拿到offer.....
  8. 杨焘鸣:请求帮忙 开场白话术
  9. 面试——测试用例设计
  10. h5 的 pushState, replaceState 和 popstate 事件