2. 定位原理基础:GNSS 定位基本原理(伪距、载波相位)

聊定位漂移,绕不开一个根本问题:接收机到底是怎么算出自己位置的?

很多人一上来就调天线、改滤波器,结果漂移照旧。为什么?因为没搞懂定位的底层逻辑。你想想看,如果连“伪距”和“载波相位”这两个核心测量值都分不清,排查漂移就像蒙着眼修钟表。

这一节,我就带你把这层窗户纸捅破。内容不复杂,但很关键。

2.1 核心测量值:伪距

伪距,说白了就是“测出来的距离”。

卫星在头顶广播信号,信号里带着发射时间 \( t_{sv} \)。接收机收到时记下本地时间 \( t_u \)。两者一减,乘以光速 \( c \),就得到了一个距离:

ρ = c × (t_u - t_{sv})

但这个距离不“纯”。它包含了卫星钟差、接收机钟差、大气延迟、多径效应……一大堆误差。所以叫“伪距”——有伪,不真。

伪距的典型精度: 民用单频 L1 C/A 码,理想条件下约 3-5 米。城市峡谷里,10-20 米甚至更大。

我在项目中遇到过一台设备,伪距残差突然跳到 50 米。查了半天,发现是射频前端饱和了,信号削波导致码相关峰变形。嗯,这种坑,光看定位结果是看不出来的。

伪距观测方程

把误差项拆开,伪距方程长这样:

ρ = r + c·(δt_u - δt_sv) + I + T + ε_ρ
  • r:卫星到接收机的几何距离(真值)
  • δt_u:接收机钟差(我们最关心的未知数之一)
  • δt_sv:卫星钟差(广播星历里会给出修正参数)
  • I:电离层延迟(频率相关,双频可以消除)
  • T:对流层延迟(与温度、气压、湿度有关)
  • ε_ρ:多径、噪声等未建模误差

你看,一个方程里至少有 4 个未知数(接收机位置 x,y,z 和钟差 δt_u)。所以至少需要 4 颗卫星才能解算。这就是经典的四星定位原理。

2.2 高精度测量值:载波相位

伪距精度不够,怎么办?用载波相位。

载波相位测量的是接收机复制的载波与卫星发射的载波之间的相位差。精度可以达到毫米级——比伪距高两三个数量级。

但有个大麻烦:整周模糊度。

相位测量只能测出不足一整周的小数部分,整周数 N 是未知的。方程变成:

Φ = r + c·(δt_u - δt_sv) + I - T + λ·N + ε_Φ

多了一个未知数 N(整周模糊度)。而且一旦信号失锁,N 就会跳变——这就是周跳。

避坑指南: 我曾经调试一个 RTK 项目,固定解老是掉。最后发现是接收机在低仰角卫星上频繁发生周跳,而模糊度解算模块没做周跳修复。结果就是——定位精度从厘米级直接崩到米级。所以,处理载波相位数据时,周跳探测与修复是必修课。

2.3 伪距 vs 载波相位:一张表说清楚

对比项 伪距 载波相位
测量精度 米级(3-10 m) 毫米级(1-5 mm)
模糊度 无 有(整周模糊度 N)
周跳 无 有(信号失锁时发生)
多径敏感性 中等 高(相位多径更难消除)
适用场景 单点定位、粗定位 RTK、PPP、高精度定位
收敛时间 即时 需要数秒到数十分钟(模糊度固定)

我个人习惯是:伪距做粗解,载波相位做精解。两者结合,才能既快又准。

2.4 定位解算流程

从原始观测值到最终位置,中间经过好几步。我画了一张流程图,帮你理清脉络:

GNSS定位解算流程 GNSS 定位解算核心流程 原始观测值 误差修正 最小二乘 / 卡尔曼滤波 定位结果 (ECEF/LLA) 质量评估 (DOP/残差) 说明: 伪距 + 载波相位 + 多普勒 是定位的三大原始测量值 常见修正项: 卫星钟差、电离层、对流层 相对论效应、地球自转 解算核心: 最小二乘用于静态/短基线 卡尔曼滤波用于动态/实时

我的经验: 很多漂移问题出在“误差修正”这一步。比如电离层模型用错了,或者对流层湿分量没处理好。排查时,先把误差修正项逐个关掉,看定位结果的变化——这是最直接的诊断方法。

2.5 定位漂移的根源

搞懂了原理,漂移的根源就清晰了:

  1. 伪距噪声过大:多径、低信噪比、射频干扰 → 伪距残差变大 → 定位抖动
  2. 载波相位失锁:周跳未修复 → 模糊度错误 → 位置跳变
  3. 卫星几何差:可见星少、DOP 值高 → 误差被放大 → 漂移加剧
  4. 钟差模型不准:接收机晶振温漂大 → 钟差估计偏差 → 位置偏移

你看,漂移不是凭空出现的。每一个漂移现象,背后都能对应到某个测量值或解算环节的异常。

核心观点: 排查漂移,不是靠猜,而是靠“从测量值到定位结果”的链路回溯。伪距残差大了?查多径。载波相位跳了?查周跳。定位结果飘了?查 DOP 和钟差。每一步都有迹可循。