**
单点定位1-卫星位置、速度、钟差的计算
**
从readobsnav()函数读取O文件和N文件后,开始定位信息处理。核心函数为procpos(),主要包括数据输入inputobs(),数据处理rtkpos(),数据输出outsol()三部分。输入部分为读取观测数据,导航信息。核心处理单元为rtkpos,主要包括单点定位pntpos,精密单点定位pppos,相对定位relpos三部分。本节主要记录单点定位部分,公式如下:
由单点定位公式可知,要获取接收机的位置和钟差,需要先求得卫星的位置和钟差,加上电离层对流层等修正,代入方程解算。
本文先介绍卫星部分参数的计算。
1、计算卫星位置、速度、钟差
通过satposs实现,函数声明如下:
extern void satposs(gtime_t teph, const obsd_t *obs, int n, const nav_t *nav,int ephopt, double *rs, double *dts, double *var, int *svh);
其中,teph为当前历元,*obs为指向观测数据结构体的指针,n为总共卫星数,*nav为指向导航电文数据结构体的指针,ephopt为选项参数(默认0),*rs指向储存卫星位置和速度的数组,*dts指向储存卫星钟差的数组,*var为协方差矩阵,*svh为卫星健康状态。
卫星位置、钟差计算的核心:eph2pos函数,利用广播星历计算卫星位置和钟差,传入参数为:历元时刻、eph_t结构体(导航电文中获取的参数)、储存卫星位置、钟差及协方差矩阵的数组。
//广播星历参数的结构体
typedef struct {
/* GPS/QZS/GAL broadcast ephemeris type */
int sat; /* satellite number */
int iode,iodc; /* IODE,IODC */
int sva; /* SV accuracy (URA index) */
int svh; /* SV health (0:ok) */
int week; /* GPS/QZS: gps week, GAL: galileo week */
int code; /* GPS/QZS: code on L2, GAL/CMP: data sources */
int flag; /* GPS/QZS: L2 P data flag, CMP: nav type */
gtime_t toe,toc,ttr; /* Toe,Toc,T_trans */
/* SV orbit parameters */
double A,e,i0,OMG0,omg,M0,deln,OMGd,idot;
double crc,crs,cuc,cus,cic,cis;
double toes;