【定位代码】基于Chan方法的TOA定位解算方法,含TOA的建模过程,matlab,锚点数量可自适应。附代码下载链接

Chan方法解算TOA,定位二维目标、锚点数量可自适应

参考文献:《基于Taylor-Chan算法的改进UWB室内三维定位方法》

文章目录

代码简介

算法背景与原理

Chan 方法是一种基于最小二乘(Least Squares, LS)框架的闭式 TOA 定位算法,通过两次加权最小二乘迭代,能在一定程度上兼顾计算复杂度与估计精度。其主要流程包括:

  1. TOA 测量建模

    测量到第 i i i 个锚点的时间差(相对于第 1 号锚点)为

    Δ t i = ∥ x − s i ∥ − ∥ x − s 1 ∥ c + ε i , \Delta t_i = \frac{\|\mathbf{x}-\mathbf{s}_i\| - \|\mathbf{x}-\mathbf{s}_1\|}{c} + \varepsilon_i, Δti=c∥x−si∥−∥x−s1∥+εi,

    其中

    • x = [ x ,   y ] T \mathbf{x} = [x,\,y]^T x=[x,y]T 为待估计目标位置;
    • s i = [ s i , x ,   s i , y ] T \mathbf{s}i = [s{i,x},\,s_{i,y}]^T si=[si,x,si,y]T 为第 i i i 个锚点已知坐标;
    • c c c 为信号传播速度;
    • ε i ∼ N ( 0 , σ t 2 ) \varepsilon_i\sim\mathcal{N}(0,\sigma_t^2) εi∼N(0,σt2) 为测时误差。
  2. 构造线性化方程

    令测距差 r i = c   Δ t i r_i = c\,\Delta t_i ri=cΔti,有

    r i − r 1 = ∥ x − s i ∥ − ∥ x − s 1 ∥ . r_i - r_1 = \|\mathbf{x}-\mathbf{s}_i\| - \|\mathbf{x}-\mathbf{s}_1\|. ri−r1=∥x−si∥−∥x−s1∥.

    平方后整理可得线性形式

    H i ≜ r i 2 − r 1 2    −    ∥ s i ∥ 2 + ∥ s 1 ∥ 2 = 2   ( s 1 − s i ) T x    +    ( r i − r 1 ) 2 , H_i \triangleq r_i^2 - r_1^2 \;-\;\bigl\|\mathbf{s}_i\bigr\|^2+\bigl\|\mathbf{s}_1\bigr\|^2 = 2\,(\mathbf{s}_1-\mathbf{s}_i)^T\mathbf{x}\;+\;(r_i-r_1)^2, Hi≜ri2−r12− si 2+ s1 2=2(s1−si)Tx+(ri−r1)2,

    进一步写成矩阵形式

    H = G   α , \mathbf{H} = \mathbf{G}\,\boldsymbol{\alpha}, H=Gα,

    其中

    G = [ s 2 , x − s 1 , x s 2 , y − s 1 , y r 2 − r 1 ⋮ ⋮ ⋮ s N , x − s 1 , x s N , y − s 1 , y r N − r 1 ] , α = [ x y δ ] , \mathbf{G} = \begin{bmatrix} s_{2,x}-s_{1,x} & s_{2,y}-s_{1,y} & r_2-r_1 \\ \vdots & \vdots & \vdots \\ s_{N,x}-s_{1,x} & s_{N,y}-s_{1,y} & r_N-r_1 \end{bmatrix},\quad \boldsymbol{\alpha} = \begin{bmatrix} x \\ y \\ \delta \end{bmatrix}, G= s2,x−s1,x⋮sN,x−s1,xs2,y−s1,y⋮sN,y−s1,yr2−r1⋮rN−r1 ,α= xyδ ,

    其中 δ \delta δ 表示辅助变量,用于消去平方根。

  3. 初始加权最小二乘(WLS)求解

    假设测量噪声协方差矩阵为 Q = σ r 2 I \mathbf{Q}=\sigma_r^2\mathbf{I} Q=σr2I,则第一步估计

    α ^ ( 0 ) = ( G T Q − 1 G ) − 1   G T Q − 1   H . \hat{\boldsymbol{\alpha}}^{(0)} = \bigl(\mathbf{G}^T\mathbf{Q}^{-1}\mathbf{G}\bigr)^{-1}\,\mathbf{G}^T\mathbf{Q}^{-1}\,\mathbf{H}. α^(0)=(GTQ−1G)−1GTQ−1H.

  4. 迭代权重更新与最终解算

    • 用 α ^ ( 0 ) \hat{\boldsymbol{\alpha}}^{(0)} α^(0) 反算距离近似值 r ^ i ( 0 ) \hat r_i^{(0)} r^i(0),构造新权重矩阵 Ψ \boldsymbol{\Psi} Ψ。
    • 再次 WLS 求解得 α ^ ( 1 ) \hat{\boldsymbol{\alpha}}^{(1)} α^(1)。
    • 最后提取位置分量 ( x , y ) (x,y) (x,y),并对符号进行校正,得到最终估计 x ^ \hat{\mathbf{x}} x^。

此过程只需两次 WLS 迭代,因而计算量低于直接非线性最小二乘,且精度与经典 Newton 迭代法相当。

更多细节,请参考代码中的注释

运行结果

4个锚点的示意图:

定位结果如下:

锚点数量修改为40个时,结果如下:

MATLAB源代码

部分代码如下:

matlab 复制代码
% Chan方法解算TOA,定位二维目标、N个锚点
% 参考文献:《基于Taylor-Chan算法的改进UWB室内三维定位方法》
% 作者:matlabfilter
% 2025-07-12/Ver1
%% 初始化
clc;clear;close all;
rng(0);
% 定义参数和待测点位置
num_stations = 40; % 基站数量(锚点数量)
std_var1 = 1e-11; %TOA时间误差(标准差)
% 固定基站位置
stations_position = 5*randn(num_stations,2);
stations_position(1,:) = [0,0]; %算法特性,第一个锚点的坐标必须是[0,0,0]
c = 3e8;
positions = [1,1]; %定义待定位点真值,后续需要用这个值来求距离
for i1 = 1:size(positions,1)
    position = positions(i1,:);
    % TDOA 建模
    
    %% WLS计算
    
end

%% 误差处理
 

%% 绘图
 
%% 坐标输出
 
fprintf('作者:matlabfilter');

完整的代码见对应的付费文章:
https://blog.csdn.net/callmeup/article/details/149309881?spm=1011.2415.3001.5331

或点击单个代码的下载链接:
https://download.csdn.net/download/callmeup/91359675

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者