4. GPS/北斗接收机故障检测:信号丢失、多径效应、跳变检测与RAIM算法原理

各位工程师朋友,大家好。今天我们聊一个在飞控系统里非常关键,但也非常容易让人头疼的话题——卫星接收机的故障检测。说白了,就是GPS或者北斗模块“抽风”了,你怎么第一时间发现它,并且不让它把整个飞控带沟里去。

我个人习惯把卫星接收机看作飞控系统的“眼睛”。眼睛要是花了,或者看到的是幻象,那飞机肯定要出大事。所以,这一章我们重点讲四种最常见的故障模式:信号丢失、多径效应、跳变,以及它们的终极克星——RAIM算法。

GNSS接收机故障检测 信号丢失检测 多径效应检测 跳变检测 RAIM算法原理 接收机自主完好性监测 载噪比监测 伪距残差分析 位置/速度跳变

4.1 信号丢失:最直接的“失明”

信号丢失,这是最基础,也是最容易判断的故障。你想想看,接收机收不到卫星信号了,那位置肯定没法算。但问题在于,它到底是真丢了,还是只是瞬间遮挡?

怎么检测? 我一般看两个指标:载噪比(C/N0)卫星锁定状态

  • 载噪比阈值:通常低于 30 dB-Hz 就算信号丢失。我在项目中习惯设一个 28 dB-Hz 的硬阈值,低于这个值直接标记该卫星无效。
  • 连续丢失帧数:单帧丢失可能是干扰,连续 3 帧以上丢失,基本可以判定为信号丢失。

核心判断逻辑:

如果可见卫星数少于 4 颗,或者所有卫星的 C/N0 都低于阈值,那么接收机输出的位置数据不可用,必须立即切换到其他导航源(比如惯性导航)。

我的经验: 有一次在楼宇密集的城区测试,GPS 信号频繁丢失。我后来加了一个“信号丢失计数器”,如果 1 秒内丢失超过 3 次,就判定为进入“城市峡谷”模式,降低对 GPS 的信任权重。效果还不错。

4.2 多径效应:最隐蔽的“欺骗”

多径效应,说白了就是卫星信号不是直线过来的,而是被建筑物、地面反射了一下才到接收机。这会导致伪距测量值偏大,位置解算出现偏差。嗯,这里要注意,多径效应不会让信号丢失,但会让位置不准,所以特别隐蔽。

检测方法:

  1. 载噪比波动分析:正常信号的 C/N0 是相对平稳的。多径信号会导致 C/N0 出现快速、大幅的波动。我习惯计算 C/N0 的滑动窗口标准差,如果标准差超过 3 dB,就怀疑有多径。
  2. 伪距残差一致性检查:多径效应通常只影响个别卫星。如果某颗卫星的伪距残差明显大于其他卫星,那它很可能被多径污染了。
  3. 仰角过滤:低仰角的卫星更容易受多径影响。我个人习惯把仰角低于 15 度的卫星直接排除,虽然会少几颗星,但换来的是更稳定的定位。

避坑指南: 我曾经在无人机靠近金属塔架飞行时,遇到了严重的多径问题。当时位置漂移了 5 米多,差点撞到塔架。后来我加了一个“多径概率因子”,结合载噪比和仰角动态调整卫星权重,才算把这个问题压下去。

4.3 跳变检测:最危险的“幻觉”

跳变,就是接收机输出的位置或速度突然发生了一个不连续的大幅变化。这可能是接收机内部算法出了问题,也可能是受到了强电磁干扰。跳变最危险的地方在于,飞控会以为飞机真的瞬间移动了,然后做出剧烈的错误控制。

检测算法:

  • 位置跳变检测:计算当前帧位置与上一帧位置的差值。如果差值超过最大物理可能速度(比如固定翼最大 50 m/s),则判定为跳变。
  • 速度跳变检测:类似,计算速度矢量的变化量。如果加速度超过 10g,基本可以判定是跳变。
  • 时间一致性检查:检查接收机输出的时间戳是否连续。如果时间戳出现回跳或大幅跳跃,也是跳变的征兆。
// 跳变检测伪代码示例
float max_velocity = 50.0; // 最大可能速度 m/s
float max_acceleration = 100.0; // 最大可能加速度 m/s^2

bool detect_jump(GPS_Position current, GPS_Position previous, float dt) {
    float displacement = distance(current, previous);
    float velocity = displacement / dt;
    
    if (velocity > max_velocity) {
        return true; // 位置跳变
    }
    
    // 速度跳变检测类似
    return false;
}

我的建议: 跳变检测一定要结合惯性导航数据。如果 GPS 说飞机瞬间移动了 10 米,但 IMU 说加速度没变化,那肯定是 GPS 跳变了。这种“传感器投票”机制非常可靠。

4.4 RAIM算法原理:最后的“法官”

RAIM,全称 Receiver Autonomous Integrity Monitoring,接收机自主完好性监测。说白了,就是接收机自己给自己做“体检”,看看当前解算出来的位置到底靠不靠谱。

RAIM 的核心思想: 利用冗余的卫星观测信息,检测并排除故障卫星。正常情况下,解算位置需要至少 4 颗卫星。如果有 5 颗或更多卫星,就产生了冗余。

RAIM 的工作流程:

  1. 伪距残差计算:用所有可见卫星解算出一个位置,然后反算每颗卫星的理论伪距,与实际伪距相减,得到残差。
  2. 一致性检验:正常情况下,所有残差应该服从零均值的高斯分布。如果某颗卫星的残差明显偏大(比如超过 3 倍标准差),就怀疑它有问题。
  3. 故障排除:剔除疑似故障卫星,用剩下的卫星重新解算。如果解算结果与之前一致,说明排除正确。
  4. 保护级计算:RAIM 还会计算一个“保护级”(Protection Level),告诉你当前定位误差的上限。如果保护级超过了告警门限,就触发告警。

实际项目中的经验: 我做过一个农业无人机项目,要求定位误差不能超过 0.5 米。RAIM 算法帮了大忙。有一次有一颗卫星的伪距残差突然跳到 10 米,RAIM 立刻把它踢出解算,位置精度瞬间恢复。如果没有 RAIM,那次作业可能就要出事故了。

故障类型 检测方法 响应时间 处理策略
信号丢失 载噪比阈值、连续丢失帧数 即时 切换导航源
多径效应 载噪比波动、伪距残差、仰角过滤 0.5-2秒 降低权重或剔除
跳变 位置/速度差分、时间一致性 即时 拒绝数据、回滚
RAIM检测 伪距残差一致性、保护级计算 1-5秒 排除故障卫星

重要提醒: RAIM 算法不是万能的。它要求至少有 5 颗可见卫星才能进行故障检测,6 颗以上才能进行故障排除。在卫星几何分布不好的时候(比如所有卫星都在头顶),RAIM 的检测能力会下降。所以,永远不要把 RAIM 当作唯一的防线。

好了,关于 GPS/北斗接收机的故障检测,我们就聊到这里。信号丢失、多径、跳变,再加上 RAIM 这个“法官”,基本上能覆盖 90% 以上的接收机故障场景。在实际项目中,我建议把这几种方法组合使用,形成一个多层次的检测体系。毕竟,飞控系统的安全,怎么强调都不为过。

专注资料整理