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

📄 sinsshuju.m

📁 不用太多解释了吧
💻 M
字号:
clc;
clear;
%1.设置各种状态参数 
i=(1:2000)';   %x axis
m1=(1:2000)';  
m2=(1:2000)';  
m3=(1:2000)';  
m4=(1:2000)';  
m5=(1:2000)';  
m6=(1:2000)';  
m7=(1:2000)';  
m8=(1:2000)';  
m9=(1:2000)';  
m10=(1:2000)';  
m11=(1:2000)';  
m12=(1:2000)'; 
m13=(1:2000)';  
m14=(1:2000)';  
m15=(1:2000)';  
m16=(1:2000)';  
m17=(1:2000)';  
m18=(1:2000)'; 
%2.读出数据%单位度/秒
Wie=15*pi/(180*3600);      %地球自传角速率
Plat0=45*pi/180;      %Lat   latitude 纬度
Plon0=120*pi/180;      %Lon    longitude 经度
Ph0=3000;              %H      altitude
A0=3*pi/180;           
A1=5*pi/180;
A2=2000;
B0=5*pi/180; 
B1=5*pi/180; 
B2=5*pi/180; 
w0=2*pi/10;
w1=2*pi/10;
w2=2*pi/10;
w3=2*pi/7200;
Re=6378137; 
f=1/298.257;

Dk_gx=sqrt(0.001*pi/180)*randn(1,2000); %刻度系数误差  误差表现为经度、纬度
Dk_gy=sqrt(0.001*pi/180)*randn(1,2000);
Dk_gz=sqrt(0.001*pi/180)*randn(1,2000);
Eb_x=sqrt(0.1*pi/(3600*180))*randn(1,2000);    %逐次启动漂移  误差表现为经度、纬度
Eb_y=sqrt(0.1*pi/(3600*180))*randn(1,2000);
Eb_z=sqrt(0.1*pi/(3600*180))*randn(1,2000);
Wr_x=sqrt(0.1*pi/(3600*180))*randn(1,2000);    %驱动噪声
Wr_y=sqrt(0.1*pi/(3600*180))*randn(1,2000);  
Wr_z=sqrt(0.1*pi/(3600*180))*randn(1,2000);    
Wg_x=0.01*pi*randn(1,2000)/180;                %白噪声
Wg_y=0.01*pi*randn(1,2000)/180;  
Wg_z=0.01*pi*randn(1,2000)/180; 
Er_xold=0.05*pi/(3600*180);                     %初始方差
Er_yold=0.05*pi/(3600*180);
Er_zold=0.05*pi/(3600*180);
Dk_ax=sqrt(0.001)*randn(1,2000);             %刻度系数误差  误差表现为经度、纬度     随机常数
Dk_ay=sqrt(0.001)*randn(1,2000);     
Dk_az=sqrt(0.001)*randn(1,2000);
Wa_x=0.005*randn(1,2000);                      %驱动噪声
Wa_y=0.005*randn(1,2000);
Wa_z=0.005*randn(1,2000);
Db_xold=0.001;
Db_yold=0.001;
Db_zold=0.001;

E1old=3*pi/(60*180);       %平台角误差东向
E2old=3*pi/(60*180);       %北向
E3old=5*pi/(60*180);       %天向
E4old=0;                   %速度误差东向
E5old=0;                 %北向
E6old=0;                 %天向
E7old=2*pi/(60*180);     %纬度误差
E8old=2*pi/(60*180);     %经度误差
E9old=10;                %高度

