
完整代码,附下载链接
代码介绍
输出指标
程序对每种方法输出以下统计指标:
- 均方根误差:反映整体估计精度
- 平均绝对误差:反映平均偏差水平
- 最大绝对误差:反映最差时刻误差
- 标准差:反映误差波动程度
- 总体误差统计:综合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 中运行,即可复现实验结果。
如需帮助,或有导航、定位滤波相关的代码定制需求,可从个人主页左侧联系我
192

被折叠的 条评论
为什么被折叠?



