GNSS 高级篇
7 PVT 解算
7.1 PVT 解算原理阐释
PVT 是 Position(位置)、Velocity(速度)、Time(时间)的缩写——这是 GNSS 接收机最终要输出的三个结果。前面所有的捕获、跟踪,都是为了得到伪距和载波相位;而 PVT 解算,就是把这些测量值变成用户真正关心的经纬度、速度和时间。
在正式开始前,请大家思考几个问题:
1,为什么定位至少需要 4 颗卫星?3 颗不行吗?多一颗卫星到底多了什么信息?
2,伪距里包含了接收机钟差,这个钟差是怎么"顺便"解出来的?
3,定位误差到底来自哪里?为什么开阔地能到 3 米,城市里却可能偏几十米?
4,什么是 GDOP?为什么卫星的几何分布会影响定位精度?
接下来我们从最基本的原理出发,把 PVT 解算讲透。
7.1.1 定位的基本原理:距离交会
GNSS 定位的基本原理很简单——距离交会(Trilateration)。
a. 二维情况:3 个圆的交点
想象一下,你在一个平面上,知道自己离 A 点 10 公里,离 B 点 8 公里,离 C 点 12 公里。
- 以 A 为圆心、10 公里为半径画一个圆
- 以 B 为圆心、8 公里为半径画一个圆
- 两个圆交于两点——你在其中一个点上
- 再以 C 为圆心、12 公里画圆,三个圆的共同交点就是你的位置
二维定位需要 3 个距离(3 颗卫星)。
b. 三维情况:4 个球的交点
三维空间中,每个距离对应一个球面。
- 1 个球:你在球面上(无数可能)
- 2 个球:交线是一个圆(无数可能)
- 3 个球:交于两个点(通常一个在地面,一个在太空,可以排除太空的那个)
- 4 个球:唯一交点
理论上三维定位需要 3 颗卫星(排除不合理的解),但实际上需要 4 颗——因为还有钟差这个未知数。
7.1.2 为什么需要 4 颗卫星:钟差的引入
a. 伪距方程
每颗卫星的伪距可以写成:
ρ_i = r_i + c×(b_u - b_sv,i) + I_i + T_i + ε_i
其中:
- ρ_i:第 i 颗卫星的伪距(测量值)
- r_i:第 i 颗卫星到用户的真实距离(未知,跟用户位置有关)
- c:光速
- b_u:接收机钟差(未知)
- b_sv,i:第 i 颗卫星的钟差(已知,从星历获取)
- I_i:电离层延迟(可以建模或双频修正)
- T_i:对流层延迟(可以建模修正)
- ε_i:测量噪声
用户位置是三维的(x, y, z),加上钟差 b_u,一共 4 个未知数。
所以需要 4 个方程(4 颗卫星)才能解出 4 个未知数。
b. 钟差有多大?
接收机用的是普通晶振,频率偏差可能有 1~10ppm——对应时间偏差可能达到几毫秒到几十毫秒。
1 毫秒的钟差 × 光速 = 300 公里的距离误差!
所以钟差绝对不能忽略——必须作为未知数解算出来。
这就是为什么 GNSS 定位叫"伪距定位"——测的不是真实距离,而是包含钟差的"伪"距离。
解算时,钟差和位置一起解出来——这叫"时间传递",GNSS 同时提供定位和授时服务。
7.1.3 最小二乘解算
有了 4 个以上的伪距方程,怎么解出位置和钟差?
a. 线性化
伪距方程是非线性的(距离里有平方根),不能直接解。
标准做法是:先猜一个初始位置(比如地球中心,或上次解算的位置),然后在初始位置附近把方程线性化。
线性化后的方程写成矩阵形式:
Δρ = G × Δx
其中:
- Δρ:伪距残差向量(测量伪距 - 初始位置计算的伪距)
- G:观测矩阵(几何矩阵),每一行是一颗卫星的方向余弦
- Δx:位置和钟差的修正量(Δx, Δy, Δz, Δb)
b. 最小二乘解
如果卫星数 > 4,方程数 > 未知数,是超定方程组,用最小二乘求解:
Δx = (G^T × G)^(-1) × G^T × Δρ
然后用 Δx 修正初始位置,再迭代——因为线性化是近似的,需要迭代几次才能收敛。
通常迭代 3~5 次就收敛了。
c. 加权最小二乘
不同卫星的伪距质量不一样(载噪比不同、仰角不同、多径不同),应该给高质量的卫星更大的权重。
加权最小二乘:
Δx = (G^T × W × G)^(-1) × G^T × W × Δρ
其中 W 是权重矩阵——通常是对角矩阵,每个元素是对应卫星伪距方差的倒数。
7.1.4 GDOP:几何精度因子
定位精度不仅跟伪距测量精度有关,还跟卫星的几何分布有关——这就是 GDOP。
a. GDOP 的含义
GDOP(Geometric Dilution of Precision,几何精度因子)衡量的是"卫星几何分布对定位精度的放大程度"。
GDOP = σ_PVT / σ_ρ
其中 σ_PVT 是 PVT 解的总误差,σ_ρ 是伪距测量误差。
GDOP 越大,同样的伪距误差导致的定位误差越大。
b. DOP 的分解
GDOP 可以分解为:
- PDOP(位置 DOP):三维位置误差的放大
- HDOP(水平 DOP):水平位置误差的放大
- VDOP(垂直 DOP):垂直位置误差的放大
- TDOP(时间 DOP):时间误差的放大
关系:GDOP² = PDOP² + TDOP² = HDOP² + VDOP² + TDOP²
c. 什么样的几何分布好?
- 卫星分布在天空的各个方向(仰角有高有低,方位角均匀)→ DOP 小,精度高
- 卫星都挤在一个方向 → DOP 大,精度差
- 卫星都在天顶 → 水平精度差(HDOP 大)
- 卫星都在地平线附近 → 垂直精度差(VDOP 大)
典型 DOP 值:
- GDOP < 2:优秀
- GDOP 2~4:良好
- GDOP 4~6:一般
- GDOP > 6:较差
多系统融合最大的好处之一就是 DOP 大幅降低——单 GPS 在城市里可能 HDOP > 4,四系统联合可以降到 1.5 以下。
7.1.5 定位误差来源分析
GNSS 定位误差来自多个方面,我们可以用"误差预算"来分析。
| 误差源 | 典型大小(单频) | 修正方法 | 修正后残差 |
|---|---|---|---|
| 卫星钟差 | 1-10ns(0.3~3m) | 星历参数修正 | < 0.5m |
| 卫星轨道误差 | 1~5m | 星历修正 | 0.5~2m |
| 电离层延迟 | 5~15m(白天) | 模型/双频 | 模型 2~5m,双频 < 0.5m |
| 对流层延迟 | 2~10m(天顶) | 模型修正 | 0.5~2m |
| 多径 | 1~10m(城市) | 窄相关器/MED | 0.5~3m |
| 接收机噪声 | 0.3~3m | - | 0.3~3m |
| 接收机钟差 | 解算掉 | 作为未知数 | 0 |
a. 单频 vs 双频
单频接收机用电离层模型(Klobuchar 模型)修正电离层,残差约 2~5m。
双频接收机用两个频点的观测值直接计算电离层延迟,残差 < 0.5m。
这就是双频定位比单频准的主要原因——电离层延迟是 GNSS 最大的误差源之一。
b. 为什么垂直精度比水平差?
通常 VDOP 是 HDOP 的 1.5~2 倍——因为卫星都在"上面"(用户上方的半球),垂直方向的几何约束弱。
水平方向有来自各个方位的卫星,约束强;垂直方向只有仰角信息,约束弱。
所以 GNSS 的水平精度通常是垂直精度的 1.5~2 倍。
7.1.6 速度解算
位置解出来了,速度怎么来?
a. 多普勒法
最常用的方法是用多普勒频移解算速度:
- 卫星和用户的相对运动导致载波频率偏移(多普勒)
- 多普勒跟相对速度成正比
- 跟伪距定位类似,用 4 颗以上卫星的多普勒观测值,可以解出用户的三维速度和钟漂
多普勒法的优点:
- 速度精度高(0.01~0.1m/s)
- 不受多径影响(多径主要影响码相位,对载波频率影响小)
- 实时性好
b. 位置差分法
另一种方法是位置差分:v = (位置_t - 位置_{t-1}) / Δt
简单但精度差——位置误差会被差分放大,尤其是短时间间隔。
通常只在没有多普勒观测值时用。
7.1.7 时间解算(授时)
GNSS 不仅能定位,还能授时——这是 GNSS 的另一大应用。
a. 授时原理
如果用户位置已知(或固定),那么未知数就只剩钟差了——1 颗卫星就能解出钟差。
用多颗卫星可以提高授时精度。
授时精度:
- 普通消费级接收机:10~100ns
- 专业授时接收机:1~10ns
- 高端授时接收机(OCXO+多频):< 1ns
b. 授时的应用
- 电力系统:电网同步、故障录波
- 通信系统:基站同步(4G/5G 要求 ±1.5μs 以内)
- 金融系统:交易时间戳
- 交通系统:列车调度、航空管制
小结一下:
PVT 解算的本质是"距离交会 + 钟差解算"——4 颗卫星解出三维位置和接收机钟差。
最小二乘(或加权最小二乘)是标准解法,通过迭代线性化来处理非线性方程。
定位精度由两方面决定:伪距测量精度(误差源)和卫星几何分布(GDOP)。
双频的核心优势是消除电离层延迟——这是最大的误差源之一。
速度用多普勒解算,授时用位置已知条件下的钟差解算——GNSS 同时提供位置、速度、时间三位一体的服务。
下一节,我们讲 PVT 解算的算法实现——从最小二乘到卡尔曼滤波,从选星策略到完好性监测,看看工程上是怎么把 PVT 做到又快又准又稳的。