3. 基带信号处理:捕获与跟踪环路

好,咱们进入基带信号处理的核心部分。说实话,这一块是GPS接收机设计的灵魂所在。你射频前端做得再好,天线设计得再漂亮,如果基带处理搞不定,那一切都是白搭。

我个人习惯把基带处理分成两大块:捕获跟踪。捕获是粗调,跟踪是细调。打个比方,捕获就像你在一个嘈杂的房间里找人,先大概知道他在哪个方向;跟踪就是锁定他,他走到哪你跟到哪。

3.1 捕获:找到信号的大概位置

捕获要解决两个问题:码相位多普勒频移。说白了,就是找到卫星信号在时间轴上的位置,以及由于卫星运动造成的频率偏移。

我刚开始做捕获算法时,用的是最传统的串行搜索。就是在一个二维网格上,一个格子一个格子地试。码相位有1023个chip,多普勒范围假设是±10kHz,步进500Hz,那就要搜1023 × 41 ≈ 42000个格子。你想想看,这得花多少时间?

后来我改用并行频率搜索,利用FFT一次算完所有频率点。速度快了不少。再后来,并行码相位搜索也出来了,用FFT在码域上并行搜索。嗯,这里要注意,FFT虽然快,但计算量也不小,对硬件资源要求高。

捕获的关键指标:

  • 检测概率:信号存在时,能正确检测到的概率。一般要求 > 90%。
  • 虚警概率:信号不存在时,误报检测到的概率。一般要求 < 1%。
  • 搜索时间:完成整个搜索所需的时间。冷启动时,这个时间很关键。

我在项目中遇到过一个问题:在强干扰环境下,捕获的虚警概率会急剧上升。后来怎么解决的?加了一个自适应门限。根据噪声基底动态调整判决门限,效果立竿见影。

3.2 跟踪环路:锁住信号不放手

捕获完成后,我们知道了码相位和多普勒的粗略值。接下来就是跟踪环路的活了。跟踪环路有两个核心:延迟锁定环(DLL)锁相环(PLL)

3.2.1 延迟锁定环(DLL)

DLL负责跟踪码相位。它的原理很简单:生成三个本地码——早码(Early)即时码(Prompt)晚码(Late)。这三个码在时间上相差半个chip。

你想想看,如果即时码和接收到的信号码完全对齐,那么早码和晚码的相关值应该相等。如果不对齐,早码和晚码的相关值就会有差异。这个差异就是误差信号,用来调整本地码的相位。

DLL的鉴相器有很多种,我常用的有:

  • 非相干超前减滞后幅值法:简单粗暴,但噪声性能一般。
  • 非相干超前减滞后功率法:比幅值法好一些,但计算量稍大。
  • 点积法:性能最优,但实现复杂。

我的经验:在弱信号环境下,建议用点积法。虽然复杂点,但能多锁定几dB的信号。强信号环境下,用超前减滞后功率法就够了,省资源。

3.2.2 锁相环(PLL)

PLL负责跟踪载波相位。它的核心是鉴相器,用来比较本地载波和接收信号的相位差。

常见的PLL鉴相器有:

  • 二象限反正切鉴相器:线性范围是±90°,适合普通场景。
  • 四象限反正切鉴相器:线性范围是±180°,适合高动态场景。
  • 科斯塔斯环:对数据比特翻转不敏感,适合数据通道。

我曾经在一个高动态项目中吃过亏。飞行器在做大机动时,多普勒变化率很大,普通的二象限PLL直接失锁了。后来换成四象限的,配合一个二阶环路滤波器,才算稳住。

注意:PLL对动态应力很敏感。环路带宽越宽,动态响应越快,但噪声也越大。带宽越窄,噪声越小,但动态响应慢。这是一个trade-off,需要根据应用场景来选。

3.3 载波与码环路的协同工作

DLL和PLL不是各自为战的。它们必须协同工作,才能实现稳定的跟踪。

为什么?因为载波和码是耦合的。载波频率的变化会影响到码的相位。你想想看,如果PLL失锁了,载波频率估计不准,那DLL的码相位估计也会跟着跑偏。

典型的协同方式是:

  1. PLL提供辅助给DLL:PLL估计出的载波频率,可以用来辅助DLL的码NCO(数控振荡器)。这样DLL的环路带宽可以做得更窄,噪声更小。
  2. DLL提供辅助给PLL:DLL估计出的码相位,可以用来辅助PLL的载波NCO。这在弱信号环境下特别有用。
  3. 联合跟踪:在一些高端接收机中,DLL和PLL的误差信号会联合起来,用一个卡尔曼滤波器统一处理。

我记得有一次调试一个多星座接收机,GPS和北斗同时工作。GPS的PLL锁得很好,但北斗的PLL老是抖动。后来发现是北斗的码环和载波环没有做辅助。加上辅助后,北斗的跟踪稳定性明显提升。

协同工作的关键参数:

参数 DLL PLL
环路带宽 0.1 ~ 2 Hz 10 ~ 50 Hz
鉴相器类型 超前减滞后 / 点积 反正切 / 科斯塔斯
辅助方式 由PLL提供频率辅助 由DLL提供相位辅助
典型应用 码相位跟踪 载波相位跟踪

说白了,DLL和PLL就像一对舞伴。DLL负责脚步(码相位),PLL负责节奏(载波相位)。只有配合好了,这支舞才能跳得稳。

3.4 实战中的避坑指南

最后,分享几个我在项目中踩过的坑:

  • 环路滤波器设计:别直接用理想积分器。实际中要考虑量化误差和有限字长效应。我曾经因为滤波器系数量化精度不够,导致环路出现极限环振荡。
  • 多径干扰:DLL对多径非常敏感。如果信号有反射路径,早码和晚码的相关峰会变形。建议加一个多径估计器,或者用窄相关器技术。
  • 周跳检测:PLL在强干扰下可能会发生周跳。一定要加周跳检测和修复机制。我一般用三差法来检测周跳。
  • 初始化顺序:先启动DLL,再启动PLL。如果先启动PLL,码相位还没对准,PLL很容易失锁。

嗯,基带信号处理这块内容确实不少。但只要你把捕获、DLL、PLL以及它们的协同关系搞清楚了,剩下的就是工程细节的打磨了。记住,理论是基础,实践才是检验真理的唯一标准。