for k=0:1999
%%%  轨迹发生器 %%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
%(1)设定姿态角的变化规律为时间的余弦函数(也可根据需要设定为其他函数)    
Sata=B0*cos(w0*(k+1));    %Sata 俯仰角
Gama=B1*cos(w1*(k+1));    %Gama 横滚角
Sai=B2*cos(w2*(k+1));     %Sai  航向角
%(2)姿态角的一阶导数
T_sata=-B0*w0*sin(w0*(k+1)); 
T_gama=-B1*w1*sin(w1*(k+1));
T_sai=-B2*w2*sin(w2*(k+1));
%(3)机体系相对于地理系的转动角速率在机体系中的投影
Wtbx=cos(Gama)*T_sata+sin(Gama)*cos(Sata)*T_sai;
Wtby=T_gama-sin(Sata)*T_sai;
Wtbz=sin(Gama)*T_sata-cos(Gama)*cos(Sata)*T_sai;
%位置(纬度、经度、高度)变化规律为时间的余弦函数,及其一阶、二阶导数
Plat=Plat0+A0*cos(w3*(k+1));
Plon=Plon0+A1*cos(w3*(k+1));
Ph=Ph0+A2*cos(w3*(k+1));

Vlat=-A0*w3*cos(w3*(k+1));
Vlon=-A1*w3*cos(w3*(k+1));
Vh=-A2*w3*cos(w3*(k+1));

Alat=-A0*(w3)^2*cos(w3*(k+1));
Alon=-A1*(w3)^2*cos(w3*(k+1));
Ah=-A2*(w3)^2*cos(w3*(k+1));
%位置在地球直角坐标系的直角坐标值
x=(Re+Ph)*cos(Plat)*cos(Plon);         %单位  米
Vx=Vh*cos(Plat)*cos(Plon)-Vlat*(Re+Ph)*sin(Plat)*cos(Plon)-Vlon*(Re+Ph)*cos(Plat)*sin(Plon);
Ax1=Ah*cos(Plat)*cos(Plon)-Vh*Vlat*sin(Plat)*cos(Plon)-Vh*Vlon*cos(Plat)*sin(Plon);
Ax2=-Alat*(Re+Ph)*sin(Plat)*cos(Plon)-Vh*Vlat*sin(Plat)*cos(Plon)-(Re+Ph)*(Vlat)^2*cos(Plat)*cos(Plon)+(Re+Ph)*Vlat*Vlon*sin(Plat)*sin(Plon);
Ax3=-Alon*(Re+Ph)*cos(Plat)*sin(Plon)-Vh*Vlon*cos(Plat)*sin(Plon)-(Re+Ph)*(Vlon)^2*cos(Plat)*cos(Plon)+(Re+Ph)*Vlat*Vlon*sin(Plat)*sin(Plon);
Ax=Ax1+Ax2+Ax3;

y=(Re+Ph)*cos(Plat)*sin(Plon);
Vy=Vh*cos(Plat)*sin(Plon)-Vlat*(Re+Ph)*sin(Plat)*sin(Plon)+Vlon*(Re+Ph)*cos(Plat)*cos(Plon);
Ay1=Ah*cos(Plat)*sin(Plon)-Vh*Vlat*sin(Plat)*sin(Plon)+Vh*Vlon*cos(Plat)*cos(Plon);
Ay2=-Alat*(Re+Ph)*sin(Plat)*sin(Plon)-Vh*Vlat*sin(Plat)*sin(Plon)-(Re+Ph)*(Vlat)^2*cos(Plat)*sin(Plon)-(Re+Ph)*Vlat*Vlon*sin(Plat)*cos(Plon);
Ay3=Alon*(Re+Ph)*cos(Plat)*cos(Plon)+Vh*Vlon*cos(Plat)*cos(Plon)-(Re+Ph)*(Vlon)^2*cos(Plat)*sin(Plon)-(Re+Ph)*Vlat*Vlon*sin(Plat)*cos(Plon);
Ay=Ay1+Ay2+Ay3;

