您的当前位置:首页Kalman滤波追踪匀速运动目标

Kalman滤波追踪匀速运动目标

来源:小侦探旅游网
题目:对一作匀速直线运动的目标进行跟踪,即用Kalman滤波对目标运动状态进行估值

分析:假设目标的运动方程为x3t1。其过程方程和量测方程分别如下所示:

x(k1)x(k)3Tv(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('实际值与滤波值');

因篇幅问题不能全部显示,请点此查看更多更全内容