
到达角(AOA, Angle-of-Arrival)定位 与 扩展卡尔曼滤波(EKF) 相结合的二维目标追踪方案。通过多个基站的角度测量信息,对移动目标进行高精度定位,并利用动态运动模型进行轨迹平滑化处理。基站数量可调节,AOA定位模块自适应数量的调整,无需调节矩阵形式
文章目录
程序简介
基本思想 :
每个基站根据接收到的信号方位角,可以推断目标位于从该基站出发的某条射线上。当多个基站同时进行测量时,不同射线的交点就是目标的真实位置。
扩展卡尔曼滤波 (EKF) 动态轨迹优化
两阶段工作原理:
预测阶段
- 基于目标上一时刻的位置和已知的运动模型(如匀速直线运动),预测当前时刻的位置
- 同时预测位置估计的不确定性程度(协方差)
更新阶段
- 获取当前时刻来自AOA定位的观测值(位置测量)
- 计算"卡尔曼增益"来决定相信预测值还是观测值的程度
- 根据两者的可信度加权融合,得到当前时刻的最优位置估计
| 特性 | 优势描述 |
|---|---|
| 自适应基站数量 | 支持任意数量的基站,基站越多定位精度越高 |
| 两阶段融合策略 | 先通过AOA最小二乘获取观测值,再用EKF进行动态平滑,充分利用位置约束与运动约束 |
| 抗噪声能力强 | 通过最优加权融合观测值和预测值,显著降低高频抖动和异常脉冲 |
| 计算量小 | 二维线性模型,实时性好,适合嵌入式系统和移动平台部署 |
| 可视化完整 | 同时展示轨迹对比、误差时间序列、误差概率分布等多维度性能指标 |
| 灵活扩展 | 易于升级为处理非线性问题的无迹卡尔曼滤波,或扩展至三维应用 |
性能评估指标
系统通过以下指标进行定量评估:
- 单轴误差: 分别统计X方向和Y方向的定位偏差
- 距离误差: 计算估计位置与真实位置的欧几里得距离偏差
- 误差分布函数: 使用累积分布函数(CDF)展示误差的概率特性,例如"有90%的概率误差不超过1米"
后续优化与扩展方向
非线性运动建模
升级至加速度变化的运动模型,适应目标的复杂机动行为。
自适应参数学习
在线估计噪声统计特性,自动调整滤波器参数以适应环境变化。
多目标联合追踪
扩展至同时处理多个移动目标的并行估计。
三维应用扩展
加入俯仰角维度,实现从二维到三维的立体定位。
多传感器融合
结合AOA、TDOA、RSSI等多种测量方式,提升定位鲁棒性。
运行结果
定位示意图:

XY轴误差绝对值曲线

距离误差曲线:

MATLAB源代码
程序结构:

部分代码如下:
matlab
% AOA定位,二维、N个锚点(自适应基站数量),动态轨迹EKF优化
% 作者联系方式:微信matlabfilter(除前期达成一致外,付费咨询)
% 2025-10-18/Ver1
%% 初始化
clc;clear;close all;
rng(0);
% 生成目标点坐标 (二维)
position = [0,-2];
% 生成目标的运动 (二维)
positions = repmat(position,41,1)+[0:0.1:4;0:-0.1:-4]';
% 固定基站位置 (二维)
num_station =3; %基站数量
stations_position=3*randn(num_station,2); %定义基站的坐标,(N, 2)
estimated_position_AOA = zeros(2, size(positions, 1)); % 预分配AOA估计值空间 (2, N)
for i1 = 1:size(positions,1)
position = positions(i1,:);
%% AOA定位 (二维)
% 计算目标到各基站的距离 (此步骤在AOA LS中非必需,但保留供参考)
true_distances = vecnorm(stations_position - position, 2, 2);
% 模拟接收到的AOA(此时是角度理想值,后面要加噪声)
% 二维只需要方位角
azimuth_angles = atan2(position(2) - stations_position(:, 2), position(1) - stations_position(:, 1));
% 假设测量的AOA角度上加一些噪声
AOA_noise = 0.03; % AOA 角度噪声
azimuth_angles = azimuth_angles + AOA_noise * randn(num_station, 1);
% 移除了 elevation_angles (俯仰角)
% 使用最小二乘法进行定位估计 二维直接求解
% 每个基站提供一个方程: (x - xi)*sin(a) - (y - yi)*cos(a) = 0
% -> x*sin(a) - y*cos(a) = xi*sin(a) - yi*cos(a)
% H * [x;y] = Y
完整代码见专栏文章:
https://blog.csdn.net/callmeup/article/details/153521003?spm=1011.2415.3001.5331
或通过下方链接单独下载:
https://download.csdn.net/download/callmeup/92162288
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者