4. 深度计跳变引起高度通道发散的故障排查

故障现象与排查思路

某水下航行器在定深航行阶段,组合导航高度通道出现缓慢发散:深度显示值在约 12 s 内从 50.2 m 漂移到 56 m 以上,同时高度通道卡尔曼滤波的新息(残差)持续偏大。回放原始日志发现,深度计输出在某一时刻出现约 3.5 m 的阶跃跳变,随后又缓慢回落,而惯性高度解算本身并无对应变化。这说明发散并非惯导漂移,而是深度计异常跳变被滤波通道放大所致。

排查的核心是把"跳变来源"与"滤波响应"分开看:先用数据回放确认跳变是单点毛刺、阶跃还是斜坡;再用残差序列判断滤波器是否已把异常量当作真实观测吸收;最后通过限幅与故障检测逻辑阻断异常观测进入高度通道。

深度计跳变引起高度通道发散的排查链路 深度计原始输出 50.2 m → 53.7 m 阶跃 持续约 12 s 后回落 惯性高度解算 无对应跳变 漂移量 < 0.3 m 数据回放 + 残差分析 新息 = 深度计 − 预测高度 跳变时刻新息突增至 3.4 m 超出 3σ 门限(σ≈0.8 m) 跳变来源判定 单点毛刺 / 阶跃 / 斜坡 阶跃型 传感器/接口异常 斜坡型 压力管路渗漏 毛刺型 电磁干扰/接触不良 限幅 + 故障检测逻辑 限幅:|Δh| ≤ 1.0 m/周期 检测:连续 3 帧超 3σ 判故障 隔离:切换至惯性高度保持 高度通道恢复稳定 发散终止,深度保持 50.2 m 故障标记上报 回放时序(示例) t=0 t=8 s 跳变发生 t=20 s 跳变回落 t=32 s 限幅生效 异常观测窗口

数据回放与残差定位

回放时按以下顺序核对,避免把滤波发散误判为传感器故障:

  1. 对齐时间戳:将深度计原始帧、惯导高度解算、组合导航输出按同一时基对齐,确认跳变发生时刻与高度通道开始发散的时刻是否一致(本例相差约 0.2 s,属同一事件)。
  2. 计算新息序列:新息 ν = z_depth − h_pred,其中 h_pred 为滤波器一步预测高度。正常航行时 |ν| 应在 3σ 内(本例 σ≈0.8 m)。跳变时刻 ν 突增至约 3.4 m,明显越界。
  3. 区分跳变形态:单点毛刺表现为单帧越界后立即恢复;阶跃表现为持续多帧的偏置;斜坡表现为新息缓慢单调增大。本例为持续约 12 s 的阶跃,指向深度计本身或压力接口异常,而非瞬时干扰。
  4. 交叉验证:用惯导高度与深度计做差,若差值曲线与跳变曲线同形,则确认异常来自深度计侧;若惯导侧也有对应变化,则需怀疑高度通道状态估计本身。

限幅与故障检测逻辑设计

定位到阶跃来源后,在深度观测进入滤波前增加两级保护:

// 深度观测预处理(示例参数,按实际量程与噪声水平调整)
const double MAX_STEP   = 1.0;   // 单周期最大允许变化量 (m)
const double SIGMA      = 0.8;   // 新息标准差估计 (m)
const double GATE_K     = 3.0;   // 3σ 门限
const int    FAULT_CNT  = 3;     // 连续越界帧数判故障

double depth_prev = 50.2;        // 上一有效深度
int    over_cnt   = 0;
bool   depth_fault = false;

double preprocess_depth(double z_raw, double h_pred) {
    // 1) 限幅:抑制阶跃跳变
    double z = z_raw;
    if (fabs(z - depth_prev) > MAX_STEP) {
        z = depth_prev + (z > depth_prev ? MAX_STEP : -MAX_STEP);
    }
    // 2) 新息门限检测
    double nu = z - h_pred;
    if (fabs(nu) > GATE_K * SIGMA) {
        if (++over_cnt >= FAULT_CNT) depth_fault = true;
    } else {
        over_cnt = 0;
    }
    // 3) 故障时隔离观测,仅用惯性高度保持
    if (depth_fault) return h_pred;
    depth_prev = z;
    return z;
}

限幅的作用是防止单帧大跳变直接污染状态估计;故障检测的作用是在跳变持续存在时主动隔离观测,避免滤波器把异常值当作真实深度逐步吸收。两者配合后,高度通道在跳变期间由惯性高度保持,跳变消失且连续 3 帧新息恢复正常后可解除隔离。

限幅阈值不宜过小:若航行器存在真实快速变深(如紧急下潜),过小的 MAX_STEP 会把真实机动误判为故障。建议按最大设计下潜速率 × 滤波周期再留 1.5~2 倍余量确定。

验证与判读

检查项正常判据本例回放结果
跳变期间新息被限幅后 |ν| ≤ 3σ限幅后最大 2.1 m,未触发隔离
高度通道输出不发散,偏差 < 1 m深度保持 50.2±0.6 m
故障标记持续阶跃时置位第 3 帧越界后置位,回落 3 帧后清除
隔离期间高度源切换为惯性高度切换平滑,无二次跳变

验证时还应做一次反向测试:人为注入 2 m 单帧毛刺,确认限幅生效但故障标记不置位(因未连续越界),以此区分"抑制"与"隔离"两级逻辑的边界。