瞬时异响方案.md 4.6 KB

泵异响模型瞬时故障逻辑优化

日期:2026-03-13


一、现状

当前检测链路:8秒音频 → AutoEncoder重建误差 → 60秒聚合取均值 → 投票窗口(5中3) → 告警聚合 → 推送。

异常检测只有重建误差一个指标。AnomalyClassifier 虽然能提取 RMS、能量波动、频谱质心、周期性等10维特征,但只在异常确认后用于分类(判断是轴承/气蚀/松动等),从未参与检测触发。

快速通道代码已有(run_pickup_monitor.py:913-965)但被注释,且存在严格连续、无推送路径等问题。


二、问题

  1. 单次高幅度异响漏检:单文件极端误差被周期内6-7个正常文件均值拉平,投票窗口无法触发
  2. 间断性异响漏检:非连续异常在投票窗口中永远凑不够3次
  3. 特征能力浪费:已有的 RMS/能量/频谱/周期性特征只做事后分类,不做检测
  4. 快速通道不可用:代码注释 + 严格连续 + pending无消费
  5. 停机前证据丢失:过渡期抑制丢弃异常记录,无停机前音频归档,无法事后分析
  6. 无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 模拟音频测试(周五)

准备三类测试音频:

  1. 单次冲击音频:在正常背景音中插入一段高能量脉冲(模拟瞬时故障)
  2. 间断异常音频:每隔2-3个正常文件放一个异常文件(模拟间歇性问题)
  3. 正常音频序列:确保新逻辑不会对正常音频产生误报

测试步骤:

  • 将测试音频放入监控目录,观察日志输出
  • 验证瞬时告警是否在8秒内触发(单文件级别)
  • 验证快速通道是否在24秒内触发(3文件级别)
  • 验证正常音频不触发新通道
  • 手动模拟停机(停止放入音频 / 放入低能量音频),验证关联分析和音频归档

5.3 线上灰度验证(周五-下周)

  • 新通道先设为 仅记录不推送enabled: true + 日志输出但不走推送)
  • 观察1-2天日志,统计触发次数和场景
  • 确认误报率可接受后再开启推送