# 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: ```text z = (feature - local_median) / local_scale ``` 分数取各残差特征 z-score 绝对值的最大值;最大贡献特征作为 `driver`。 等级阈值只由局部基线和稳健尺度决定: ```text 轻微 = 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 小时时合并; - 事件只表示“整机可能异常”,不要求故障缸自身振动最强; - 故障缸只用于事后验证,不参与事件生成。 当前结果: ```text 稳定运行段候选标签: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/`。