分析:假设目标的运动方程为x3t1。其过程方程和量测方程分别如下所示:
x(k1)x(k)3Tv(k)z(k)x(k)w(k)
其中,x(k)为描述目标运动的状态;v(k)为运动目标的过程噪声,为Gauss白噪声;w(k)为量测噪声,为Gauss白噪声。
仿真参数设置如下:
取运动目标的运动距离x(k)为状态量,初值的方差为P(0)1;
过程噪声v(k)为强度为0。5的Gauss白噪声,量测噪声为强度为0.5的Gauss白噪声;
通过Kalman滤波的结果如下:
(1)实际值与测量值曲线
(2)实际值与加噪声后的状态值曲线
(3)过程噪声引起的状态值误差曲线
(4)Kalman滤波的误差曲线
(5)实际值与Kalman滤波后的状态值曲线
结果分析:
1.由图(3)和图(4)看出由国产噪声引起的误差与Kalman滤波后的误差基本上式一致的;问题:是否可以认为Klamn滤波对于改善系统估值误差没有帮助???
2.由图(2)和图(5)同样可以得出如1中所述的结论; 问题:是我的变成出现了问题还是什么其他的问题??
备注:MATLAB程序 % 追踪匀速直线运动的目标 % clc; clear; close all; T = 0.05; STime = 10; t = 0:T:STime;
v = 1*(rand(1,STime/T+1)-0.5); w = 1*(rand(1,STime/T+1)-0.5);
% v = wgn(1,STime/T+1,0.5); % 过程噪声 % w = wgn(1,STime/T+1,0.5); % 测量噪声 x = 3*t+1;
% 测量值(包含白噪声) z = x+w; figure;plot(t,x,'--');
xlabel('Time (s)');ylabel('x(t)'); hold on;plot(t,z,'r');hold off; legend('实际值','测量值'); title('实际值与测量值'); % 加了白噪声的实际值 x_n(1) = x(1); for k = 1:STime/T
x_n(k+1) = x_n(k)+3*T+v(k+1); end
figure;plot(t,x,'--',t,x_n,'r');
title('实际值与加噪声的状态值');xlabel('Time (s)');ylabel('x(t)'); legend('实际值','加噪后');
figure;plot(t,x_n-x);title('过程噪声引起的状态值误差');xlabel('Time (s)');ylabel('误差');
PP0 = 1;
F = 1;B = 1;H = 1;Q = var(v);R = var(w); %初始误差状态 Xk(1) = 0; for k=2:STime/T+1 %卡尔曼滤波 P K
= F*(PP0)*F'+B*Q*B'; = P*H'*inv(H*P*H'+R); = (eye(1,1)-K*H)*P; = (PP0+PP0')/2;
PP0 PP0
zk(k-1) = x_n(k-1)-z(k-1); % 误差估计值
Xk(k) = F*Xk(k-1)+K*(zk(k-1)-H*F*Xk(k-1)); end
% 滤波后的误差曲线 figure;plot(t,Xk);
title('滤波后的误差曲线');xlabel('Time (s)');ylabel('误差'); % 滤波后的路线 x_kalman = x+Xk;
figure;plot(t,x,'--',t,x_kalman,'r');xlabel('Time (s)');ylabel('x(t)'); legend('实际值','滤波后');title('实际值与滤波值');
因篇幅问题不能全部显示,请点此查看更多更全内容