资源简介
本人翻遍了CSDN都找不到一个正确的TOA定位算法程序,唯一找到的一个是用最小二乘解的(参考文献N. Patwari, J. N. Ash, S. Kyperountas, A. O. Hero, R. L. Moses, and N. S. Correal, "Locating the nodes: cooperative localization in wireless sensor networks," IEEE Signal Processing Magazine, vol. 22, no. 4, pp. 54-69, 2005.),性能无法达到克拉美罗界。
因此本人自己重新写了一个程序,参考该领域著名学者K. C. Ho的文章(参考文献Z. Ma and K. C. Ho, "TOA localization in the presence of random sensor position errors," in 2011 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 2011, pp. 2468-2471.)。该算法适用于传感器位置有误差/无误差的情况,算法性能能够达到克拉美罗界。示例程序中给出了CRLB的程序,场景为传感器有误差的情况。程序运行结果与参考文献一致。
(搞不懂现在的人都是要什么50积分,多分享下不好吗?)
******特别提示******:本代码多处使用了Matlab 2016a以后支持的新语法,旧版本无法正常运行的,请自行修改代码或更新Matlab版本!!!
代码片段和文件信息
% Z. Ma and K. C. Ho “TOA localization in the presence of random sensor
% position errors“ in 2011 IEEE International Conference on Acoustics
% Speech and Signal Processing (ICASSP) 2011 pp. 2468-2471.
% by Y. Sun UESTC 2018.12.15
clear;close all;clc;
senPos = [ 300 100 150
400 150 100
300 500 200
350 200 100
-100 100 -100
200 -300 -200]‘;
souLoc = [[2000;2500;3000][600;650;550]];
nsePwr = 10^(-10/10);
errPwrdB = -60:10:0;
errPwr = 10.^(errPwrdB/10);
[NM] = size(senPos);
mon = 1000;
% measurements noise
rng(‘Default‘);
nseTmp = zeros(Mmon);
for m = 1:mon
nseTmp(:m) = randn(M1);
end
nseTmp = nseTmp - mean(nseTmp2);
% sensor position errors
rng(12);
errTmp = zeros(M*N1);
for m = 1:mon
errTmp(:m) = randn(M*N1);
end
errTmp = errTmp - mean(errTmp2);
Qr = nsePwr * eye(M);
J = diag([1 1 1 2 2 2 10 10 10 40 40 40 20 20 20 3 3 3]);
% distant source
ro(:1) = sqrt(sum((souLoc(:1)-senPos).^21))‘;
ro(:2) = sqrt(sum((souLoc(:2)-senPos).^21))‘;
for u = 1:2
for n = 1:length(errPwr)
Qs = errPwr(n)*J;
% CRLB
for i = 1:M
du(i:) = (souLoc(:u)-senPos(:i))‘./ro(iu);
ds(i(1:N)+(i-1)*N) = -(souLoc(:u)-senPos(:i))‘./ro(iu);
end
X = du‘/Qr*du;
Y = du‘/Qr*ds;
Z = ds‘/Qr*ds + inv(Qs);
CRB = inv(X) + X\Y/(Z-Y‘/X*Y)*Y‘/X;
crlb(un) = trace(CRB);
% simulation
for m = 1:mon
r = ro(:u) + sqrt(Qr)*nseTmp(:m);
senPosNsed = senPos + reshape(chol(Qs)‘*errTmp(:m)NM);
% h1 = r.^2 - diag(senPosNsed‘*senPosNsed);
% G1 = -2*[senPosNsed‘-0.5*ones(M1)];
% psi1 = (G1‘*G1)\G1‘*h1;
%
% V1 = 2*diag(r);
% for s = 1:M
% O1(s(1:N)+(s-1)*N) = (psi1(1:N)-senPosNsed(:s))‘;
% end
% W1 = inv(V1*Qr*V1‘+O1*Qs*O1‘);
% psi2 = (G1‘*W1*G1)\G1‘*W1*h1;
% C1 = inv(G1‘*W1*G1);
%
% h2 = [psi2(1:N).^2;psi2(4)];
% G2 = [eye(N);ones(1N)];
% V2 = diag([2*psi2(1:N);1]);
% W2 = inv(V2*C1*V2‘);
% psi3 = (G2‘*W2*G2)\G2‘*W2*h2;
%
% u1e = sign(psi2(1:N)).*sqrt(psi3);
u1e = TOA_2WLS_Cart(senPosNsedrQrQs);
err1(m) = norm(u1e-souLoc(:u));
end
mse(un) = mean(err1.^2);
end
end
figure;
plot(errPwrdB10*log10(mse(1:))‘o‘‘linewidth‘1.5‘DisplayName‘‘distant‘);hold on;grid on;
plot(errPwrdB10*log10(mse(2:))‘^‘‘linewidth‘1.5‘DisplayName‘‘near‘);
plot(errPwrdB10*log10(crlb(1:))‘-‘‘linewidth‘1.5‘DisplayName‘‘CRLB-distant‘);
plot(errPwrdB10*log10(crlb(2:))‘--‘‘linewidth‘1.5‘DisplayName‘‘CRLB-near‘);
legend(‘show‘‘location‘‘best‘)
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 2993 2018-12-15 19:35 testTOAErrCartesian.m
文件 1446 2018-12-15 15:04 TOA_2WLS_Cart.m
- 上一篇:RBF神经网络建模与预测(1)
- 下一篇:matlab电机仿真
相关资源
- MATLAB 人脸检测定位算法
- 基于卡尔曼滤波的三种经典室内定位
- GPS定位程序代码
- matlab 车牌定位与分割 详细注释
- 基于MATLAB的车牌定位.zip
- 容积卡尔曼ckf——基站测距定位解算
- 传感器网络节点定位算法matlab代码.
- 卫星导航定位算法与程序设计讲义.
- 无源定位方法及其精度研究.
- matlab车牌定位识别,完整案例
- 基于多元线性回归的分析
- 无线传感器网络节点定位算法matlab源
- 各种最小二乘法总结算法+matlab源码
- 无线传感器网络定位MATLAB仿真共7个
- 基于MATLAB软件读取Rinex3.02版本观测文
- 无线传感器网络定位程序(matlab可以
- 各种最小二乘法汇总算例及MATLAB程序
- 7个经典传感器网络WSN节点定位算法的
- Matlab实现无线传感器网络节点定位的
- 车牌识别与人脸定位matlab
- UWB定位的MATLAB实现
- 最新版,最小二乘支持向量机2010年
- 机动车辆车牌定位检测算法研究
- 最小二乘支持向量机matlab程序+使用教
- Matlab完整版车牌定位识别
- 人脸人眼定位算法matlab实现代码
- 移动最小二乘法曲面拟合等步长采样
- ASEF人眼定位matlab仿真
- 最小二乘算法总结算法+程序
- 基于无线通信基站的室内三维定位问
评论
共有 条评论