![]() |
求助 关于卡尔曼滤波的matlab仿真
:( 我编好了一个仿真程序,能运行,可是结果不对。因为我仿真的是一个匀速运动的卡尔曼滤波。但是仿真出来后速度确实斜线上升的。不知道是什么原因,而且协方差pk不是收敛的,求高手解答!
%卡尔曼滤波仿真 clear; clc; A=eye(4); T=0.5; A(5)=T; A(15)=T; %转移矩阵 xe=0,ve=5,xn=0,vn=5; X0=[xe;ve;xn;vn];%状态变量 X=[X0 zeros(4,99)]; H=[0 T*ve/sqrt(ve^2+vn^2) 0 T*vn/sqrt(ve^2+vn^2);0 vn/(vn^2+ve^2) 0 -ve/(vn^2+ve^2)]; P=[10 0 0 0;0 1 0 0;0 0 10 0;0 0 0 1];%初始的协方差 Q=[0.5 0 0 0;0 0.5 0 0;0 0 0.5 0;0 0 0 0.5]; R=[0.5 0;0 0.5]; Z=zeros(2,99); for n=1:99 if n==1 Z(:,1)=[5*sqrt(2)*0.5+wgn(1,1,1);pi/4+0.01*wgn(1,1,1)]; X(:,1)=[Z(1,1)*sin(Z(2,1));5;Z(1,1)*cos(Z(2,1));5] else n>1 t=n*T; Z(:,n)=[5*(2^0.5)*t+wgn(1,1,1);pi/4+0.01*wgn(1,1,1)]%观测信息 X2(:,n)=A*X(:,n-1);%求先验估计 P2=A*P*A'+Q;%求先验估计协方差 K=P2*H'*inv(H*P2*H'+R);%求最佳增益 X(:,n)=X2(:,n)+K*(Z(:,n)-H*X2(:,n));%求估计值 P=(eye(4)-K*H)*P2%求协方差 end end figure(1); t=0.5:0.5:50; plot(t,X(1,:),'r+');xlabel('时间:s');ylabel('xe:m');grid on;title('xe的滤波后轨迹'); figure(2); plot(t,X(3,:),'r*');xlabel('时间:s');ylabel('ye:m');grid on ;title('ye的滤波后轨迹'); figure(3); n=1:99; plot(n,Z(1,n).*cos(Z(2,n)),'b*');title('ye的滤波前轨迹'); |
回复: 求助 关于卡尔曼滤波的matlab仿真
怎么没有高手帮忙看下呢???
|
所有时间均为北京时间。现在的时间是 12:29。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.