本 MATLAB 程序實現了基于 Angle of Arrival (AOA) 與 Time Difference of Arrival (TDOA) 的二維定位方法,通過自適應融合與最小二乘優化,實現對未知目標的高精度估計。本例中固定使用了 3 個基站(錨點),算法框架支持擴展到更多基站。
直接運行后可得到二維、3個錨點的TDOA(到達時間差)與AOA(到達角度)的混合定位方法的定位結果展示與對比
文章目錄
- 程序簡介
- 系統模型與參數
- TDOA建模
- AOA建模
- AOA/TDOA混合定位方法
- 運行結果
- MATLAB源代碼
程序簡介
系統模型與參數
-
目標位置:未知點 p=[x,y]?\mathbf{p} = [x, y]^\topp=[x,y]?
-
錨點位置:第 iii 個基站坐標為 si=[xi,yi]?\mathbf{s}_i = [x_i, y_i]^\topsi?=[xi?,yi?]?,i=1,2,3i = 1, 2, 3i=1,2,3
-
噪聲模型:
- AOA噪聲:高斯白噪聲 N(0,σθ2)\mathcal{N}(0, \sigma_\theta^2)N(0,σθ2?),默認 σθ=10?2\sigma_\theta = 10^{-2}σθ?=10?2
- TDOA噪聲:高斯白噪聲 N(0,σt2)\mathcal{N}(0, \sigma_t^2)N(0,σt2?),默認 σt=10?10\sigma_t = 10^{-10}σt?=10?10
TDOA建模
TDOA測量基于不同基站之間接收到信號的時間差。對于目標到第 iii 個基站的理想距離為:
ri=∥p?si∥2r_i = \| \mathbf{p} - \mathbf{s}_i \|_2 ri?=∥p?si?∥2?
TDOA觀測值定義為:
Δri=ri?r1+ni,i=2,3\Delta r_i = r_i - r_1 + n_i, \quad i=2,3 Δri?=ri??r1?+ni?,i=2,3
對應時間差:
Δti=Δric,c為光速\Delta t_i = \frac{\Delta r_i}{c}, \quad c \text{ 為光速} Δti?=cΔri??,c?為光速
最終形成的觀測方程:
Ri=ri?r1,i=2,3R_i = r_i - r_1, \quad i=2,3 Ri?=ri??r1?,i=2,3
用于構建非線性約束方程,后續由最小二乘方法迭代解算。
AOA建模
AOA 使用信號到達方向(角度)進行定位。第 iii 個基站測得的理想角度為:
θi=arctan?2(y?yi,x?xi)\theta_i = \arctan2(y - y_i, x - x_i) θi?=arctan2(y?yi?,x?xi?)
加入角度噪聲 nθ,i~N(0,σθ2)n_{\theta,i} \sim \mathcal{N}(0, \sigma_\theta^2)nθ,i?~N(0,σθ2?) 后,構造以下線性測量模型:
sin?(θi)(x?xi)?cos?(θi)(y?yi)=0\sin(\theta_i)(x - x_i) - \cos(\theta_i)(y - y_i) = 0 sin(θi?)(x?xi?)?cos(θi?)(y?yi?)=0
整理成最小二乘形式 Hp=Y\mathbf{H}\mathbf{p} = \mathbf{Y}Hp=Y:
Hi=[sin?(θi)?cos?(θi)],Yi=xisin?(θi)?yicos?(θi)\mathbf{H}_i = \begin{bmatrix} \sin(\theta_i) & -\cos(\theta_i) \end{bmatrix}, \quad \mathbf{Y}_i = x_i \sin(\theta_i) - y_i \cos(\theta_i) Hi?=[sin(θi?)??cos(θi?)?],Yi?=xi?sin(θi?)?yi?cos(θi?)
所有基站數據合并后估計目標位置:
p^AOA=(H?H)?1H?Y\hat{\mathbf{p}}_{AOA} = (\mathbf{H}^\top \mathbf{H})^{-1} \mathbf{H}^\top \mathbf{Y} p^?AOA?=(H?H)?1H?Y
AOA/TDOA混合定位方法
詳見代碼中的注釋。
運行結果
運行結果如下:
命令行輸出的定位結果與誤差:
MATLAB源代碼
程序結構如下:
部分代碼如下:
% AOA與TDOA混合定位例程,適用于二維環境、3個錨點的定位
% 作者:matlabfilter
% 2025-07-05/Ver1%% 初始化
clc;clear;close all;
rng(0);
% 定義參數和待測點位置
num_stations = 3; % 基站數量(錨點數量)
TDOA_noise = 1e-10; %TDOA誤差
AOA_noise = 1e-2; % AOA 角度噪聲
% 固定基站位置
stations_position = 100*randn(3,2);
c = 3e8;
% 待定位點
position = 0*ones(1,2)+5*randn(1,2);
% TDOA 建模
delta = ones(3,1)*position - stations_position; %未知點與各基站之間的相對位置(矢量)
r_ideal = (sum(delta.^2,2)).^(1/2); %計算移動臺到各個基站的實際距離(標量)
delta_t = r_ideal/c+TDOA_noise*randn(size(r_ideal));
r = delta_t*c;
Ri = r(2:end,:);
R1 = ones(2,1)*r(1,:);
R = Ri-R1; %表示從[2,i]開始MS與基站i和基站1的距離差%% AOA定位
% 計算目標到各基站的距離
num_station = size(stations_position, 1);
% true_distances = vecnorm(stations_position - position, 2, 2);% 模擬接收到的AOA(此時是角度理想值,后面要加噪聲)
azimuth_angles = atan2(position(2) - stations_position(:, 2), position(1) - stations_position(:, 1));% 假設測量的AOA角度和距離上加一些噪聲
azimuth_angles = azimuth_angles + AOA_noise * randn(num_station, 1);
% 使用最小二乘法進行定位估計 直接求解(無需距離)
H = zeros(1*num_station,2);
Y = zeros(1*num_station,1);
完整代碼的下載鏈接:https://download.csdn.net/download/callmeup/91274669
如需幫助,或有導航、定位濾波相關的代碼定制需求,請點擊下方卡片聯系作者