【matlabfilter例程】二维平面的雷达测角+测距目标跟踪,单个雷达,KF融合雷达和IMU数据。轨迹绘图、误差绘图输出。附代码下载链接

原创代码,拒绝AI生成。未经允许,禁止翻卖

文章目录

程序详解

简介

程序模拟了二维场景下单部测角测距雷达对运动目标的实时跟踪,并基于卡尔曼滤波(KF)实现对目标轨迹的融合估计。

目标按"带加速度"的非匀速模型运动,而滤波器采用匀速运动模型,从而体现模型失配与滤波器补偿能力。雷达位于平面固定坐标处,每一帧输出带噪声的距离与方位角测量,程序将其转化为直角坐标作为观测输入。

对比

除了雷达观测和KF融合结果外,代码还加入了"纯惯导(基于匀速假设的推算)"作为对比,用于展示不同方法在长时间跟踪中的误差发散与抑制能力。

结果输出

输出真实轨迹、雷达量测、纯惯导估计及KF结果,并统计平均误差、RMSE以及滤波相对提升幅度。最后给出多种图形,包括轨迹对比、误差曲线及柱状统计图,便于全面评估单雷达定位方案与卡尔曼滤波在噪声环境中的性能差异。

运行结果

轨迹对比:

误差对比曲线:

结果输出:

MATLAB源代码

部分代码如下:

matlab 复制代码
% 雷达测角测距定位-二维-单一雷达,轨迹用KF
% 作者:matlabfilter
% 2025-11-25/Ver1 - 添加雷达观测和纯惯导对比

clear; close all; clc;
rng(0);
%%  系统参数设置
dt = 0.01;                          % 时间步长 (秒)
N = 400;                           % 仿真步数

%%  目标初始状态
target_position = [100; 200];      % 初始位置 [x; y] (米)
target_velocity = [1; 5];         % 初始速度 [vx; vy] (米/秒)
target_acceleration = [0.5; -0.1]; % 加速度来破坏匀速模型 [ax; ay] (米/秒²)
radar_position = [100; 210];  %雷达坐标 m,可调

%% 测量噪声参数
range_noise_std = 1;      % 距离测量噪声标准差 (m)
angle_noise_std = 0.1;   % 角度测量噪声标准差 (rad)

%% 卡尔曼滤波器
% 状态向量: [x, y, vx, vy]'
% 状态转移矩阵 (匀速模型)
F = [1, 0, dt, 0;
    0, 1, 0, dt;
    0, 0, 1, 0;
    0, 0, 0, 1];

% 观测矩阵 (只观测位置)
H = [1, 0, 0, 0;
    0, 1, 0, 0];

% 过程噪声协方差
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 = diag([1,1].^2);

% 初始状态估计
x_est = [target_position; target_velocity];

% 初始协方差矩阵
P = diag([1, 1, 0.5, 0.5]);

%% 纯惯导解算初始化
% 假设初始状态已知(实际中可能来自首次观测)
inertial_position = target_position;
inertial_velocity = target_velocity;


% 平均位置误差柱状图
figure;
bar_data = [mean_error_radar, mean_error_inertial, mean_error_kf];
b = bar(bar_data);
b.FaceColor = 'flat';
b.CData(1,:) = [0 0 0];       % 黑色
b.CData(2,:) = [1 0 1];       % 洋红色
b.CData(3,:) = [0 0 1];       % 蓝色
set(gca, 'XTickLabel', {'雷达观测', '纯惯导', 'KF估计'});
ylabel('平均位置误差 (米)', 'FontSize', 12);
title('平均位置误差对比', 'FontSize', 14, 'FontWeight', 'bold');
grid on;
for i = 1:length(bar_data)
    text(i, bar_data(i)+max(bar_data)*0.05, sprintf('%.2f m', bar_data(i)), ...
        'HorizontalAlignment', 'center', 'FontSize', 11, 'FontWeight', 'bold');
end

% 位置RMSE柱状图
figure;
rmse_data = [rmse_radar, rmse_inertial, rmse_kf];
b = bar(rmse_data);
b.FaceColor = 'flat';
b.CData(1,:) = [0 0 0];       % 黑色
b.CData(2,:) = [1 0 1];       % 洋红色
b.CData(3,:) = [0 0 1];       % 蓝色
set(gca, 'XTickLabel', {'雷达观测', '纯惯导', 'KF估计'});
ylabel('位置RMSE (米)', 'FontSize', 12);
title('位置RMSE对比', 'FontSize', 14, 'FontWeight', 'bold');
grid on;
for i = 1:length(rmse_data)
    text(i, rmse_data(i)+max(rmse_data)*0.05, sprintf('%.2f m', rmse_data(i)), ...
        'HorizontalAlignment', 'center', 'FontSize', 11, 'FontWeight', 'bold');
end

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

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

相关推荐
youcans_6 小时前
【STM32-MBD】(1b)Matlab2025b 安装 STM32 硬件支持包
stm32·单片机·嵌入式硬件·matlab·simulink
feifeigo1238 小时前
基于MATLAB的颜色直方图图像检索实现
开发语言·matlab
太爱学习了8 小时前
FPGA图像处理之:图像畸变矫正原理及matlab与fpga实现
图像处理·matlab·fpga开发
春日见9 小时前
眼在手上外参标定保姆级教学---离线手眼标定(vscode + opencv)
linux·运维·开发语言·人工智能·数码相机·计算机视觉·matlab
Evand J17 小时前
【MATLAB例程】多锚点RSSI定位和基站选择方法,基于GDOP、基站距离等因素。以Wi-Fi定位为例,附下载链接
开发语言·matlab·定位·gdop·rssi
aini_lovee19 小时前
改进遗传算法求解VRP问题时的局部搜索能力
开发语言·算法·matlab
ghie90901 天前
使用MATLAB的k-Wave工具箱进行超声CT成像
开发语言·matlab
yugi9878381 天前
基于M序列的直扩信号扩频码生成方法及周期长码直扩信号的MATLAB实现方案
开发语言·matlab
ytttr8731 天前
matlab进行利用遗传算法对天线阵列进行优化
开发语言·算法·matlab
啊阿狸不会拉杆1 天前
《数字图像处理》第 5 章-图像复原与重建
图像处理·人工智能·算法·matlab·数字图像处理