GPS从入门到放弃(十七) --- 对流层延时

GPS从入门到放弃(十七) — 对流层延时

对流层概念

对流层(Troposphere)地球大气层靠近地面的一层。它同时是地球大气层里密度最高的一层,它蕴含了整个大气层约75%的质量,以及几乎所有的水蒸气及气溶胶。

  • 对流层的下界与地面相接,上界高度随地理纬度和季节而变化,在低纬度地区平均高度为 17 ~ 18 公里,在中纬度地区平均为 10 ~ 12 公里,在高维度地区平均为 8 ~ 9 公里,并且夏季高于冬季。
  • 卫星导航领域所说的对流层与严格的大气科学中的对流层定义有所区别。卫星导航领域中需要考虑对流层延时,所以把从地球表面到电离层之间的区域都认为是对流层,即从0km到约50km的大气层区域。
  • 云、雾、雨、雪等众多天气现象都发生在对流层。
  • 对流层中主要的传播方式或效应有:大气折射、波导传播、对流层散射、多径传播、大气吸收,以及水汽凝结体和其他大气微粒的吸收和散射。

对流层对卫星导航的影响

因为卫星都处于大气层外,卫星信号传播到地球上必须要经过大气层中的对流层,于是必然要受到对流层的影响。
对流层是非弥散性介质,即介质的介电常数与频率无关,所以在对流层中,不同频率的电磁波具有相同的传播速度。因此在电离层延时一文中用到的利用双频接收机消除电离层延时的方法对对流层就无法使用了。这使得我们在实际中一般采用数学模型来估计对流层延时。当然,对于有基站的情况,也可以通过差分的方式来消除对流层延时(可参考文章差分GPS)。

对流层模型

可能是由于对流层模型太多,准确度并不是那么高,在GPS的接口说明文档中并没有给出官方的参考对流层模型。这里我们以 RTKLIB 中用到的 Saastamoinen 模型说一下。

标准大气层模型可以表示为:
p = 1013.25 × ( 1 2.2557 × 1 0 5 h ) 5.2568 p = 1013.25 \times (1-2.2557\times 10^{-5} h)^{5.2568}

t = 15.0 6.5 × 1 0 3 h + 273.15 t = 15.0 - 6.5 \times 10^{-3} h +273.15

e = 6.108 × exp [ 17.15 T 4684.0 T 38.45 ] × h r e l e = 6.108 \times \exp\left[\frac{17.15T-4684.0}{T-38.45}\right] \times h_{rel}

其中 h h 是海拔高度, h r e l h_{rel} 是相对湿度, p p 为大气压力, e e 为大气中的水汽压力, T T 为大气温度。

一般对流层模型中,将对流层天顶总延迟(ZTD:Zenith Total Delay)分为对流层静力学延迟(ZHD:Zenith Hydrostatic Delay)和对流层湿延迟(ZWD:Zenith Wet Delay)。静力学延迟约占总延迟量的90%,可以通过实测气压和气温来计算,而湿延迟影响因素较多,不太容易估算。

根据 Saastamoinen 模型,对流层延时 T r T_r 可以表示为静力学延迟 T h T_h 与 湿延迟 T w T_w 的和:
T h = 0.0022768 p 1.0 0.00266 cos ( 2 ϕ ) 0.00028 h × 1 0 3 × 1 cos z T_h = \frac{0.0022768\:p}{1.0-0.00266\cos(2\phi)-0.00028\:h\times 10^{-3}} \times \frac{1}{\cos z}

T w = 0.0022768 ( 1255 T + 0.05 ) e × 1 cos z T_w = 0.0022768\left(\frac{1255}{T}+0.05\right)e \times \frac{1}{\cos z}

T r = T h + T w T_r = T_h + T_w

其中 z = π / 2 e l z = \pi/2-el 为天顶角, e l el 为卫星仰角。

下面摘录了 RTKLIB 中用 Saastamoinen 模型计算对流层延时的函数代码,可以跟以上公式进行一一对应。需要注意的是计算时的单位换算,azel[0], azel[1]分别是方位角和仰角,pos[0], pos[1]分别是接收机纬度和经度,它们的单位都是弧度,pos[2]为接收机高度,单位为米。

/* troposphere model -----------------------------------------------------------
* compute tropospheric delay by standard atmosphere and saastamoinen model
* args   : gtime_t time     I   time
*          double *pos      I   receiver position {lat,lon,h} (rad,m)
*          double *azel     I   azimuth/elevation angle {az,el} (rad)
*          double humi      I   relative humidity
* return : tropospheric delay (m)
*-----------------------------------------------------------------------------*/
extern double tropmodel(gtime_t time, const double *pos, const double *azel,
                        double humi)
{
    const double temp0=15.0; /* temparature at sea level */
    double hgt,pres,temp,e,z,trph,trpw;

    if (pos[2]<-100.0||1E4<pos[2]||azel[1]<=0) return 0.0;

    /* standard atmosphere */
    hgt=pos[2]<0.0?0.0:pos[2];

    pres=1013.25*pow(1.0-2.2557E-5*hgt,5.2568);
    temp=temp0-6.5E-3*hgt+273.16;
    e=6.108*humi*exp((17.15*temp-4684.0)/(temp-38.45));

    /* saastamoninen model */
    z=PI/2.0-azel[1];
    trph=0.0022768*pres/(1.0-0.00266*cos(2.0*pos[0])-0.00028*hgt/1E3)/cos(z);
    trpw=0.002277*(1255.0/temp+0.05)*e/cos(z);
    return trph+trpw;
}
发布了63 篇原创文章 · 获赞 16 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/tyst08/article/details/104200976
今日推荐