2、搜星流程详解:从天线接收到位置解算,完整走一遍信号处理链路
很多工程师拿到GPS模块,发现搜星慢,第一反应就是「天线坏了」或者「模块有问题」。其实啊,搜星这件事,背后是一条完整的信号处理链路。任何一个环节出问题,都会让你等半天。
今天我就带你从头到尾走一遍。从天线收到卫星信号,到最终算出经纬度,中间到底发生了什么。
2.1 第一关:天线接收与射频前端
信号从卫星发出来,到你的模块,第一站就是天线。天线把电磁波转成微弱的电流信号。这个信号有多弱?我测过,大概在 -130 dBm 左右。什么概念?比手机信号弱了十亿倍。
天线之后,信号进入射频前端。这里有个关键器件叫 LNA(低噪声放大器)。它的任务很简单:把信号放大,同时尽量少引入噪声。
关键指标:噪声系数(NF)
LNA 的噪声系数一般要求在 1 dB 以下。超过 1.5 dB,搜星速度就会明显变慢。我在项目中遇到过,用了某款国产 LNA,NF 标称 1.2 dB,实际测出来 1.8 dB。结果就是冷启动搜星时间从 35 秒拖到了 55 秒。
我的习惯:选 LNA 时,不光看 datasheet,还要看实测。尤其是批量供货的一致性。有些批次 NF 会漂移,你想想看,这玩意儿一漂,整机性能就跟着漂。
2.2 第二关:下变频与模数转换
放大后的信号,频率还在 1.5 GHz 左右(L1 频段是 1575.42 MHz)。这个频率太高,基带芯片处理不了。所以需要下变频,把它降到中频,一般是几 MHz 到几十 MHz。
下变频靠混频器完成。混频器把接收信号和本地振荡器信号相乘,产生和频与差频。我们只要差频,也就是中频信号。
中频信号再经过滤波、放大,最后送到 ADC(模数转换器)。ADC 把模拟信号变成数字信号,送给基带处理器。
注意:ADC 的采样率很关键。一般 GPS 模块用 2-bit 或 3-bit 量化,采样率在 16 MHz 左右。采样率太低,会丢失信号细节;太高,功耗和成本都上去了。我见过有人为了省钱,用 8 MHz 采样率的 ADC,结果灵敏度直接掉了 3 dB。
2.3 第三关:捕获与跟踪
数字信号进入基带芯片后,第一件事是捕获。说白了,就是找到卫星信号在哪儿。
GPS 信号用了 CDMA 技术。每颗卫星有一个独特的 C/A 码(粗捕获码),长度 1023 个码片,重复周期 1 毫秒。捕获的过程,就是让本地生成的 C/A 码和接收到的信号做相关运算。
相关运算的结果,如果出现一个明显的峰值,说明找到了这颗卫星。同时还能测出两个参数:
- 码相位:信号在 C/A 码序列中的位置
- 多普勒频移:卫星运动造成的频率偏移
捕获成功后,进入跟踪阶段。跟踪环路(锁相环和延迟锁定环)会持续锁定信号,不断更新码相位和多普勒频移的估计值。
避坑指南:我曾经调试一个模块,发现捕获时间特别长。查了半天,发现是本地晶振的频偏太大。晶振标称 26 MHz,实际输出 26.001 MHz。这个 1 kHz 的偏差,在捕获阶段会让相关峰值淹没在噪声里。换了个温补晶振(TCXO),问题就解决了。
2.4 第四关:导航电文解调
跟踪稳定之后,就可以解调导航电文了。导航电文是卫星发下来的数据包,里面包含:
- 星历:卫星的精确轨道参数
- 历书:所有卫星的粗略轨道参数
- 时钟修正参数:卫星原子钟的偏差
- 电离层修正参数:用于校正电离层延迟
导航电文的速率是 50 bps,每帧 1500 比特,需要 30 秒才能发完一帧。这就是为什么冷启动需要 30 秒以上——你得等卫星把完整的一帧电文发完。
电文解调的关键是比特同步和帧同步。比特同步要找到每个比特的起始位置,帧同步要找到帧头(8 位的前导码)。
我的经验:信号弱的时候,比特同步容易出错。我一般会在软件里做「多数判决」——连续解调 3 次,取出现次数最多的结果。这样能有效降低误码率。
2.5 第五关:伪距测量与位置解算
有了导航电文,我们还需要测量伪距。伪距就是卫星到接收机的距离,但包含各种误差。
伪距怎么测?很简单。卫星发信号时,会带上发射时间戳。接收机收到信号时,记录本地时间。两个时间差乘以光速,就是伪距。
但这里有个问题:接收机的时钟和卫星的时钟不同步。所以测出来的距离不是真实距离,而是「伪」距。这个时钟偏差,是我们要解算的四个未知数之一。
位置解算需要至少 4 颗卫星。解算方法是最小二乘法,或者卡尔曼滤波。方程是这样的:
ρ_i = sqrt((x_i - x_u)² + (y_i - y_u)² + (z_i - z_u)²) + c * Δt
其中:
- ρ_i 是第 i 颗卫星的伪距
- (x_i, y_i, z_i) 是卫星位置(从星历算出)
- (x_u, y_u, z_u) 是接收机位置(未知)
- Δt 是接收机时钟偏差(未知)
- c 是光速
4 颗卫星,4 个方程,解 4 个未知数。数学上刚好。
实际工程中的坑:解算时,卫星的几何分布会影响精度。这个指标叫 DOP(精度衰减因子)。DOP 值越小越好。我见过一个案例,用户把天线装在金属屋顶的角落,导致可见卫星都在同一侧,DOP 值高达 8。位置误差直接飙到 50 米。
2.6 整条链路的知识框架
下面这张图,是我画的搜星流程全景图。你可以对照着看,哪个环节出问题,就重点排查哪里。
2.7 常见故障点速查表
最后,我整理了一个速查表。你在排查搜星慢的问题时,可以对照这个表,快速定位故障环节。
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| 完全搜不到星 | 天线开路、LNA 损坏、射频前端供电异常 | 用频谱仪测天线输出端,看有没有 1.5 GHz 信号 |
| 搜星数量少(3-4 颗) | 天线增益不足、LNA 噪声系数过大、天线位置遮挡 | 换高增益天线测试;检查天线安装位置 |
| 冷启动时间过长 | 晶振频偏大、捕获算法参数不对、信号太弱 | 用示波器测晶振频率;检查捕获阈值设置 |
| 定位精度差 | DOP 值高、多径效应、星历过期 | 查看 DOP 值;检查星历年龄;远离反射物 |
| 定位断断续续 | 跟踪环路失锁、电源纹波大、干扰信号 | 检查电源纹波;用频谱仪看带内干扰 |
嗯,整条链路走下来,你会发现搜星这件事,其实每个环节都有讲究。天线、LNA、晶振、捕获算法、解算方法……任何一个地方出问题,都会让你等半天。
我个人习惯是,拿到一个新模块,先测射频前端的增益和噪声系数。这两个指标没问题,再往下查基带部分。这样能快速缩小排查范围。
下一章,我会专门讲天线选型和布局的坑。那个话题,能聊的东西更多。
公众号:蓝海资料掘金营,微信deep3321