【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

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

相关推荐
for_ever_love__19 分钟前
Objective-C学习 NSSet 和 NSMutableSet 功能详解
开发语言·学习·ios·objective-c
似水明俊德6 小时前
02-C#.Net-反射-面试题
开发语言·面试·职场和发展·c#·.net
软件算法开发7 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
Thera7777 小时前
C++ 高性能时间轮定时器:从单例设计到 Linux timerfd 深度优化
linux·开发语言·c++
炘爚8 小时前
C语言(文件操作)
c语言·开发语言
阿蒙Amon8 小时前
C#常用类库-详解SerialPort
开发语言·c#
凸头8 小时前
CompletableFuture 与 Future 对比与实战示例
java·开发语言
wuqingshun3141598 小时前
线程安全需要保证几个基本特征
java·开发语言·jvm
Moksha2628 小时前
5G、VoNR基本概念
开发语言·5g·php
jzlhll1239 小时前
kotlin Flow first() last()总结
开发语言·前端·kotlin