【MATLAB例程】AOA与TDOA混合定位例程,适用于二维环境、3个锚点的定位|附代码下载链接

在这里插入图片描述

本 MATLAB 程序实现了基于 Angle of Arrival (AOA)Time Difference of Arrival (TDOA) 的二维定位方法,通过自适应融合最小二乘优化,实现对未知目标的高精度估计。本例中固定使用了 3 个基站(锚点),算法框架支持扩展到更多基站。
直接运行后可得到二维、3个锚点的TDOA(到达时间差)与AOA(到达角度)的混合定位方法的定位结果展示与对比

程序简介

系统模型与参数

  • 目标位置:未知点 p = [ x , y ] ⊤ \mathbf{p} = [x, y]^\top p=[x,y]

  • 锚点位置:第 i i i 个基站坐标为 s i = [ x i , y i ] ⊤ \mathbf{s}_i = [x_i, y_i]^\top si=[xi,yi] i = 1 , 2 , 3 i = 1, 2, 3 i=1,2,3

  • 噪声模型

    • AOA噪声:高斯白噪声 N ( 0 , σ θ 2 ) \mathcal{N}(0, \sigma_\theta^2) N(0,σθ2),默认 σ θ = 1 0 − 2 \sigma_\theta = 10^{-2} σθ=102
    • TDOA噪声:高斯白噪声 N ( 0 , σ t 2 ) \mathcal{N}(0, \sigma_t^2) N(0,σt2),默认 σ t = 1 0 − 10 \sigma_t = 10^{-10} σt=1010

TDOA建模

TDOA测量基于不同基站之间接收到信号的时间差。对于目标到第 i i i 个基站的理想距离为:

r i = ∥ p − s i ∥ 2 r_i = \| \mathbf{p} - \mathbf{s}_i \|_2 ri=psi2

TDOA观测值定义为:

Δ r i = r i − r 1 + n i , i = 2 , 3 \Delta r_i = r_i - r_1 + n_i, \quad i=2,3 Δri=rir1+ni,i=2,3

对应时间差:

Δ t i = Δ r i c , c  为光速 \Delta t_i = \frac{\Delta r_i}{c}, \quad c \text{ 为光速} Δti=cΔri,c 为光速

最终形成的观测方程:

R i = r i − r 1 , i = 2 , 3 R_i = r_i - r_1, \quad i=2,3 Ri=rir1,i=2,3

用于构建非线性约束方程,后续由最小二乘方法迭代解算。

AOA建模

AOA 使用信号到达方向(角度)进行定位。第 i i i 个基站测得的理想角度为:

θ i = arctan ⁡ 2 ( y − y i , x − x i ) \theta_i = \arctan2(y - y_i, x - x_i) θi=arctan2(yyi,xxi)

加入角度噪声 n θ , i ∼ N ( 0 , σ θ 2 ) n_{\theta,i} \sim \mathcal{N}(0, \sigma_\theta^2) nθ,iN(0,σθ2) 后,构造以下线性测量模型:

sin ⁡ ( θ i ) ( x − x i ) − cos ⁡ ( θ i ) ( y − y i ) = 0 \sin(\theta_i)(x - x_i) - \cos(\theta_i)(y - y_i) = 0 sin(θi)(xxi)cos(θi)(yyi)=0

整理成最小二乘形式 H p = Y \mathbf{H}\mathbf{p} = \mathbf{Y} Hp=Y

H i = [ sin ⁡ ( θ i ) − cos ⁡ ( θ i ) ] , Y i = x i sin ⁡ ( θ i ) − y i cos ⁡ ( θ 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=xisin(θi)yicos(θi)

所有基站数据合并后估计目标位置:

p ^ A O A = ( H ⊤ H ) − 1 H ⊤ Y \hat{\mathbf{p}}_{AOA} = (\mathbf{H}^\top \mathbf{H})^{-1} \mathbf{H}^\top \mathbf{Y} p^AOA=(HH)1HY

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.youkuaiyun.com/download/callmeup/91274669

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值