【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

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

相关推荐
breeze jiang12 小时前
Next.js App Router 全栈实战:从 SPA 的 SEO 痛点到服务端组件与 Hydration 水合机制
开发语言·javascript·ecmascript
程序员老陆12 小时前
Qt::WidgetAttribute 常用属性详解
开发语言·qt
特立独行的猫a14 小时前
Windows安装Rust环境 Clang替代GCC MinGW环境LLVM工具链(详细教程)
开发语言·windows·rust·mingw·环境搭建·llvm
m0_7202450120 小时前
1543.统计好三元组(简单)
开发语言·算法
叠层归一研究院1 天前
AGI 系统(八):符号范畴嵌入函子 — SymCat ↪ C_M107 严格化
c语言·开发语言·人工智能·算法·transformer·agi
明朝百晓生1 天前
Deep RL learning[2026/8]
开发语言·javascript·人工智能
weixin-a153003083161 天前
python-装饰器
开发语言·python
我的xiaodoujiao1 天前
快速学习Python基础知识详细图文教程17--类型注解和断点调试
开发语言·python·学习·测试工具
youngerwang1 天前
【从“聊天“到“执行“:MATLAB Agentic AI + MCP Server 实战——以 5G NR PDSCH 波形仿真为例】
人工智能·5g·matlab
leoZ2311 天前
AI 辅助开发的五道坎
开发语言·人工智能·视觉检测·bert·php·超分辨率重建·openvino