3、卫星导航基础:GPS系统架构、北斗系统简介、卫星信号结构、伪距测量原理
说实话,很多人一上来就啃卫星导航原理,结果被一堆术语劝退了。我当年也一样,看着“载波”、“伪码”、“导航电文”这些词,脑袋嗡嗡的。
但后来我发现,搞懂卫星导航,其实就三件事:谁在发信号?信号长什么样?我们怎么用它算距离? 今天咱们就把这三件事掰开揉碎了讲清楚。
3.1 GPS系统架构:三大部分,缺一不可
GPS(全球定位系统)是美国搞的,但它确实是个标杆。它的架构分三块,我习惯叫它“天上的、地上的、手里的”。
- 空间段(天上的):24颗卫星,分布在6个轨道面上。轨道高度约20200公里。保证你在地球上任何地方、任何时间,至少能看到4颗卫星。
- 地面段(地上的):一个主控站(科罗拉多)、几个注入站和监测站。它们负责盯着卫星,算轨道,发指令。说白了,就是给卫星“纠偏”的。
- 用户段(手里的):就是你的接收机。手机、车载导航、无人机飞控,都算。它只管接收信号,不发射信号。
核心要点:GPS是一个“单向广播”系统。卫星只管发,接收机只管收。所以理论上,用户数量没有上限。这一点和基站通信完全不同。
我在做车载导航项目时,遇到过一个问题:明明信号很好,定位却突然飘了。后来排查发现,是地面段更新星历数据时,接收机没来得及同步。嗯,这就是地面段和用户段之间的“时间差”问题。
3.2 北斗系统简介:后来者,但很有特色
北斗是我们国家的系统。很多人问我和GPS比怎么样?我的回答是:各有千秋,但北斗有独门绝技。
北斗的架构和GPS类似,也是“空间段+地面段+用户段”。但有几个关键区别:
- 星座组成更复杂:北斗是“混合星座”。包括地球静止轨道(GEO)、倾斜地球同步轨道(IGSO)、中圆地球轨道(MEO)。GPS只有MEO。
- 有源定位 vs 无源定位:GPS是无源的(只收不发)。北斗除了无源定位,还保留了有源定位能力。什么意思?就是你可以主动发信号给卫星,卫星帮你算位置。这在紧急救援时特别有用。
- 短报文通信:这是北斗的“杀手锏”。你可以在没有手机信号的地方,用北斗发短信。我记得有一次在山区测试,手机没信号,全靠北斗短报文报平安。这功能,GPS没有。
| 特性 | GPS | 北斗 |
|---|---|---|
| 星座类型 | 单一MEO | 混合星座(GEO+IGSO+MEO) |
| 定位方式 | 无源定位 | 无源+有源定位 |
| 特色功能 | 无 | 短报文通信 |
| 覆盖范围 | 全球 | 全球(亚太地区增强) |
个人建议:做民用导航产品,现在基本是“多系统兼容”。GPS+北斗+GLONASS+Galileo,能收多少收多少。信号多了,定位才稳。
3.3 卫星信号结构:载波、伪码、导航电文
卫星发下来的信号,不是简单的“嘀”一声。它其实是一个三层结构。我画个图你就明白了。
说白了,就是用伪码调制导航电文,再用载波把伪码发射出去。一层套一层。
3.3.1 载波
载波就是卫星发射的无线电波频率。GPS主要用L1(1575.42 MHz)和L2(1227.60 MHz)。频率越高,穿透性越差,但精度越高。为什么用两个频率?为了消除电离层延迟误差。这个我后面会细讲。
3.3.2 伪码(PRN码)
伪码是伪随机噪声码的简称。每个卫星都有一个独一无二的伪码序列。接收机就是靠这个来区分“这是哪颗卫星的信号”。
伪码有两种:
- C/A码(粗捕获码):频率1.023 MHz,码长1023个码片。民用信号,精度一般。
- P码(精密码):频率10.23 MHz,码长非常长。军用信号,精度高,但加密了。
注意:伪码不是真正的随机码,而是“看起来随机”的确定序列。接收机内部存有所有卫星的伪码副本。它通过“滑动相关”的方式,找到和接收信号匹配的那个码。这个过程,就是测距的基础。
3.3.3 导航电文
导航电文是卫星告诉接收机的“自我介绍”。它包含:
- 星历:卫星的精确轨道参数。用来算卫星位置。
- 历书:所有卫星的粗略轨道参数。用来搜星。
- 时间:卫星时钟的精确时间。
- 电离层参数:用来修正信号延迟。
导航电文的速率只有50 bps。也就是说,传完一帧完整的电文需要30秒。所以冷启动时,搜星慢是正常的。我曾经优化过一个接收机,为了加快首次定位时间,把历书存到了Flash里。下次开机直接读,不用等卫星广播。效果立竿见影。
3.4 伪距测量原理:核心中的核心
好了,现在我们知道卫星发了什么信号。那接收机怎么算出距离呢?
答案就是伪距测量。为什么叫“伪”距?因为测出来的距离不是真实距离,包含了很多误差。
原理其实很简单:距离 = 速度 × 时间。
- 速度:光速(约3×10⁸ m/s)。
- 时间:信号从卫星到接收机的传播时间。
怎么测这个时间?靠伪码。
接收机内部生成一个和卫星一模一样的伪码。然后不断调整这个本地伪码的相位,直到它和接收到的卫星伪码“对齐”。这个调整量,就是信号传播的时间差。
伪距公式:
ρ = c × (t_r - t_s)
其中:
- ρ:伪距
- c:光速
- t_r:接收机收到信号的时间
- t_s:卫星发射信号的时间
但这里有个大坑:接收机时钟和卫星时钟不同步。卫星用的是原子钟,精度极高。接收机用的是石英钟,便宜但会漂。所以测出来的时间差,包含了钟差。
这就是为什么叫“伪距”——它不是真距,是带误差的距离。
那怎么解决?靠四颗卫星。
方程里有四个未知数:三维位置(x, y, z)和接收机钟差(Δt)。一个卫星提供一个伪距方程。四个方程解四个未知数,刚刚好。
我曾经在调试一个低成本的导航模块时,发现伪距测量值总是跳变。查了半天,发现是本地伪码生成器的时钟抖动太大。换了个温补晶振,问题解决了。嗯,硬件上的坑,往往比软件更隐蔽。
| 误差来源 | 典型大小 | 说明 |
|---|---|---|
| 卫星钟差 | ~2米 | 卫星时钟与GPS时间的偏差 |
| 电离层延迟 | ~5-15米 | 信号穿过电离层时速度变化 |
| 对流层延迟 | ~2-5米 | 信号穿过对流层时折射 |
| 多径效应 | ~1-10米 | 信号反射后到达接收机 |
| 接收机噪声 | ~0.5-1米 | 硬件电路的热噪声 |
避坑指南:我曾经在楼宇密集的城区测试,伪距误差一度飙到50米以上。后来发现是多径效应太严重。解决办法是:使用抗多径天线,或者在软件里加一个“信号质量检测”逻辑,把信噪比低的卫星剔除掉。
好了,这一章的内容就到这。卫星导航的基础,说白了就是“信号怎么来,距离怎么算”。搞懂了伪距测量,后面的定位解算就水到渠成了。
公众号:蓝海资料掘金营,微信deep3321