本帖最后由 华仔zju 于 2017-3-23 16:40 编辑
最近项目上在利用卡尔曼滤波进行模型参数估计,编写的EKF程序运行良好,后来看到论文提及UKF效果会比EKF更好,便想着使用UKF试一试
仿造 https://www.ilovematlab.cn/thread-190623-1-1.html 编写代码,运行之后发现仅在前几步迭代过程中状态会更新,随后状态协方差会变得很小,导致状态量几乎不变化。
以下是简化版的代码,求各位大神指点迷津
% function data=createst(snr)为信号发生函数
% function testukf为主函数
% function statenext=systemfun(statelast)为状态方程,一旦数据采集得到,那么模型中状态量就固定了,此处认为k+1时的状态与k时状态相同
% function y=measurefun(statelast,time)为观测方程
% function [xc,p]=UKFfiter(systemfun,measurefun,xc0,yc,p0,time)为UKF函数
function data=createst(snr)
%函数为s=a*t+b*cos(t)+c*sin(t)+d 根据给定的100个(t,s)点,求取对应的a,b,c,d值
a=0.5; b=20; c=10; d=30;
t=1:100;
for i=1:100
s(1,i)=a*t(1,i)+b*cos(t(1,i))+c*sin(t(1,i))+d;