泵异响模型瞬时故障逻辑优化
日期:2026-03-13
一、现状
当前检测链路:8秒音频 → AutoEncoder重建误差 → 60秒聚合取均值 → 投票窗口(5中3) → 告警聚合 → 推送。
异常检测只有重建误差一个指标。AnomalyClassifier 虽然能提取 RMS、能量波动、频谱质心、周期性等10维特征,但只在异常确认后用于分类(判断是轴承/气蚀/松动等),从未参与检测触发。
快速通道代码已有(run_pickup_monitor.py:913-965)但被注释,且存在严格连续、无推送路径等问题。
二、问题
- 单次高幅度异响漏检:单文件极端误差被周期内6-7个正常文件均值拉平,投票窗口无法触发
- 间断性异响漏检:非连续异常在投票窗口中永远凑不够3次
- 特征能力浪费:已有的 RMS/能量/频谱/周期性特征只做事后分类,不做检测
- 快速通道不可用:代码注释 + 严格连续 + pending无消费
- 停机前证据丢失:过渡期抑制丢弃异常记录,无停机前音频归档,无法事后分析
- 无PLC场景无关联能力:EnergyBaseline 能检测启停但没有回调,无法触发归档和关联
三、方案
3.1 瞬时异常检测 + 特征增强
- 将 AnomalyClassifier 的特征提取前移到每文件处理阶段,维护每设备特征滑动基线(最近30个文件)
- 特征突变检测:RMS突变、能量波动突变、频谱质心跳变、周期性冲击出现,任一满足即标记特征异常
- 双重确认:重建误差 > 5倍阈值 + 特征异常 → 瞬时告警;误差2-5倍 + 特征异常 → 加速快速通道
- 启用快速通道:注释代码改为滑动窗口(最近5文件中3个超2倍阈值),补全推送路径
- AlertAggregator 增加告警类型路由:瞬时告警直接推送、快速预警30秒短窗口、投票告警走现有5分钟窗口
3.2 异响-停机关联分析
- 所有通道检测到异常时记入环形缓冲(含过渡期被抑制的,保留证据不丢弃)
- PumpStateMonitor 和 EnergyBaseline 增加状态变化回调,统一进入停机处理
- 停机时回溯120秒异常记录,有异常标记"故障停机",归档停机前音频 + 写入元数据
四、排期
统一下周(3/16 - 3/20)完成开发和测试。
| 日期 |
任务 |
产出 |
| 周一 3/16 |
特征提取前移 + 特征滑动基线 + 突变检测逻辑 |
_process_new_file() 新增特征检测 |
| 周二 3/17 |
快速通道改造(滑动窗口 + 推送路径) + 瞬时告警通道 |
快速通道可用,瞬时告警可用 |
| 周三 3/18 |
AlertAggregator 告警类型路由 + 双重确认矩阵 |
三通道告警路径打通 |
| 周四 3/19 |
异常事件缓冲 + 停机回调 + 关联分析 + 音频归档 |
停机关联完整可用 |
| 周五 3/20 |
集成测试 + 参数调优 + 上线观察 |
全流程验证通过 |
五、测试方案
5.1 单元测试(开发过程中同步进行)
| 测试项 |
方法 |
预期 |
| 特征突变检测 |
构造正常特征序列,插入一个RMS突增3倍的样本 |
_check_feature_anomaly() 返回 True |
| 滑动窗口快速通道 |
喂入5个误差值,其中3个超2倍阈值(不连续) |
触发快速预警 |
| 瞬时告警双重确认 |
构造误差5倍 + 特征异常 / 仅误差5倍 / 仅特征异常 |
仅双重满足时触发 |
| 异常事件记录 |
过渡期内触发异常 |
事件记录到缓冲且 suppressed=True |
| 停机关联 |
记录异常事件后触发停机回调 |
返回"故障停机" + 证据链 |
| 正常停机 |
无异常事件时触发停机回调 |
返回"正常停机" |
5.2 模拟音频测试(周五)
准备三类测试音频:
- 单次冲击音频:在正常背景音中插入一段高能量脉冲(模拟瞬时故障)
- 间断异常音频:每隔2-3个正常文件放一个异常文件(模拟间歇性问题)
- 正常音频序列:确保新逻辑不会对正常音频产生误报
测试步骤:
- 将测试音频放入监控目录,观察日志输出
- 验证瞬时告警是否在8秒内触发(单文件级别)
- 验证快速通道是否在24秒内触发(3文件级别)
- 验证正常音频不触发新通道
- 手动模拟停机(停止放入音频 / 放入低能量音频),验证关联分析和音频归档
5.3 线上灰度验证(周五-下周)
- 新通道先设为 仅记录不推送(
enabled: true + 日志输出但不走推送)
- 观察1-2天日志,统计触发次数和场景
- 确认误报率可接受后再开启推送