【定位问题】三维chan算法求解室内定位问题【含Matlab源码 580期】

一、简介

Chan 算法是 TDOA 定位方法的一个很赞的 trick。但是很多方法一旦从学术的角度去看,就罩上了奇异的光环。TDOA,the time differnces of arrival,到达时间差。
Chan 算法1是非递归双曲线方程组解法,具有解析表达式解。其主要的特点为在测量误差服从理想高斯分布时,它的定位精度高、计算量小,并且可以通过增加基站数量来提高算法精度。该算法的推导的前提是基于测量误差为零均值高斯随机变量,对于实际环境中误差较大的测量值,比如在有非视距误差的环境下,该算法的性能会有显著下降。Chan 算法在考虑二维的情况下,可分为 只有三个 BS 参与定位 和 三个以上 BS 定位 两种。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、源代码

function X = ChanAlgorithm(BSN, MSP, Radius, Noise)
%CHANALGORITHM 本函数用于实现无线定位中的CHAN算法
%               - BSN  为基站个数,3 < BSN <= 7%               - MSP  为移动台的初始位置, MSx, MSy均为[0,1]之间的数;
%                      特别要注意服务小区与MS之间的关系,MS的位置不能越界。
%               - Noise 测距误差方差。
%               - R    为小区半径,单位(meter)%               - X    为移动台经算法处理后的位置.
%See also: ChanAlgorithm.m



%   参数检查:
if  nargout>1,
    error('Too many output arguments.');
end
if nargin<2 | nargin>4,
    error('Wrong number of input arguments.');
end


% 算法开始:
BS = Radius*NetworkTop(BSN);
MS = Radius*MSP;

% 噪声功率:
Q = eye(BSN-1);

% 第一次LS:
% Ri
K1 = 0;
for i = 1: BSN,
    R0(i) = sqrt((BS(1,i) - MS(1))^2 + (BS(2,i) - MS(2))^2);
end

for i = 1: BSN-1,
    R(i) = R0(i+1) - R0(1) + Noise*randn(1);
    K(i) = BS(1,i+1)^2 + BS(2,i+1)^2;
end

% Ga
for i = 1: BSN-1,
    Ga(i,1) = -BS(1, i+1);
    Ga(i,2) = -BS(2, i+1);
    Ga(i,3) = -R(i);
end

% h
for i = 1: BSN-1,
    h(i) = 0.5*(R(i)^2 - K(i) + K1);
end

% 由(14b)给出B的估计值:
Za0 = inv(Ga'*inv(Q)*Ga)*Ga'*inv(Q)*h';

% 利用这个粗略估计值计算B:
B = eye(BSN-1);
for i = 1: BSN-1,
    B(i,i) = sqrt((BS(1,i+1) - Za0(1))^2 + (BS(2,i+1) - Za0(2))^2);
end

% FI:
FI = B*Q*B;

% 第一次LS结果:
Za1 = inv(Ga'*inv(FI)*Ga)*Ga'*inv(FI)*h';

if Za1(3) < 0,
    Za1(3) = abs(Za1(3));
%     Za1(3) = 0;
end
%***************************************************************

% 第二次LS:
% 第一次LS结果的协方差:
CovZa = inv(Ga'*inv(FI)*Ga);

% sB:
sB = eye(3);
for i = 1: 3,
    sB(i,i) = Za1(i);
end

% sFI:
sFI = 4*sB*CovZa*sB;

% sGa:
sGa = [1, 0; 0, 1; 1, 1];

% sh
sh  = [Za1(1)^2; Za1(2)^2; Za1(3)^2];

% 第二次LS结果:
Za2 = inv(sGa'*inv(sFI)*sGa)*sGa'*inv(sFI)*sh;

% Za = sqrt(abs(Za2));

Za = sqrt(Za2);

% 输出:
% if Za1(1) < 0,
%     out1 = -Za(1);
% else
%     out1 = Za(1);
% end
% if Za2(1) < 0,
%     out2 = -Za(2);
% else
%     out2 = Za(2);
% end

三、运行结果

在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423
往期回顾>>>>>>
【物理应用】基于matlab杨氏双缝干涉实验【含Matlab源码 001期】
【物理应用】基于matlab井筒多相流【含Matlab源码 055期】
【物理应用】基于matlab 二维对流扩散温度场【含Matlab源码 056期】
【物理应用】基于matlab内弹道【含Matlab源码 057期】
【物理应用】基于matlab两个光纤光栅的新光子微波发生器的仿真分析【含Matlab源码 058期】
【物理应用】基于matlab计算油气井井底压力【含Matlab源码 059期】
【物理应用】基于matlab光流场【含Matlab源码 060期】
【物理应用】基于matlab 带电粒子在放射状电场和均匀磁场下的混沌运动模拟【含Matlab源码 061期】
【物理应用】基于matlab异构交通流【含Matlab源码 062期】
【物理应用】基于matlab模拟斜抛运动含GUI界面【含Matlab源码 063期】
【物理应用】基于matlab计算晶体结构的x射线衍射图谱【含Matlab源码 064期】
【物理应用】基于matlab衍射光栅教学版【含Matlab源码 065期】
【物理应用】基于matlab电荷电场线和电势【含Matlab源码 066期】
【物理应用】基于matlab速度场找到漩涡【含Matlab源码 067期】
【物理应用】基于matlab车道检测仿真【含Matlab源码 068期】
【物理应用】基于matalb GUI界面的电偶极子【含Matlab源码 069期】
【物理应用】基于matlab车载自组织网络中路边性能及防碰撞算法研究【含Matlab源码 263期】
【物理应用】基于matlab Q学习的无线体域网路由方法【含Matlab源码 264期】
【物理应用】基于matlab GUI家庭室内温湿度控制【含Matlab源码 326期】
【电路仿真】基于simulink三相相控变流器的设计【含Matlab源码 327期】
【物理应用】基于matlab的导线网坐标计算【含Matlab源码 328期】
【物理应用】基于matlab的功率谱估计【含Matlab源码 329期】
【物理应用】基于动态矩阵控制方法的热水器出口温度控制【含Matlab源码 330期】
【电路仿真】基于matlab simulink三相半波可控整流电路【含Matlab源码 331期】
【电路仿真】基于matlab simulink三相桥式全控整流电路【含Matlab源码 332期】
【电路仿真】基于simulink模拟锁相环设计【含Matlab源码 339期】
【电路仿真】基于simulink全数字锁相环设计【含Matlab源码 340期】
【物理应用】基于matlab直角坐标的电力系统潮流计算【含Matlab源码 341期】
【光学】基于matlab单缝衍射【含Matlab源码 342期】
【物理应用】基于matlab RBF神经网络算法控制卫星轨道和姿态【含Matlab源码 377期】
【物理应用】基于matlab红绿灯车辆数量识别【含Matlab源码 378期】
【电路仿真】基于simulink 四旋翼的PID控制【含Matlab源码 454期】
【光学】 基于matlab GUI光的双缝干涉【含Matlab源码 455期】
【电路仿真】基于matlab光伏电池simulink仿真模型【含Matlab源码 486期】
【物理应用】 基于matlab PIC模型的太阳风粒子模拟【含Matlab源码 493期】
【光学】基于matlab光栅衍射仿真【含Matlab源码 502期】
【物理应用】基于matlab波数谱计算【含Matlab源码 508期】
【物理应用】基于matlab 仿真圆孔的菲涅尔衍射【含Matlab源码 522期】
【物理应用】基于matlab二维边界单元法计算腐蚀电位【含Matlab源码 523期】
【物理应用】基于matlab计步【含Matlab源码 524期】

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/115014336