z=(Re+Ph)*sin(Plat);
Vz=Vh*sin(Plat)+Vlat*(Re+Ph)*cos(Plat);
Az1=Ah*sin(Plat)+Vh*Vlat*cos(Plat);
Az2=Alat*(Re+Ph)*cos(Plat)+Vh*Vlat*cos(Plat)-(Re+Ph)*(Vlat)^2*sin(Plat);
Az=Az1+Az2;
%地球系向地理系的坐标转化矩阵Tr
c11=-sin(Plon);
c12=cos(Plon);
c21=-sin(Plat)*cos(Plon);
c22=-sin(Plat)*sin(Plon);
c23=cos(Plat);
c31=cos(Plat)*cos(Plon);
c32=cos(Plat)*sin(Plon);
c33=sin(Plat);
Tr=[c11 c12 0;c21 c22 c23;c31 c32 c33];
%地理系相对于地球系的速度在地理系中的投影Vet
V=[Vx;Vy;Vz];
Vet=Tr*V;        %Vet=[Vetx;Vety;Vetz]=[Vete;Vetn;Vetu]
%在地球系中的相对于地球加速度在地理系中的投影Ar,
%在地理系中的相对于地球加速度在地理系中的投影At
A=[Ax;Ay;Az];
Ar=Tr*A;    %Ar=[Arx;Ary;Arz]
WV1=(-Vet(1)*Vet(2)*tan(Plat)+Vet(1)*Vet(3))/(Re+Ph);
WV2=(Vet(1)^2*tan(Plat)+Vet(2)*Vet(3))/(Re+Ph);
WV3=(-Vet(1)^2-Vet(2)^2)/(Re+Ph);
WV=[WV1;WV2;WV3];
At=Ar-WV;                  %At={Ate;Atn;Atu}加速度

%%%%陀螺仪误差、加速度误差、比力值计算%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
%陀螺仪误差输出
t11=cos(Gama)*cos(Sai)-sin(Gama)*sin(Sata)*sin(Sai);
t12=cos(Gama)*sin(Sai)+sin(Gama)*sin(Sata)*cos(Sai);
t13=-sin(Gama)*cos(Sata);
t21=-cos(Sata)*sin(Sai);
t22=cos(Sata)*cos(Sai);
t23=sin(Sata);
t31=sin(Gama)*cos(Sai)+cos(Gama)*sin(Sata)*sin(Sai);
t32=sin(Gama)*sin(Sai)-cos(Gama)*sin(Sata)*cos(Sai);
t33=cos(Gama)*cos(Sata);
con_gb=[t11 t12 t13;t21 t22 t23;t31 t32 t33];  %地理系向机体系转化

Er_xnew=exp(-1/300)*Er_xold+Wr_x(k+1);
Er_ynew=exp(-1/300)*Er_yold+Wr_y(k+1);
Er_znew=exp(-1/300)*Er_zold+Wr_z(k+1);
E_x=Eb_x(k+1)+Er_xnew+Dk_gx(k+1)+Wg_x(k+1);   
E_y=Eb_y(k+1)+Er_ynew+Dk_gy(k+1)+Wg_y(k+1);
E_z=Eb_z(k+1)+Er_znew+Dk_gz(k+1)+Wg_z(k+1);
Epls=[E_x;E_y;E_z];
E=con_gb'*Epls;                  %E=[Ee;En;Eu]地理系陀螺仪误差

%加速度误差输出
Db_xnew=exp(-1/300)*Db_xold+Wa_x(k+1);
Db_ynew=exp(-1/300)*Db_yold+Wa_y(k+1);
Db_znew=exp(-1/300)*Db_zold+Wa_z(k+1);
D_x=Db_xnew+Dk_ax(k+1);        
D_y=Db_ynew+Dk_ay(k+1);
D_z=Db_znew+Dk_az(k+1);
Delt=[D_x;D_y;D_z];
D=con_gb'*Delt;                  %D=[De;Dn;Du]地理系加速度误差

