卡尔曼在目标跟踪的应用与仿真(8页).doc
-卡尔曼在目标跟踪的应用与仿真-第 8 页卡尔曼滤波在目标跟踪应用仿真研究一、背景 随着现代航空航天技术的飞速发展,各种飞行器航行速度和机动性越来越来高,在此背景下,如何提高对高速高机动目标的跟踪性能成为现代雷达防空中一个越来越重要的问题,因此迫切需要研究性能更为优越的跟踪波方法。虽然现在已有不少目标跟踪算法,但专门针对高速高机动目标跟踪的研究还不多,本文主要基于卡尔曼滤波算法来实现对机动目标的跟踪。二、机动目标跟踪的基本内容 目标跟踪基本上包括量测数据形成与处理、机动目标建模、机动检测与机动辨识、滤波与预测、跟踪坐标系的选取、跟踪门规则、数据关联、航迹起始与终止等内容。 本文主要研究对机动目标进行建模,当目标发现机动时,通过检测新信息对目标进行检测,并对目标利用卡尔曼滤波进行滤波与预测三、卡尔曼滤波理论卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。1957年于哥伦比亚大学获得博士学位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文A New Approach to Linear Filtering and Prediction Problems(线性滤波与预测问题的新方法)。简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。3.1卡尔曼滤波器算法在这一部分,我们描述源于Dr Kalman 的卡尔曼滤波器。下面的描述,会涉及一些基本的概念知识,包括概率(Probability),随即变量(Random Variable),高斯或正态分配(Gaussian Distribution)还有State-space Model等等。但对于卡尔曼滤波器的详细证明,这里不能一一描述。首先,我们先要引入一个离散控制过程的系统。该系统可用一个线性随机微分方程(Linear Stochastic Difference equation)来描述:X(k)=A X(k-1)+B U(k)+W(k) 再加上系统的测量值:Z(k)=H X(k)+V(k) 上两式子中,X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。Z(k)是k时刻的测量值,H 是测量系统的参数,对于多测量系统,H为矩阵。W(k)和V(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声(White Gaussian Noise),他们的covariance 分别是Q,R(这里我们假设他们不随系统状态变化而变化)。对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。下面我们来用他们结合他们的covariances 来估算系统的最优化输出(类似上一节那个温度的例子)。首先我们要利用系统的过程模型,来预测下一状态的系统。假设现在的系统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态:X(k|k-1)=A X(k-1|k-1)+B U(k) . (1)式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的covariance还没更新。我们用P表示covariance:P(k|k-1)=A P(k-1|k-1) A+Q (2)式 (2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的 covariance,A表示A的转置矩阵,Q是系统过程的covariance。式子1,2就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1) (3)其中Kg为卡尔曼增益(Kalman Gain):Kg(k)= P(k|k-1) H / (H P(k|k-1) H + R) (4)到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。但是为了要另卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的covariance:P(k|k)=(I-Kg(k) H)P(k|k-1) (5)其中I 为1的矩阵,对于单模型单测量,I=1。当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。这样,算法就可以自回归的运算下去。卡尔曼滤波器的原理基本描述了,式子1,2,3,4和5就是他的5 个基本公式。根据这5个公式,可以很容易的实现计算机的程序。四、卡尔曼滤波在目标跟踪应用举例我们假设有一二坐标雷达对一平面上运动的目标进行观测,目标在t=0-600秒沿x轴作恒速直线运动,运动速度为15米/秒,目标的起始点为(-10000米,2000米)。雷达扫描周期T=2秒,x和y独立地进行观测,观测噪声标准差均为100米。要求滤波误差标准差的方差压缩系数为0.5。4.1算法分析跟踪滤波的目的是根据已经获得的目标观测数据对目标的状态进行精确的估计。在二维平面内当目标做匀速运动时,我们可以建立在笛卡尔坐标系下的目标离散运动模型和观测模型为:X(k+1)=QX(k)+TW(k) (4-1)Z(k)=C(k)X(k)+V(k) (4-2)本文只考虑匀速直线运动,所以我们只建立匀速直线运动模型。4.2 建立模型当目标做匀速直线运动,取状态变量为: (4-3)状态方程为: (4-4)观测方程为: (4-5)其中:对目标位置和速度的最佳滤波和最佳预测如下:预测: (4-6)预测误差协方差: (4-7)卡尔曼增益: (4-8)滤波: (4-9) 滤波协方差为: (4-10) 其中:实际上我们常常无法得知目标的初始状态,这时我们可以利用前几个测量值建立状态的起始估计。现在我们用两点起始法:滤波误差均值: 滤波误差标准差:4.3仿真分析我们已经把卡尔曼滤波的算法叙述的很清楚,由4-6到4-10的5个公式就很容易实现卡尔曼滤波算法。在计算机仿真中,我们采用Matlab编写程序,利用蒙特卡洛的方法对跟踪滤波器进行仿真分析,次数为1000次。以下给出仿真图和结果分析。图4-1图4-1是目标的真实轨迹和测量轨迹,测量轨迹是真实轨迹数据添加方差和均值固定的随机测量噪声得到的,目标沿y=2000米做匀速直线运动。给出的测量轨迹用于滤波后与滤波轨迹作比较分析。从图中可以看出,测量轨迹围绕真实轨迹作上下浮动。图4-2图4-2是滤波轨迹和滤波均值轨迹。从图中可以看出,滤波开始时误差较大,但是随着时间的推移,滤波误差降低,估计值逐步逼近真实轨迹。采用蒙特卡洛方法,多次观测取均值,滤波更为接近真实曲线。图4-3图4-3是y方向滤波估计误差均值及误差标准差。滤波开始时误差较大,随着采样点的增加,误差逐渐减小,误差的标准差也具有同样的特性。达到了滤波误差标准差的方差压缩系数为0.5的要求。图4-4图4-4是x方向滤波估计误差均值及误差标准差。与y方向的估计误差均值相比,x方向的估计误差均值波动较大,这是由于在x方向上有速度分量的缘故,同时其方向上滤波估计误差也有一定波动。也达到了其压缩系数为0.5的要求。图4-5X方向速度估计曲线见图4-5。单次滤波速度与实际值有差距,但是1000次滤波取均值后速度滤波已经于实际值,但是滤波开始时仍有很大偏差,这随着采样点的增加,误差逐渐减小。五 结论本章重点介绍了卡尔曼滤波在目标跟踪的算法,对卡尔曼算法,详细介绍了算法的流程并简单举例介绍了其在目标跟踪的应用,仿真结果表明的了卡尔曼在目标跟踪中是很有效的,对目标的跟踪性能很好,跟踪误差较小。clear all;clc;%=·ÂÕ泡¾°=sigma=10000;T=2;t=300;Vx=15;H=1 0 0;0 1 0;Q=1 0 0;0 1 T;0 0 1;eXk(:,t)=0 0 0'eXz(:,t)=0 0 0'eeXz(:,t)=0 0'N=10;%ÃÉÌØ¿¨Âå´ÎÊýfor i=1:N for j=1:t Zk(:,j)=2000+wgn(1,1,40);-10000+Vx*T*(j-1)+wgn(1,1,40); end for j=1:300 if j=1 Xk(:,1)=Zk(1,1),Zk(2,1),0'Xk1(:,1)=Xk(:,1); Xk(:,2)=Zk(1,2),Zk(2,2),(Zk(2,2)-Zk(2,1)/T'Xk1(:,2)=Xk(:,2); Pk=sigma,0,0;0,sigma,sigma/T;0,sigma/T,2*sigma/T; else if j>2 Xk1(:,j)=Q*Xk(:,j-1);%Ô¤²â Pk1=Q*Pk*Q'%Ô¤²âÎó²îз½²î Kk=Pk1*H'*inv(H*Pk1*H'+sigma*eye(2);%kalmanÔöÒæ Xk(:,j)=Xk1(:,j)+Kk*(Zk(:,j)-H*Xk1(:,j);%Â˲¨ Pk=(eye(3)-Kk*H)*Pk1;%Â˲¨Ð·½²î end end %1000´ÎÇóƽ¾ù eXk(:,j)=eXk(:,j)+Xk(:,j)/N;%Â˲¨ eXz(:,j)=eXz(:,j)+(2000;-10000+Vx*(j-1)*T;0-Xk(:,j)/N;%Â˲¨Îó²î¾ùÖµ eeXz(:,j)=eeXz(:,j)+(2000-Xk(1,j)2;(-10000+Vx*(j-1)*T-Xk(2,j)2/N;%Â˲¨Îó²î±ê×¼²î endend%=»æͼ=%Õæʵ¹ì¼£ºÍ²âÁ¿¹ì¼£subplot(2,1,1);j=0:0.1:t;plot(-10000+Vx*(j-1)*T,2000);title('Ä¿±êÕæʵ¹ì¼£');xlabel('X(Ã×)');ylabel('Y(Ã×)');subplot(2,1,2);plot(Zk(2,:),Zk(1,:);title('²âÁ¿¹ì¼£');xlabel('X(Ã×)');ylabel('Y(Ã×)');%Â˲¨µ¥´Î·ÂÕæºÍÃÉÌØ¿¨Âå·ÂÕæfigure;% subplot(2,1,1);plot(Xk(2,:),Xk(1,:),'g');title('µ¥´ÎÂ˲¨Êý¾ÝÇúÏß');xlabel('X(Ã×)');ylabel('Y(Ã×)');hold on% subplot(2,1,2);plot(eXk(2,:),eXk(1,:);title('1000´ÎÂ˲¨Êý¾ÝÇúÏß');xlabel('X(Ã×)');ylabel('Y(Ã×)');j=1:t;figure;subplot(211);plot(j,eXz(2,:);title('XÂ˲¨Îó²î¾ùÖµÇúÏß');xlabel('²ÉÑù´ÎÊý');ylabel('Y(Ã×)');subplot(212);for j=1:t eeXz(1,j)=sqrt(eeXz(1,j)-eXz(1,j)2); eeXz(2,j)=sqrt(eeXz(2,j)-eXz(2,j)2);endj=1:t;plot(j,eeXz(2,:);title('xÂ˲¨Îó²î±ê×¼²îÇúÏß');xlabel('²ÉÑù´ÎÊý');ylabel('Y(Ã×)');figure;subplot(211);plot(j,eXz(1,:);title('yÂ˲¨Îó²î¾ùÖµÇúÏß');xlabel('²ÉÑù´ÎÊý');ylabel('Y(Ã×)');subplot(212);plot(j,eeXz(1,:);title('yÂ˲¨Îó²î±ê×¼²îÇúÏß');xlabel('²ÉÑù´ÎÊý');ylabel('Y(Ã×)');figure;subplot(211);plot(j,Xk(3,:);title('µ¥´ÎÂ˲¨ËٶȹÀ¼Æ');subplot(212);plot(j,eXk(3,:);title('1000´ÎÂ˲¨ËٶȹÀ¼Æ');xlabel('²ÉÑù´ÎÊý');ylabel('Y(Ã×)');