ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

对流层延时:GNSS定位中最磨人的误差源,从原理到工程实践

对流层延时:GNSS定位中最磨人的误差源,从原理到工程实践 GPS从入门到放弃这个系列写了这么多篇每次聊到误差源总有朋友在评论区问为什么我明明看到卫星不少、天空也晴朗单点定位还是稳定地偏着三到五米星历钟差排查了一圈也没问题。这个系列前面聊过卫星钟差、星历误差、电离层延时、多径这些经典话题今天这篇终于要讲一个最“磨人”的误差源——对流层延时。对流层延时的麻烦之处在于它不像电离层那样可以用双频消掉一阶项也不像多径那样能靠天线摆放和算法抑制它跟气压、温度、湿度绑定在一起模型做得再努力也可能留下残差。尤其在做RTK和PPP解算时对流层延时处理得好不好直接决定模糊度能不能固定、固定要花多少时间。这篇文章我会从物理本质、数学模型、映射函数、工程实现一直到实操里踩过的坑完整过一遍适合正在做GNSS定位开发的工程师也适合系统学习RTK/PPP解算的同学。1. 为什么说对流层是“最磨人”的误差源1.1 信号穿过大约12公里大气层时发生了什么先确立一个坐标系。GPS卫星高度大约两万公里信号从卫星到接收机在绝大部分路径上都是在近真空环境里飞行真正有“东西”干扰它的是接近地面这一薄层大气。对流层就是大气层最底下这一层从地面往上大约8到16公里赤道附近厚一些两极薄一些中纬度地区平均约12公里左右。信号穿过这层大气时会发生两个物理效应第一传播速度变慢。对流层的主要成分是氮气、氧气、水汽这些气体会让电磁波的相速度和群速度都低于真空光速。GPS测距本质上是通过信号传播时间来推导距离速度变慢就意味着接收机测出来的距离变长。第二路径弯曲。对流层折射率不是均匀的越靠近地面空气越稠密折射率越大。信号从斜方向进入大气层时相当于从一个折射率渐变介质里穿过路径不再是一条直线而是被“掰弯”了。路径弯曲导致的额外路径长度同样会让测距结果偏大。这两个效应加在一起就叫对流层延时。有人把它理解成“信号在对流层里跑得慢所以到得晚”这个说法对但不够完整——路径弯曲带来的“走了弯路”也是延时的重要组成部分。在IOU低高度角观测时路径弯曲的贡献会更明显。1.2 非弥散介质这个性质决定了它无法用频率组合消除对流层延时和电离层延时最大的区别不在于高度而在于介质的性质。电离层是弥散介质dispersive medium它对GPS L1、L2频率的折射率不一样延时大小与频率的平方近似成反比。正因为如此双频接收机做一个无电离层组合ionosphere-free combination就能把一阶电离层延时消掉。但对流层是非弥散介质。在GPS的L1、L2、L5这些频率上对流层的折射率几乎与频率无关。也就是说信号不管在哪个频率上飞过同一段对流层受到的延时都差不多。你组无电离层组合时解算方程里对流层延时还在那儿温度、气压、湿度照样往结果里钻。注意严格来说对流层也有一点点色散效应但在GPS频段这个量级微乎其微工程上完全可以忽略。所以“双频组合消不掉对流层”这句话在日常定位场景下是成立的。也是因为这个特性对流层延时没法像电离层那样“一劳永逸”地通过硬件频率组合来解决只能靠建模、靠估计、靠差分来对付。1.3 先建立一个量级直觉说了这么多理论先给一个直观的量级概念免得后面看公式时没有感觉。在海平面、标准大气条件气压1013.25 hPa、温度15℃下对流层天顶方向的总延时大约在2.3到2.6米之间。注意这是卫星正好在头顶正上方时的延时值已经不小了。但卫星不可能总在头顶。高度角越低信号经过对流层的路径就越长延时也越大。用最简单的映射关系估算一下天顶方向90°高度角约2.4米30°高度角约4.8米10°高度角约14米5°高度角约25米以上这里有个很反直觉的点GPS单点定位看起来误差也就是三五米好像对流层延时“没那么夸张”。这是因为接收机内部一般已经用模型把大部分对流层延时扣掉了你看到的残差是扣完以后剩下的部分。但如果你自己写解算程序没有做对流层改正伪距上就挂着这几十米的系统误差定位结果会偏得非常离谱。2. 干湿分家对流层延时建模的主线逻辑2.1 一个折射率模型看整个对流层延时对流层延时能建模依赖的是大气折射率与气象参数之间的关系。工程上常用的简化是把对流层总延时拆成两部分对流层延时 干分量hydrostatic delay 湿分量wet delay干分量由干燥空气主要是氮气和氧气引起湿分量由水汽引起。为什么一定要拆开因为这两个分量的物理特性和可预测性完全不同精确处理的话必须分而治之。有人可能会问为什么不直接用总延时公式一起建模因为水汽在大气里的分布极不均匀而且变化剧烈。干燥空气可以用地面气压通过静力学方程精确推导水汽却没法用简单的点测量外推出整层大气的积分效果。2.2 干分量有气压就能算得很准天顶方向的干分量延迟ZHDZenith Hydrostatic Delay有一个相当著名的经验模型叫Saastamoinen模型ZHD 0.0022768 × P / (1 - 0.00266 × cos(2φ) - 0.00028 × h)其中P是接收机位置的地表气压单位hPaφ是纬度弧度h是海拔高度单位km。结果就是以米为单位的天顶静力学延迟。为什么这个公式只用气压就能算准干延迟核心在于大气静力学方程。干燥空气对折射率的贡献大致正比于空气密度而整层干燥空气的“总质量”与地面气压直接相关。换句话说你测到地面有多少气压就约等于知道了头顶上干燥空气总共有多少积分结果自然就锁定了。温度的具体分布对干延迟的影响很小所以不需要准确知道整层的温度剖面。做个具体计算。假设你所在的位置是北纬30°海拔0米气压正好是标准大气1013.25 hPaZHD 0.0022768 × 1013.25 / (1 - 0.00266 × cos(60°) - 0) 2.307 / 0.99867 ≈ 2.31 m也就是说干分量在天顶方向贡献了大约2.31米的延时。这个分量的可预测性非常好气压测量偏差1 hPaZHD的误差大约只有2.3毫米。如果你手边有一个校准得还过得去的气压传感器干延迟部分基本就能被锁定到毫米级。这也是后面所有高精度定位算法敢把干分量直接算死、不去估计它的底气。2.3 湿分量最难缠的那10%湿分量延迟ZWDZenith Wet Delay的量级比干分量小得多标准大气条件下大约在5到40厘米之间取决于空气中的水汽含量。夏季潮湿地区ZWD可以到30厘米甚至更高冬季干燥地区可能只有几厘米。Saastamoinen模型也给出了一个湿分量的近似公式ZWD 0.0022768 × (1255 / T 0.05) × e其中T是地表温度Ke是水汽压hPa。继续用上面的例子温度15℃即288.15 K水汽压12 hPaZWD 0.0022768 × (1255 / 288.15 0.05) × 12 ≈ 0.12 m这个12厘米的延时放在厘米级精密定位里已经很大了。更要命的是水汽在垂直方向和水平方向都极不均匀而且随时间变化剧烈。一场锋面过境ZWD在几小时内波动十几厘米都很正常。所以工程上的思路就很清晰了干分量用模型算死湿分量能测就测测不准就当未知数估。3. 从天顶到斜路径映射函数的选择决定了低高度角数据的去留3.1 为什么不能直接用天顶延时乘1/sin(e)模型算出来的ZHD、ZWD都是天顶方向的延时。但卫星不可能一直在天顶每颗卫星都有自己对应的高度角e。要把天顶延时变成斜路径上的延时需要乘一个大于1的系数这个系数就叫映射函数mapping function。最朴素的映射函数是平面大气模型m(e) 1 / sin(e)它的物理图像是把大气想象成一层均匀的平板信号斜着穿过这层平板路径长度就是厚度除以sin(e)。这个模型在天顶附近高度角大于30°还算靠谱误差一般只有毫米到厘米级。但高度角一旦低下来问题就暴露了地球曲率被忽略了。真实大气是球壳结构视线接近水平时穿过大气的路径比平板模型算出来的还要长。信号路径弯曲效应没算进去。低高度角时路径弯曲很明显实际路径比视在几何路径更长。大气的折射率梯度导致实际射线追踪的结果和1/sin(e)偏差越来越大。在10°高度角简单1/sin(e)模型带来的映射误差可能达到几十厘米的等效延时误差。这个误差反馈到定位解算里会把低高度角卫星的观测值带偏得不偿失。这也是为什么低高度角卫星在现代接收机里经常被直接丢弃——不是信号本身不好而是我们的误差模型在中低高度角上已经不太够用了。3.2 从查表到全球模型NMF/GMF/VMF1的演进为了让映射函数在中低高度角也足够准学界花了很多年迭代。这几个名字你大概率见过简单梳理一下它们是什么、有什么区别Niell映射函数NMF1996年 NMF的最大贡献在于它提出干、湿映射函数都可以表示成关于高度角、纬度和年积日的解析查表函数而且不需要实时气象观测数据。它把大气层垂向结构的一些统计特性压缩到了系数表里用起来非常简单在很长一段时间里是RTKLIB等开源软件的主流选择。Global Mapping FunctionGMF2006年 GMF是基于VMF1的近似形式用球谐函数展开来逼近VMF1的映射函数系数。好处是只需要知道接收机纬度、经度、高度和年积日就能算出映射函数系数不需要联网查网格数据非常适合实时计算和嵌入式环境。VMF12006年与VMF3 VMF1基于ECMWF欧洲中期天气预报中心的数值天气模型数据按网格提供逐日或逐6小时的映射函数系数。因为直接来自数值天气模型的分层积分精度通常优于NMF和GMF是目前毫米级PPP处理里比较受认可的选择。VMF3是更新版本网格更细、时间分辨率更高。实际项目里怎么选我的经验是单点定位用1/sin(e)都行因为精度本来就在米级映射函数的误差不会成为瓶颈。短基线RTK双差处理下映射函数差异基本被抵消不必纠结。中长基线RTK或PPP至少用NMF最好用GMF/VMF1。高精度科学计算VMF1/VMF3网格产品是标配。3.3 截止高度角取舍的工程经验看到这里你应该明白低高度角卫星是一把双刃剑一方面确实能为几何构型贡献力量另一方面背后拖着巨大的对流层误差、多径误差以及大气湍流影响。行业里有个朴素的约定开阔环境设10°或15°截止高度角城市峡谷里可以适当提高到20°甚至25°犄角旮旯的弱信号环境宁可用少而精的卫星也不用一堆脏数据。我自己做城市车载测试时习惯把截止高度角设到15°。原因是城市里低高度角信号被建筑物反射的概率太高多径和对流层误差叠在一起很差的那几颗卫星虽然能参与解算但经常把平面位置拉偏一二十厘米。RTK模式下模糊度固定率反而比用10°截止时更高。4. 定位解算里对流层延时是怎么被处理掉的4.1 单点定位模型改正打底如果你在做传统单点定位SPP对流层延时一般通过“改正数”的方式处理。流程不复杂用标准大气模型或实测气象参数按接收机概略位置算出ZHD和ZWD。用映射函数把天顶延时投影到每颗卫星的斜路径方向。从伪距观测方程中把这一项改成已知值扣掉。没有气象传感器时可以用标准大气参数代入精度会差一些但比完全忽略对流层延时强得多。毕竟天顶延时2米多完全不改正的话定位结果直接上天。4.2 短基线RTK差分带来的“免费午餐”短基线RTK尤其是10公里以内算是比较舒服的场景。两台接收机之间距离不远看到的对流层状态非常接近。做双差观测时两站的干、湿延迟基本都被差分消除掉了不需要额外建模。这也就是为什么基线越短RTK越“无脑”也能做到厘米级。你不需要关心当天的湿分量是多少因为公共误差被差分抵消了。但基线拉长到几十公里以后两站之间的水汽分布开始出现明显差异双差残余的对流层误差会变大。我做过一条40公里基线的实验不处理湿延迟的情况下模糊度固定经常失败即使固定上了高程方向也能看到几个厘米的起伏。这个时候就必须引入对流层处理策略了。4.3 PPP与长基线RTK把湿延迟本身估计出来精密单点定位PPP和长基线RTK不能靠差分把外界误差完全消掉所以常用的做法是把对流层湿延迟当成一个未知状态量在滤波器里实时估计。具体来说干分量ZHD用Saastamoinen模型或GPT3给出的网格值直接固定。湿分量ZWD设一个初始值然后用卡尔曼滤波按随机游走random walk估计它的实时变化。映射函数用NMF或GMF把估计出来的天顶湿延迟投影到每颗卫星方向。随机游走的噪声参数需要根据天气情况调。实测下来湿延迟变化平缓时过程噪声设小一点收敛更快天气突变时如果噪声设太小ZWD估计值会跟不上真实变化定位结果出现阶梯状跳变。几种典型场景的对流层处理策略可以归成这张表应用场景对流层处理策略说明单频/双频SPP标准大气或实测气象参数 简单映射函数满足米级定位短基线RTK10km差分自动抵消基本不额外建模厘米级固定不受影响中长基线RTK10~100km干延迟固定 湿延迟参数估计模糊度固定率和稳定性提升明显PPP干延迟模型 ZWD随机游走估计 GMF/VMF1收敛后可达厘米级事后高精度处理VMF1/VMF3网格产品 ZWD估计毫米级科学应用标准配置5. “双频能消掉对流层”是流传最广的误解5.1 电离层和对流层就像镜子的两面把电离层和对流层放在一起看会发现它们几乎是镜子的两面电离层是弥散介质延时与频率有关一阶项可以靠双频组合消掉对流层是非弥散介质延时与频率无关双频组合根本消不掉。很多人在地面用手机或入门级GPS模块时产生一个错误印象双频设备比单频设备精度高是因为“双频把所有大气误差都消了”。实际上双频组合能消除的是电离层误差而对流层延时它动不了。NOAA和很多科研机构发布的数据里都有类似案例双频接收机在SPP模式下如果固件没做对流层修正误差依然稳定在三到五米。5.2 一个典型的翻车现场我见过一个比较典型的翻车场景有个项目组用双频板卡做城市路测发现高程方向系统性偏低。查了一圈先说星历没问题再看天线相位中心也没错最后定位到代码里——厂商提供的原始观测值里根本没做对流层改正而他们的解算程序里也漏了这一步。双频无电离层组合确实把电离层贡献消掉了但2米多的对流层延时原封不动地留在残差里。所以提醒一句如果你自己写解算程序拿到双频观测值之后脑子里要有一根弦——无电离层组合里仍包含完整的对流层延时必须单独处理。6. 实操中我踩过的对流层相关坑6.1 气压传感器的零点偏移毁了整片天顶延时有一段时间我用消费级气压计测的气压计算ZHD一开始觉得量级对得上但做PPP收敛后的高程残差总是整体偏几厘米。后来用经过实验室校准的气压计一对比发现偏差了大约5 hPa。ZHD公式对气压的敏感度大约是2.3mm/hPa5 hPa就相当于1.15厘米的天顶延时误差。放到斜路径上低高度角卫星被影响得更多。别小看这几厘米在PPP解算里它会污染高程分量还会拖慢收敛。从那以后我养成了一个习惯但凡做需要厘米级精度的实验气压计必须现场校准用当地气象站的实时气压互相比对一下再开工。6.2 固定气象参数对抗不了天气突变有次做长基线实验早上天气晴朗我为了方便直接把温度、气压、湿度都设成了固定值。结果下午一阵暴雨云压过来湿分量的变化幅度很快就突破了设定值定位结果明显变差。说实话对流层湿分量的变化比很多人想象的要快。水汽在垂直方向的输送、风场的扰动、雷暴前的水汽积累都会让ZWD在几小时内波动十几厘米。如果你的系统用的是固定气象参数那必须意识到这些参数只代表某一时刻的近似值天气突变时会成为主要误差源之一。解决思路是实时接入气象传感器或者把ZWD作为状态量估计两者都远比一个固定参数靠谱。6.3 低高度角卫星不是多多益善我在用NMF之前曾经为了“多收几颗星”把截止高度角降到5°结果在城市峡谷环境里平面位置抖动明显变大。原因并不难理解5°高度角信号穿过的对流层路径是接近25米量级的延时映射函数稍微有一点误差就能放大到分米级再加上城市里多径严重这样的观测值参与解算反而拉低了整体精度。后来我把截止高度角按环境区分开阔场景用10°城市车载环境用15°RTK浮点解发散时直接抬到20°再试。经验原则是宁可少两颗低高度角卫星也不要让几路被污染的数据拖垮整体解。6.4 RTK基线变长后湿延迟成了隐藏瓶颈前面提到的40公里基线实验一开始我对双差很有信心结果发现高程方向在固定解和浮点解之间反复横跳。分析后发现双差后残余的湿延迟已经达到厘米级而映射函数不匹配和两站水汽差异还在加剧这个残余。把处理策略改成“干延迟固定 湿延迟估计”之后固定率上来了高程方向的波动也稳定了许多。长基线RTK的精度瓶颈经常不是模糊度解算本身而是对流层这个“看不见的系统误差”。6.5 几个快速验证对流层改正是否到位的小手段最后分享几个我在验证对流层处理效果时常用的小手段比较直接把解算出来的ZTD估计值和附近IGS站或者气象服务商提供的ZTD产品对比。正常情况下ZTD时间序列应该是平滑变化的如果像噪声一样乱跳说明观测质量或过程噪声设置有问题。做PPP时故意关掉对流层改正解算结果会明显变差尤其是高程分量。如果关了改正之后定位精度没有明显变化多半是别的大误差占主导比如钟差或者模糊度未固定。观察低高度角卫星的新息。如果某颗低高度角卫星的新息总是比其他卫星大很多排查一下映射函数和该方向的改正值极有可能就是模型在低高度角不够准。对流层延时这个主题说起来概念不复杂但工程上细枝末节很多。从物理本质到干湿分家再到映射函数和滤波估计每一步都决定了最终毫米级、厘米级还是米级的分野。理解了这个误差源的脾气再回头去看RTK和PPP里那些“默认选项”你会明白很多事情并不是黑盒只是背后的模型在替你干活。
返回列表