算法说明.md 5.2 KB

5 号机缸体振动标签算法说明

1. 输入

  • wave_file 中 5 号机 6 个缸体振动点位;
  • 每个文件读取 wave_sample_one 的首周期;
  • 仅保留 rpm > 0 的运行态文件;
  • 约 15 分钟一个文件;
  • 每个文件约 1544 个采样点、采样率 25.6 kHz、约 60ms。

2. 首周期特征

每个文件、每个缸计算:

  • 时域:RMS、峰值、峰峰值、偏度、峭度、峰值因子、脉冲因子、裕度因子、波形因子、过零率;
  • 频域:频带能量、谱重心、谱熵、高频能量占比;
  • 包络:包络 RMS/峰值、1x/2x/3x 包络幅值、包络熵;
  • 跨缸残差:同缸 vs 同级其他缸的 rms_log、kurt、hf_ratio、env_1x_log、env_2x_log。

当前评分主要使用跨缸残差特征,避免全厂共同工况变化直接变成单缸标签。

3. 动态局部基线

对每个 15 分钟点、每个缸:

  • 向前查看最多 30 天;
  • 至少需要 96 个有效运行点(1 天);
  • 自动跳过停机和无数据区间;
  • 每次断档超过 2 小时后,新启动的前 1 小时不参与基线;
  • 基线位置使用中位数,尺度使用 (Q75-Q25)/1.349;
  • 局部基线不足 1 天时标记 baseline_ok=False,不直接确认标签。

与旧版全局基线相比,动态基线能避免把“全时段平均”当成近期正常状态。

4. 评分和等级

对每个残差特征计算局部 z-score:

z = (feature - local_median) / local_scale

分数取各残差特征 z-score 绝对值的最大值;最大贡献特征作为 driver。

等级阈值只由局部基线和稳健尺度决定:

轻微      = max(3.5, 中位数 + 6 × MAD)
异常      = max(5.0, 中位数 + 10 × MAD)
严重异常  = max(7.0, 中位数 + 14 × MAD)
  • 分数达到“轻微”才作为候选;
  • 等级由段内最大分数决定;
  • 不使用事件日期修改阈值;
  • 不使用 24 小时局部对比度门槛。

5. 15 分钟段

  • 点级命中后,按数据连续性聚成段;
  • 单点强异常允许保留;
  • 段属性包括起止、时长、最大分数、最大时间、driver、方向、等级、特异性;
  • 方向:
    • 高幅高冲击:RMS 和峭度都高于同级;
    • 低幅高冲击:RMS 不高,但峭度高于同级;
    • 高幅:只有 RMS 高;
    • 未确认:单特征或证据不足。

6. 小时标签

  • 每小时最多 4 个 15 分钟点;
  • 至少 2 个点落入异常段,该小时才形成标签;
  • 相邻小时且连续时合并;
  • 中间缺 1 小时不跨段合并;
  • 小时标签继承段的等级、方向、确认状态和最大分数。

7. 状态标记,不做二次删除

不再用单独规则删除标签。以下信息只写入 review_flags / 字段:

  • 未确认:多特征确认不足;
  • 低幅高冲击:RMS 不高但峭度高;
  • 高幅:只有幅值高;
  • 启动/过渡:启动后前 1 小时占比高;
  • 局部基线不足:前置 1 天基线不足;
  • 持续证据弱:段内活跃点比例低。

所有标签都保留,HTML 通过筛选查看。

8. 整机多缸事件层(v2 最终标签)

单缸小时标签只作为候选明细,最终标签改为整机多缸事件:

  • 按 rpm > 0、断档 >2 小时切分运行段;
  • 排除开机后 6 小时、停机前 6 小时;
  • 24 小时窗口内至少 4 个不同缸有候选标签;
  • 其中至少 2 条达到“异常”或“严重异常”;
  • 相邻候选窗口间隔不超过 6 小时时合并;
  • 事件只表示“整机可能异常”,不要求故障缸自身振动最强;
  • 故障缸只用于事后验证,不参与事件生成。

当前结果:

稳定运行段候选标签:92 条
最终整机事件:4 个
运行段:16 个
有事件运行段:4 个
无事件运行段:12 个
验证事件:3/3

其中 4/16~4/18 是未命中维修事件的整机事件,按要求保留,不做事先删除。

9. 事件验证

事件只用于验证,不参与标签生成:

事件 缸 整机事件 等级 提前量
2026-06-12 二缸 6/10 19:00~6/11 11:00 严重异常 1.21 天
2026-06-21 五缸 6/19 21:00~6/21 01:00 严重异常 1.12 天
2026-07-11 二缸 7/06 09:00~7/08 08:00 异常 4.62 天

另有 4/16 08:00~4/18 07:00 整机事件,未命中维修记录。

HTML 中如果事件附近有温度标签,会额外画该温度标签所属级的 3 个同级缸温度曲线,不只画单个异常缸:例如 6/12 画一级 1#/2#/3#,6/21 画二级 1#/2#/3#。

整机事件不指定故障缸;6/12 的故障缸是二缸,但参与事件的是 4 个缸;6/21、7/11 也不要求故障缸自身振动最强。

10. 已知限制

  1. 首周期是快照,无法覆盖完整 15 分钟内的所有冲击;
  2. 6/10~6/11 的高转速工况(约 997 rpm)仍可能放大整机振动,事件表保留转速范围供复核;
  3. 4 月以前数据只是未取得,不做“基线预热”排除;早期事件保留;
  4. 3 次维修事件同时用于当前验证,样本小,3/3 不代表泛化准确率;
  5. 等级是规则分级,不是物理故障严重度的绝对标定。

11. 后续合并

见 合并方案.md。当前不修改 models/。