《卡尔曼滤波原理及应用-MATLAB仿真》程序-4.3
2016-11-23 16:11
483 查看
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 扩展Kalman滤波在纯方位目标跟踪中的应用实例 % 详细原理介绍及中文注释请参考: % 《卡尔曼滤波原理及应用-MATLAB仿真》,电子工业出版社,黄小平著。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function EKF_angle clc;clear; T=1; N=40/T; X=zeros(4,N); X(:,1)=[0,2,1400,-10]; Z=zeros(1,N); % 此处有误,请修改为P91页一致即可运行 delta_w=1e-4; Q=delta_w*diag([1,1]) ; G=[T^2/2,0;T,0;0,T^2/2;0,T]; R=0.1*pi/180; F=[1,T,0,0;0,1,0,0;0,0,1,T;0,0,0,1]; x0=0; y0=1000; Xstation=[x0;y0]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% w=sqrtm(R)*randn(1,N); for t=2:N X(:,t)=F*X(:,t-1)+G*sqrtm(Q)*randn(2,1); end for t=1:N Z(t)=hfun(X(:,t),Xstation)+w(t); end Xekf=zeros(4,N); Xekf(:,1)=X(:,1); P0=eye(4); for i=2:N Xn=F*Xekf(:,i-1); P1=F*P0*F'+G*Q*G'; dd=hfun(Xn,Xstation); D=Dist(Xn,Xstation); H=[-(Xn(3,1)-y0)/D,0,(Xn(1,1)-x0)/D,0]; K=P1*H'*inv(H*P1*H'+R); Xekf(:,i)=Xn+K*(Z(:,i)-dd); P0=(eye(4)-K*H)*P1; end for i=1:N Err_KalmanFilter(i)=sqrt(Dist(X(:,i),Xekf(:,i))); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% figure hold on;box on; plot(X(1,:),X(3,:),'-k.'); plot(Xekf(1,:),Xekf(3,:),'-r+'); legend('真实轨迹','EKF轨迹') figure hold on; box on; plot(Err_KalmanFilter,'-ks','MarkerFace','r') figure hold on;box on; plot(Z/pi*180,'-r.','MarkerFace','r'); plot(Z/pi*180+w/pi*180,'-ko','MarkerFace','g'); legend('真实角度','观测角度'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function cita=hfun(X1,X0) if X1(3,1)-X0(2,1)>=0 if X1(1,1)-X0(1,1)>0 cita=atan(abs( (X1(3,1)-X0(2,1))/(X1(1,1)-X0(1,1)) )); elseif X1(1,1)-X0(1,1)==0 cita=pi/2; else cita=pi/2+atan(abs( (X1(3,1)-X0(2,1))/(X1(1,1)-X0(1,1)) )); end else if X1(1,1)-X0(1,1)>0 cita=3*pi/2+atan(abs( (X1(3,1)-X0(2,1))/(X1(1,1)-X0(1,1)) )); elseif X1(1,1)-X0(1,1)==0 cita=3*pi/2; else cita=pi+atan(abs( (X1(3,1)-X0(2,1))/(X1(1,1)-X0(1,1)) )); end end function d=Dist(X1,X2); if length(X2)<=2 d=( (X1(1)-X2(1))^2 + (X1(3)-X2(2))^2 ); else d=( (X1(1)-X2(1))^2 + (X1(3)-X2(3))^2 ); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
结果:
相关文章推荐
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-3.3
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-4.2
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-3.4
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-2.1
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-3.6.1
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-5.1UKF
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-3.1
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-4.1
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-5.3UKF
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-7.1
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-5.2UKF
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-4.4
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-3.5.1
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-3.2
- 《卡尔曼滤波原理及应用-MATLAB仿真》程序-2.2
- 量化中继分析中matlab仿真程序
- Matlab——通信原理小程序
- 图解单片机下载程序电路原理之USB转串口线、CH340、PL2303、MAX232芯片的应用
- Matlab投影仿真及三维曲面重构实现及演示程序
- ubuntu 开机启动 Dr.com Matlab等应用,程序