
本文介绍一个MATLAB代码,实现基于 到达角(AOA) 和 到达时间(TOA) 的混合定位算法,结合 扩展卡尔曼滤波(EKF) 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络,展示了从信号测量、定位解算到轨迹滤波的全流程,适用于城市峡谷、室内等复杂环境下的定位研究。
文章目录
- 程序介绍
- 代码功能概述
- 核心模块与技术亮点
- 关键参数与配置
- 运行结果与性能
 
- 运行结果
- MATLAB代码
- 结论
程序介绍
代码功能概述
本文所述代码实现了一个三维动态目标定位与滤波系统,通过融合**到达角(AOA)和到达时间(TOA)的混合定位方法,结合扩展卡尔曼滤波(EKF)**优化轨迹精度。代码支持自适应基站数量配置,适用于城市峡谷、室内等复杂场景的定位研究。
核心模块与技术亮点
-  动态场景建模 - 目标轨迹:生成三维匀速运动轨迹(X/Y轴线性变化,Z轴固定),模拟真实运动特性。
- 基站网络:随机生成非均匀分布的基站位置(stations_position),支持动态调整基站数量(num_station)。
 
-  混合定位算法 - 信号模拟: 
    - AOA测量:计算方位角(azimuth_angles)和俯仰角(elevation_angles),叠加高斯噪声(AOA_noise)。
- TOA测量:基于光速计算距离(distances),添加时间噪声(TOA_noise)。
 
- AOA测量:计算方位角(
- 解算方法: 
    - 构建超定方程组,利用单位向量矩阵(H)和伪逆(pinv)求解目标坐标
 
- 构建超定方程组,利用单位向量矩阵(
 
- 信号模拟: 
    
-  EKF轨迹滤波 - 状态模型:假设目标匀速运动,状态向量为位置([x, y, z]),速度通过固定增量([0.2, -0.2, 0])建模。
- 滤波流程: 
    - 预测:根据运动模型预测下一状态,更新协方差矩阵(PP = F * P * F' + Q)。
- 更新:融合混合定位结果,计算卡尔曼增益(Kk),修正状态估计值
 
- 预测:根据运动模型预测下一状态,更新协方差矩阵(
 
- 状态模型:假设目标匀速运动,状态向量为位置(
关键参数与配置
| 参数/变量 | 描述 | 典型值/范围 | 
|---|---|---|
| num_station | 基站数量 | 10(可调) | 
| AOA_noise | AOA角度噪声标准差 | 0.1 rad | 
| TOA_noise | TOA时间噪声标准差 | 1e-9 s | 
| Q | 过程噪声协方差矩阵 | diag([1,1,1])*0.01 | 
| R | 观测噪声协方差矩阵 | diag([1,1,1])*0.02 | 
运行结果与性能
-  轨迹精度对比 - 滤波前观测值:因累积误差逐渐偏离真实轨迹,终点距离误差约0.8米。
- EKF滤波后:轨迹紧贴真实路径,终点误差降至0.2米以下。
- 未滤波惯导模拟:误差随时间线性增长,验证EKF对噪声抑制的有效性。
 
-  误差统计 - X/Y轴:EKF滤波后RMSE ≤0.15米,较纯观测值提升60%。
- Z轴:受限于AOA/TOA垂直方向观测信息不足,误差略高(约0.3米)。
 
-  可视化输出示例 - 三维轨迹图:红点(基站)、蓝虚线(真实轨迹)、黄点(观测值)、蓝点(EKF结果)。
- RMSE对比图:EKF曲线(蓝色)显著低于未滤波结果(橙色/黄色)。
 
运行结果
定位导航示意图:
 
 误差曲线(滤波前后对比):
 
 
 命令行截图:
 
MATLAB代码
完整的matlab代码如下,粘贴到空脚本后即可直接运行:
% AOA与TOA混合定位例程,自适应基站数量,三维,轨迹滤波使用EKF
% 作者:matlabfilter
% 2025-03-26/Ver1
%% 初始化
clc;clear;close all;
rng(0);
% 生成目标点坐标
position = [-1,1,1];
% 生成目标的运动
positions = repmat(position,21,1)+[0:0.2:4;0:-0.2:-4;zeros(1,21)]';
% 固定基站位置
num_station =10; %基站数量
stations_position=2*randn(num_station,3); %定义基站的坐标,这里是随机坐标
完整代码下载链接:https://download.csdn.net/download/callmeup/90540441
结论
本代码通过AOA/TOA混合定位与EKF滤波的结合,有效提升了复杂环境下的定位精度,为多传感器融合算法研究提供了可扩展的仿真框架。通过调整基站数量、噪声参数或运动模型,可进一步适配具体应用需求。
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者



















