4、伪距测量原理:C/A码、P码,伪距是怎么测出来的?误差从哪来?

伪距测量,说白了就是GPS接收机跟卫星之间“测距离”的基本功。你想想看,卫星在天上飞,接收机在地上跑,怎么知道它们之间有多远?

我刚开始接触这个领域的时候,也觉得挺神奇的。后来才明白,原理其实不复杂——就是测时间。卫星发一个信号,接收机收到它,中间花了多少时间,乘以光速,距离就出来了。

但问题来了:这个“时间差”怎么测?用什么信号测?测出来为什么叫“伪距”?误差又从哪里冒出来的?

嗯,咱们一个一个说。

4.1 测距码:C/A码和P码

GPS卫星发射的信号,本质上是一个载波,上面调制了两种码:C/A码(粗捕获码)和P码(精密码)。

我习惯把C/A码叫做“民用码”,P码叫做“军用码”。虽然现在L2C、L5这些新信号也出来了,但C/A码和P码仍然是理解伪距测量的基础。

特性 C/A码 P码
码速率 1.023 MHz 10.23 MHz
码长 1023 码片 约 6.1871 × 10¹² 码片
重复周期 1 毫秒 7 天
测距精度 约 3 米(码片级) 约 0.3 米(码片级)
主要用途 民用、快速捕获 军用、高精度

你可能会问:为什么C/A码的测距精度比P码差一个数量级?

原因很简单。码速率越高,每个码片对应的时间越短,距离分辨率就越高。C/A码一个码片对应约293米,P码一个码片对应约29.3米。接收机一般能做到码片级的1%~10%的跟踪精度,所以C/A码的理论精度在3米左右,P码在0.3米左右。

我个人的经验:在实际项目中,C/A码的伪距噪声通常在0.5~1米(1σ),P码可以做到0.1~0.3米。但别高兴太早——P码是加密的,民用接收机只能拿到C/A码。除非你用半无码技术去“偷”P码,但那又是另一回事了。

4.2 伪距是怎么测出来的?

伪距测量的核心,就是码相关。

接收机内部会自己产生一个C/A码的副本,然后跟卫星发下来的信号做相关运算。当两个码对齐的时候,相关值最大。这个“对齐”的时间偏移量,就是信号传播的时间。

我画了一张图,帮你理解这个过程:

伪距测量原理:码相关过程 卫星发射的C/A码 接收机本地C/A码副本 相关器 相关峰检测 → 时延τ 伪距 ρ = c × τ 关键说明 • 接收机通过滑动本地码相位,找到相关峰值对应的时延τ • 这个τ包含了信号传播时间 + 卫星钟差 - 接收机钟差 • 所以测出来的不是真距,而是“伪距”

伪距的数学表达式很简单:

ρ = c × (t_r - t_s)

其中:
ρ  = 伪距测量值(米)
c  = 光速(299792458 m/s)
t_r = 接收机收到信号时的本地时间
t_s = 卫星发射信号时的卫星时间

但这里有个坑——t_r和t_s不是同一个时钟。卫星用的是星载原子钟,接收机用的是石英钟。两个钟之间有时间差,所以测出来的距离不是真距,而是“伪距”。

伪距的完整观测方程:

ρ = r + c × (δt_r - δt_s) + I + T + ε

其中 r 是真实几何距离,δt_r 是接收机钟差,δt_s 是卫星钟差,I 是电离层延迟,T 是对流层延迟,ε 是测量噪声。

你看,伪距里藏了这么多东西。定位的过程,其实就是从伪距里把这些误差项一个一个剥离出来。

4.3 误差从哪来?

伪距的误差来源,我习惯分成三大类:卫星端、传播路径端、接收机端。

咱们一个一个看。

4.3.1 卫星端误差

  • 卫星钟差:星载原子钟虽然准,但也不是绝对精确。卫星钟差通常在几纳秒到十几纳秒,对应几米的距离误差。广播星历里会发钟差修正参数,但修正后仍有残差。
  • 轨道误差:卫星的实际位置跟广播星历算出来的位置有偏差。广播星历的轨道误差一般在1~2米,精密星历可以做到厘米级。
  • 相对论效应:卫星在高速运动,引力场也比地面弱,时钟会变快。GPS系统已经做了频率补偿,但残差仍然存在。

4.3.2 传播路径误差

这是伪距误差里最大的一块。我做过一个项目,在赤道附近测试,电离层延迟最大能到30米以上。

  • 电离层延迟:信号穿过电离层时,传播速度会变慢(对码相位而言)。延迟量跟频率的平方成反比,所以双频接收机可以消除它。单频接收机只能靠模型修正,修正后残差仍有5~10米。
  • 对流层延迟:对流层对信号也有延迟,但它是非色散的,跟频率无关。延迟量在2~25米之间,取决于卫星仰角和气象条件。
  • 多路径效应:信号从建筑物、地面反射后进入接收机,跟直射信号叠加,造成测距误差。多路径误差很难建模,是城市环境下的主要误差源。
我曾经踩过的坑:有一次在楼宇密集的CBD做测试,伪距噪声突然飙到10米以上。排查了半天,发现是旁边玻璃幕墙的强反射。后来我养成了一个习惯——测试前先看周围环境,有玻璃幕墙、金属屋顶的地方,数据一定要打上标记。

4.3.3 接收机端误差

  • 接收机钟差:石英钟的稳定性远不如原子钟,漂移量很大。好在定位解算时会把接收机钟差当作未知数一起估计,所以它不直接影响定位精度,但会影响伪距观测值的质量。
  • 码跟踪噪声:接收机在跟踪C/A码时,相关峰检测会有随机误差。这个噪声跟信号强度、带宽、相关器设计都有关系。
  • 通道间偏差:不同射频通道的硬件延迟不一样,会造成通道间的伪距偏差。好的接收机会做通道校准。

4.4 误差量级一览

我把典型误差量级整理成了表格,方便你参考:

误差源 典型量级(1σ) 能否消除/削弱
卫星钟差残差 0.5~1.0 m 差分定位可消除
轨道误差 1.0~2.0 m 精密星历、差分定位
电离层延迟 2.0~30.0 m 双频消除、模型削弱
对流层延迟 2.0~25.0 m 模型削弱、参数估计
多路径效应 0.5~10.0 m 天线设计、抗多径算法
接收机噪声 0.1~1.0 m 高带宽、高精度跟踪
我建议:做定位算法的时候,别只看伪距精度。要关注误差的相关性。比如电离层延迟在空间上是相关的,两个接收机距离很近时,电离层延迟几乎一样。这就是RTK(实时动态差分)能实现厘米级定位的基础。

4.5 小结

伪距测量是GNSS定位的基石。C/A码和P码提供了测距信号,码相关技术把传播时间提取出来,乘以光速就得到了伪距。但伪距里塞满了各种误差——卫星钟差、轨道误差、电离层、对流层、多路径、接收机噪声……

你想想看,如果直接拿原始伪距去定位,精度大概在10米左右。但如果我们能把这些误差一项一项地建模、消除,精度就能从10米降到1米,甚至厘米级。

嗯,这就是后面几章要讲的内容了。