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 整条链路的知识框架

下面这张图,是我画的搜星流程全景图。你可以对照着看,哪个环节出问题,就重点排查哪里。

GPS 搜星信号处理链路全景图 天线接收 电磁波→电流 射频前端 LNA 放大 + 滤波 下变频 混频→中频信号 ADC 采样 模拟→数字 信号捕获 C/A 码相关运算 信号跟踪 锁相环 + DLL 电文解调 星历 + 历书 伪距测量 时间差 × 光速 位置解算 最小二乘法 / 卡尔曼滤波 输出经纬度 + 高度 注:虚线表示辅助数据路径(星历、历书用于解算)

2.7 常见故障点速查表

最后,我整理了一个速查表。你在排查搜星慢的问题时,可以对照这个表,快速定位故障环节。

故障现象 可能原因 排查方法
完全搜不到星 天线开路、LNA 损坏、射频前端供电异常 用频谱仪测天线输出端,看有没有 1.5 GHz 信号
搜星数量少(3-4 颗) 天线增益不足、LNA 噪声系数过大、天线位置遮挡 换高增益天线测试;检查天线安装位置
冷启动时间过长 晶振频偏大、捕获算法参数不对、信号太弱 用示波器测晶振频率;检查捕获阈值设置
定位精度差 DOP 值高、多径效应、星历过期 查看 DOP 值;检查星历年龄;远离反射物
定位断断续续 跟踪环路失锁、电源纹波大、干扰信号 检查电源纹波;用频谱仪看带内干扰

嗯,整条链路走下来,你会发现搜星这件事,其实每个环节都有讲究。天线、LNA、晶振、捕获算法、解算方法……任何一个地方出问题,都会让你等半天。

我个人习惯是,拿到一个新模块,先测射频前端的增益和噪声系数。这两个指标没问题,再往下查基带部分。这样能快速缩小排查范围。

下一章,我会专门讲天线选型和布局的坑。那个话题,能聊的东西更多。


公众号:蓝海资料掘金营,微信deep3321