- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
C 语 言 计 算 G P S 卫 星 位 置
1 概述
在用GPS信号进行导航定位以及制订观测计划时,都必须已知 GPS卫星在空间的瞬间
位置。卫星位置的计算是根据卫星电文所提供的轨道参数按一定的公式计算的。本节专门 讲解观测瞬间 GPS卫星在地固坐标系中坐标的计算方法。
2 卫星位置的计算
计算卫星运行的平均角速度 n
根据开普勒第三定律,卫星运行的平均角速度 n0 可以用下式计算:
式中□为 WGS-84坐标系中的地球引力常数,且卩 =3.986005 X 1014mf/s2。平均角速度
no加上卫星电文给出的摄动改正数△ n,便得到卫星运行的平均角速度 n
n二ro+A n (4-12)
计算归化时间 t k
首先对观测时刻t'作卫星钟差改正
t=t ' - A t
然后对观测时刻t归化到GPS时系
t k=t-t oc (4-13)
式中t k称作相对于参考时刻 t oe的归化时间(读者注意:toc工toe )。
观测时刻卫星平近点角 Mk 的计算
Mk=M0+ntk (4-14)
式中M是卫星电文给出的参考时刻 toe的平近点角。
计算偏近点角 Ek
上述方程可用迭代法进行解算,即先令 Ek=Mk, 代入上式,求出 Ek 再代入上式计算,因
为GPS卫星轨道的偏心率 e很小,因此收敛快,只需迭代计算两次便可求得偏近点角 巳。
真近点角 Vk 的计算
由于:
因此:
升交距角①k的计算
3为卫星电文给出的近地点角距。
摄动改正项3 u, S r, S i的计算
S u, S r, S i分别为升交距角 u的摄动量,卫星矢径 r的摄动量和轨道倾角 i
的摄动量。
计算经过摄动改正的升交距角 uk、卫星矢径rk和轨道倾角ik
计算卫星在轨道平面坐标系的坐标
卫星在轨道平面直角坐标系(x轴指向升交点)中的坐标为
观测时刻升交点经度Q k的计算
升交点经度Q k等于观测时刻升交点赤经Q (春分点和升交点之间的角距)与格林泥治
视恒星时GAST(春分点和格林尼治起始子午线之间的角距)之差,
Q k=Q -GAST ( 4-23 )
又因为 :
oe tk (4-24)
其中Q oe为参与时刻toe的升交点的赤经;
是升交点赤经的变化率,卫星电文每小时更新一次Q和 toe。
此外,卫星电文中提供了一周的开始时刻 tw的格林尼治视恒星时 GAST。由于地球自
转作用,GAST不断增加,所以:
式中w eX 10-5rad/s 为地球自转的速率;t为观测时刻。
由式(4-24)和( 4-25),得:
由( 4-13 )式,得 :
其中0 oe GASTw , O、 、toe的值可从卫星电文中获取。
计算卫星在地心固定坐标系中的直角坐标 把卫星在轨道平面直角坐标系中的坐标进行旋转变换,可得出卫星在地心固定坐标系
中的三维坐标:
卫星在协议地球坐标系中的坐标计算 考虑极移的影响,卫星在协议地球坐标系中的坐标为
利用 C 语言程序实现
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#define WE 7.292115e-6
struct canshu
{
int prn, nian, yue, ri, shi, fen;//卫星 PRN号,年,月,日,时,分
double miao;// 秒
long double adoe, 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平近点角,An平运动差,e偏心率,a1/2半长轴的平方根,Q0轨道平面升 交点经度 ,
的摄动改正项, Cre Crs地心距的摄动改正项,Cie CiS顷角的摄动改正项,
toe 参考历元 */
};
void wxzbjx(struet eanshu *pt)
{
long double a, n0, n, t, tk, toe, mk, ek, vk, fik, uk, rk, ik;
long double xk, yk ,zk, lk;
long double XK, YK, ZK; int temp;
pt->nian = pt->nian + 2000;
t = (long double)(((pt ->nian)- 1980) * 365 * 24 * 3600 + (pt ->yue - 1) * 30 24 * 3600 + pt ->ri
* 24 * 3600 + pt->shi * 3600 + pt ->m
文档评论(0)