3. 误差源分析:定位漂移的“罪魁祸首”
做GNSS定位这么多年,我最大的感受就是:定位不准,十有八九是误差没处理好。说白了,卫星信号从两万公里外传下来,一路上要穿过大气层、反射来反射去,最后才到你的接收机天线。这中间任何一个环节出点小问题,你的定位结果就会“飘”。
今天我们就来把这六个“罪魁祸首”挨个扒一扒。我个人习惯是,遇到定位漂移问题,先按这个清单排查一遍,基本能锁定80%的根因。
3.1 卫星星历误差
卫星星历,说白了就是卫星的“轨道预报”。卫星在天上飞,地面监控站一直在跟踪它,然后算出它接下来几小时的轨道参数,再通过导航电文发给你。
但问题是——预报总有偏差。太阳光压、月球引力、地球引力场不均匀,都会让卫星的实际轨道偏离预报值。这个偏差就叫星历误差。
- 典型量级:广播星历误差约 1~5 米(RMS)
- 对定位的影响:直接映射到用户位置误差,约 1:1 的关系
- 我遇到过的情况:有一次在山区测试,发现定位结果整体往南偏了 3 米。查了半天,最后发现是当天某颗卫星的星历刚更新,地面站还没来得及上传最新参数。
3.2 卫星钟差
卫星上的原子钟,精度确实高,但也不是绝对完美。铯原子钟一天可能漂移几纳秒,铷原子钟漂移更大一点。你想想看,光速是 3×10⁸ m/s,1 纳秒的钟差就对应 0.3 米的距离误差。
卫星钟差,就是卫星时间与 GPS 系统时间之间的偏差。导航电文里会发一组钟差参数(a₀, a₁, a₂),用来修正这个偏差。
- 典型量级:修正后残余误差约 1~2 纳秒(对应 0.3~0.6 米)
- 关键点:钟差是 每颗卫星独立 的,不能混用
- 避坑指南:我曾经在写接收机软件时,忘了把卫星钟差参数从导航电文里正确解析出来。结果定位结果忽大忽小,折腾了两天才发现是字节序搞反了。嗯,这种低级错误,犯一次就记住了。
3.3 电离层延迟
电离层是大气层中 60~1000 公里的区域,里面有大量自由电子。GPS 信号穿过它时,传播速度会变慢,路径也会弯曲。这个延迟量,跟电子密度和信号频率有关。
为什么它这么讨厌?因为电离层延迟变化很快。白天太阳照射强,电子密度高,延迟大;晚上就小。太阳活动剧烈的时候,延迟能差好几倍。
- 典型量级:天顶方向约 2~10 米,低仰角时可达 20~30 米
- 双频消除法:如果你用的是双频接收机(L1+L2 或 L1+L5),可以直接用两个频率的伪距差算出电离层延迟,然后消除掉。这是最干净的方法。
- 单频怎么办?用 Klobuchar 模型。导航电文里带了 8 个参数,能补偿约 50%~70% 的电离层误差。
3.4 对流层延迟
对流层是大气层最下面 10~20 公里那层。这里没有自由电子,但水汽和干空气会让信号折射。对流层延迟跟电离层不一样——它不随频率变化,所以双频消除法对它没用。
对流层延迟分两部分:
- 干分量:约占 90%,由大气压力决定,比较好建模
- 湿分量:约占 10%,由水汽含量决定,变化很快,很难精确建模
| 分量 | 占比 | 建模难度 | 典型量级(天顶) |
|---|---|---|---|
| 干分量 | ~90% | 低(用 Saastamoinen 或 Hopfield 模型) | 2.3 米 |
| 湿分量 | ~10% | 高(需要气象传感器或外部数据) | 0.1~0.5 米 |
3.5 多路径效应
多路径效应,说白了就是信号“抄近道”或者“绕远路”了。卫星信号本来应该直线到达你的天线,但遇到高楼、地面、水面,就会反射。反射信号比直射信号晚到一点,叠加在一起,伪距就测不准了。
这是我最头疼的误差源。为什么?因为它没有模型可以补偿。星历误差可以建模,电离层可以建模,但多路径完全取决于你周围的环境——今天旁边停了一辆大卡车,明天开走了,多路径就变了。
- 典型量级:伪距多路径可达 10~20 米,载波相位多路径约 1~5 厘米
- 抑制方法:
- 天线设计:用扼流圈天线或抗多路径天线
- 选址:远离反射面(高楼、水面、金属围栏)
- 算法:用载波相位平滑伪距,或者用多路径检测算法剔除坏星
- 我踩过的坑:有一次在停车场做测试,定位结果一直在 2~3 米范围内跳来跳去。我以为是算法问题,折腾了一下午。最后发现——天线旁边 1 米处有一根金属排水管。移开天线后,定位立刻稳定了。嗯,有时候问题不在代码里,在物理世界里。
3.6 接收机噪声
最后一个误差源,来自接收机自己。热噪声、量化噪声、时钟抖动、射频干扰……这些都会让伪距和载波相位的测量值带上随机误差。
接收机噪声跟前面几个误差不一样——它是随机的、零均值的。也就是说,你测 100 次,平均值是准的,但单次测量有偏差。
- 典型量级:伪距噪声约 0.1~1 米(取决于信号强度和接收机质量)
- 载波相位噪声:约 1~5 毫米(远小于伪距噪声)
- 怎么处理?
- 用卡尔曼滤波平滑噪声
- 用载波相位辅助伪距(这就是 RTK 和 PPP 的基础思路)
- 提高信号跟踪的带宽(但会引入更多干扰,需要权衡)
知识体系总览
下面这张图,是我自己总结的误差源分析框架。每次做定位漂移排查,我都会按这个顺序走一遍:
这张图你看懂了吗?从上往下看:定位结果漂移了,先拆成六大误差源,然后针对每个误差源选对应的补偿方法。实际项目中,你不可能把所有方法都用上——资源有限、算力有限、成本有限。我的经验是:先解决量级最大的那个误差。比如你在城市峡谷里,多路径可能是 10 米级的误差,那你就先搞多路径抑制。电离层延迟才 2~3 米,优先级可以往后放。