GPS从入门到放弃(十六)--- 卫星时钟误差和卫星星历误差

GPS从入门到放弃(十六)— 卫星时钟误差和卫星星历误差

卫星时钟误差

GPS卫星时钟误差(简称卫星钟差)是指GPS卫星时钟与GPS标准时间之间的差值。尽管GPS卫星采用了高精度的原子钟来保证时钟的精度,具有比较长期的稳定性;但原子钟依然有频率偏移和老化的问题,导致它们与GPS标准时之间会存在一个差异。这个偏差是必须加以修正的。当然其他的GNSS系统如北斗也会有类似的问题,这里我们仅以GPS为例说明。

GPS的接口说明文档中用一个二阶多项式模型来描述卫星钟差。卫星时钟在GPS时间为 t t 时的卫星钟差 Δ t s \Delta t_s 可以表示为:
Δ t s = a f 0 + a f 1 ( t t o c ) + a f 2 ( t t o c ) 2 + Δ t r \Delta t_s = a_{f0} + a_{f1}(t-t_{oc}) + a_{f2}(t-t_{oc})^2 + \Delta t_r

其中 a f 0 , a f 1 , a f 2 a_{f0}, a_{f1}, a_{f2} 为系数, t o c t_{oc} 为时钟数据的参考时间, t t 为我们要计算的时刻, Δ t r \Delta t_r 为相对论效应校正项。

GPS导航电文的第一子帧中有这几个参数,我们只需要解出导航电文然后按照这个公式计算即可得到卫星时钟误差。

需要注意的是对 t t o c t-t_{oc} 的值的计算:若其大于 302400 秒,则需要将其减去 604800 秒;若其小于 -302400 秒,则要将其加上 604800 秒。这么做的原因是GPS时间在每周末重置归零,我们需要保证其值在 -302400 ~ 302400 之间。

下面说一下对于式中的相对论效应修正项的处理。相对论效应包含狭义相对论效应和广义相对论效应。尽管GPS卫星已经按照相对论效应对时钟频率进行了调整,但由于卫星轨道并非是规则的圆形,而是椭圆形,所以相对论效应在不同轨道位置对时钟的频率影响大小是不同的,因此还需要修正。

GPS的接口说明文档中给出的相对论修正项为:
Δ t r = F e A sin E k \Delta t_r = F e \sqrt{A} \sin E_k

其中 F = 2 μ c 2 F = \frac{-2\sqrt{\mu}}{c^2} 是一个常数, μ = 3.986005 × 1 0 14 \mu = 3.986005 \times 10^{14} 为引力常数, c = 299792458 c=299792458 为真空中的光速; e e 为卫星轨道的偏心率; A A 为卫星轨道半长轴长度; E k E_k 为卫星偏近点角。 e e A A 在卫星播发的卫星星历中都有, E k E_k 可以根据星历参数计算出来,具体可参考GPS卫星位置解算文中的讲解。

最后还需要说一下的是对于单频接收机来说,还要考虑群波延迟修正。因为前面说的二阶多项式模型是针对双频接收机的,若应用在单频的情况,则还需要加上两个频率之间的校正项,即在GPS导航电文的第一子帧中播发的群波延迟 T g d T_{gd} 。当然这个处理也可以放到电离层延时校正的时候一起处理,比如 RTKLIB 中就是这样做的。可以参考电离层延时DCB差分码偏差

对卫星钟差求导,可以得到卫星钟漂 Δ t ˙ s \Delta \dot{t}_s 为:
Δ t ˙ s = a f 1 + 2 a f 2 ( t t o c ) + F e A E ˙ k cos E k \Delta \dot{t}_s = a_{f1} + 2a_{f2}(t-t_{oc}) + F e \sqrt{A} \dot{E}_k\cos E_k

其中 E ˙ k \dot{E}_k 的值可以根据星历参数计算出来,可参考GPS卫星速度解算文中的讲解。

卫星星历误差

卫星在空间运行时,其轨道会收到各种因素的影响,如地球质量不均匀引起的作用力、潮汐影响、大气阻力、太阳光压等等,造成卫星轨道复杂且不规则。所以通过星历计算出的卫星位置与卫星实际位置总会有偏差,我们把这个误差叫做卫星星历误差。

卫星星历误差属于系统误差。它是一个三维向量,可以分为三个方向的分量:径向分量、切向分量和法向分量。其中径向分量是在接收机和卫星连线方向上的分量;切向分量在卫星轨道平面内与径向分量垂直指向卫星的飞行速度方向;法向分量则垂直于轨道平面。这三个分量中,切向分类和法向分量对伪距观测量的影响基本可以忽略,主要影响伪距观测量的是径向分量。

