2. GPS定位原理回顾:信号组成、伪距测量、定位解算过程、影响定位精度的因素

做定位漂移优化这么多年,我见过太多人一上来就调滤波参数、改传感器融合策略,结果漂移反而更严重。为什么?因为没搞懂GPS到底是怎么算出位置的。说白了,你不了解定位的底层原理,就永远不知道漂移的根因在哪。

这一章,我带你把GPS定位的完整链路走一遍。从卫星发出来的信号长什么样,到手机怎么算出经纬度,再到哪些环节最容易引入误差。嗯,这些都是后面讲漂移治理的基础。

2.1 GPS信号组成:卫星到底在广播什么?

每颗GPS卫星都在不停地往外发信号。这个信号里包含三样东西:

  • 载波:L1频段(1575.42 MHz)和L2频段(1227.60 MHz)。L1上调制了C/A码和导航电文,L2主要用于军用和双频校正。
  • 测距码:C/A码(粗捕获码),码长1023个码片,周期1毫秒。每个卫星有自己唯一的C/A码,接收机靠这个区分是哪颗卫星在说话。
  • 导航电文:每秒50比特,包含卫星星历(轨道参数)、卫星钟差校正参数、电离层延迟参数、历书(所有卫星的概略轨道)等。
我个人的习惯:在分析漂移问题时,先检查接收机能不能稳定解码导航电文。如果星历数据断断续续,定位精度一定好不到哪去。我曾经遇到过一台设备,漂移特别严重,查了半天发现是天线接触不良导致导航电文误码率太高。

2.2 伪距测量:距离是怎么算出来的?

接收机测量卫星信号从卫星到接收机的传播时间,乘以光速,就得到了距离。但这里有个坑——卫星时钟和接收机时钟不同步。

卫星上装的是原子钟,精度极高。接收机里用的是石英钟,便宜但会飘。所以测出来的距离不是真实距离,而是带钟差误差的「伪距」。

伪距观测方程长这样:

ρ = r + c·(δt_u - δt_s) + I + T + ε

其中:

  • ρ:伪距观测值
  • r:卫星到接收机的真实几何距离
  • c:光速
  • δt_u:接收机钟差
  • δt_s:卫星钟差(广播星历中会给出校正参数)
  • I:电离层延迟
  • T:对流层延迟
  • ε:多路径效应、接收机噪声等其他误差
注意:伪距测量中最大的不确定性来自接收机钟差。这就是为什么GPS定位至少需要4颗卫星——3颗解位置,1颗解钟差。如果你在室内或高楼峡谷里只能看到3颗星,定位结果基本不可信。

2.3 定位解算过程:从伪距到经纬度

接收机拿到至少4颗卫星的伪距观测值后,开始解算位置。这个过程我拆成三步来讲:

  1. 卫星位置计算:从导航电文中提取星历参数,代入轨道模型,算出每颗卫星在发射信号时刻的ECEF坐标(地心地固坐标系)。
  2. 建立观测方程组:每颗卫星提供一个伪距方程,未知数是接收机三维坐标(x, y, z)和接收机钟差δt_u,共4个未知数。
  3. 最小二乘迭代求解:方程组是非线性的,需要用牛顿-拉夫森法或最小二乘法迭代求解。一般迭代3-5次就能收敛。

解出来的坐标是ECEF下的,再通过坐标转换变成我们熟悉的经纬度和海拔。

关键点:定位解算的精度高度依赖伪距观测值的质量。如果某颗卫星的伪距误差很大(比如多路径严重),它会像「一颗老鼠屎坏了一锅粥」一样拉偏整个解算结果。这就是为什么高端接收机在做定位解算前会先做RAIM(接收机自主完好性监测),把异常卫星剔除掉。

下面这张图展示了从卫星信号到最终定位输出的完整流程:

GPS定位解算完整流程 卫星信号接收 信号捕获与跟踪 伪距与载波相位提取 导航电文解码 卫星位置与钟差计算 电离层/对流层校正 建立伪距观测方程组 最小二乘迭代求解 ECEF → 经纬度/海拔 输出定位结果(位置 + 钟差) 注:虚线箭头表示数据依赖关系,实线箭头表示流程顺序

2.4 影响定位精度的因素:漂移从哪来?

你想想看,GPS信号从两万公里外的卫星发出来,穿过电离层、对流层,经过高楼反射,最后落到你手机那个小天线里。这一路上每一步都在引入误差。我把主要因素整理成了一张表:

误差来源 典型误差量级 对漂移的影响 缓解手段
卫星钟差 1-2米 系统性偏差,所有卫星共有的误差 广播星历中的钟差校正参数
星历误差 1-3米 卫星轨道预测不准导致位置计算偏差 使用精密星历(事后)或实时差分
电离层延迟 5-15米(白天) 信号穿过电离层时折射,白天比晚上严重 双频接收机、电离层模型校正
对流层延迟 2-6米 低仰角卫星影响更大 对流层模型(如Saastamoinen模型)
多路径效应 1-10米(极端可达50米) 信号反射后与直射信号叠加,伪距测量出现尖峰误差 扼流圈天线、仰角屏蔽、多路径检测算法
接收机噪声 0.5-1米 随机抖动,每次定位结果都不一样 高质量射频前端、载波平滑伪距
几何精度因子(DOP) 放大倍数(GDOP通常1-6) 卫星几何分布差时,误差被放大数倍 选择卫星子集优化GDOP
我曾经踩过一个坑:在深圳某CBD做路测,定位结果每隔几分钟就跳出去一两百米。查了半天,发现是旁边一栋玻璃幕墙大楼造成的多路径反射。那栋楼像个巨大的镜子,把卫星信号反射到接收机上,伪距测量值直接偏了30多米。从那以后,我每次做城市环境测试,都会先观察周围有没有大面积玻璃幕墙或金属结构。

2.5 几何精度因子(DOP):为什么有时候定位特别差?

DOP这个概念,我单独拿出来讲。因为它不是误差本身,而是误差的「放大器」。

DOP值反映的是卫星在天空中的几何分布质量。如果卫星分布很散(一颗在东边,一颗在西边,一颗在南边,一颗在头顶),DOP值就小,定位精度好。如果卫星都挤在一个方向,DOP值就大,定位精度差。

常见的DOP类型:

  • GDOP(几何精度因子):综合位置和时间精度
  • PDOP(位置精度因子):三维位置精度
  • HDOP(水平精度因子):水平方向精度——这个对导航最直接
  • VDOP(垂直精度因子):高程精度——通常比HDOP大1.5-2倍
我个人的经验阈值:HDOP小于1.5算优秀,1.5-2.5算良好,2.5-4.0算可用,超过4.0就要小心了。如果你发现定位结果在静止状态下还在飘,先看一眼HDOP值——很多时候不是算法问题,是卫星几何太差了。

好了,GPS定位原理这部分就讲到这里。你理解了信号怎么来、距离怎么测、位置怎么算、误差从哪来,后面再讲漂移治理的时候,我提到「多路径抑制」「电离层校正」「DOP加权」这些概念,你就知道它们是在解决哪个环节的问题了。