
二维动态目标TDOA定位与UKF融合滤波完整仿真代码
原创代码,可联系我获取一对一讲解和代码定制,代码禁止翻卖
程序简介
多锚点TDOA定位
- 支持任意数量锚点
- 构建真实TDOA观测模型
- 引入测量噪声
- 模拟真实工程环境
采用两步加权最小二乘方法进行定位求解,相比普通最小二乘具有更高稳定性和精度。
在TDOA单历元定位的基础上,引入无迹卡尔曼滤波进行动态的传感器数据融合:
- 抑制观测抖动
- 平滑轨迹
- 抑制惯导发散
- 提高整体稳定性
UKF不需要求导,适用于非线性系统,数值稳定性优于EKF。
运行结果
程序自动对比三种结果:
- 纯惯导解算结果
- 纯TDOA单历元定位
- UKF融合估计结果
并输出:
- 最大误差
- 平均误差
- 每时刻距离误差曲线
- 百分比误差改进率
可直观看到UKF对系统精度的提升效果。
轨迹图如下:

误差曲线图:


命令行窗口的输出:

MATLAB源代码
部分代码如下:
% TDOA对轨迹的定位,使用两步加权最小二乘方法,定位二维目标、N个锚点,UKF对轨迹进行滤波
% 作者微信:matlabfilter,可联系获取一对一讲解与代码定制
% 2026-02-19/Ver1
%% 初始化
clc;clear;close all;
rng(0);
%% 定义参数和待测点位置
num_stations = 10;
std_var1_TDOA = 1e-9;
stations_position = 10*randn(num_stations, 2);
c = 3e8;
dt = 1;
%% 生成二维轨迹(匀速直线运动)
pos0 = [-20, -20]; % 初始位置 (x0, y0),单位:m
vel0 = [0.1, 0.1]; % 初始速度 (vx, vy),单位:m/s
N = 300; % 总时间步数
time_steps = (0:N-1)'; % N×1 时间向量
positions = pos0 + time_steps * (vel0 * dt); % N×2,每行为一个时刻的 [x, y]
%% TDOA定位程序
for i3 = 1:size(positions, 1)
position = positions(i3, :);
delta = ones(num_stations,1)*position - stations_position;
完整代码获取:https://download.csdn.net/download/callmeup/92668434
更多代码可以在专栏里面找,订阅后可查看专栏内的所有完整代码:https://blog.csdn.net/callmeup/category_12916974.html
或:
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
406

被折叠的 条评论
为什么被折叠?



