GPS从入门到放弃(十四) — 电离层延时
电离层概念
电离层(Ionosphere)是地球大气的一个电离区域。它是受到太阳高能辐射以及宇宙线的激励而电离的大气高层。50千米以上的整个地球大气层都处于部分电离或完全电离的状态,电离层是部分电离的大气区域,完全电离的大气区域称磁层。
- 电离层的范围从离地面约50公里开始一直伸展到约1000公里高度的地球高层大气空域。
- 电离层的主要特性由电子密度、电子温度、碰撞频率、离子密度、离子温度和离子成分等空间分布的基本参数来表示。
- 电离层的研究对象主要是电子密度随高度的分布。电子密度(或称电子浓度)是指单位体积的自由电子数,随高度的变化与各高度上大气成分、大气密度以及太阳辐射通量等因素有关。电离层内任一点上的电子密度,决定于上述自由电子的产生、消失和迁移三种效应。在不同区域,三者的相对作用和各自的具体作用方式也大有差异。
- 电离层中存在相当多的自由电子和离子,能使无线电波改变传播速度,发生折射、反射和散射,产生极化面的旋转并受到不同程度的吸收。
电离层对卫星导航的影响
因为卫星都处于大气层外,卫星信号传播到地球上必须要经过大气层中的电离层,于是必然要受到电离层的影响。
电离层是弥散性介质,即介质的介电常数与频率有关,所以在电离层中,不同频率的电磁波具有不同的传播速度。
卫星信号载波的频率是固定的,称之为相速度,
vp=λf,其中
λ 是载波波长,
f 是载波频率。对应的相折射率为
np。而载波上调制的数据信息可以看做是多个不同频率的波叠加而成的群波,其速度称之为群速度
vg。对应的群折射率为
ng。
由电磁波的理论,我们可以得到群折射率与相折射率之间的关系为:
ng=np+fdfdnp
在弥散性介质中,相折射率
np 和频率
f 的关系可以表达为:
np=1+f2a1+f3a2+f4a3+⋯
其中的系数
a1,a2,a3,⋯ 与自由电子浓度有关,通过实际测量可以得到其数值。
忽略高阶项,有
np=1+f2a1
于是可得
ng=1−f2a1
如果信号传播路径上的自由电子浓度用
Ne 表示,则系数
a1 可以表示为:
a1=−40.28Ne
令路径自由电子总计数 TEC 为
TEC=∫SNe(s)ds
其中
S 为信号在电离层中的传播路径。则卫星信号在电离层中传播的相延迟量
Ip=∫S(np−1)ds=∫Sf2a1ds=−f240.28∫SNe(s)ds=−f240.28 TEC
类似的,卫星信号在电离层中传播的群延迟量
Ig=∫S(ng−1)ds=−∫Sf2a1ds=f240.28∫SNe(s)ds=f240.28 TEC
对于卫星信号来说,对载波相位观测量造成影响的相延迟量,而对伪距观测量造成影响的是群延迟量。
双频接收机消除电离层延时
由前面的公式可知,电离层延时与载波频率有关,所以若有两个不同频率的观测量,我们就可以进行组合消除电离层延时。
对于一个双频接收机来说,设在两个不同频点
f1、
f2 下的伪距观测量分别为
ρ1、
ρ2,电离层延迟分别为
I1、
I2,则有
I2−I1=ρ2−ρ1
I1=f12−f22f22(ρ2−ρ1)
I2=f12−f22f12(ρ2−ρ1)
所以经过电离层校正后的伪距为
ρ1,2=ρ1−I1=ρ2−I2=f12−f22f12ρ1−f12−f22f22ρ2
单频接收机消除电离层延时
单频接收机因为只有一个接收频点,无法通过双频来消除电离层延时,替代的方案是用电离层数学模型。
最常用的模型,也是 GPS 系统中用的模型,是 Klobuchar 模型。此模型包含8个电离层参数:
α0, α1, α2, α3, β0, β1, β2, β3。在GPS导航电文中,第4子帧第18页广播了这8个参数。
根据这8个参数来计算电离层延时的方法如下:设
E、
A 分别为接收机到卫星的仰角和方位角,
ϕu、
λu 分别为接收机的位置在WGS-84坐标系中的纬度和经度,
Tgps为当前GPS系统时间,
I 为最终计算出的电离层延时,则
ψ=E+0.110.0137−0.022(semi-circle)
ϕi=⎩⎨⎧ϕu+ψcosA,∣ϕi∣≤0.416ifϕi>0.416,thenϕi=0.416ifϕi<−0.416,thenϕi=−0.416⎭⎬⎫(semi-circle)
λi=λu+cosϕiψsinA(semi-circle)
ϕm=ϕi+0.064cos(λi−1.617)(semi-circle)
t=43200λi+Tgps,0≤t<86400(sec)
F=1.0+16.0×(0.53−E)3(semi-circle)
AMP=⎩⎪⎨⎪⎧n=0∑3αnϕmn,AMP≥0if AMP<0,AMP=0⎭⎪⎬⎪⎫(sec)
PER=⎩⎪⎨⎪⎧n=0∑3βnϕmn,PER≥72000if PER<72000,PER=72000⎭⎪⎬⎪⎫(sec)
x=PER2π(t−50400)(rad)
I=⎩⎪⎨⎪⎧F×[5×10−9+A(1−2x2+24x4)],∣x∣<2πF×5×10−9,∣x∣≥2π⎭⎪⎬⎪⎫(sec)
以上每条公式中最后的括号内的表示运算单位,semi-circle是半圆,其与弧度的换算关系是
π 弧度等于一个半圆。
下面摘录了 RTKLIB 中用 Klobuchar 模型计算电离层延时的函数代码,可以跟以上公式进行一一对应。需要注意的是计算时的单位换算,azel[0], azel1分别是方位角和仰角,pos[0], pos1分别是接收机纬度和经度,它们的单位都是弧度,所以换算成半圆时需要除以
π。
double ionmodel(gtime_t t, const double *ion, const double *pos,
const double *azel)
{
const double ion_default[]={
0.1118E-07,-0.7451E-08,-0.5961E-07, 0.1192E-06,
0.1167E+06,-0.2294E+06,-0.1311E+06, 0.1049E+07
};
double tt,f,psi,phi,lam,amp,per,x;
int week;
if (pos[2]<-1E3||azel[1]<=0) return 0.0;
if (norm(ion,8)<=0.0) ion=ion_default;
psi=0.0137/(azel[1]/PI+0.11)-0.022;
phi=pos[0]/PI+psi*cos(azel[0]);
if (phi> 0.416) phi= 0.416;
else if (phi<-0.416) phi=-0.416;
lam=pos[1]/PI+psi*sin(azel[0])/cos(phi*PI);
phi+=0.064*cos((lam-1.617)*PI);
tt=43200.0*lam+time2gpst(t,&week);
tt-=floor(tt/86400.0)*86400.0;
f=1.0+16.0*pow(0.53-azel[1]/PI,3.0);
amp=ion[0]+phi*(ion[1]+phi*(ion[2]+phi*ion[3]));
per=ion[4]+phi*(ion[5]+phi*(ion[6]+phi*ion[7]));
amp=amp< 0.0? 0.0:amp;
per=per<72000.0?72000.0:per;
x=2.0*PI*(tt-50400.0)/per;
return CLIGHT*f*(fabs(x)<1.57?5E-9+amp*(1.0+x*x*(-0.5+x*x/24.0)):5E-9);
}
单频接收机用 Klobuchar 模型计算电离层延时大致能消除电离层延时的50%,而双频的方法能消除绝大部分,精度达到1m以下。