• slycen
    了解作者
  • matlab
    开发工具
  • 19.3MB
    文件大小
  • zip
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 15
    下载次数
  • 2018-04-28 17:15
    上传日期
组合惯导和GPS的信号仿真,使用UKF、PF等滤波对信号进行估计
79419109ins-gps.zip
  • IMU.dat
    65.2MB
  • GPS.dat
    7.7MB
  • ins-gps.m
    10.1KB
内容介绍
clc close all clear all format long %% 数据读取 load('IMU.dat'); load('GPS.dat'); f_INSc=IMU(1:end-1,6:8)'; wib_INSc=IMU(1:end-1,3:5)'*pi/180/3600; P_GPS=GPS(2:end,3:5)'; V_GPS=GPS(2:end,6:8)'; n=length(IMU);N=length(GPS);%数据个数 %% 初值设定 L=34.6521606250000*pi/180; %初始纬度 J=109.249623717000*pi/180; %初始经度 h=362.269000000000; %初始高度(m) Wie=7.292115147e-5; %地球自转角速度(rad/s) hangxiang=303.10881*pi/180; %初始航向角 fuyang=0.25516*pi/180; %初始俯仰角 henggun=1.76037*pi/180; %初始横滚角 T=0.01;%采样周期(s) Re=6378245 ; e=1/298.3 ; Vx=0; %初始东向水平速度(m/s) Vy=0.00900000000000000; %初始北向水平速度(m/s) Vz=0.0350000000000000; %初始天向速度(m/s) g0=9.7803267714; gk1=0.00193185138639; gk2=0.00669437999013; W=zeros(3,n-1); %用于记录实时三轴指令角速度 V=zeros(3,n-1); %用于记录实时东北天速度 attitude=zeros(3,n-1); %姿态角 Alt=zeros(3,N-1); pos=zeros(3,N-1); vel=zeros(3,N-1); q=zeros(4,1); %四元数 q(1)=cos(hangxiang/2)*cos(fuyang/2)*cos(henggun/2)-sin(hangxiang/2)*sin(fuyang/2)*sin(henggun/2); q(2)=cos(hangxiang/2)*sin(fuyang/2)*cos(henggun/2)-sin(hangxiang/2)*cos(fuyang/2)*sin(henggun/2); q(3)=cos(hangxiang/2)*cos(fuyang/2)*sin(henggun/2)+sin(hangxiang/2)*sin(fuyang/2)*cos(henggun/2); q(4)=cos(hangxiang/2)*sin(fuyang/2)*sin(henggun/2)+sin(hangxiang/2)*cos(fuyang/2)*cos(henggun/2); PP=zeros(15,N-1); X0=zeros(15,1); P0=eye(15,15); X=zeros(15,N-1); %% 捷联结算 for i=1:N-1 for t=(i-1)*5+1:(i-1)*5+5; Cnb=[q(1)^2+q(2)^2-q(3)^2-q(4)^2 2*(q(2)*q(3)+q(1)*q(4)) 2*(q(2)*q(4)-q(1)*q(3)); 2*(q(2)*q(3)-q(1)*q(4)) q(1)^2-q(2)^2+q(3)^2-q(4)^2 2*(q(3)*q(4)+q(1)*q(2)); 2*(q(2)*q(4)+q(1)*q(3)) 2*(q(3)*q(4)-q(1)*q(2)) q(1)^2-q(2)^2-q(3)^2+q(4)^2;]; g=g0*(1+gk1*sin(L)^2)*(1-2*h/Re)/sqrt(1-gk2*sin(L)^2); ft=Cnb'*f_INSc(:,t)*g; %本体系下的比力转换到导航系 Rxt=(1-e*(sin(L)^2))/Re; Ryt=(1+2*e-3*e*(sin(L)^2))/Re; Dvx=ft(1)+2*Wie*sin(L)*Vy+Vx*Vy*Rxt*tan(L)-(2*Wie*cos(L)+Vx*Rxt)*Vz; %东向加速度 Dvy=ft(2)-2*Wie*sin(L)*Vx-Vx^2*Rxt*tan(L)-Vy*Ryt*Vz; %北向加速度 Dvz=ft(3)+(2*Wie*cos(L)+Vx*Rxt)*Vx+Vy*Ryt*Vy-g; %天向加速度 Vx=Vx+Dvx*T; %东向速度 Vy=Vy+Dvy*T; %北向速度 Vz=Vz+Dvz*T; %北向速度 V(:,t)=[Vx,Vy,Vz]'; %实时速度记录 L=Vy*Ryt*T+L; %地理纬度 J=Vx*Rxt*sec(L)*T+J; %地理经度 h=h+Vz*T; W(1,t)=-Vy*Ryt; %平台三轴指令角速度实时计算 W(2,t)=Wie*cos(L)+Vx*Rxt; W(3,t)=Wie*sin(L)+Vx*Rxt*tan(L); Witb=Cnb*W(:,t); %指令角速度转换到本体系 w=wib_INSc(:,t)-Witb; %本体系相对于导航系的角速度 dst=w*T; %角增量法解四元数微分方程 dst0=norm(dst); Dst=[ 0 -dst(1) -dst(2) -dst(3); dst(1) 0 dst(3) -dst(2); dst(2) -dst(3) 0 dst(1); dst(3) dst(2) -dst(1) 0;]; q=((1-dst0^2/8-dst0^4/348)*eye(4,4)+(.5-dst0^2/48)*Dst)*q; attitude(1,t)=asin(Cnb(2,3)); attitude(2,t)=atan(-Cnb(1,3)/Cnb(3,3)); attitude(3,t)=atan(-Cnb(2,1)/Cnb(2,2)); %% 多值处理 if(abs(Cnb(2,2))<1e-8) %航向角多值处理 if(Cnb(2,1)>0) attitude(3,t)=-pi/2; else attitude(3,t)=pi/2; end else if(Cnb(2,2)>0) if(attitude(3,t)<0) attitude(3,t)=attitude(3,t)+2*pi; end else attitude(3,t)=attitude(3,t)+pi; end end if(abs(Cnb(3,3))<1e-8) %横滚角多值处理 if(Cnb(1,3)>0) attitude(2,t)=-pi/2; else attitude(2,t)=pi/2; end else if(Cnb(3,3)<0) if(attitude(2,t)>0) attitude(2,t)=attitude(2,t)-pi; else attitude(2,t)=attitude(2,t)+pi; end end end end %% 滤波处理 Rn=1/Rxt+h; Rm=1/Ryt+h; Q=diag([(0.1*pi/180/3600)^2,(0.1*pi/180/3600)^2,(0.1*pi/180/3600)^2,(5e-5*g)^2,(5e-5*g)^2,(5e-5*g)^2,0,0,0,0,0,0,0,0,0]); R=diag([(0.01)^2,(0.01)^2,(0.01)^2,(0.1/Rm)^2,(0.1/(Rn*cos(L)))^2,0.15^2]); Fn=[ 0,Wie*sin(L)+Vx*tan(L)/Rn,-(Wie*cos(L)+Vx/Rn),0,-1/Rm,0,0,0,Vy/Rm^2; -(Wie*sin(L)+Vx*tan(L)/Rn),0,-Vy/Rm,1/Rn,0,0,-Wie*sin(L),0,-Vx/Rn^2; Wie*cos(L)+Vx/Rn,Vy/Rm,0,tan(L)/Rn,0,0,(Wie*cos(L)+Vx*(sec(L))^2/Rn),0,-Vx*tan(L)/Rn^2; 0,-ft(3),ft(2),(Vx*tan(L)-Vz)/Rn,(2*Wie*sin(L)+Vx*tan(L)/Rn),-(2*Wie*cos(L)+Vx/Rn),(2*Wie*Vy*cos(L)+Vx*Vy*(sec(L))^2/Rn+2*Wie*Vz*sin(L)),0,(Vx*Vz-Vx*Vy*tan(L))/Rn^2; ft(3),0,-ft(1),-2*(Wie*sin(L)+Vx*tan(L)/Rn),-Vz/Rm,-Vy/Rm,-(2*Wie*cos(L)+Vx*(sec(L))^2/Rn)*Vx,0,(Vy*Vz+Vx*Vx*tan(L))/Rn^2; -ft(2),ft(1),0,2*(Wie*cos(L)+Vx/Rn),2*Vy/Rm,0,-2*Wie*Vx*sin(L),0,-(Vx*Vx+Vy*Vy)/Rn^2; 0,0,0,0,1/Rm,0,0,0,Vy/Rm^2; 0,0,0,sec(L)/Rn,0,0,Vx*sec(L)*tan(L)/Rn,0,-Vx*sec(L)/Rn^2; 0,0,0,0,0,1,0,0,0;]; Fs=[Cnb',zeros(3,3); zeros(3,3),Cnb'; zeros(3,3),zeros(3,3);]; f=[Fn,Fs;zeros(6,15)]; F=eye(15,15)+f*0.05+f^2*0.05^2/2; Z=[Vx,Vy,Vz,L,J,h]'-[V_GPS(:,i);P_GPS(1,i)*pi/180;P_GPS(2,i)*pi/180;P_GPS(3,i);]; H=[zeros(3,3),eye(3,3),zeros(3,9); zeros(3,6),eye(3,3),zeros(3,6);]; X10=F*X0; P10=F*P0*F'+Q; Kk=P10*H'/(H*P10*H'+R); X0=X10+Kk*(Z-H*X10); P0=(eye(15,15)-Kk*H)*P10; Ctn=[ 1 X0(3) -X0(2); -X0(3) 1 X0(1); X0(2) -X0(1) 1 ;]; Cnb = Cnb*Ctn; Vx=Vx-X0(4); Vy=Vy-X0(5); Vz=Vz-X0(6); L=L-X0(7); J=J-X0(8); h=h-X0(9); pos(:,i)=[L*180/pi;J*180/pi;h]; vel(:,i)=[Vx;Vy;Vz]; Alt(1,i)=asin(Cnb(2,3)); Alt(2,i)=atan(-Cnb(1,3)/Cnb(3,3)); Alt(3,i)=atan(-Cnb(2,1)/Cnb(2,2)); if(abs(Cnb(2,2))<1e-8) %航向角多值处理 if(Cnb(2,1)>0) Alt(3,i)=-pi/2; else Alt(3,i)=pi/2; end else if(Cnb(2,2)>0) if(Alt(3,i)<0) Alt(3,i)=Alt(3,i)+2*pi; end else Alt(3,i)=Alt(3,i)+pi; end end if(abs(Cnb(3,3))<1e-8) %横滚角多值处理 if(Cnb(1,3)>0) Alt(2,i)=-pi/2; else Alt(2,i)=pi/2; end else if(Cnb(3,3)<0) if(Alt(2,i)>0) Alt(2,i)=Alt(2,i)-pi; else Alt(2,i)=Alt(2,i)+pi; end end end PP(1,i)=sqrt(P0(1,1)); PP(2,i)=sqrt(P0(2,2)); PP(3,i)=sqrt(P0(3,3)); PP(4,i)=sqrt(P0(4,4)); PP(5,i)=sqrt(P0(5,5)); PP(6,i)=sqrt(P0(6,6)); PP(7,i)=sqrt(P0(7,7)); PP(8,i)=sqrt(P0(8,8)); PP(9,i)=sqrt(P0(9,9)); PP(10,i)=sqrt(P0(10,10)); PP(11,i)=sqrt(P0(11,11));PP(12,i)=sqrt(P0(12,12));PP(13,i)=sqrt(P0(13,13));PP(14,i)=sqrt(P0(14,14));PP(15,i)=sqrt(P0(15,15)); X(:,i)=X0; end %% 绘制图形 t=(1:N-1)*0.05;
评论
    相关推荐
    • UKF.rar
      GPS定位采用UKF滤波方式。包括调用的数据dat文件(选用卫星数据和机动目标运行轨迹数据)和调用的sigma点生成子程序。运行可观察定位误差(位置、速度和加速度)
    • UKF.rar
      GPS卫星定位中滤波算法的实现,采用UKF对机动目标实现定位,可现实定位误差。可参考
    • UKF.rar
      ukf代码 主要是提供北斗卫星是如何实现定位
    • gps.rar
      nonlinear modeling of gps using ukf
    • 5UKF_SVS_Quat.zip
      design of a low cost INS GPS
    • ukf.rar
      ukf例程,供参考编写自己的ukf滤波程序。
    • attitude determination(QEKF,MEKF,UKF).zip
      两种基于四元数的ekf,UKF算法介绍; Quaternion extended Kalman filter - QEKF Multiplicative extended Kalman filter - MEKF
    • 卡尔曼滤波程序 GPS定位仿真
      针对于 卫星接受数据的 卡尔曼滤波定位, 主要是 UKF sage自适应滤波的MATLAB程序 里面有定位的误差图 数据包 定位仿真结果 等
    • 卡尔曼滤波程序 GPS定位仿真
      针对于 卫星接受数据的 卡尔曼滤波定位, 主要是 UKF sage自适应滤波的MATLAB程序 里面有定位的误差图 数据包 定位仿真结果 等
    • SIM800C_MQTT.rar
      使用SIM800C模块,使用MQTT协议,连接中国移动onenet平台,能实现数据的订阅、发布、存储等