【MATLAB例程】三维EKF(扩展卡尔曼滤波)、UKF(无迹卡尔曼滤波)、CKF(容积卡尔曼滤波)、PF(粒子滤波)四种滤波方法对比

在这里插入图片描述

完整代码,附下载链接

代码介绍

输出指标

程序对每种方法输出以下统计指标:

  • 均方根误差:反映整体估计精度
  • 平均绝对误差:反映平均偏差水平
  • 最大绝对误差:反映最差时刻误差
  • 标准差:反映误差波动程度
  • 总体误差统计:综合X轴、Y轴和Z轴误差后的整体性能

这些指标配合状态曲线、空间轨迹曲线和误差曲线,可以从数值和图像两个角度比较 EKF、UKF、CKF、PF 的滤波效果。

运行结果

程序运行后将生成以下图像,命令行窗口也会输出误差统计指标。

三维状态估计曲线:

在这里插入图片描述

三维空间轨迹对比图:

在这里插入图片描述

三维状态估计误差曲线:

在这里插入图片描述

总体误差统计柱状图:
在这里插入图片描述

命令行:
在这里插入图片描述

MATLAB源代码

部分代码:

% 三维 EKF、UKF、CKF、PF 四种滤波方法对比
% 直接运行本文件即可生成中文状态曲线、中文轨迹曲线、中文误差曲线、中文误差统计柱状图和中文命令行输出。
% 作者:matlabfilter(微信),可接导航和滤波的定制与讲解
% 2024-06-29/Ver1
% 2025-07-28/Ver2:优化误差显示图像
% 2026-07-08/Ver3:优化显示
clear; clc; close all;
rng(0);

%% 参数设置
scene_name = '三维非线性状态估计';
main_file = 'EKFUKFCKFPF_3D.m';
script_dir = fileparts(mfilename('fullpath'));
if isempty(script_dir)
    script_dir = pwd;
end

state_dim = 3;                  % 状态维度
step_count = 300;               % 仿真步数
t = 1:step_count;               % 时间序列
Q = 0.40^2 * eye(state_dim);    % 过程噪声协方差
R = 1.00^2 * eye(state_dim);    % 测量噪声协方差
particle_count = 400;           % 粒子滤波粒子数量

x0 = [0; 1; -1];                % 初始真实状态
x0_est = x0 + [0.8; -0.4; 0.5]; % 初始估计状态
P0 = 2 * eye(state_dim);        % 初始估计协方差

%% 生成真实状态、未滤波状态和测量值
X_true = zeros(state_dim, step_count);
X_raw = zeros(state_dim, step_count);
Z = zeros(state_dim, step_count);
chol_Q = chol(Q, 'lower');
chol_R = chol(R, 'lower');

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

直接在 MATLAB 中运行,即可复现实验结果。

如需帮助,或有导航、定位滤波相关的代码定制需求,可从个人主页左侧联系我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值