GPS卫星时钟误差(简称卫星钟差)是指GPS卫星时钟与GPS标准时间之间的差值。尽管GPS卫星采用了高精度的原子钟来保证时钟的精度,具有比较长期的稳定性;但原子钟依然有频率偏移和老化的问题,导致它们与GPS标准时之间会存在一个差异。这个偏差是必须加以修正的。当然其他的GNSS系统如北斗也会有类似的问题,这里我们仅以GPS为例说明。
GPS的接口说明文档中用一个二阶多项式模型来描述卫星钟差。卫星时钟在GPS时间为 t t t 时的卫星钟差 Δ t s \Delta t_s Δts可以表示为:
Δ 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 Δts=af0+af1(t−toc)+af2(t−toc)2+Δtr
其中 a f 0 , a f 1 , a f 2 a_{f0}, a_{f1}, a_{f2} af0,af1,af2 为系数, t o c t_{oc} toc 为时钟数据的参考时间, t t t 为我们要计算的时刻, Δ t r \Delta t_r Δtr 为相对论效应校正项。
在GPS导航电文的第一子帧中有这几个参数,我们只需要解出导航电文然后按照这个公式计算即可得到卫星时钟误差。
需要注意的是对 t − t o c t-t_{oc} t−toc 的值的计算:若其大于 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 Δtr=FeAsinEk
其中 F = − 2 μ c 2 F = \frac{-2\sqrt{\mu}}{c^2} F=c2−2μ 是一个常数, μ = 3.986005 × 1 0 14 \mu = 3.986005 \times 10^{14} μ=3.986005×1014 为引力常数, c = 299792458 c=299792458 c=299792458 为真空中的光速; e e e 为卫星轨道的偏心率; A A A 为卫星轨道半长轴长度; E k E_k Ek 为卫星偏近点角。 e e e 和 A A A 在卫星播发的卫星星历中都有, E k E_k Ek 可以根据星历参数计算出来,具体可参考GPS卫星位置解算文中的讲解。
最后还需要说一下的是对于单频接收机来说,还要考虑群波延迟修正。因为前面说的二阶多项式模型是针对双频接收机的,若应用在单频的情况,则还需要加上两个频率之间的校正项,即在GPS导航电文的第一子帧中播发的群波延迟 T g d T_{gd} Tgd。当然这个处理也可以放到电离层延时校正的时候一起处理,比如 RTKLIB 中就是这样做的。可以参考电离层延时和DCB差分码偏差。
对卫星钟差求导,可以得到卫星钟漂 Δ t ˙ s \Delta \dot{t}_s Δ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 Δt˙s=af1+2af2(t−toc)+FeAE˙kcosEk
其中 E ˙ k \dot{E}_k E˙k 的值可以根据星历参数计算出来,可参考GPS卫星速度解算文中的讲解。
卫星在空间运行时,其轨道会收到各种因素的影响,如地球质量不均匀引起的作用力、潮汐影响、大气阻力、太阳光压等等,造成卫星轨道复杂且不规则。所以通过星历计算出的卫星位置与卫星实际位置总会有偏差,我们把这个误差叫做卫星星历误差。
卫星星历误差属于系统误差。它是一个三维向量,可以分为三个方向的分量:径向分量、切向分量和法向分量。其中径向分量是在接收机和卫星连线方向上的分量;切向分量在卫星轨道平面内与径向分量垂直指向卫星的飞行速度方向;法向分量则垂直于轨道平面。这三个分量中,切向分类和法向分量对伪距观测量的影响基本可以忽略,主要影响伪距观测量的是径向分量。
目前常用的星历有广播星历和精密星历。
卫星时钟误差和卫星星历误差对所有的接收机都是一样的,因此可以通过差分的方式来消除。
还值得一提的是在GPS卫星位置解算中,我们计算出的卫星位置是在信号发射时刻的卫星在WGS-84坐标系中的位置,而我们在进行定位方程解算时,真正需要的是卫星在信号接收时刻的位置。在接收机接收到信号时,WGS-84坐标系已经随着地球自转发生了变化,所以我们需要进行坐标转换。设地球的自转角速度为 ω e \omega_e ωe,卫星信号从发射到接收的时间为 τ \tau τ,信号发射时刻的卫星位置为 [ x k , y k , z k ] T [x_k,\: y_k,\:z_k]^T [xk,yk,zk]T,信号接收时刻的卫星位置为 [ x s , y s , z s ] T [x_s,\: y_s,\:z_s]^T [xs,ys,zs]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. ⎩⎨⎧xs=xkcos(ωeτ)+yksin(ωeτ)ys=−xksin(ωeτ)+ykcos(ωeτ)zs=zk
在进行接收机定位解算时,我们需要用 [ x s , y s , z s ] T [x_s,\: y_s,\:z_s]^T [xs,ys,zs]T 来取代 [ x k , y k , z k ] T [x_k,\: y_k,\:z_k]^T [xk,yk,zk]T 以消除地球自转的影响。
当然,因为定位时我们要用的是几何距离 $ r=\sqrt{(x-x_{s})^2 + (y-y_{s})^2 + (z-z_{s})^2}$,为了简化计算,我们可以直接在定位方程中加上因地球自转引起的 r r r 的修正量 Δ r \Delta r Δr。设单位观测矢量为 e \boldsymbol{e} e,卫星在信号接收时刻与信号发射时刻的位置差矢量为 Δ p \Delta \boldsymbol{p} Δp,因为位置差对 r r r 的影响只存在径向方向(同观测矢量方向)上,所以 $\Delta r = \boldsymbol{e}\cdot \Delta \boldsymbol{p} $。
又因为 ω e τ \omega_e \tau ωeτ 很小,可以近似的认为 cos ( ω e τ ) ≈ 1 , sin ( ω e τ ) ≈ ω e τ \cos(\omega_e\tau) \approx 1,\: \sin(\omega_e\tau) \approx \omega_e\tau cos(ωeτ)≈1,sin(ωeτ)≈ωeτ,且 sin ( ω e τ ) < < 1 \sin(\omega_e\tau) << 1 sin(ωeτ)<<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] e=cτ1[x−xs,y−ys,z−zs]≈cτ1[x−xk,y−yk,z−zk]
Δ 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] Δp=[xk−xs,yk−ys,zk−zs]≈[−ykωeτ,xkωeτ,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) Δr≈cτ1[−ykωeτ(x−xk)+xkωeτ(y−yk)]=cωe(yxk−xyk)
其中 [ x , y , z ] T [x,\:y,\:z]^T [x,y,z]T 为接收机位置, c c c 为光速。在一些文献中, Δ r \Delta r Δ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;
}