【雷达跟踪与滤波|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

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

相关推荐
tyatyatya7 小时前
MATLAB高级可视化与图形处理:绘图美化/交互/导出实战
开发语言·matlab
青铜发条9 小时前
【Matlab】常用函数总结
算法·matlab
t1987512811 小时前
火电机组热经济性分析MATLAB程序实现
人工智能·算法·matlab
hoiii18711 小时前
MATLAB中离散傅里叶变换(DFT)的实现与分析
开发语言·matlab
yongui4783412 小时前
基于MATLAB的轴承表面织构油膜参数计算程序
数据结构·算法·matlab
wuk99813 小时前
基于帧差分法的视频运动检测MATLAB实现
开发语言·matlab·音视频
gihigo19981 天前
基于MATLAB的电力系统经济调度实现
开发语言·matlab
机器学习之心1 天前
SSA-VMD麻雀搜索算法优化变分模态分解+皮尔逊系数+小波阈值降噪+信号重构,MATLAB代码
matlab·信号重构·小波阈值降噪·ssa-vmd·麻雀搜索算法优化变分模态分解
leo__5201 天前
基于矩量法(MoM)的单站RCS计算与通信天线MATLAB实现
人工智能·算法·matlab