文章目录
- 精密星历
- 精密星历下载
- 精密星历格式
- 简单解读
- rtklib 精密星历应用
- 插值处理
- Neville插值介绍
- 使用精密星历解算与广播星历的对比
- 精密星历解算结果
- 广播星历解算结果
精密星历
SP3精密星历格式,即The Extended Standard Product 3 Orbit Format.
精密星历下载
点击此处进行精密星历下载
以下图片显示的是下载2005-04-02的精密星历,如此可下载这一天的精密星历。
精密星历格式
#cP2009 4 1 0 0 0.00000000 96 ORBIT IGS05 BHN ESOC
European Space Operations Centre
## 1525 259200.00000000 900.00000000 54922 0.0000000000000
+ 48 G32G24G25G26G27G30G03G04G06G08G09G10G14G13G28G21G11
+ G22G20G18G16G19G23G02G31G17G12G15G29G07R04R06R07R10
+ R11R13R14R15R17R19R20R23R18R21R22R03R02R08 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++ 5 5 6 5 5 6 5 5 5 5 5 5 5 5 5 5 5
++ 5 5 5 6 5 5 5 5 5 5 5 5 5 7 8 6 6
++ 6 7 7 7 7 6 6 7 7 7 7 7 6 7 0 0 0
++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
++ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
%c M cc GPS ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc
%c cc cc ccc ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc
%f 0.0000000 0.000000000 0.00000000000 0.000000000000000
%f 0.0000000 0.000000000 0.00000000000 0.000000000000000
%i 0 0 0 0 0 0 0 0 0
%i 0 0 0 0 0 0 0 0 0
/* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
/* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
/* CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
/* PCV:IGS05_1461 OL/AL:FES2004 NONE YN ORB:CoN CLK:CoN
* 2009 4 1 0 0 0.00000000
PG32 -8588.723867 -20090.643282 15669.151907 280.381686
PG24 22871.271694 12675.543847 -3627.944084 177.697220
... (此处省略若干行)
PR08 5808.861773 17946.260291 -17172.857334 -102.035201
* 2009 4 1 0 15 0.00000000
PG32 -8297.565626 -21671.755580 13538.952491 280.377529
PG24 22933.972419 13075.825862 -790.871026 177.700812
简单解读
#cP2009 4 1 0 0 0.00000000 96 ORBIT IGS05 BHN ESOC
-
#c, 版本
-
P, Pos/Vel 标志位
-
2009 4 1 0 0 0.00000000, 精密星历开始的年-月-日-时-分-秒
-
96, 历元数
-
IGS05
http://acc.igs.org/igs-frames.html -
ESOC, European Space Operations Centre
## 1525 259200.00000000 900.00000000 54922 0.0000000000000
- 1525, GPS周
- 259200.00000000, GPS周内秒
- 900.00000000,历元间隔 此处为900秒,15分钟
- 54922,儒略日
+ 48 G32G24G25G26G27G30G03G04G06G08G09G10G14G13G28G21G11
+ G22G20G18G16G19G23G02G31G17G12G15G29G07R04R06R07R10
+ R11R13R14R15R17R19R20R23R18R21R22R03R02R08 0 0 0
- 48, 卫星数
- G32…R08, 卫星编号
更多SP格式说明点击此处
rtklib 精密星历应用
rtklib支持精密星历的使用,从下边的代码可以看到,我们可以通过指定星历使用参数EPHOPT_PREC
,这样在进行卫星位置的解算时,使用的就是精密星历了。
extern int satpos(gtime_t time, gtime_t teph, int sat, int ephopt,const nav_t *nav, double *rs, double *dts, double *var,int *svh)
{trace(4,"satpos : time=%s sat=%2d ephopt=%d\n",time_str(time,3),sat,ephopt);*svh=0;switch (ephopt) {case EPHOPT_BRDC : return ephpos (time,teph,sat,nav,-1,rs,dts,var,svh);case EPHOPT_SBAS : return satpos_sbas(time,teph,sat,nav, rs,dts,var,svh);case EPHOPT_SSRAPC: return satpos_ssr (time,teph,sat,nav, 0,rs,dts,var,svh);case EPHOPT_SSRCOM: return satpos_ssr (time,teph,sat,nav, 1,rs,dts,var,svh);case EPHOPT_PREC :if (!peph2pos(time,sat,nav,1,rs,dts,var)) break; else return 1;}*svh=-1;return 0;
}
如果我们直接使用rtklib编译好的可执行文件进行数据处理,那么在option里设置一下精密星历就好了。
插值处理
精密星历播发的间隔为15分钟,因此实际应用中需要进行插值处理。rtklib中使用的是Neville 插值方法。
/* polynomial interpolation by Neville's algorithm ---------------------------*/
static double interppol(const double *x, double *y, int n)
{int i,j;for (j=1;j<n;j++) {for (i=0;i<n-j;i++) {y[i]=(x[i+j]*y[i]-x[i]*y[i+1])/(x[i+j]-x[i]);}}return y[0];
}
Neville插值介绍
了解内维尔插值的直接跳过
内维尔插值可能不像牛顿和拉格朗日插值那么广为人知,所以这里顺便简单介绍一下。内维尔插值是一种由两个n-1
次插值多项式构造一个n
次多项式的线性逐次插值方法。什么是线性逐次插值呢?我们以五个点举个例子。
首先,使用所有 p i p_i pi和 p i + 1 p_{i+1} pi+1,如 p 0 p_0 p0和 p 1 p_1 p1进行线性插值,我们得到了四个一阶多项式。然后使用四个得到的一阶多项式进行线性插值可以得到三个二阶多项式,一直这么进行下去,得到一个四阶多项式,这个四阶多项式是通过这五个点的。
若是还是感觉有点儿抽象,可直接看下边的例子。对三个点(-1,0)(0,1)(1,0)
进行2阶内维尔插值,结果如下。
使用精密星历解算与广播星历的对比
精密星历解算结果