[转载]卫星的 两行星历 及转化为轨道六根数的MATLAB程序
(2015-08-02 11:28:35)
标签:
转载 |
分类: GPS学习 |
AAAAAAAAAAAAAAAAAAAAAAAA
1 NNNNNU NNNNNAAA NNNNN.NNNNNNNN +.NNNNNNNN +NNNNN-N +NNNNN-N N NNNNN
2 NNNNN NNN.NNNN NNN.NNNN NNNNNNN NNN.NNNN NNN.NNNN NN.NNNNNNNNNNNNNN
第 1行 |
|
列 |
描述 |
01 |
行号 |
03-07 |
卫星编号 |
08 |
保密分级 (U=非保密的) |
10-11 |
国际标志符(发射年份后两位数字) |
12-14 |
国际标志符(那一年的发射编号) |
15-17 |
国际标志符(那次发射的件编号) |
19-20 |
TLE 历时(年份后两位数) |
21-32 |
TLE 历时(用一个十进制小数表示的一年中的第几日和日中的小数部分) |
34-43 |
平均运动的一阶时间导数 |
45-52 |
平均运动的二阶时间导数(小数点的位置已确定) |
54-61 |
BSTAR阻力系数(小数点位置已确定) |
63 |
星历表类型 |
65-68 |
星历编号 |
69 |
校验和(以10为模) |
第2行 |
|
列 |
描述 |
01 |
行号 |
03-07 |
卫星编号 |
09-16 |
轨道的交角[度数] |
18-25 |
升交点赤经 [度数] |
27-33 |
离心率 (小数) |
35-42 |
近地点角距[度数] |
44-51 |
平近点角[度数] |
53-63 |
平均运动 [每日绕行圈数] |
64-68 |
在轨圈数 |
69 |
校验和(以10为模) (对于非数字部分:字母, 空格, 句点, 正号 = 0; 负号 = 1) |
1 31800U 07031A
2 31800
%
%
%
%
%
%
%
%
%
%
% Calls Newton iteration function file EofMe.m
function [oe,epoch,yr,M,E,satname] = TLE2oe(file1.txt);
% Open the file up and scan in the elements
fid =
fopen(fname, 'r');
A = fscanf(fid,'%13c%*s',1);
B =
fscanf(fid,'%d%6d%*c%5d%*3c%2d%f%f%5d%*c%*d%5d%*c%*d%d%5d',[1,10]);
C = fscanf(fid,'%d%6d%f%f%f%f%f%f',[1,8]);
fclose(fid);
satname=A;
% The value of
mu is for the earth
mu = 3.986004415e5;
%
yr = B(1,4);
% Calculate
epoch in julian days
epoch = B(1,5);
%ndot = B(1,6);
% n2dot = B(1,7);
% Assign
variables to the orbital elements
i =
C(1,3)*pi/180;
Om =
C(1,4)*pi/180;
e =
C(1,5)/1e7;
om =
C(1,6)*pi/180;
M =
C(1,7)*pi/180;
n = C(1,8)*2*pi/(24*3600);
% Calculate the
semi-major axis
a = (mu/n^2)^(1/3);
% Calculate the
eccentric anomaly using mean anomaly
E = EofMe(M,e,1e-10);
% Calculate
true anomaly from eccentric anomaly
cosnu = (e-cos(E)) / (e*cos(E)-1);
sinnu = ((a*sqrt(1-e*e)) / (a*(1-e*cos(E))))*sin(E);
nu = atan2(sinnu,cosnu);
if (nu<0), nu=nu+2*pi; end
% Return the
orbital elements in a 1x6 matrix
oe = [a e i Om om nu];
另外一个需要的程序为:
%
%
%
function E = EofMe(M,e,tol)