【雷达跟踪与滤波|MATLAB例程】平面上的雷达跟踪与UKF(无迹卡尔曼滤波),估计目标轨迹,输出真值、误差曲线、误差特性等

单雷达、极坐标量测(距离 + 方位角)的二维目标跟踪器
原创代码,非AI生成,请勿翻卖

文章目录

程序详解

本程序构建了一个基于单站雷达的二维移动目标跟踪系统。雷达能够同时测得目标的距离和方位角,目标本身按给定加速度在平面中运动。由于雷达量测属于典型的非线性极坐标观测,本程序采用**无迹卡尔曼滤波(UKF)**作为主滤波器,对目标的位置与速度进行实时估计。

主要功能与流程

  1. 目标真实运动模拟

    目标在平面中具有位置、速度和加速度,程序根据给定的时间步长对目标进行逐步更新,得到真实轨迹。

  2. 雷达量测生成

    程序根据目标与雷达的相对位置计算真实距离和方位角,并加入随机噪声模拟实际雷达观测。

    量测被转换成 XY 坐标仅用于绘图展示。

  3. 惯性推演(对比项)

    同时生成一个基于"匀速积分"的惯性预测轨迹,用于和 UKF 的估计结果做对比,展示单纯推演的误差积累情况。

  4. UKF 预测与更新

    • 使用当前的状态协方差生成多个 sigma 点;
    • 通过状态模型预测未来状态;
    • 通过雷达测量模型预测量测;
    • 计算预测值与实际量测之间的差异;
    • 更新目标位置与速度。
      由于方位角具有周期性,程序特别处理了角度的归一化问题,确保滤波过程稳定。
  5. 误差计算与性能分析

    程序对以下三条轨迹进行误差评估:

    • 雷达量测(经转换为 XY 后)
    • 纯惯导推演
    • UKF 估计
      计算平均误差、RMSE,并给出柱状图和误差曲线,直观比较三者的性能差异。

整体特点

  • 适用于单站雷达对机动目标的二维定位与跟踪;
  • 使用 UKF 应对非线性极坐标量测;
  • 加入角度归一化处理,提高滤波稳定性;
  • 提供真实轨迹、雷达观测、惯导推演、UKF 结果的可视化;
  • 自动输出各方法的定位精度对比,便于性能评估。

运行结果

轨迹对比:

误差曲线:

误差柱状图对比:

命令行输出的结果:

MATLAB源代码

部分代码如下:

matlab 复制代码
% 雷达测角测距定位-二维-单一雷达,轨迹用UKF,观测为距离和角度
% 作者:matlabfilter
% 2025-12-07/Ver1
clear; close all; clc;
rng(0);

%% 参数设置
dt = 0.01;
N = 400;

target_position = [100; 200];
target_velocity = [2; 5];
target_acceleration = [0.5; -0.1];
radar_position = [120; 223];

range_noise_std = 0.2; %雷达测距误差
angle_noise_std = 0.1; %雷达测角误差

%% 滤波状态模型
F = [1 0 dt 0;
     0 1 0  dt;
     0 0 1  0;
     0 0 0  1];

q = 0.1;
Q = q * [dt^4/4 0       dt^3/2 0;
         0       dt^4/4 0       dt^3/2;
         dt^3/2  0       dt^2   0;
         0       dt^3/2  0       dt^2];

% 测量噪声(r, theta)
R = diag([range_noise_std^2, angle_noise_std^2]);

% 初始状态估计
x_est = [target_position; target_velocity];
P = diag([3 3 0.5 0.5]);

%% UKF 参数设置
n = 4;  % 状态维度
alpha = 1e-3;  % 控制sigma点分布
beta = 2;      % 用于高斯分布 (beta=2为最优)
kappa = 0;     % 次要参数
lambda = alpha^2 * (n + kappa) - n;

% 权重计算
Wm = zeros(2*n+1, 1);
Wc = zeros(2*n+1, 1);
Wm(1) = lambda / (n + lambda);
Wc(1) = lambda / (n + lambda) + (1 - alpha^2 + beta);
for i = 2:2*n+1
    Wm(i) = 1 / (2*(n + lambda));
    Wc(i) = 1 / (2*(n + lambda));
end

%% 纯惯导
inertial_position = target_position;
inertial_velocity = target_velocity;

%% 数据存储
true_positions = zeros(N, 2);
true_velocities = zeros(N, 2);
measurements_xy = zeros(N, 2);  % 仅用于绘图
estimated_positions = zeros(N, 2);
estimated_velocities = zeros(N, 2);
inertial_positions = zeros(N, 2);
inertial_velocities = zeros(N, 2);

fprintf('开始 UKF 雷达跟踪仿真...\n');

完整代码如下:
https://download.csdn.net/download/callmeup/92441419

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

相关推荐
aini_lovee8 小时前
MATLAB基于小波技术的图像融合实现
开发语言·人工智能·matlab
3GPP仿真实验室9 小时前
【Matlab源码】6G候选波形:OFDM-IM 增强仿真平台 DM、CI
开发语言·matlab·ci/cd
rit843249913 小时前
MATLAB中Teager能量算子提取与解调信号的实现
开发语言·matlab
我找到地球的支点啦13 小时前
通信扩展——扩频技术(超级详细,附带Matlab代码)
开发语言·matlab
Dev7z1 天前
基于 MATLAB 的铣削切削力建模与仿真
开发语言·matlab
fengfuyao9851 天前
基于MATLAB的表面织构油润滑轴承故障频率提取(改进VMD算法)
人工智能·算法·matlab
机器学习之心1 天前
基于随机森林模型的轴承剩余寿命预测MATLAB实现!
算法·随机森林·matlab
rit84324991 天前
基于MATLAB的环境障碍模型构建与蚁群算法路径规划实现
开发语言·算法·matlab
hoiii1871 天前
MATLAB SGM(半全局匹配)算法实现
前端·算法·matlab
yong99901 天前
MATLAB面波频散曲线反演程序
开发语言·算法·matlab