⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 insandgps.m

📁 捷联惯导GPS组合导航Kalman滤波器
💻 M
字号:
%%%%%%%%%%%%%%%%%捷联惯导GPS组合导航Kalman滤波器%%%%%%%%%%%%%%%%
clc;
clear;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Wie=7.292115e-5;                 %地球自转角速
e=1/298.257;                     %地球扁律
Re=6378137;                      %地球半径
STEP=0.1;                        %惯导解算周期
G0=9.7803;                       %重力加速度初值
arc=pi/180;                      %角度转换
T=0.3;                           %滤波周期,单位秒
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
load y_Ishuju;
load y_Gshuju;


S_dat_I=y_I;
S_dat_G=y_G;
%%%%%%%%%%%%%%%%%%%%数据加载%%%%%%%%%%%%%%%%%%%%%%%%%%%

I=eye(13);

A=zeros(13);

X00=zeros(13,1);

X00(1,1)=(10/60)*arc;
X00(2,1)=(10/60)*arc;
X00(3,1)=(10/60)*arc;
X00(4,1)=10;
X00(5,1)=10;
X00(6,1)=(4/60)*arc;
X00(7,1)=(4/60)*arc;
X00(8,1)=(0.5/3600)*arc;
X00(9,1)=(0.5/3600)*arc;
X00(10,1)=(0.5/3600)*arc;
X00(11,1)=(1e-4)*9.81;
X00(12,1)=(1e-4)*9.81;
X00(13,1)=(1e-4)*9.81;

P00=zeros(13);                                             %Klman滤波中估计误差方差阵初值

P00(1,1)=((10/60)*arc)*((10/60)*arc);
P00(2,2)=((10/60)*arc)*((10/60)*arc);
P00(3,3)=((10/60)*arc)*((10/60)*arc);
P00(4,4)=10*10;
P00(5,5)=10*10;
P00(6,6)=((4/60)*arc)*((4/60)*arc);
P00(7,7)=((4/60)*arc)*((4/60)*arc);
P00(8,8)=((0.5/3600)*arc)*((0.5/3600)*arc);
P00(9,9)=((0.5/3600)*arc)*((0.5/3600)*arc);
P00(10,10)=((0.5/3600)*arc)*((0.5/3600)*arc);
P00(11,11)=((1e-4)*9.81)*((1e-4)*9.81);
P00(12,12)=((1e-4)*9.81)*((1e-4)*9.81);
P00(13,13)=((1e-4)*9.81)*((1e-4)*9.81);

Q0=zeros(13);                                              %Klman滤波中过程噪声方差阵初值

Q0(1,1)=((1/3)*((0.5/3600)*arc))*((1/3)*((0.5/3600)*arc));
Q0(2,2)=((1/3)*((0.5/3600)*arc))*((1/3)*((0.5/3600)*arc));
Q0(3,3)=((1/3)*((0.5/3600)*arc))*((1/3)*((0.5/3600)*arc));
Q0(4,4)=((1/3)*(1e-4)*9.81)*((1/3)*(1e-4)*9.81);
Q0(5,5)=((1/3)*(1e-4)*9.81)*((1/3)*(1e-4)*9.81);

R1=zeros(4);                                               %Klman滤波中观测噪声方差阵初值

R1(1,1)=(0.3)^2;                                          
R1(2,2)=(0.3)^2;

R1(3,3)=(5/Re)^2;
R1(4,4)=(5/Re)^2;

H1=zeros(4,13);                                            %Klman滤波中观测阵初值

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%滤波开始%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mmm=round(T/STEP);

