作业报告卫星坐标计算分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
GPS卫星导航定位技术与方法作业报告之卫星坐标计算
1作业任务--------------------------------------------------- 3 2作业思想---------------------------------------------------- 3 3作业条件及数据---------------------------------------------- 3 4作业过程--------------------------------------------------- 4 5源程序----------------------------------------------------- 5 6计算结果--------------------------------------------------- 9 7心得体会与建议---------------------------------------------- 9
1作业任务
根据教材所给广播星历参数,编程计算
UTC2004年1月30日8点0分00秒一20
分00秒,每隔1分钟的卫星号为 7的卫星坐标。
2作业思想
根据教材提供广播星历参数,按照卫星坐标计算步骤一步一步求解表示卫星位置的量, 最后求出卫星在地固坐标系中的空间直角坐标。
根据历元间隔,计算出共 21个历元的卫星
坐标。
此次作业的已知条件及计算步骤均为教材提供且思路清晰,简明易懂,只要在编程过 程中注意个已知量、中间量和待求量的表示及数据对应正确, 涉及角度的计算时小心避免错
误即可。
3作业条件及数据
由GPS 卫星导航文件(表 3.1)提取出7号卫星的轨道参数及其摄动改正项
表3.1
NAVJGATIl )N DATA
RINEX VERSION / TYPE
2. 3-1 版卒
3OJAN-M 用川4 PGM / RUN BY / DATE
END OF HEADER
0.0000
提取及整理后的广播星历参数:
4 4 i sc s o ao (L L39OOQOOCOO0D 十酮
0* 33 S5 789589881 )—05
0. I608OMMOOOJ>^O6 0L9fil7?B749g66[>r<X) 6 6428B3923180D-n
0.53B821332157D-04 0+ 6680299993600^02 O.31664M753€&D -07
a 17654 7AZ3D-11 0. M75Sm9137D-Oa
0.5M963O9S9S7D-O5
Q
0. OOMOCMOMOD-I-(X} Q. J100l8&l7339r>-Dl 0. 5]535797271l7[yHO1
(k S19M38fi5663D-£>7
O, ?7946875<XW0D+03 ~Q, 105701C7U00D+D0 -fl, 81HS19S56363D-OR
0, iWXMMXXXXMWmOl 0, tJOOOlXXKKKWD+OO
0.1255C(MC0OWDt04
-0. 6053596735Q0D 08
丄(KMXMWOOOOOOD+Ofl
0. 13MOOOCOOOOD- 03
0 0.0
O.629325397313D 03 -0.5456^6821 MID 11
0, ooooooooaoooD-'oo
也 21OOOOOOTDO&D-FD3 0,2754^217571D-05 0” 4fiOfiOOCKX>tX)ODH -06 仇 &37^90094 71(5 TH-OO -
D. 13143in^2O4P r)9 覆 OOOOCOOOOOOOD 计 00 0. QCOOOOOOOOOOD+OO
6 537812SfXXXK)D-F02 0. 125069)35ID- 01
0. 20675361J 56 5D-06
a 485M592S777D-D8 - 0. 2 J 19&2+76S72D-O1 0. 9037554264070-05 C. 51537M3M1BTH-O4
O. 193198315O97D+0I
-0. 72fi431fi08200D-07
191875(XKKKM)D+O3 一仇 185l372349a9h-Ql -<). 7918WlO9O12b —Ofl
a lODOOf^CKXXKl 1>十01
0, MOOOOO(KMM)OD+ 00
0. 18«2645H423I> 08
Q. OQWOtXWaOOOD+W
0. 2]QOWOOOOOO[>+03
星历参数参数值参数含义
△ n 4.853********E-09 给定的星历参数计算值的平均速度no之改正数(弧
度)
V a 5.153********E+03 卫星轨道长半轴的平方根
t Oe 4.60800000000E+05 星历的参考时刻,从星期日零时开始量度,以秒计
M O -2.14992476872E+00 参考时刻t0e的平近点角(弧度)
e 1.25958691351E-02 轨道偏心率
CO -1.85137234909E+00 近地点角距(弧度)
Cue 2.75485217571E-06 升交点角距的余弦调和改正项的振幅(弧度)
Cus 9.0375*******E-06 升交点角距的正弦调和改正项的振幅(弧度)
Cre 1.91875000000E+02 轨道半径的余弦调和改正项的振幅(弧度)
Crs 5.37812500000E+01 轨道半径的正弦调和改正项的振幅(弧度)
Cie 2.06753611565E-07 轨道倾角的余弦调和改正项的振幅(弧度)
Cis -7.26431608200E-08 轨道倾角的正弦调和改正项的振幅(弧度)
IDOT -1.31434044204E-10 轨道倾角的变率
i o 9.37690094716E-01 参考时刻的轨道倾角(弧度)
Q -7.91890109042E-09 升交点赤经的变率(弧度/s)
Q o 1.93198315097E+00 GPS周开始时刻的升交点经度(弧度)
4作业过程
平均角速度5二如+ 31吨■
(2)规化时刻厂严£一£»如为蠡考历元口
<3)平近点角:必=岡十咖,
(4)偏近点角E(需姜作迭代运算儿
(5)<近点角:V,-arctan
eos Efr^e
(6)升交角庫呻#*叭+切“
(7)摄动改正:顾及的摄动变化成及正弦改记模型的振辐项Gr.G■则
升交菊距& =Gc co或矢+匚"血2如
轨道向径 & '—cos2^t + C JV sin2^
轨道倾角$, =(?十氐血2£ +心或口2机式中:触为参考时刻的升交角距.
CS)改正后的升交角距:如=軸+占”$ 改正后的轨道向径;r* =a( 1 - ecos
E*)十占八改正后的轨道倾角册=力十鸟斗(IDOT冷*
⑷)卫星在升交点轨道直角坐标系的坐标:
(10)升父点经度:入t = Q 0 + ( Q - w e)( t - t O e) - w e t O e
式中:w e为地球自转角速度,w e =7.2921151467 x 10-5rad/s ; Q为升交点赤经变化
率,Q 0为GPS周开始时刻的升交点经度,Q和Q0均由星历文件给出;t O为参考时刻, 一般取t O = 0,为一周的开始(星期日的子夜);t O e为广播星历的参考历元时刻,从t o开始起算;
(11)卫星在地固坐标系中的空间直角坐标为:
式中:R(』k) , R(_i k)为旋转矩阵,将其代入并展开后得
X k 二x k COS,k - y k cosi k Sin ' k
Y k = x k sin k y k cosi k COS k
Z k 二y k sini k
5源程序
#include <iomanip.h>
#include <stdlib.h>
#include <math.h> #include <fstream.h> #include <iostream.h> const int k=20; // 历元数
double X[k],Y[k],Z[k]; //计算所得卫星坐标
const double GM=3986004.418E8;〃地球引力常数
const double we=7.2921151467E-5; // 地球自转角速度
double dn,a05,t0e,M0,e,w,Cuc,Cus,Crc,Crs,Cic,Cis,IDOT,i0,WMG,WMG0; // 定义广播星历参数
//广播星历参数导入
void Input()
{
ifstream f1("广播星历参数.txt");
if (!f1)
{
cerr<< "广播星历参数.txt file not open!" <<endl;
exit(1);
}
f1»dn;
f1»a05;
f1»tOe;
f1»M0;
f1»e;
f1»w;
f1»Cuc;
f1»Cus;
f1»Crc;
f1»Crs;
f1»Cic;
f1»Cis;
f1»ID0T;
f1»iO;
f1»WMG;
f1»WMG0;
f1.close();
}
//卫星坐标计算
void Compute( double t, int k)
{
//定义卫星坐标计算过程中间量double n0,n,tk,Mk,E0,Ek,Vk,fk,du,dr,di,uk,rk,ik,xk,yk,Lt;
// ()计算平均角速度n:
n0=sqrt(GM/pow(a05,6));
n=n0+dn;
// ()计算规化时刻tk :
tk=t-t0e;
// ()计算平近点角Mk:
Mk=M0+n*tk;
// ()迭代计算偏近点角Ek:
E0=Mk;
do
Ek=Mk+e*sin(EO); EO=Ek;
} while (Mk+e*sin(E0)-E0>=1e-8);
// ()计算真近点角Vk :
double v1= sqrt(1-e*e)*sin(Ek); double v2=cos(Ek)-e; Vk=atan2(v1,v2);
// ()计算升交角距fk :
fk=Vk+w;
// ()摄动改正:
du=Cuc*cos(2*fk)+Cus*sin(2*fk); dr=Crc*cos(2*fk)+Crs*sin(2*fk); di=Cic*cos(2*fk)+Cis*sin(2*fk);
uk=fk+du; //改正后的升交角距uk rk=a05*a05*(1-e*cos(Ek))+dr; // 改正后的轨道向径 rk
ik=i0+di+IDOT*tk; //改正后的轨道倾角ik
// ()计算卫星在升交点轨道直角坐标系的坐标:
xk=rk*cos(uk); yk=rk*sin(uk);
// ()计算升交点精度:
Lt=WMG0+(WMG-we)*(t-t0e)-we*t0e;
// ()计算卫星空间直角坐标:
X[k]=xk*cos(Lt)-yk*cos(ik)*sin(Lt); Y[k]=xk*sin(Lt)+yk*cos(ik)*cos(Lt); Z[k]=yk*sin(ik);
void main()
//升交角距改正du //轨道向径改正dr //轨道倾角改正di
lnput();
for (int i=0;i<k;i++) {
double t=t0e+i*60; Compute(t,i);
}
coutvv "历元/s
卫星号
X/m
"vvendl;
for (i=0;i<k;i++) {
cout.precision(ll); cout<<t0e+i*60vv " 7 "
"vvsqrt(X[i]*X[i]+Y[i]*Y[i]+Z[i]*Z[i])vvendl;
}
Y/m Z/m
卫地距离
vvX[i]vv "
" vvY[i]vv " " vvZ[i]vv "
//输岀结果到“卫星坐标计算结果 .txt ”
ofstream outfile;
outfile.open("卫星坐标计算结果. if (outfile.is_open ()) {
outfilevv "历元/s
卫星号
卫地距离"vvendl;
txt");
X/m Y/m Z/m
for (int i=0;ivk;i++) {
outfile.precision(11); outfilevvt0e+i*60vv
"
7 "
vvX[i]vv "
"
vvY[i]vv "
"
vvZ[i]vv "
vvsqrt(X[i]*X[i]+Y[i]*Y[i]+Z[i]*Z[i])v<endl;
} }
outfile.close();
6计算结果
表6.1卫星坐标计算结果
历兀/s 卫星号X/m Y/m Z/m
460800 7 -13413856.780 16092624.867 16628017.859 460860 7 -13535898.784 16110553.892 16507426.350 460920 7 -13657027.021 ********.858 16385596.447 460980 7 -13777233.046 16146894.386 16262536.953 461040 7 -13896508.546 16165287.016 16138256.762 461100 7 -14014845.333 16183815.202 16012764.866 461160 7 -14132235.351 16202469.318 15886070.351 461220 7 -14248670.673 16221239.658 15758182.394 461280 7 -14364143.505 16240116.437 15629110.267 461340 7 -14478646.186 ********.796 15498863.336 461400 7 -14592171.191 16278149.799 15367451.057 461460 7 -14704711.126 16297286.439 15234882.978 461520 7 -14816258.739 16316489.636 15101168.738 461580 7 -14926806.913 16335749.242 14966318.067 461640 7 -15036348.668 16355055.042 14830340.783 461700 7 -15144877.166 ********.755 14693246.795 461760 7 -15252385.710 16393764.036 14555046.099 461820 7 -15358867.742 16413146.476 14415748.781 461880 7 -15464316.851 16432533.610 14275365.013
461940 7 -15568726.765 16451914.911 14133905.053 462000 7 -15672091.358 16471279.797 13991379.245
7心得体会与建议
此次作业是本学期“ GPS卫星导航定位技术与方法”课程的第一次编程实践作业。
在学习了教材第三章“卫星轨道运动及卫星坐标计算”之后,初步对卫星坐标计算有一定认识,担不是很深刻。
开始此次作业时,又温习了一遍这个部分的内容,进一步理解勒表示卫星位置的一些参数和量,还有计算的过程和步骤,然后根据已知条件从GPS导航文件中提取出计算所需的广播星历计算参数,按照程序导入文件要求的相应格式输入到txt文本中,作为导入已知数据准备。
在编程的过程中,由于去年摄影测量课程的编程基础,感觉编写的代码还算得心应手,没有遇到什么特别大的困难。
不过有些小地方出错,例如: 1.忘记调用导入已知数
据的子程序;2.还有计算过程中,求弧度值的反正切涉及的函数选择问题,一开始使用的是tan ()函数,但是这个函数不能很好解决弧度区间的问题,以至计算错误,后来改用了tan2 ()函数便解决这个问题;
3.当解决了前两个问题,调用函数之后对比计算结
果与教材中计算结果,发现差别很大,于是又找原因,在与同学的交流之后才发现原来是书上的地球自转角速度we的数量级写错了,不是12而是-5,改正之后再次调用,得到正确的计算结果,总算完成了作业的主要任务。
完成此次作业的过程中,不仅加深了对该部分内人的理解和记忆,也提供机会使我
们对C++编程更为熟悉。
这次作业最大的收获,不只是完成了作业任务,从中我也体会了
不少,自己以后应该更加耐心,出现错误不要紧,要学会细心找原因然后解决问题,同时,多和老师同学交流一定是有益的,多学习别人的思想的优处,多反思自己的缺陷。
也感谢老师让我们又锻炼了一次。
谢谢老师的审阅!辛苦了!0⑴_n )0。