4. 基于卡尔曼滤波的故障检测:新息序列分析、新息协方差匹配、故障检测统计量构建
各位同学,咱们今天聊点硬核的。卡尔曼滤波大家都不陌生,但很多人只把它当个状态估计器来用。其实,它还有一个隐藏技能——故障检测。说白了,就是让滤波器自己给自己“体检”。
我做了这么多年组合导航,最怕的就是传感器突然“抽风”。GPS被遮挡、IMU零偏漂移、气压计受气流干扰……这些故障要是没及时发现,导航结果就会慢慢偏离,等你发现时飞机可能已经偏航好几公里了。所以,基于卡尔曼滤波的故障检测,是每个做导航的工程师必须掌握的看家本领。
4.1 新息序列分析:故障的“体温计”
先问大家一个问题:卡尔曼滤波里,什么东西最能反映系统是否健康?
答案是——新息(Innovation)。
新息是什么?就是实际观测值与预测观测值之间的差值。公式很简单:
ν_k = z_k - H * x̂_{k|k-1}
其中ν_k就是新息,z_k是实际测量值,H*x̂_{k|k-1}是预测的测量值。
正常情况下,新息应该是一个零均值的白噪声序列。为什么?因为卡尔曼滤波已经把所有能用的信息都提取出来了,剩下的就是纯粹的测量噪声。如果新息突然偏离零均值,或者出现明显的相关性,那就说明——出问题了。
我记得有一次做车载导航测试,跑着跑着新息突然开始震荡。一开始我以为是算法写错了,查了半天代码,最后发现是IMU的安装螺丝松了。你看,新息就像体温计,一发烧就能测出来。
4.2 新息协方差匹配:理论值与实际值的“对账”
光看新息本身还不够,我们还得看它的“方差”。卡尔曼滤波会给出新息的理论协方差:
S_k = H * P_{k|k-1} * H^T + R_k
这个S_k是理论值,代表“如果一切正常,新息应该有多大波动”。而实际新息的协方差,我们可以通过滑动窗口来估计:
C_k = (1/N) * Σ(ν_{k-i} * ν_{k-i}^T) (i从0到N-1)
然后,我们把实际协方差C_k和理论协方差S_k做个比较。如果两者匹配,说明系统正常。如果不匹配——比如实际协方差远大于理论值——那就说明测量噪声变大了,或者出现了故障。
这个方法叫“新息协方差匹配”。我个人的习惯是,用卡方检验来做这个匹配判断。具体来说,构造一个统计量:
ε_k = ν_k^T * S_k^{-1} * ν_k
这个ε_k服从卡方分布,自由度等于测量维数。设定一个阈值(比如95%置信度),一旦ε_k超过阈值,就触发故障报警。
4.3 故障检测统计量构建:从“感觉”到“量化”
前面我们提到了卡方检验统计量ε_k。但实际工程中,我们往往需要更丰富的统计量来应对不同类型的故障。
我给大家总结几种常用的故障检测统计量:
| 统计量名称 | 计算公式 | 适用场景 |
|---|---|---|
| 新息卡方统计量 | ε_k = ν_k^T * S_k^{-1} * ν_k | 突发性故障、测量野值 |
| 累计新息统计量 | Σ(ν_i) (i从k-N+1到k) | 缓慢漂移型故障 |
| 新息均值统计量 | (1/N) * Σ(ν_i) | 偏置型故障 |
| 新息方差统计量 | (1/N) * Σ(ν_i^2) - (均值)^2 | 噪声增大型故障 |
这里我要特别强调一下累计新息统计量。为什么需要它?因为有些故障是慢慢发展的,比如IMU的零偏缓慢漂移。这种故障在单步新息里几乎看不出来,但累积起来就很明显。我曾经遇到过一台IMU,零偏漂移速率只有0.01°/h,单步新息完全正常,但累计了100步之后,误差已经大到不可接受了。
所以,我的建议是:不要只用单一统计量。把几种统计量组合起来,形成一个“故障检测矩阵”,才能覆盖各种故障模式。
4.4 实战:一个完整的故障检测流程
说了这么多理论,咱们来走一遍实际流程。假设你正在做一个GPS/INS组合导航系统:
- 初始化: 设定滑动窗口大小N=15,卡方阈值χ²(0.95, 3)=7.815(假设测量维数为3)。
- 每步滤波: 计算新息ν_k和理论协方差S_k。
- 计算统计量: 计算卡方统计量ε_k,同时更新滑动窗口内的新息均值和方差。
- 故障判断:
- 如果ε_k > 7.815,触发“突发故障”报警。
- 如果新息均值连续5步超过0.5σ,触发“偏置故障”报警。
- 如果新息方差连续5步超过1.5倍理论值,触发“噪声增大”报警。
- 容错处理: 一旦检测到故障,立即隔离该传感器,切换到其他可用传感器,或者使用预测值代替测量更新。
这个流程看起来简单,但实际调试时坑很多。比如,窗口大小和阈值需要根据实际数据反复调优。我一般会先采集一段正常数据,统计新息的分布特性,再根据这个特性来设定阈值。
下面我画了一张流程图,把整个故障检测的逻辑串起来:
嗯,这张图把整个流程串得很清楚。从卡尔曼滤波开始,到新息计算,再到统计量构建和故障判断,最后是容错处理。每一步都环环相扣。
4.5 一些经验之谈
最后,跟大家分享几点我在实际项目中积累的经验:
- 不要迷信单一统计量。 我见过很多工程师只用卡方检验,结果漏掉了缓慢漂移型故障。一定要组合使用多种统计量。
- 阈值要留余量。 理论阈值往往偏理想化。实际系统中,由于模型误差、噪声非高斯等因素,新息的实际分布会比理论分布“胖”一些。我一般会把阈值放宽10%~20%。
- 故障检测要和容错联动。 检测到故障只是第一步,更重要的是怎么处理。是隔离传感器?还是降低权重?还是切换到备份系统?这些都要提前设计好。
- 多跑数据验证。 我每次设计完故障检测逻辑,都会用历史数据回放一遍,看看能不能准确检测到已知的故障。这一步不能省。
好了,关于基于卡尔曼滤波的故障检测,咱们就聊到这里。核心就是三件事:新息序列分析、协方差匹配、统计量构建。把这三点吃透了,你就能让卡尔曼滤波既当“导航员”,又当“体检医生”。
下次遇到传感器故障,别慌。先看看新息,算算统计量,你就能知道问题出在哪了。