【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

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

相关推荐
Scott9999HH6 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社7 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海7 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖8 小时前
JDK 26 新特性详解
java·开发语言
马优晨9 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区10 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大11 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai11 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜11 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa11 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio