作业报告卫星坐标计算.docx
- 文档编号:11954811
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:13
- 大小:212.46KB
作业报告卫星坐标计算.docx
《作业报告卫星坐标计算.docx》由会员分享,可在线阅读,更多相关《作业报告卫星坐标计算.docx(13页珍藏版)》请在冰豆网上搜索。
作业报告卫星坐标计算
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
提取及整理后的广播星历参数:
星历参数
参数值
参数含义
Δn
4.85305928777E-09
给定的星历参数计算值的平均速度no之改正数(弧度)
√a
5.15373039818E+03
卫星轨道长半轴的平方根
t0e
4.60800000000E+05
星历的参考时刻,从星期日零时开始量度,以秒计
M0
-2.14992476872E+00
参考时刻t0e的平近点角(弧度)
e
1.25958691351E-02
轨道偏心率
ω
-1.85137234909E+00
近地点角距(弧度)
Cuc
2.75485217571E-06
升交点角距的余弦调和改正项的振幅(弧度)
Cus
9.03755426407E-06
升交点角距的正弦调和改正项的振幅(弧度)
Crc
1.91875000000E+02
轨道半径的余弦调和改正项的振幅(弧度)
Crs
5.37812500000E+01
轨道半径的正弦调和改正项的振幅(弧度)
Cic
2.06753611565E-07
轨道倾角的余弦调和改正项的振幅(弧度)
Cis
-7.26431608200E-08
轨道倾角的正弦调和改正项的振幅(弧度)
IDOT
-1.31434044204E-10
轨道倾角的变率
i0
9.37690094716E-01
参考时刻的轨道倾角(弧度)
Ω
-7.91890109042E-09
升交点赤经的变率(弧度/s)
Ω0
1.93198315097E+00
GPS周开始时刻的升交点经度(弧度)
4作业过程
(10)升交点经度:
λt=Ω0+(Ω-ωe)(t-t0e)-ωet0e
式中:
ωe为地球自转角速度,ωe=7.2921151467×10-5rad/s;Ω为升交点赤经变化率,Ω0为GPS周开始时刻的升交点经度,Ω和Ω0均由星历文件给出;t0为参考时刻,一般取t0=0,为一周的开始(星期日的子夜);t0e为广播星历的参考历元时刻,从t0开始起算;
(11)卫星在地固坐标系中的空间直角坐标为:
式中:
,
为旋转矩阵,将其代入并展开后得
5源程序
#include
#include
#include
#include
#include
constintk=20;//历元数
doubleX[k],Y[k],Z[k];//计算所得卫星坐标
constdoubleGM=3986004.418E8;//地球引力常数
constdoublewe=7.2921151467E-5;//地球自转角速度
doubledn,a05,t0e,M0,e,w,Cuc,Cus,Crc,Crs,Cic,Cis,IDOT,i0,WMG,WMG0;//定义广播星历参数
//广播星历参数导入
voidInput()
{
ifstreamf1("广播星历参数.txt");
if(!
f1)
{
cerr<<"广播星历参数.txtfilenotopen!
"< exit (1); } f1>>dn; f1>>a05; f1>>t0e; f1>>M0; f1>>e; f1>>w; f1>>Cuc; f1>>Cus; f1>>Crc; f1>>Crs; f1>>Cic; f1>>Cis; f1>>IDOT; f1>>i0; f1>>WMG; f1>>WMG0; f1.close(); } //卫星坐标计算 voidCompute(doublet,intk) { doublen0,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(E0); E0=Ek; }while(Mk+e*sin(E0)-E0>=1e-8); //()计算真近点角Vk: doublev1=sqrt(1-e*e)*sin(Ek); doublev2=cos(Ek)-e; Vk=atan2(v1,v2); //()计算升交角距fk: fk=Vk+w; //()摄动改正: du=Cuc*cos(2*fk)+Cus*sin(2*fk);//升交角距改正du dr=Crc*cos(2*fk)+Crs*sin(2*fk);//轨道向径改正dr di=Cic*cos(2*fk)+Cis*sin(2*fk);//轨道倾角改正di 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); } voidmain() { Input(); for(inti=0;i { doublet=t0e+i*60; Compute(t,i); } cout<<"历元/s卫星号X/mY/mZ/m卫地距离"< for(i=0;i { cout.precision(11); cout< } //输出结果到“卫星坐标计算结果.txt” ofstreamoutfile; outfile.open("卫星坐标计算结果.txt"); if(outfile.is_open()) { outfile<<"历元/s卫星号X/mY/mZ/m卫地距离"< for(inti=0;i { outfile.precision(11); outfile< } } 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 16128646.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 16259089.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 16374396.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++编程更为熟悉。 这次作业最大的收获,不只是完成了作业任务,从中我也体会了不少,自己以后应该更加耐心,出现错误不要紧,要学会细心找原因然后解决问题,同时,多和老师同学交流一定是有益的,多学习别人的思想的优处,多反思自己的缺陷。 也感谢老师让我们又锻炼了一次。 谢谢老师的审阅! 辛苦了! O(∩_∩)O
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业 报告 卫星 坐标 计算