【MATLAB雷达滤波代码】二维,单雷达跟踪与滤波。EKF融合雷达的距离、角度+目标IMU数据。附代码下载链接

本MATLAB 代码实现了一个经典的二维雷达目标跟踪系统 ,采用扩展卡尔曼滤波 (EKF) 算法处理雷达的非线性观测数据(距离和角度)。

文章目录

程序详解

项目概述

本代码仿真了一个单一雷达站对二维平面内机动目标进行探测与跟踪的场景。由于雷达的观测数据为极坐标系下的距离 (Range)方位角 (Azimuth) ,与目标在笛卡尔坐标系下的运动方程存在非线性关系,因此代码采用了扩展卡尔曼滤波 (Extended Kalman Filter, EKF) 进行状态估计。

该仿真不仅实现了滤波算法,还引入了纯惯导推算作为对比,直观展示了多源数据融合(EKF)在消除累积误差和观测噪声方面的优势。

代码功能亮点

  • 多维度对比分析
    • 真实轨迹:目标的实际运动路径(含加速度)。
    • 雷达原始观测:将带噪声的极坐标测量值直接转换为直角坐标,展示原始测量的离散性。
    • 纯惯导 (Inertial):仅靠初始状态推算,展示无观测修正时的误差累积(漂移)现象。
    • EKF 估计:融合预测与观测,输出平滑且高精度的轨迹。
  • 定量的误差评估
    • 自动计算平均误差 (Mean Error) 和 均方根误差 (RMSE)。
    • 量化展示 EKF 相比于原始观测和纯惯导的性能提升百分比。
  • 丰富的可视化输出
    • 轨迹图:直观展示四种轨迹的几何关系。
    • 误差曲线图:随时间变化的误差波动。
    • 统计柱状图:清晰对比三种方法的整体精度。

运行结果分析

  1. 轨迹图:纯惯导轨迹会随着时间推移逐渐偏离真实轨迹(漂移);雷达原始观测点围绕真实轨迹抖动;而 EKF 轨迹紧密跟随真实目标,且比原始观测更平滑。
  2. 误差曲线:纯惯导的误差呈发散趋势(越来越大),而 EKF 的误差会收敛在一个较小的稳定范围内。
  3. 性能指标:控制台输出将显示 EKF 的 RMSE 显著低于雷达观测噪声和惯导误差。

运行结果

轨迹曲线,同时标注了雷达的位置:

误差曲线对比:

命令行输出的仿真结果:

MATLAB源代码

部分代码如下:

matlab 复制代码
% 雷达测角测距定位-二维-单一雷达,轨迹用EKF,观测为距离和角度
% 作者:matlabfilter
% 2025-11-25/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 = 1;
angle_noise_std = 0.2;

%% EKF 状态模型
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]);

%% 纯惯导
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('开始 EKF 雷达跟踪仿真...\n');

for i = 1:N

    %% ===== 真实目标运动 =====
    target_position = target_position + target_velocity * dt + 0.5 * target_acceleration * dt^2;

完整代码:https://download.csdn.net/download/callmeup/92408480

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

相关推荐
weixin_462446231 小时前
【原创实现】Python 实现 PDF 批量压缩工具(支持逐个确认 / 批量处理 / 多级压缩)
开发语言·python·pdf
沐知全栈开发1 小时前
Bootstrap 轮播教程与最佳实践
开发语言
FAREWELL000751 小时前
Lua学习记录(4) --- Lua中多文件调用 以及 关于位运算符的零碎知识点
开发语言·学习·lua
yaoxin5211231 小时前
256. Java 集合 - 掌握 Java 的 merge () 方法:提升 Map 操作效率与灵活性的关键
java·开发语言
AuroraWanderll1 小时前
深入理解C++多态(三):多态的原理——虚函数表机制(上)
c语言·开发语言·数据结构·c++·算法·stl
lly2024061 小时前
Python Number(数字)
开发语言
阿沁QWQ1 小时前
STL库vector模拟实现
开发语言·c++
未来之窗软件服务1 小时前
操作系统应用(三十二)python版本选择系统—东方仙盟筑基期
开发语言·python·东方仙盟·操作系统应用