第3章 GNSS基础原理:GPS/北斗/GLONASS/Galileo系统概述、伪距与载波相位观测值、定位方程解算

各位同学,欢迎来到第三章。这一章,我们聊聊GNSS的基础原理。说实话,这部分内容看起来有点枯燥,但它是整个定位系统的根基。我在MTK8676项目里调试定位精度时,发现很多问题追根溯源,都是对基础原理理解不够深。所以,咱们花点时间,把地基打牢。

3.1 四大全球导航卫星系统概述

目前全球有四大GNSS系统在运行。你想想看,手机里那颗小小的芯片,能同时接收这么多卫星的信号,确实挺神奇的。

系统 所属国家/地区 卫星数量(约) 轨道高度 特点
GPS 美国 31颗 20200 km 最成熟,民用广泛
北斗 中国 30颗 21500 km 有短报文通信能力
GLONASS 俄罗斯 24颗 19100 km 频分多址,抗干扰强
Galileo 欧盟 26颗 23222 km 精度高,民用免费

我个人习惯,在座舱项目里至少开启GPS+北斗双系统。为什么?因为单系统在城市峡谷里容易丢星,双系统互补,定位连续性会好很多。我记得有一次在重庆测试,高架桥下GPS信号弱得不行,但北斗有几颗高仰角卫星还能锁定,保住了定位输出。

小提示: MTK8676支持全系统全频点。建议在代码里配置为GPS L1 + BDS B1I + GLONASS L1,这是目前兼容性和性能最均衡的组合。

3.2 伪距观测值

伪距,说白了就是卫星到接收机的距离,但带了个“伪”字。为什么是假的?因为里面有各种误差。

伪距的计算公式很简单:

ρ = c × (t_r - t_s)

其中:

  • ρ 是伪距观测值
  • c 是光速(约3×10⁸ m/s)
  • t_r 是接收机收到信号的时间
  • t_s 是卫星发射信号的时间

嗯,这里要注意。接收机时钟和卫星时钟不同步,所以测出来的距离不是真距。误差来源包括:

  • 卫星钟差
  • 接收机钟差
  • 电离层延迟
  • 对流层延迟
  • 多路径效应

我曾经在调试一个车载导航项目时,发现定位误差突然跳到50米。排查了半天,原来是天线安装位置靠近A柱,信号反射严重,伪距观测值里混入了多路径误差。后来把天线挪到车顶中央,问题就解决了。所以,硬件安装细节真的不能忽视。

3.3 载波相位观测值

载波相位观测值,精度比伪距高得多。伪距精度在米级,载波相位可以到厘米甚至毫米级。但代价是——它有整周模糊度问题。

载波相位的观测方程:

Φ = λ⁻¹ × ρ + N + ε

其中:

  • Φ 是载波相位观测值(以周为单位)
  • λ 是载波波长(GPS L1约19 cm)
  • ρ 是卫星到接收机的几何距离
  • N 是整周模糊度(未知整数)
  • ε 是其他误差项

你想想看,我们只能测量相位的小数部分,整数部分N是未知的。这就是整周模糊度问题。在MTK8676的定位引擎里,通常用伪距辅助来解算N,或者用差分技术。

核心要点: 伪距提供粗定位,载波相位提供精定位。两者结合,才能实现高精度。在座舱场景里,车道级导航必须依赖载波相位。

3.4 定位方程解算

定位方程解算,说白了就是解一个四元方程组。为什么是四元?因为未知数有三个位置坐标(x, y, z)加上一个接收机钟差。

基本方程:

ρ_i = √[(x_i - x_u)² + (y_i - y_u)² + (z_i - z_u)²] + c × δt_u

其中:

  • ρ_i 是第i颗卫星的伪距观测值
  • (x_i, y_i, z_i) 是第i颗卫星的位置(已知)
  • (x_u, y_u, z_u) 是接收机位置(待求)
  • δt_u 是接收机钟差(待求)

这个方程是非线性的,没法直接解。常用的方法是:

  1. 线性化:用泰勒展开,把非线性方程变成线性方程
  2. 迭代求解:用最小二乘法或卡尔曼滤波,逐步逼近真实位置

我记得刚开始做定位算法时,总觉得迭代求解太麻烦,想找个一步到位的公式。后来被现实教育了——非线性系统必须迭代,否则误差根本收敛不了。

避坑指南: 我曾经在MTK8676上遇到一个问题,卫星颗数少于4颗时,定位引擎直接报错。后来发现是代码里没有做降维处理。建议在工程实现中,当卫星数不足时,可以固定高度(比如假设车辆在地面上),用3颗卫星也能解算。

3.5 实际工程中的注意事项

在MTK8676座舱平台上,集成GNSS定位引擎时,有几个点需要特别留意:

  • 卫星选择策略:不要用所有可见星,建议选择仰角大于15°的卫星,低仰角卫星多路径误差大
  • 权重分配:根据卫星仰角和信噪比,给不同卫星分配不同权重,提高解算稳定性
  • 周期跳检测:载波相位容易发生周期跳,需要实时检测并修复,否则定位会漂移
  • 多系统时间同步:GPS用GPST,北斗用BDT,两者有14秒的偏差,融合时必须统一时间基准

嗯,这一章的内容就到这里。基础原理虽然枯燥,但它是后续所有高级功能的前提。下一章,我们会深入MTK8676的定位引擎架构,看看这些原理是怎么在芯片里落地的。