
使用Sage Husa方法,给EKF添加未知Q和R情况下对QR的自适应,形成 自适应扩展卡尔曼滤波器(Adaptive EKF)。使用一维的状态量和观测量为基准,对比了滤波前、标准EKF和本文的的Sage Husa自适应EKF的误差。
例程介绍
使用Sage Husa方法,给EKF添加未知Q和R情况下对QR的自适应,在滤波迭代时,可以自动迭代、寻找最利于滤波结果的Q和R
程序结构如下:

运行结果
状态对比曲线:

误差对比曲线:

命令行输出的误差统计特性:

MATLAB源代码
部分代码如下:
% 一维非线性状态、非线性观测的Sage Husa自适应EKF例程
% 作者:matlabfilter
% 2025-09-28/Ver1
clear; %清空工作区变量
clc; %清空命令行内容
close all; %关闭所有窗口(主窗口除外)
rng(0); % 设置固定的随机数种子
%% initial
T = 1; %设置采样率
t = T:T:100; %构建时间序列,最后的100是序列总长度
Q_true = 0.1; w = sqrt(Q_true)*randn(size(Q_true,1),length(t)); %系统噪声
R_true = 1; v = sqrt(R_true)*randn(size(R_true,1),length(t)); %观测噪声
P = 1; %状态协方差
P_num = zeros(length(t),size(P,1),size(P,2)); %存放每次迭代的P
P_num(1,:,:) = P; %记录协方差
% Sage-Husa自适应滤波参数
Q = 0.5; %系统噪声协方差初始估计值
R = 0.5; %观测噪声协方差初始估计值
Q_num = zeros(1,length(t)); %存储Q的估计值
R_num = zeros(1,length(t)); %存储R的估计值
Q_num(1) = Q;
R_num(1) = R;
完整代码下载链接:
https://download.youkuaiyun.com/download/callmeup/92050531
或查看付费专栏,有多套完整代码:
https://blog.youkuaiyun.com/callmeup/article/details/152222679?spm=1011.2415.3001.5331
如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者
272

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



