资源描述:
《最新扩展Kalman滤波(EKF)和无迹卡尔曼滤波(ukf)PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、扩展Kalman滤波(EKF)和无迹卡尔曼滤波(ukf)一、背景普通卡尔曼滤波是在线性高斯情况下利用最小均方误差准则获得目标的动态估计,适应于过程和测量都属于线性系统,且误差符合高斯分布的系统。但是实际上很多系统都存在一定的非线性,表现在过程方程(状态方程)是非线性的,或者观测与状态之间的关系(测量方程)是非线性的。这种情况下就不能使用一般的卡尔曼滤波了。解决的方法是将非线性关系进行线性近似,将其转化成线性问题。对于非线性问题线性化常用的两大途径:(1)将非线性环节线性化,对高阶项采用忽略或逼近措施;(EKF)(2)用采样方法近
2、似非线性分布.(UKF)二、扩展Kalman滤波(EKF)算法EKF算法是一种近似方法,它将非线性模型在状态估计值附近作泰勒级数展开,并在一阶截断,用得到的一阶近似项作为原状态方程和测量方程近似表达形式,从而实现线性化同时假定线性化后的状态依然服从高斯分布,然后对线性化后的系统采用标准卡尔曼滤波获得状态估计。采用局部线性化技术,能得到问题局部最优解,但它能否收敛于全局最优解,取决于函数的非线性强度以及展开点的选择。二、扩展Kalman滤波(EKF)算法vy=vy+(ky*vy^2-g+day*randn(1))*Ts;X(k,:
3、)=[x,vx,y,vy];endfigure(1),holdoff,plot(X(:,1),X(:,3),'-b'),gridon%figure(2),plot(X(:,2:2:4))%构造量测量mrad=0.001;dr=10;dafa=10*mrad;%量测噪声fork=1:lenr=sqrt(X(k,1)^2+X(k,3)^2)+dr*randn(1,1);a=atan(X(k,1)/X(k,3))+dafa*randn(1,1);Z(k,:)=[r,a];end二、扩展Kalman滤波(EKF)算法figure(1),
4、holdon,plot(Z(:,1).*sin(Z(:,2)),Z(:,1).*cos(Z(:,2)),'*')%ekf滤波Qk=diag([0;dax;0;day])^2;Rk=diag([dr;dafa])^2;Xk=zeros(4,1);Pk=100*eye(4);X_est=X;fork=1:lenFt=JacobianF(X(k,:),kx,ky,g);Hk=JacobianH(X(k,:));fX=fff(X(k,:),kx,ky,g,Ts);hfX=hhh(fX,Ts);[Xk,Pk,Kk]=ekf(eye(4)+
5、Ft*Ts,Qk,fX,Pk,Hk,Rk,Z(k,:)'-hfX);X_est(k,:)=Xk';end二、扩展Kalman滤波(EKF)算法figure(1),plot(X_est(:,1),X_est(:,3),'+r')xlabel('X');ylabel('Y');title('ekfsimulation');legend('real','measurement','ekfestimated');%%%%%%%%%%%%%%%%%%%%子程序%%%%%%%%%%%%%%%%%%%functionF=JacobianF(X
6、,kx,ky,g)%系统状态雅可比函数vx=X(2);vy=X(4);F=zeros(4,4);F(1,F(2,2)=-2*kx*vx;F(3,4)=1;F(4,4)=2*ky*vy;2)=1;二、扩展Kalman滤波(EKF)算法functionH=JacobianH(X)%量测雅可比函数x=X(1);y=X(3);H=zeros(2,4);r=sqrt(x^2+y^2);H(1,1)=1/r;H(1,3)=1/r;xy2=1+(x/y)^2;H(2,1)=1/xy2*1/y;H(2,3)=1/xy2*x*(-1/y^2);f
7、unctionfX=fff(X,kx,ky,g,Ts)%系统状态非线性函数x=X(1);vx=X(2);y=X(3);vy=X(4);x1=x+vx*Ts;vx1=vx+(-kx*vx^2)*Ts;y1=y+vy*Ts;vy1=vy+(ky*vy^2-g)*Ts;fX=[x1;vx1;y1;vy1];二、扩展Kalman滤波(EKF)算法functionhfX=hhh(fX,Ts)%量测非线性函数x=fX(1);y=fX(3);r=sqrt(x^2+y^2);a=atan(x/y);hfX=[r;a];function[Xk,P
8、k,Kk]=ekf(Phikk_1,Qk,fXk_1,Pk_1,Hk,Rk,Zk_hfX)%ekf滤波函数Pkk_1=Phikk_1*Pk_1*Phikk_1'+Qk;Pxz=Pkk_1*Hk';Pzz=Hk*Pxz+Rk;Kk=Pxz*Pzz^-1;Xk=fX