第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信号弱得不行,但北斗有几颗高仰角卫星还能锁定,保住了定位输出。
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 是接收机钟差(待求)
这个方程是非线性的,没法直接解。常用的方法是:
- 线性化:用泰勒展开,把非线性方程变成线性方程
- 迭代求解:用最小二乘法或卡尔曼滤波,逐步逼近真实位置
我记得刚开始做定位算法时,总觉得迭代求解太麻烦,想找个一步到位的公式。后来被现实教育了——非线性系统必须迭代,否则误差根本收敛不了。
3.5 实际工程中的注意事项
在MTK8676座舱平台上,集成GNSS定位引擎时,有几个点需要特别留意:
- 卫星选择策略:不要用所有可见星,建议选择仰角大于15°的卫星,低仰角卫星多路径误差大
- 权重分配:根据卫星仰角和信噪比,给不同卫星分配不同权重,提高解算稳定性
- 周期跳检测:载波相位容易发生周期跳,需要实时检测并修复,否则定位会漂移
- 多系统时间同步:GPS用GPST,北斗用BDT,两者有14秒的偏差,融合时必须统一时间基准
嗯,这一章的内容就到这里。基础原理虽然枯燥,但它是后续所有高级功能的前提。下一章,我们会深入MTK8676的定位引擎架构,看看这些原理是怎么在芯片里落地的。