for j=0:1:length(S_dat_I)/mmm-2
    
    Sum=0;
    
    for DRDER=(j*mmm+1):1:(j+1)*mmm
        
        vx_G=S_dat_G(DRDER,1);
        vy_G=S_dat_G(DRDER,2);
        vz_G=S_dat_G(DRDER,3);
        
        jd_G=S_dat_G(DRDER,4);
        wd_G=S_dat_G(DRDER,5);
        
        Vx_I=S_dat_I(DRDER,1);
        Vy_I=S_dat_I(DRDER,2);
        Vz_I=S_dat_I(DRDER,3);      
        
        Q=S_dat_I(DRDER,4);
        R=S_dat_I(DRDER,5);
        W=S_dat_I(DRDER,6);
    
        JD=S_dat_I(DRDER,7);
        WD=S_dat_I(DRDER,8);
        H=S_dat_I(DRDER,9);
    
        fx_n=S_dat_I(DRDER,10);
        fy_n=S_dat_I(DRDER,11);
        fz_n=S_dat_I(DRDER,12);
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
        q000=cos(Q/2)*cos(R/2)*cos(W/2)-sin(Q/2)*sin(R/2)*sin(W/2);           %惯导四元数初值
        q100=sin(Q/2)*cos(R/2)*cos(W/2)-cos(Q/2)*sin(R/2)*sin(W/2);
        q200=cos(Q/2)*cos(R/2)*sin(W/2)+sin(Q/2)*sin(R/2)*cos(W/2);
        q300=cos(Q/2)*sin(R/2)*cos(W/2)+sin(Q/2)*cos(R/2)*sin(W/2);

        Four_n(1)=q000/sqrt(q000*q000+q100*q100+q200*q200+q300*q300);
        Four_n(2)=q100/sqrt(q000*q000+q100*q100+q200*q200+q300*q300);
        Four_n(3)=q200/sqrt(q000*q000+q100*q100+q200*q200+q300*q300);
        Four_n(4)=q300/sqrt(q000*q000+q100*q100+q200*q200+q300*q300);
    
        Nq0=Four_n(1);
        Nq1=Four_n(2);
        Nq2=Four_n(3);
        Nq3=Four_n(4);
    
        Cb_n(1,1)=1-2*(Nq2*Nq2+Nq3*Nq3);
        Cb_n(1,2)=2*(Nq1*Nq2-Nq0*Nq3);
        Cb_n(1,3)=2*(Nq1*Nq3+Nq0*Nq2);
    
        Cb_n(2,1)=2*(Nq1*Nq2+Nq0*Nq3);
        Cb_n(2,2)=1-2*(Nq1*Nq1+Nq3*Nq3);
        Cb_n(2,3)=2*(Nq2*Nq3-Nq0*Nq1);
    
        Cb_n(3,1)=2*(Nq1*Nq3-Nq0*Nq2);
        Cb_n(3,2)=2*(Nq1*Nq3+Nq0*Nq1);
        Cb_n(3,3)=1-2*(Nq1*Nq1+Nq2*Nq2);
    
        Cn_b=Cb_n';
       
        %
    
        Rm=Re/(1+2*e-3*e*sin(WD)*sin(WD));
        Rn=Re/(1-e*sin(WD)*sin(WD));
       
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
        A(1,2)=Wie*sin(WD)+Vx_I*tan(WD)/(Rn+H);
        A(1,3)=-(Wie*cos(WD)+Vx_I/(Rn+H));
        A(1,5)=-1/(Rn+H);
        A(1,8)=Cb_n(1,1);
        A(1,9)=Cb_n(1,2);
        A(1,10)=Cb_n(1,3);
    
        A(2,1)=-(Wie*sin(WD)+Vx_I*tan(WD)/(Rn+H));
        A(2,3)=-Vy_I/(Rm+H);
        A(2,4)=1/(Rn+H);
        A(2,6)=-Wie*sin(WD);
        A(2,8)=Cb_n(2,1);
        A(2,9)=Cb_n(2,2);
        A(2,10)=Cb_n(2,3);
    
        A(3,1)=Wie*cos(WD)+Vx_I/(Rn+H);
        A(3,2)=Vy_I/(Rm+H);
        A(3,4)=tan(WD)/(Rn+H);
        A(3,6)=Wie*cos(WD)+Vx_I/((Rn+H)*cos(WD)*cos(WD));
        A(3,8)=Cb_n(3,1);
        A(3,9)=Cb_n(3,2);
        A(3,10)=Cb_n(3,3);
    
        A(4,2)=-fz_n;
        A(4,3)=fy_n;
        A(4,4)=Vy_I*tan(WD)/(Rm+H)-Vz_I/(Rm+H);
        A(4,5)=Vx_I*tan(WD)/(Rn+H)+2*Wie*sin(WD);
        A(4,6)=2*Wie*Vy_I*cos(WD)+Vx_I*Vy_I/((Rn+H)*cos(WD)*cos(WD))+2*Wie*Vz_I*sin(WD);
        A(4,11)=Cb_n(1,1);
        A(4,12)=Cb_n(1,2);
        A(4,13)=Cb_n(1,3);
    
        A(5,1)=fz_n;
        A(5,3)=-fx_n;
        A(5,4)=-2*(Vx_I*tan(WD)/(Rn+H)+Wie*sin(WD));
        A(5,5)=-Vz_I/(Rm+H);
        A(5,6)=-(2*Wie*cos(WD)+Vx_I/((Rn+H)*cos(WD)*cos(WD)))*Vx_I;
        A(5,11)=Cb_n(2,1);
        A(5,12)=Cb_n(2,2);
        A(5,13)=Cb_n(2,3);
    
        A(6,5)=1/(Rm+H);
    
        A(7,4)=1/((Rn+H)*cos(WD));
        A(7,6)=Vx_I*tan(WD)/((Rn+H)*cos(WD));
        
        Sum=Sum+A;
        
    end
    
    %%%%%%%%%%%%%%%%%%%%%%%构造H矩阵%%%%%%%%%%%%%%%%%%%%%%
    H1(1,4)=1;
    H1(2,5)=1;
    H1(3,7)=1;
    H1(4,6)=1;
    
    %
    Z1=zeros(4,1);
    
    Z1(1,1)=S_dat_I((j+1)*mmm+1,1)-S_dat_G((j+1)*mmm+1,1);
    
    Z1(2,1)=S_dat_I((j+1)*mmm+1,2)-S_dat_G((j+1)*mmm+1,2);
    
    Z1(3,1)=S_dat_I((j+1)*mmm+1,7)-S_dat_G((j+1)*mmm+1,4);
    
    Z1(4,1)=S_dat_I((j+1)*mmm+1,8)-S_dat_G((j+1)*mmm+1,5);


   
