c语言读取广播星历程序,GPS广播星历计算卫星位置和速度.doc
PAGE 1
PAGE 1
“GPS广播星历计算卫星位置和速度”
及“GPS伪距定位”计算试验
1.试验内容及上交成果
1.1 试验内容
采用C语言遵循既定的结构来开发"GPS广播星历计算卫星位置和速度"相关算法功能模块SatPos_Vel( )以及"GPS伪距定位"算法功能模块Positioning( )。这两个新开发的子程序整合到F2.cpp文件中并作为整体包含在主程序库 GPS_Positioning.cpp里。通过编译器构建完成后进行链接组装并将这些代码整合到主程序库后即可运行该可执行程序。逐个时间点读取Ephemeris.doc中的数据以获取接收站观测时间与伪距测量结果作为后续定位计算的基础依据。随后系统会对每个观测时刻的数据进行处理并利用精确的时间基准完成接收机天线的相关校正工作之后按照WGS84坐标系统计算出各时段卫星的位置与速度参数并将这些结果记录到Position.doc文本文件里。
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文件指针;
输出变量:Timedouble,时间(秒);
Rhodouble[12],伪距(米);
Markint[12],卫星号,“-1”表示此通道无卫星、无伪距。
2.3 最小二乘估计函数
int LeastSquareEstimation(Y,A,P,m,n, X)
功能模块:基于最小二乘法实现对观测方程Y=AX+ε的求解,并通过权矩阵P(即协因数矩阵)来表示观测数据的质量
阵),得未知参数X。成功返回“1”,失败返回“-1”
输入变量:Ydouble[m],观测方程自由项(米);
Adouble[m×n],系数阵(无量纲),按第1行第1、2……n元素,
第2行……顺序存放;
Pdouble[m],权矩阵对角线元素,0或1(无量纲);
mint,观测值个数;
nint,未知参数个数;
输出变量:Xdouble[n],未知参数(米)。
原理:X=(ATPA)-1ATPY
例: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”
历)。
输入变量:Numint,卫星号;
Timedouble,时间(秒)。
(隐含引用全局变量Ephemeris[32],星历数据结构体)
输出变量:SatPosdouble[3],位置(米,WGS84);
SatVeldouble[3],速度(米/秒,WGS84)。
2.5 伪距测量定位
int Positioning(Time,Rho,Mark, Pos,dt)
功能:基于单一时刻的伪距计算来确定载体的位置,并分别记录接收机的法相时间基准、卫星的位置坐标及其运动参数和载波状态信息。
位置于定位结果文件Position.dat中。成功返回“1”,失败返回“-1”
值数量不够,亏秩)。
输入变量:Timedouble,伪距观测时刻接收机钟面时(秒);
Rhodouble[12],伪距(米);
Markint[12],卫星号,“-1”表示此通道无信号;
输出变量:Posdouble[3],载体位置(米,WGS84);
dtdouble,钟差(秒)。
3.全局变量说明
LightVelocity字符常量,光速(米/秒),299 792 458;
PI字符常量,圆周率,3.141 592 653 589 793;
MU字符常量,地球引力常数(米3秒-2),3.986005e14;
OMEGAE字符常量,地球自转角速度(弧度·秒-1),7.292115e-5;
fp_Obs文件指针,观测数据文件;
fp_Pos文件指针,位置结果文件。
Structure Eph_Str
{
Mark整型,标识,“1”有,“-1”
wn整型,星期数
toc卫星钟差改