%比力输出
g=9.7803+0.051799*sin(Plat)-0.94114*10e-6*Ph;  
Wie_x=0;                %地球相对于惯性系的自传角速度在地理系中的投影Wie
Wie_y=Wie*cos(Plat);
Wie_z=Wie*sin(Plat);
Wet_x=-Vet(2)/(Re+Ph);
Wet_y=-Vet(1)/(Re+Ph);
Wet_z=-Vet(1)*sin(Plat)/((Re+Ph)*cos(Plat));
F_x=At(1)-(2*Wie_z+Wet_z)*Vet(2)+(2*Wie_y+Wet_y)*Vet(3);
F_y=At(2)+(2*Wie_z+Wet_z)*Vet(1)-(2*Wie_x+Wet_x)*Vet(3);
F_z=At(3)-(2*Wie_y+Wet_y)*Vet(1)+(2*Wie_x+Wet_x)*Vet(2)+g;
F_e=F_x+D(1);                                              %地理系的比力
F_n=F_y+D(2);
F_u=F_z+D(3);
%%%%  误差计算  %%%%
%%%%%%%%%%%%%%%%%%%%%%
%代入误差方程计算误差,加上Plat/Plon/Ph可得纬度、经度和高度
Rm=Re*(1-2*f+3*f*(sin(Plat))^2);
Rn=Re*(1+2*f*(sin(Plat))^2);

Ve=Vet(1);
Vn=Vet(2);
Vu=Vet(3);
Ee=E(1);
En=E(2);
Eu=E(3);
De=D(1);
Dn=D(2);
Du=D(3);
Fe=F_e;
Fn=F_n;
Fu=F_u;
%在每一秒中采样5次
a=k;
b=k+1;
M=100;
h=(b-a)/M;
E1=zeros(1,M+1);
E2=zeros(1,M+1);
E3=zeros(1,M+1);
E4=zeros(1,M+1);
E5=zeros(1,M+1);
E6=zeros(1,M+1);
E7=zeros(1,M+1);
E8=zeros(1,M+1);
E9=zeros(1,M+1);
E1(1)=E1old;
E2(1)=E2old;
E3(1)=E3old;
E4(1)=E4old;
E5(1)=E5old;
E6(1)=E6old;
E7(1)=E7old;
E8(1)=E8old;
E9(1)=E9old;


for j=1:M
kE11=feval('fE12',E2(j),E3(j),E5(j),E9(j),Rm,Rn,Plat,Ph,Ve,Vn,Ee);
kE21=feval('fE22',E1(j),E3(j),E4(j),E7(j),E9(j),Rm,Rn,Plat,Ph,Ve,Vn,En);
kE31=feval('fE32',E1(j),E2(j),E4(j),E7(j),E9(j),Rm,Rn,Plat,Ph,Ve,Vn,Eu);
kE41=feval('fE42',E2(j),E3(j),E4(j),E5(j),E6(j),E7(j),Rn,Plat,Ph,Ve,Vn,Vu,De,Fn,Fu);
kE51=feval('fE52',E1(j),E3(j),E4(j),E5(j),E6(j),E7(j),Rm,Rn,Plat,Ph,Ve,Vu,Vn,Dn,Fe,Fu);
kE61=feval('fE62',E1(j),E2(j),E4(j),E5(j),E7(j),E9(j),Rm,Rn,Plat,Ph,Ve,Vn,Du,Fe,Fn,g);
kE71=feval('fE72',E5(j),E9(j),Rm,Ph,Vn);
kE81=feval('fE82',E4(j),E7(j),E9(j),Rn,Plat,Ph,Ve);
kE91=feval('fE92',E6(j));

kE12=feval('fE12',E2(j)+kE21*h/2,E3(j)+kE31*h/2,E5(j)+kE51*h/2,E9(j)+kE91*h/2,Rm,Rn,Plat,Ph,Ve,Vn,Ee);
kE22=feval('fE22',E1(j)+kE11*h/2,E3(j)+kE31*h/2,E4(j)+kE41*h/2,E7(j)+kE71*h/2,E9(j)+kE91*h/2,Rm,Rn,Plat,Ph,Ve,Vn,En);
kE32=feval('fE32',E1(j)+kE11*h/2,E2(j)+kE31*h/2,E4(j)+kE41*h/2,E7(j)+kE71*h/2,E9(j)+kE91*h/2,Rm,Rn,Plat,Ph,Ve,Vn,Eu);
kE42=feval('fE42',E2(j)+kE21*h/2,E3(j)+kE31*h/2,E4(j)+kE41*h/2,E5(j)+kE51*h/2,E6(j)+kE61*h/2,E7(j)+kE71*h/2,Rn,Plat,Ph,Ve,Vn,Vu,De,Fn,Fu);
kE52=feval('fE52',E1(j)+kE11*h/2,E3(j)+kE31*h/2,E4(j)+kE41*h/2,E5(j)+kE51*h/2,E6(j)+kE61*h/2,E7(j)+kE71*h/2,Rm,Rn,Plat,Ph,Ve,Vu,Vn,Dn,Fe,Fu);
kE62=feval('fE62',E1(j)+kE11*h/2,E2(j)+kE21*h/2,E4(j)+kE41*h/2,E5(j)+kE51*h/2,E7(j)+kE71*h/2,E9(j)+kE91*h/2,Rm,Rn,Plat,Ph,Ve,Vn,Du,Fe,Fn,g);
kE72=feval('fE72',E5(j)+kE51*h/2,E9(j)+kE91*h/2,Rm,Ph,Vn);
kE82=feval('fE82',E4(j)+kE41*h/2,E7(j)+kE71*h/2,E9(j)+kE91*h/2,Rn,Plat,Ph,Ve);
kE92=feval('fE92',E6(j)+kE61*h/2);

kE13=feval('fE12',E2(j)+kE22*h/2,E3(j)+kE32*h/2,E5(j)+kE52*h/2,E9(j)+kE92*h/2,Rm,Rn,Plat,Ph,Ve,Vn,Ee);
kE23=feval('fE22',E1(j)+kE12*h/2,E3(j)+kE32*h/2,E4(j)+kE42*h/2,E7(j)+kE72*h/2,E9(j)+kE92*h/2,Rm,Rn,Plat,Ph,Ve,Vn,En);
kE33=feval('fE32',E1(j)+kE12*h/2,E2(j)+kE32*h/2,E4(j)+kE42*h/2,E7(j)+kE72*h/2,E9(j)+kE92*h/2,Rm,Rn,Plat,Ph,Ve,Vn,Eu);
kE43=feval('fE42',E2(j)+kE22*h/2,E3(j)+kE32*h/2,E4(j)+kE42*h/2,E5(j)+kE52*h/2,E6(j)+kE62*h/2,E7(j)+kE72*h/2,Rn,Plat,Ph,Ve,Vn,Vu,De,Fn,Fu);
kE53=feval('fE52',E1(j)+kE12*h/2,E3(j)+kE32*h/2,E4(j)+kE42*h/2,E5(j)+kE52*h/2,E6(j)+kE62*h/2,E7(j)+kE72*h/2,Rm,Rn,Plat,Ph,Ve,Vu,Vn,Dn,Fe,Fu);
kE63=feval('fE62',E1(j)+kE12*h/2,E2(j)+kE22*h/2,E4(j)+kE42*h/2,E5(j)+kE52*h/2,E7(j)+kE72*h/2,E9(j)+kE92*h/2,Rm,Rn,Plat,Ph,Ve,Vn,Du,Fe,Fn,g);
kE73=feval('fE72',E5(j)+kE52*h/2,E9(j)+kE92*h/2,Rm,Ph,Vn);
kE83=feval('fE82',E4(j)+kE42*h/2,E7(j)+kE72*h/2,E9(j)+kE92*h/2,Rn,Plat,Ph,Ve);
kE93=feval('fE92',E6(j)+kE62*h/2);