目前常用的星历有广播星历和精密星历。

  • 广播星历是定位卫星播放的。其精度不稳定,受星历年龄、轨道是否调整、是否处于地球和月亮的阴影区等很多对用户而言是偶然因素的影响。广播星历误差是当前GPS定位的重要误差来源之一。目前根据广播星历所计算出来的卫星星历误差已经可以降低到分米级。
  • 精密星历是为卫星精密定位所使用的卫星轨道信息。其由若干卫星跟踪站的观测数据,经事后处理算得。目前的GPS精密星历主要有两种:由美国国防制图局(DMA)生产的精密星历以及由IGS生产的精密星历。前者的星历精度约为2cm,后者的星历精度约为5cm。

误差消除

卫星时钟误差和卫星星历误差对所有的接收机都是一样的,因此可以通过差分的方式来消除。

还值得一提的是在GPS卫星位置解算中,我们计算出的卫星位置是在信号发射时刻的卫星在WGS-84坐标系中的位置,而我们在进行定位方程解算时,真正需要的是卫星在信号接收时刻的位置。在接收机接收到信号时,WGS-84坐标系已经随着地球自转发生了变化,所以我们需要进行坐标转换。设地球的自转角速度为 ω e \omega_e ,卫星信号从发射到接收的时间为 τ \tau ,信号发射时刻的卫星位置为 [ x k , y k , z k ] T [x_k,\: y_k,\:z_k]^T ,信号接收时刻的卫星位置为 [ x s , y s , z s ] T [x_s,\: y_s,\:z_s]^T ,则有
{ x s = x k cos ( ω e τ ) + y k sin ( ω e τ ) y s = x k sin ( ω e τ ) + y k cos ( ω e τ ) z s = z k \left\{ \begin{array}{c} x_s = x_k\cos(\omega_e\tau) + y_k\sin(\omega_e\tau)\\ y_s = -x_k\sin(\omega_e\tau) + y_k\cos(\omega_e\tau)\\ z_s = z_k \end{array} \right.

在进行接收机定位解算时,我们需要用 [ x s , y s , z s ] T [x_s,\: y_s,\:z_s]^T 来取代 [ x k , y k , z k ] T [x_k,\: y_k,\:z_k]^T 以消除地球自转的影响。

当然,因为定位时我们要用的是几何距离 $ r=\sqrt{(x-x_{s})^2 + (y-y_{s})^2 + (z-z_{s})^2}$,为了简化计算,我们可以直接在定位方程中加上因地球自转引起的 r r 的修正量 Δ r \Delta r 。设单位观测矢量为 e \boldsymbol{e} ,卫星在信号接收时刻与信号发射时刻的位置差矢量为 Δ p \Delta \boldsymbol{p} ,因为位置差对 r r 的影响只存在径向方向(同观测矢量方向)上,所以 $\Delta r = \boldsymbol{e}\cdot \Delta \boldsymbol{p} $。

又因为 ω e τ \omega_e \tau 很小,可以近似的认为 cos ( ω e τ ) 1 , sin ( ω e τ ) ω e τ \cos(\omega_e\tau) \approx 1,\: \sin(\omega_e\tau) \approx \omega_e\tau ,且 sin ( ω e τ ) < < 1 \sin(\omega_e\tau) << 1 ,于是有:
e = 1 c τ [ x x s , y y s , z z s ] 1 c τ [ x x k , y y k , z z k ] \boldsymbol{e} = \frac{1}{c\tau}[x-x_s,\:y-y_s\:,z-z_s] \approx \frac{1}{c\tau} [x-x_k,\:y-y_k\:,z-z_k]

Δ p = [ x k x s , y k y s , z k z s ] [ y k ω e τ , x k ω e τ , 0 ] \Delta \boldsymbol{p} = [x_k-x_s,\:y_k-y_s,\:z_k-z_s] \approx [-y_k\omega_e\tau,\:x_k\omega_e\tau,\:0]

Δ r 1 c τ [ y k ω e τ ( x x k ) + x k ω e τ ( y y k ) ] = ω e c ( y x k x y k ) \Delta r \approx \frac{1}{c\tau}[-y_k\omega_e\tau(x-x_k)+x_k\omega_e\tau(y-y_k)] = \frac{\omega_e}{c}(yx_k-xy_k)

其中 [ x , y , z ] T [x,\:y,\:z]^T 为接收机位置, c c 为光速。在一些文献中, Δ r \Delta r 也被称为Sagnac效应修正项。在 RTKLIB 中,就是采用这个方法来计算修正后的几何距离的,参考下面代码。

double geodist(const double *rs, const double *rr, double *e)
{
    double r;
    int i;

    if (norm(rs,3)<RE_WGS84) return -1.0;
    for (i=0;i<3;i++) e[i]=rs[i]-rr[i];
    r=norm(e,3);
    for (i=0;i<3;i++) e[i]/=r;
    return r+OMGE*(rs[0]*rr[1]-rs[1]*rr[0])/CLIGHT;
}
发布了63 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tyst08/article/details/104054933