%%%%%%%%%%%%%%%%%%%%%%Standard Kalman Filter%%%%%%%%%%%%%%%%%%%%%%%%
    
    Fai10=I+STEP*Sum;
    
    X10=Fai10*X00;
    
    P10=Fai10*P00*Fai10'+Q0;
    
    K1=P10*H1'*inv(H1*P10*H1'+R1);
    
    X11=X10+K1*(Z1-H1*X10);
    
    P11=(I-K1*H1)*P10;
    %
    
    XX(j+1,:)=X11';
    
    %
    
    Q1=(Q0+Fai10*Q0*Fai10')*T/2;
    
    Q0=Q1;
    
    X00=X11;
    P00=P11;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end


figure(1)
subplot(311)
plot(XX(:,1)/arc*60,'r');
title ('姿态失准角估计')
xlabel('t/s');
ylabel('\phix,角分');
grid on
%

subplot(312)
plot(XX(:,2)/arc*60,'r');
xlabel('t/s');
ylabel('\phiy,角分');
grid on
%
subplot(313)
plot(XX(:,3)/arc*60,'r');
xlabel('t/s');
ylabel('\phiz,角分');
grid on
%
figure(2)
subplot(311)
plot(XX(:,4),'r');
title ('速度误差估计')
xlabel('t/s');
ylabel('\DeltaVx,m/s');
grid on
%
subplot(312)
plot(XX(:,5),'r');
xlabel('t/s');
ylabel('\DeltaVy,m/s');
grid on
%
figure(3)
subplot(311)
plot(XX(:,6)/arc*60,'r');
title ('位置误差估计')
xlabel('t/s');
ylabel('\DeltaL,角分');
grid on
%
subplot(312)
plot(XX(:,7)/arc*60,'r');
xlabel('t/s');
ylabel('\Delta\lambda,角分');
grid on

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -