16参数卫星轨道位置计算(基于Matlab)

一、代码实现

clear,clc;

fid=fopen('d:/Users/HP/Desktop/cccc/xyz.txt','r');

for i = 1:25
    tline = fgetl(fid);
end

%按行读取星历文件的每一个元素
data=textscan(fid,'%f %f %f %f %f %f %f %f %f %f\n','HeaderLines',1);
B1=cell2mat(data);
data=textscan(fid,'%f %f %f %f\n','HeaderLines',1);
B2=cell2mat(data);
data=textscan(fid,'%f %f %f %f\n','HeaderLines',1);
B3=cell2mat(data);
data=textscan(fid,'%f %f %f %f\n','HeaderLines',1);
B4=cell2mat(data);
data=textscan(fid,'%f %f %f %f\n','HeaderLines',1);
B5=cell2mat(data);
data=textscan(fid,'%f %f %f %f\n','HeaderLines',1);
B6=cell2mat(data);
data=textscan(fid,'%f %f %f %f\n','HeaderLines',1);
B7=cell2mat(data);
data=textscan(fid,'%f\n','HeaderLines',1);
B8=cell2mat(data);

%定义常量GM,Ve
GM=3.986004e14;
We=7.2921151467e-5;

%求出轨道长半轴a
sqrta=B3(4);
a=sqrta^2;
e=B3(2);

%求出平均角速度n0
n0=sqrt(GM/(a^3));



XYZ=[];

%计算从2004年1月30日16:00开始,每隔1分钟的卫星坐标
%计算从2023年6月1日0:00开始,每隔1分钟的卫星坐标
for i=0:1:20
%     计算当前时刻的儒略日
%     JulianDay=fix(365.25*(2023-1))+fix(30.6001*(6+13))+1+(0+i/60+0/3600)/24+1720981.5;
%     %JulianDay=fix(365.25*(2023+4716))+fix(30.6001*(6+1))+1+0-1524.5;
%     %将儒略日转换成BDS时
% 	  t2=(JulianDay-2444244.5)/7-fix((JulianDay-2444244.5)/7);
%     t=t2*604800-14;
% 
%     %计算卫星钟差改正后的当前时刻的GPS时
% 	t=t-(B1(8)+B1(9)*(t-B4(1))+B1(10)*(t-B4(1))^2);
% 	
%     %计算参考时刻的儒略日
% 	JulianDayoe=fix(365.25*(2023-1))+fix(30.6001*(6+13))+1+(0+0/60+0/3600)/24+1720981.5;
% 
%      %将儒略日转换成GPS时
%    	t2oe=(JulianDayoe-2444244.5)/7-fix((JulianDayoe-2444244.5)/7);
%     toe=t2oe*604800;
% 
%     %计算时间差tk
%     tk=t-toe;
    tk=-14.00;
    %tk=0;
    %计算改正平角速度
    n=n0+B2(3);

    %计算平近点角Ek
    Mk=B2(4)+n*tk;

    %迭代计算,求出偏近点角Ek
    Ek=Mk;
    Ek0=inf;

    while abs(Ek0-Ek)>1e-100
        Ek0=Ek;
        Ek=Mk+e*sin(Ek0);
    end

    %计算真近点角
	Sinfk=(sqrt(1-e^2)*sin(Ek))/(1-e*cos(Ek));
    Cosfk=(cos(Ek)-e)/(1-e*cos(Ek));
	fk=atan2(Sinfk,Cosfk);
    %计算升交角距
    phik=fk+B5(3);
    %从卫星星历文件中读取各个方向的振幅Crs,Cuc,Cus,Cic,Cis,Crc
    Crs=B2(2);
    Cuc=B3(1);
    Cus=B3(3);
    Cic=B4(2);
    Cis=B4(4);
    Crc=B5(2);

    %计算卫星轨道摄动项改正数
    deltauk=Cus*sin(2*phik)+Cuc*cos(2*phik);
	deltark=Crs*sin(2*phik)+Crc*cos(2*phik);
	deltaik=Cis*sin(2*phik)+Cic*cos(2*phik);

    %计算改正后的升交角距uk
    uk=phik+deltauk;

    %计算改正后的向径rk
	rk=a*(1-e*cos(Ek))+deltark;

    %计算改正后的倾角ik
    ik=B5(1)+deltaik+B6(1)*tk;
    
    %计算卫星轨道平面坐标系的坐标
    xk=rk*cos(uk);
    yk=rk*sin(uk);
 
    %计算观测瞬间升交点的经度Lk
	Lk=B4(3)+B5(4)*tk-We*B4(1);

    %计算卫星在轨道平面内的坐标x,y,z
	xyz=[rk*cos(uk);rk*sin(uk);0];

    A=[xk*cos(Lk)-yk*cos(-ik)*sin(Lk);xk*sin(Lk)+yk*cos(-ik)*cos(Lk);yk*sin(ik)];
    
    Rx=[1,0,0;0,cos(-5*pi/180),sin(-5*pi/180);0,-sin(-5*pi/180),cos(-5*pi/180)];
    Rz=[cos(We*tk),sin(We*tk),0;-sin(We*tk),cos(We*tk),0;0,0,1];
    
    
   
    XYZ=vpa([Rz*Rx*A],20);
end

XYZ

二,广播星历文件格式展示

三、广播星历文件解读

 四、代码详解

  • 打开文件

  • 跳过广播星历中不需要的数据

  • 读文件 

 

  •  从第26行开始按行读取数据,并把他们存储在B#里

这样转换的原因:

1.存储方式不同:单元格数组一般存储混合数据类型的表格或其他非均匀数据集,而数值数组以规则的网格形式存储数据,所有元素都按照相同的规则排列,转换有利于下标来索引。

2.运算上区别:单元格数组不能直接进行数学运算,数值数组支持各种数学运算,例如加法、乘法、矩阵运算等。

  • 定义常量

  • 求出轨道长半轴

  • 求出平均角速度,时间差,改正平均角速度,平近点角 

  •  计算升交距角Phik和真近点角fk

  •  将广播星历中的数据读取到变量中

  • 计算摄动改正量

  • 计算摄动改正后的 升交距角uk、卫星矢径rk和轨道倾角ik 

  • 计算卫星在轨道平面坐标系的坐标xk和yk,升交点经度Lk

  • 计算GEO卫星在自定义惯性系中的坐标

  • 计算GEO卫星在CGCS2000中的坐标 

使用vpa函数来设置有效数字的位数 

  • 结果

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Matlab可以用于计算和分析轨道的六个要素,即轨道位置和速度。在Matlab中,可以使用各种数值计算和分析工具来处理轨道数据。 首先,我们可以使用Matlab中的数学函数和运算符来计算轨道位置。根据轨道的六个要素,我们可以使用椭圆轨道方程来计算位置。具体来说,我们可以使用轨道的半长轴(a)、离心率(e)、倾角(i)、升交点赤经(RAAN)、近地点幅角(ω)和真近地点角(θ)等参数计算位置矢量。通过计算椭圆轨道的坐标和角度信息,可以确定物体在任意时间点上的位置。 其次,我们可以使用Matlab的数值计算工具来计算轨道的速度。根据轨道的六个要素和位置矢量,我们可以使用椭圆轨道的速度公式来计算速度矢量。具体来说,根据质点在椭圆轨道上的位置和离心率,可以计算速度矢量的大小和方向。速度矢量的大小对应于质点在轨道上运动的速度,而方向对应于速度矢量与位置矢量之间的夹角。 总之,Matlab提供了一系列函数和工具,可以用于计算和分析轨道的六个要素中的位置和速度。通过合理的数值计算和分析,可以获得轨道的准确位置和速度信息,进而用于轨道设计、太空探测和导航等领域的研究和应用。 ### 回答2: MATLAB是一种广泛应用于科学、数学和工程领域的强大计算软件。在航天领域中,MATLAB可以用来计算和分析轨道六要素,即轨道位置和速度。 轨道六要素包括位置和速度在三个方向上的分量。在MATLAB中,可以使用向量来表示轨道六要素。例如,位置向量可以用[x, y, z]来表示,其中x、y和z是轨道在三个方向上的位置分量。速度向量可以用[u, v, w]来表示,其中u、v和w是轨道在三个方向上的速度分量。 在使用MATLAB计算轨道六要素时,可以利用牛顿运动定律和开普勒三定律。牛顿运动定律描述了物体在外力作用下的运动规律,而开普勒三定律描述了天体在引力作用下的运动规律。 对于圆形轨道,可以使用以下公式计算位置和速度的分量: x = r * cos(θ) y = r * sin(θ) z = 0 其中,r是轨道半径,θ是轨道上的角度。 对于椭圆轨道,可以使用以下公式计算位置和速度的分量: x = a * cos(θ) y = b * sin(θ) z = 0 其中,a和b分别是椭圆的长轴和短轴,θ是椭圆上的角度。 对于其他非圆形轨道,可以使用更复杂的数学模型进行计算。 总结起来,MATLAB可以用来计算和分析轨道六要素的位置和速度。通过利用牛顿运动定律和开普勒三定律,可以使用向量来表示轨道位置和速度分量,并使用相应的公式进行计算。使用MATLAB进行轨道六要素的计算可以帮助航天工程师更好地理解和研究轨道运动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值