版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言计算GPS卫星位置C语言计算GPS卫星位置/NUMPAGES18C语言计算GPS卫星位置C语言计算GPS卫星位置C语言计算GPS卫星位置1概述在用GPS信号进行导航定位以及制订观测计划时,都必须已知GPS卫星在空间的瞬间位置。卫星位置的计算是根据卫星电文所提供的轨道参数按一定的公式计算的。本节专门讲解观测瞬间GPS卫星在地固坐标系中坐标的计算方法。2卫星位置的计算1.计算卫星运行的平均角速度n根据开普勒第三定律,卫星运行的平均角速度n0可以用下式计算:式中μ为WGS-84坐标系中的地球引力常数,且μ=3.986005×1014m3/s2。平均角速度n0n=n0+Δn(4-12)2.计算归化时间tk首先对观测时刻t′作卫星钟差改正t=t′-Δt然后对观测时刻t归化到GPS时系tk=t-toc(4-13)式中tk称作相对于参考时刻toe的归化时间(读者注意:toc≠toe)。3.观测时刻卫星平近点角Mk的计算Mk=M0+ntk(4-14)式中M0是卫星电文给出的参考时刻toe的平近点角。4.计算偏近点角EkEk=Mk+esinEk(Ek,Mk以弧度计)(4-15)上述方程可用迭代法进行解算,即先令Ek=Mk,代入上式,求出Ek再代入上式计算,因为GPS卫星轨道的偏心率e很小,因此收敛快,只需迭代计算两次便可求得偏近点角Ek。5.真近点角Vk的计算由于:因此:6.升交距角Φk的计算ω为卫星电文给出的近地点角距。7.摄动改正项δu,δr,δi的计算δu,δr,δi分别为升交距角u的摄动量,卫星矢径r的摄动量和轨道倾角i的摄动量。8.计算经过摄动改正的升交距角uk、卫星矢径rk和轨道倾角ik9.计算卫星在轨道平面坐标系的坐标卫星在轨道平面直角坐标系(X轴指向升交点)中的坐标为10.观测时刻升交点经度Ωk的计算升交点经度Ωk等于观测时刻升交点赤经Ω(春分点和升交点之间的角距)与格林泥治视恒星时GAST(春分点和格林尼治起始子午线之间的角距)之差,Ωk=Ω-GAST(4-23)又因为:(4-24)其中Ωoe为参与时刻toe的升交点的赤经;是升交点赤经的变化率,卫星电文每小时更新一次Ω和toe。此外,卫星电文中提供了一周的开始时刻tw的格林尼治视恒星时GASTw。由于地球自转作用,GAST不断增加,所以:GAST=GASTw+ωet(4-25)式中ωe=7.29211567×10-5rad/s为地球自转的速率;t为观测时刻。由式(4-24)和(4-25),得:由(4-13)式,得:其中,、、的值可从卫星电文中获取。11.计算卫星在地心固定坐标系中的直角坐标把卫星在轨道平面直角坐标系中的坐标进行旋转变换,可得出卫星在地心固定坐标系中的三维坐标:12.卫星在协议地球坐标系中的坐标计算考虑极移的影响,卫星在协议地球坐标系中的坐标为利用C语言程序实现#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#defineu3.986004418e+14#defineWE7.292115e-6structcanshu{ intprn,nian,yue,ri,shi,fen;//卫星PRN号,年,月,日,时,分 doublemiao;//秒 longdoubleadoe,a0,a1,a2,mo,dn,e,ga,pio,io,w,pid,ii,cuc,cus,cue,crs,crc,cis,cic,toe,aodc,wn; /*参数说明:ADOE值,a0卫星钟偏差,a1卫星钟漂移,a2卫星钟频率漂移,M0平近点角,Δn平运动差,e偏心率,a1/2半长轴的平方根,Ω0轨道平面升交点经度, i0倾角,ω近地点角距,*Ω升交点速率,IDot倾角速率,CucCus升交角距的摄动改正项, CrcCrs地心距的摄动改正项,CicCis倾角的摄动改正项, toe参考历元*/};voidwxzbjx(structcanshu*pt){ longdoublea,n0,n,t,tk,toc,mk,ek,vk,fik,uk,rk,ik; longdoublexk,yk,zk,lk; longdoubleXK,YK,ZK; inttemp; pt->nian=pt->nian+2000; t=(longdouble)(((pt->nian)-1980)*365*24*3600+(pt->yue-1)*30*24*3600+pt->ri *24*3600+pt->shi*3600+pt->miao); a=pt->ga*pt->ga; n0=sqrt(WE/(a*a*a));//平均角速度n0 n=n0+pt->dn; tk=t-pt->toe; toc=pt->a0+pt->a1*(t-pt->toe)+pt->a2*(t-pt->toe)*(t-pt->toe); tk=tk-pt->toe; mk=pt->mo+n*tk; ek=mk; for(temp=0;temp<10;temp++) { ek=mk+pt->e*sin(ek);//利用迭代法求偏近点角ek } vk=2*atan(sqrt((1+pt->e)/(1-pt->e))*(tan(ek))/2); fik=vk+pt->w; uk=fik+pt->cuc*cos(2*fik)+pt->cus*sin(2*fik); rk=pt->ga*pt->ga*(1-pt->e*ek)+pt->crc*cos(2*fik)+pt->crs*sin(2*fik); ik=pt->io+pt->cic*cos(2*fik)+pt->cis*sin(2*fik)+pt->ii*tk; xk=rk*cos(uk); yk=rk*sin(uk); zk=0; lk=pt->pio+(pt->pid-WE)*tk-WE*pt->toe; XK=xk*cos(lk)-yk*cos(ik)*sin(lk); YK=xk*sin(lk)+yk*cos(ik)*cos(lk); ZK=yk*sin(ik); printf("\n%d年%d月%d号%d时%.2f秒%d号卫星的坐标:",pt->nian,pt->yue,pt->ri,pt->shi,pt->miao,pt->prn); printf("\nXk=%.9f\nYk=%.9f\nZK=%.9f\n\n",XK,YK,ZK);}intmain(void){ FILE*fp,*fp1,*fp2; structcanshua; inti=0,hanhao=1; longdouble temp1,temp2,temp3,temp5,temp4,temp6,temp7; charch,ch1; if((fp1=fopen("E:\\星历文件\\guangboxingli2.txt","r"))==NULL)//请自定义星历文件位置及名称 { printf("文件无法打开!"); exit(0); } else { if((fp2=fopen("E:\\星历文件\\guangboxingli2fu.txt","w"))==NULL) { printf("文件无法打开!"); exit(0); } else { while((ch1=fgetc(fp1))!=EOF) { if(ch1=='\n') { i++; } putchar(ch1); if(i==15) { break; } } while(!feof(fp1)) { ch1=fgetc(fp1); if(ch1=='D') { ch1='e'; } fputc(ch1,fp2); } fclose(fp1); }fclose(fp2); } printf("以上是星历文件的头文件!\n"); system("pause"); printf("读取文件参数数据\n!"); if((fp=fopen("E:\\星历文件\\guangboxingli2fu.txt","r"))==NULL)//创建计算结果文档 { printf("文件无法打开!"); exit(0); } while(!feof(fp)) { switch(hanhao) { case1: { fscanf(fp,"\n%d%d%d%d%d%d%lf%le%le%le",&a.prn,&a.nian,&a.yue,&a.ri,&a.shi, &a.fen,&a.miao,&a.a0,&a.a1,&a.a2); printf("%d%d%d%d%d%d%lf%le%le%le",a.prn,a.nian,a.yue,a.ri,a.shi, a.fen,a.miao,a.a0,a.a1,a.a2); hanhao++; } case2: { fscanf(fp,"%le%le%le%le",&a.adoe,&a.crs,&a.dn,&a.mo); printf("\n%le%le%le%le",a.adoe,a.crs,a.dn,a.mo); hanhao++; } case3: { fscanf(fp,"%le%le%le%le",&a.cue,&a.e,&a.cus,&a.ga); printf("\n%le%le%le%le",a.cue,a.e,a.cus,a.ga); hanhao++; } case4: { fscanf(fp,"%le%le%le%le",&a.toe,&a.cic,&a.pio,&a.cis); printf("\n%le%le%le%le",a.toe,a.cic,a.pio,a.cis); hanhao++; } case5: { fscanf(fp,"%le%le%le%le",&a.io,&a.crc,&a.w,&a.pid); printf("\n%le%le%le%le",a.io,a.crc,a.w,a.pid); hanhao++; } case6: { fscanf(fp,"%le%le%le%le",&a.ii,&temp1,&a.wn,&temp2); printf("\n%le%le%le%le",a.ii,temp1,a.wn,temp2); hanhao++; } case7: { fscanf(fp,"%le%le%le%le",&temp3,&temp4,&temp5,&a.aodc); printf("\n%le%le%le%le",temp3,temp1,temp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高校公共美术鉴赏课中国画教学:困境与突破
- 高新技术项目投资风险评估:体系构建与实践应用
- 高新技术上市公司研发投入与公司绩效相关性的深度剖析与实证研究
- 驾校安全隐患分级管理细则
- 肝衰竭应急预案
- 制冷与空调设备运行操作证题库与答案
- 食物中毒演练方案
- 幼儿劳动知识题目及答案
- 2026劳动关系面试题及答案
- 2026评估工作的面试题及答案
- 2026四川广元市川北幼儿师范高等专科学校助学助管员招聘7人(第二批)笔试模拟试题及答案详解
- 2026重庆市城市建设发展有限公司招聘4人参考题库含答案详解【能力提升】
- 2026广西北海市不动产登记中心招聘临聘人员4人笔试参考题库及答案详解
- 2026-2030中国白酒行业市场发展分析及前景趋势与投资研究报告
- 外研版英语八年级下册Unit4语法之宾语从句(教案)
- 2026学年凉山彝族自治州盐源县四年级数学第二学期期末复习检测试题含答案
- 抗磷脂综合征诊疗专家共识(2026版)
- 2025年事业单位资产管理岗招聘笔试题目(附答案)
- 一例慢性肾衰竭血液透析患者的护理查房
- 2026年中国国新招聘笔试题库
- 2025建信金融资产投资有限公司校园招聘15人笔试历年典型考点题库附带答案详解2套试卷
评论
0/150
提交评论