kE14=feval('fE12',E2(j)+kE23,E3(j)+kE33,E5(j)+kE53,E9(j)+kE93,Rm,Rn,Plat,Ph,Ve,Vn,Ee);
kE24=feval('fE22',E1(j)+kE13,E3(j)+kE33,E4(j)+kE43,E7(j)+kE73,E9(j)+kE93,Rm,Rn,Plat,Ph,Ve,Vn,En);
kE34=feval('fE32',E1(j)+kE13,E2(j)+kE33,E4(j)+kE43,E7(j)+kE73,E9(j)+kE93,Rm,Rn,Plat,Ph,Ve,Vn,Eu);
kE44=feval('fE42',E2(j)+kE23,E3(j)+kE33,E4(j)+kE43,E5(j)+kE53,E6(j)+kE63,E7(j)+kE73,Rn,Plat,Ph,Ve,Vn,Vu,De,Fn,Fu);
kE54=feval('fE52',E1(j)+kE13,E3(j)+kE33,E4(j)+kE43,E5(j)+kE53,E6(j)+kE63,E7(j)+kE73,Rm,Rn,Plat,Ph,Ve,Vu,Vn,Dn,Fe,Fu);
kE64=feval('fE62',E1(j)+kE13,E2(j)+kE23,E4(j)+kE43,E5(j)+kE53,E7(j)+kE73,E9(j)+kE93,Rm,Rn,Plat,Ph,Ve,Vn,Du,Fe,Fn,g);
kE74=feval('fE72',E5(j)+kE53,E9(j)+kE93,Rm,Ph,Vn);
kE84=feval('fE82',E4(j)+kE43,E7(j)+kE73,E9(j)+kE93,Rn,Plat,Ph,Ve);
kE94=feval('fE92',E6(j)+kE63);

E1(j+1)=E1(j)+(kE11+2*kE12+2*kE13+kE14)*h/6;
E2(j+1)=E2(j)+(kE21+2*kE22+2*kE23+kE24)*h/6;
E3(j+1)=E3(j)+(kE31+2*kE32+2*kE33+kE34)*h/6;
E4(j+1)=E4(j)+(kE41+2*kE42+2*kE43+kE44)*h/6;
E5(j+1)=E5(j)+(kE51+2*kE52+2*kE53+kE54)*h/6;
E6(j+1)=E6(j)+(kE61+2*kE62+2*kE63+kE64)*h/6;
E7(j+1)=E7(j)+(kE71+2*kE72+2*kE73+kE74)*h/6;
E8(j+1)=E8(j)+(kE81+2*kE82+2*kE83+kE84)*h/6;
E9(j+1)=E9(j)+(kE91+2*kE92+2*kE93+kE94)*h/6;

end
E1old=E1(6);
E2old=E2(6);
E3old=E3(6);
E4old=E4(6);
E5old=E5(6);
E6old=E6(6);
E7old=E7(6);
E8old=E8(6);
E9old=E9(6);

Er_xold=Er_xnew;
Er_yold=Er_ynew;
Er_zold=Er_znew;
Db_xold=Db_xnew;
Db_yold=Db_ynew;
Db_zold=Db_znew;
%图形输出
i(k+1)=k+1;
m1(k+1)=E1old;        
m2(k+1)=E2old;       
m3(k+1)=E3old;
m4(k+1)=E4old;
m5(k+1)=E5old;       
m6(k+1)=E6old;       
m7(k+1)=E7old;
m8(k+1)=E8old;
m9(k+1)=E9old;  
m10(k+1)=Ee;        
m11(k+1)=En;       
m12(k+1)=Eu;
m13(k+1)=De;
m14(k+1)=Dn;       
m15(k+1)=Du;       
m16(k+1)=Fe;
m17(k+1)=Fn;
m18(k+1)=Fu; 
end
subplot(3,3,1);
plot(i,m1,'r');
xlabel('时间s');
ylabel('rad/s');
title('位置偏差');
subplot(3,3,2);
plot(i,m2,'r');
subplot(3,3,3);
plot(i,m3,'r');
subplot(3,3,4);
plot(i,m4,'r');
subplot(3,3,5);
plot(i,m5,'r');
subplot(3,3,6);
plot(i,m6,'r');
subplot(3,3,7);
plot(i,m7,'r');
subplot(3,3,8);
plot(i,m8,'r');
subplot(3,3,9);
plot(i,m9,'r')

⌨️ 快捷键说明

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