GPS广播星历计算卫星位置和速度

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

GPS广播星历计算卫星位置和速度“GPS广播星历计算卫星位置和速度”
及“GPS伪距定位”计算试验
1(试验内容及上交成果
1.1 试验内容
应用C语言按预定格式(函数、输入输出变量之名称、类型)编写“GPS广播星历计算卫星位置和速度”函数SatPos_Vel( )、“GPS伪距定位”函数Positioning( )。

将此两个函数组成文件F2.cpp,并包含于文件
GPS_Positioning.cpp中。

编译、连接并运行文件GPS_Positioning.cpp,逐一时刻读取广播星历(Ephemeris.dat)、观测时间及伪距、卫星号(Observation.dat)信息,计算WGS84坐标系中观测时刻相应的卫星位置、速度以及载体位置,结果保存于文件Position.dat中。

1.2 上交成果
磁盘文件F2.cpp、Position.dat,并存于“学号作者中文姓名”目录中。

2(函数说明
2.1 星历文件读取函数
void EFileReading(Efile)
功能:读取星历文件,给星历数据结构体Ephemeris赋值。

输入变量:EFile 字符串,文件名。

2.2 观测数据读取函数
int ObsReading(fp_Obs,Time,Rho,Mark)
功能:从文件Observation.dat中读取某一时刻的伪距、卫星号。

读取成功函数值返
回“1”,失败返回“,1”(读错,或至文件尾)。

输入变量: fp_Obs 文件指针;
输出变量: Time double,时间(秒);
Rho double[12],伪距(米);
Mark int[12],卫星号,“,1”表示此通道无卫星、无伪距。

2.3 最小二乘估计函数
int LeastSquareEstimation(Y,A,P,m,n, X)
功能:最小二乘方法求解观测方程Y=AX+ε,其中观测值方差阵的逆阵为P(也称为权
阵),得未知参数X。

成功返回“1”,失败返回“,1”(亏秩)。

输入变量: Y double[m],观测方程自由项(米);
A double[m×n],系数阵(无量纲),按第1行第1、2……n元素,
1
第2行……顺序存放;
P double[m],权矩阵对角线元素,0或1(无量纲);
m int,观测值个数;
n int,未知参数个数;
输出变量: X double[n],未知参数(米)。

T-1T 原理:X=(APA)APY
例:Y,[1,2,3,6],A=[1,0,0, 0,1,0, 0,0,1, 1,1,1],P=[1,1,1,1],m=4,n=3。

调用LeastSquareEstimation(Y,A,P,m,n, X),求得X=[1,2,3]。

2.4 计算卫星位置、速度函数
int SatPos_Vel(Num,Time, SatPos,SatVel)
功能:计算WGS84坐标系中卫星位置、速度。

成功返回“1”,失败返回
“,1”(无星
历)。

输入变量: Num int,卫星号;
Time double,时间(秒)。

(隐含引用全局变量Ephemeris[32],星历数据结构体)
输出变量: SatPos double[3],位置(米,WGS84);
SatVel double[3],速度(米/秒,WGS84)。

2.5 伪距测量定位
int Positioning(Time,Rho,Mark, Pos,dt)
功能:由单一时刻伪距计算载体位置,并保存接收机钟面时、卫星位置、速度及载体
位置于定位结果文件Position.dat中。

成功返回“1”,失败返回“,1”(观测
值数量不够,亏秩)。

输入变量: Time double,伪距观测时刻接收机钟面时(秒);
Rho double[12],伪距(米);
Mark int[12],卫星号,“,1”表示此通道无信号;
输出变量: Pos double[3],载体位置(米,WGS84);
dt double,钟差(秒)。

3(全局变量说明
LightVelocity 字符常量,光速(米/秒),299 792 458;
PI 字符常量,圆周率,3.141 592 653 589 793;
3,2MU 字符常量,地球引力常数(米秒),3.986005e14;
,1OMEGAE 字符常量,地球自转角速度(弧度?秒),7.292115e-5; fp_Obs 文件指针,观测数据文件;
fp_Pos 文件指针,位置结果文件。

Structure Eph_Str
{
Mark 整型,标识,“1”有,“,1”无
wn 整型,星期数
toc 卫星钟差改正参考时刻(秒)
2
2af2 卫星钟差改正系数(秒/秒)
af1 (秒/秒)
af0 (秒)
aode 数据龄期
deltan 平均角速度改正(半周/秒)
m0 参考时刻平近点角(半周)
e 偏心率;
1/21/2roota a(米)
toe 星历参考时刻(秒)
cic (弧度)
crc (米)
cis (弧度)
crs (米)
cuc (弧度)
cus (弧度)
omega0 准升交点赤经(半周)
omega 近地点角距(半周)
i0 轨道倾角(半周)
omegadot 升交点赤经变化率(半周/秒)
idot 轨道倾角变化率(半周/秒) }Ephemeris[32] 星历数据结构体。

注:数据类型除注明整型外,其余为双精度型。

4(文件说明
4.1 观测数据文件Observation.dat
Time, n 伪距观测时间,卫星颗数
Rho_1, n_1 伪距(米),卫星号
……
Rho_n, n_n 伪距(米),卫星号
Time, n 伪距观测时间,卫星颗数
……
4.2 卫星星历数据文件Ephemeris.dat
svprn 整数,卫星号
wn 整数,星期数
……
idot 轨道倾角变化率(半周/秒)
(详细说明请参见数据结构体Structure Eph_Str Ephemeris[32]) svprn 整数,卫星号
……
3
4.3 位置计算结果文件Position.dat
Time 伪距观测时刻(秒)
n_1,x_1,y_1,z_1, xdot_1,ydot_1,zdot_1 卫星号,卫星坐标(米,WGS84),速度(米/秒)
……
n_n,x_n,y_n,z_n, xdot_n,ydot_n,zdot_n 卫星号,卫星坐标(米,WGS84),速度(米/秒)
x,y,z 载体坐标(米,WGS84)
Time 伪距观测时刻(秒)
……
4.4 GPS_Positioning.cpp
作为主函数,调用Parameter.h、Function.h、F1.cpp、F2.cpp。

逐一时刻读取广播星
历、伪距等信息,计算卫星位置、速度及载体位置。

4.5 Parameter.h
字符常量定义、全局变量说明。

4.6 Function.h
函数说明。

4.7 F1.cpp
包含辅助函数如下;
广播星历读取函数EFileReading() ;
观测数据(时间、卫星个数、伪距、卫星号)读取函数ObsReading();
最小二乘法求解函数LeastSquareEstimation();
矩阵相乘计算函数MatrixMultiply();
高斯选主元消去法矩阵求逆函数MatrixInverse();
三维向量长度计算函数VectorLength()。

4.8 F2.cpp
包含函数如下:
卫星位置、速度计算函数SatPos_Vel();
伪距定位函数Positioning()。

5(首历元观测时刻参考答案(Position.dat)
193645.0
29 -15567798.7 945675.6 21321624.5 249.3 -2743.6 303.3
0 14665363.6 9394841.8 20224091.6 -2310.3 1043.6 1194.9
20 -10127606.0 21492092.3 -10899994.3 -90.1 -1466.0 -2807.9
21 -1578334.5 26219741.9 -284477.9 -409.9 -14.9 3151.8
28 -20375527.0 15214719.7 7639734.1 -975.7 140.2 -2976.3
24 -2456690.1 16712706.9 20740220.7 -2203.1 -1370.0 828.0 5 -24924627.9 3359562.9 9069955.6 937.9 -673.8 2850.3
4
13 11881411.2 12148251.4 20386065.1 -509.3 2539.5 -1217.6 -2196881.6 5177555.2 2998042.2
5。

相关文档
最新文档