返回首页

声信号频段分析计算评审文档

日期:2026-07-08
项目目录:/Users/mv/Desktop/cncmock
评审目的:把当前真实现场声信号分析的需求、计算口径、公式、代码对应关系、数字结论、硬件含义和风险边界整理成一份可被复核的技术文档,供 Claude Code 或其他评审方检查是否存在较大错误、口径不一致或需要纠正的地方。

0. 评审后修正记录

根据 Claude Code 复核和专家对 t-f-A 图的疑问,2026-07-08 已完成以下修正:

  1. A/B/C 分型已补回可执行入口:新增 src/ae_field_survey.py classify 子命令,可从 output/ch1/ch2/ch3/ch4_multiscale_20windows/*_multi_window_summary.csv 重建 output/channel_comparison_report/。重建后的通道级 A/B/C 数字与原报告一致。
  2. t-f-A 图矩阵方向已修正:计算矩阵内部为 [time, frequency],Plotly 显示需要 [frequency, time]。现已在 2D/3D 图中转置输出,坐标严格为 x=ty=fz=A
  3. 增加 t-f-A 首帧方向检查表:每张 t-f-A 图中新增“首帧频谱检查”,并输出 output/tfa_first_frame_diagnostics_all.csv。固定同一时间点时,不同频率的 A 值已用数字列出,避免图形误读。
  4. 结论语气已收紧:500 kSPS 结论前置条件改为“必须确认 ADC 前端模拟抗混叠低通能压住 250 kHz 以上能量”;目前已有文件级 .meas Memo 备注,但缺少动作精确时间段标签,全文件统计仍可能稀释短促事件。

1. 当前需求与范围

1.1 需求侧重点变更

项目早期关注 AE 声发射传感器用于 CNC 刀具崩刃、断刀、Z 向接触预警。随着现场专家提供 2 MSPS 多通道真实数据,当前阶段目标已临时调整为:

当前不是最终动作分类器训练,也不是断刀/崩刃报警定型,而是先回答一个硬件决策问题:

现场声信号的有效频段是否主要落在 125 kHz 以内,或者至少落在 200 kHz 以内,从而判断 500 kSPS 原型采集卡是否有复用价值。

1.2 当前能回答与不能回答的问题

当前可以回答:

当前不能最终回答:

2. 输入数据与通道覆盖

2.1 数据目录

现场真实数据目录:

/Users/mv/Desktop/cncmock/1-机床移动

数据情况:

2.2 通道覆盖不完全

48 个文件不是全部都有 4 个通道:

通道 有效文件数 跳过文件数 说明
CH1 广州清诚 48 0 全部文件均有 CH1
CH2 北京物声 48 0 全部文件均有 CH2
CH3 嘉泰 33 15 15 个文件无 CH3
CH4 友机 17 31 31 个文件无 CH4

因此,多通道比例必须以“该通道实际存在的文件数”为分母,不能用 48 作为所有通道的统一分母。

3. 专家需求与本次实现的对应关系

3.1 专家提出的核心思路

根据会议纪要与原始记录,专家希望:

3.2 当前实际完成范围

当前已完成:

当前未完成或未严格覆盖:

这点需要评审方重点判断:当前 20 个代表窗长是否足以支撑阶段性硬件判断,还是必须补做专家原始要求的完整 1-10000 ms 扫描。

4. 计算流程

主计算代码:

src/ae_field_survey.py

网页汇总代码:

scripts/build_report_site.py
scripts/build_full_demo_site.py

4.1 数据读取

流程:

  1. 读取 .txt 表头,识别通道名称。
  2. 尝试从同名测量目录中的 .par 文件读取采样率、位数、单位、前置放大器信息。
  3. .par 不可用,使用 fallback 采样率 2,000,000 Hz
  4. 流式读取分号分隔文本数据,避免一次性加载 58 GB 文件。

代码对应:

4.2 固定频段定义

默认频段定义在 src/ae_field_survey.py

0-50 kHz
50-100 kHz
100-125 kHz
125-200 kHz
200-250 kHz
250-400 kHz
400-1000 kHz

代码对应:

DEFAULT_BANDS_HZ

这些频段对应当前硬件判断逻辑:

4.3 FFT 窗口与频率分辨率

1 ms 主口径下:

fs = 2,000,000 Hz
window_ms = 1 ms
window_samples = 2,000 samples

专家口径中常说“1 ms 对应 1 kHz 频点”。当前代码为了 FFT 计算效率使用:

fft_size = next_pow2(window_samples)

因此 1 ms 时:

fft_size = 2048
实际 FFT bin = fs / fft_size = 2,000,000 / 2048 = 976.5625 Hz

t-f-A 图为了展示,会把频率轴插值到 1000 Hz 网格。这意味着:

这不一定改变频带占比结论,但属于需要评审方检查的技术细节。

4.4 每个窗口的计算步骤

对每个通道、每个窗口:

  1. 切分窗口:
window_samples = round(fs * window_ms * 1e-3)
  1. 去直流:
x_centered = x - mean(x)
  1. 加 Hann 窗:
x_windowed = x_centered * hann
  1. 做实数 FFT:
X = rfft(x_windowed, n=fft_size)
  1. 计算功率谱:
P(f) = |X(f)|^2
  1. 去除 DC:
P(0 Hz) = 0
  1. 按频带求和:
E_band = sum(P(f), f in target_band)
E_total = sum(P(f), f > 0)
  1. 计算频带占比:
band_fraction = E_band / E_total

代码对应:

4.5 文件级与通道级汇总

文件级:

通道级:

这个口径的优点:

这个口径的风险:

5. A/B/C 频段风险分型

5.1 分型规则

当前分型是频段风险分型,不是动作分类。

规则:

A_low_frequency_stable:
  >250 kHz < 1%
  且 125 kHz 以外 < 5%

C_high_frequency_risk:
  >250 kHz >= 20%

B_transition_or_mixed:
  其余边界/混合样本

等价理解:

规则来源与可复现入口:

.venv/bin/python src/ae_field_survey.py classify --out-dir output/channel_comparison_report

默认读取:

output/ch1_multiscale_20windows/CH1_multi_window_summary.csv
output/ch2_multiscale_20windows/CH1_multi_window_summary.csv
output/ch3_multiscale_20windows/CH3_multi_window_summary.csv
output/ch4_multiscale_20windows/CH4_multi_window_summary.csv

重建后的 channel_summary.csv 与当前正式报告数字一致。

5.2 这套规则的性质

这套规则是工程风险划分规则,而不是经过动作标签训练得到的分类模型。

它适合回答:

它不适合直接回答:

6. 主要计算结果

6.1 CH1 广州清诚文件级分型

来源:

output/ch1_decision_report/class_summary.csv
output/ch1_decision_report/overall_metrics.json
CH1 分型 文件数 占比 <=125 kHz 中位数 >250 kHz 中位数 400 kHz-1 MHz 中位数
A 低频稳定 30 62.50% 99.99% 0.01% 0.01%
B 边界/混合 7 14.58% 82.26% 14.91% 11.85%
C 高频风险 11 22.92% 48.56% 43.36% 34.44%

补充指标:

6.2 CH1 结论

CH1 是当前最支持 500 kSPS 低频版验证的通道:

因此,不能只看 CH1 中位数就宣布 500 kSPS 无风险。必须确认 11 个 C 类文件,特别是前 5 个强风险文件,是否对应目标动作“碰/敲/切/挤”。

6.3 CH1-CH4 通道级结果

来源:

output/channel_comparison_report/channel_summary.csv
通道 有效文件 跳过文件 A/B/C <=125 kHz 中位数 <=200 kHz 中位数 >250 kHz 中位数 400 kHz-1 MHz 中位数 当前判断
CH1 广州清诚 48 0 30/7/11 99.98% 99.99% 0.01% 0.01% 主验证通道,但需复核 C 类
CH2 北京物声 48 0 12/27/9 97.39% 97.55% 2.33% 1.74% 可做辅助验证,边界样本多
CH3 嘉泰 33 15 11/14/8 94.90% 95.07% 4.82% 3.86% 可做辅助对比,高频风险更明显
CH4 友机 17 31 0/0/17 50.89% 55.53% 41.71% 27.89% 高频风险显著,不建议 500 kSPS 定型

6.4 多通道结论

从当前数据看:

这不是说 CH4 一定“错误”或“无用”,而是说:如果目标信号必须依赖 CH4 当前观测到的高频成分,500 kSPS 不能完整覆盖。

7. t-f-A 图的含义

7.1 坐标定义

t-f-A 图中:

注意:

A 不是原始时域瞬时电压。原始数据单位可以是 mV,但经过 FFT 后,A 应理解为频谱幅值、功率或 dB 显示量。

7.2 2D/3D 图与数字结论的关系

t-f-A 图用于观察形态:

最终比例判断以 CSV 统计值为准:

output/ch1_tfa_report/tfa_report_summary.csv
output/multi_channel_tfa_report/multi_channel_tfa_summary.csv
output/channel_comparison_report/channel_summary.csv

原因:

7.3 t-f-A 图方向修正

专家提出疑问:“在 t-f-A 三维图里,在时间 0 位,不同频率的 A 值一般不会是相同的。”

复核后确认:原绘图代码存在展示方向问题,不是 FFT 计算本身的问题。

已修正:

验证输出:

output/tfa_first_frame_diagnostics_all.csv
output/ch1_tfa_report/tfa_first_frame_diagnostics.csv
output/multi_channel_tfa_report/tfa_first_frame_diagnostics.csv

示例:CH1 A 类首帧在 0/50k/125k/200k/250k/400k/1000k Hz 的 A 值均不同,说明当前图形方向已按 x=t, y=f, z=A 修正。

8. 500 kSPS 硬件适配解释

8.1 采样率边界

500 kSPS 的奈奎斯特频率为:

f_N = 500 kSPS / 2 = 250 kHz

工程解释:

8.2 混叠风险

如果 500 kSPS 临时采集板的模拟前端没有在 250 kHz 以下做足够低通滤波,那么 >250 kHz 的真实声信号会折叠到低频。

例如:

320 kHz 信号在 500 kSPS 采样下可能折叠到 180 kHz 附近

这会造成一个危险现象:

因此,500 kSPS 方案是否成立,不只取决于频谱分析,还取决于硬件模拟抗混叠低通滤波器。

9. 当前工程结论

9.1 可以作为阶段性结论的内容

在“500 kSPS 前端抗混叠低通有效压制 250 kHz 以上能量”这个前提成立时,当前可以较有把握地说:

  1. 基于 2 MSPS 真实数据,CH1 广州清诚在多数文件中表现出明显低频集中,适合作为 500 kSPS 原型卡的主验证通道。
  2. CH2/CH3 也有低频可用价值,但边界混合和高频风险比例更高,建议作为辅助对比通道。
  3. CH4 当前高频风险最强,不建议用 500 kSPS 对 CH4 做最终定型判断。
  4. 当前已发现一批 C 类高频风险文件,若这些文件对应目标动作“碰/敲/切/挤”,则 500 kSPS 只能做低频近似验证,不能覆盖完整目标信号。

9.2 不应过度表达的内容

当前不应说:

更准确的表达是:

在确认 500 kSPS 采集卡 ADC 前端抗混叠设计有效之前,当前所有 <=125 kHz<=200 kHz 结论都应视为阶段性频段侦察结果。
若抗混叠前提成立,当前结果支持“以 CH1 为主推进 500 kSPS 低频版验证”;但最终硬件定型仍取决于目标动作标签复核、500 kSPS 前端抗混叠设计和现场复采一致性。

10. 主要输出文件

汇总网站:

full-report-site/index.html
report-site/index.html
https://cnc-ae-field-report.pages.dev

核心结果:

output/ch1_decision_report/per_file_decision_table.csv
output/ch1_decision_report/class_summary.csv
output/ch1_decision_report/overall_metrics.json
output/channel_comparison_report/channel_summary.csv
output/channel_comparison_report/per_file_channel_decision.csv
output/channel_comparison_report/top_high_frequency_files.csv

t-f-A 图集:

output/ch1_tfa_report/index.html
output/ch1_tfa_report/tfa_report_summary.csv
output/ch1_tfa_report/tfa_first_frame_diagnostics.csv
output/multi_channel_tfa_report/index.html
output/multi_channel_tfa_report/multi_channel_tfa_summary.csv
output/multi_channel_tfa_report/tfa_first_frame_diagnostics.csv
output/tfa_first_frame_diagnostics_all.csv

多窗口结果:

output/ch1_multiscale_20windows/
output/ch2_multiscale_20windows/
output/ch3_multiscale_20windows/
output/ch4_multiscale_20windows/

阶段记录:

documents/FIELD_FREQUENCY_SURVEY_2026-07-07.md
documents/ALGORITHM_KNOWLEDGE_BASE.md
documents/PIVOT_PLAN.md

11. 风险与待复核问题

11.1 有文件级 Memo,但缺少动作时间段标签

这是当前最大限制。

需要补充至少一种标签:

file,event_label,start_s,end_s,notes
1-机床移动 26-07-07 14-29-14.txt,敲,0.0,5.0,手敲外舱门
1-机床移动 26-07-07 15-00-06.txt,切,12.5,18.0,正常切削

只有文件级 Memo 时,可以按采集备注做频段风险交叉复核,但不能输出四类动作在具体发生时刻的最终频段。

11.2 频带能量占比是否应使用功率谱

当前频带比例使用:

P(f) = |FFT(f)|^2
band_fraction = sum(P_band) / sum(P_all)

评审点:

11.3 1 ms 对 1 kHz 的口径差异

当前代码使用 next_pow2(2000)=2048,1 ms 实际 bin 约 976.56 Hz。t-f-A 图展示插值到 1 kHz 网格。

评审点:

11.4 文件级全窗口统计 vs 事件窗口统计

当前主结论使用全文件 1 ms 窗口能量汇总。

优点:

风险:

这是当前最大的算法方法风险,优先级高于继续扩展更多窗长。现有 .meas Memo 已经提供了文件级上下文,下一步最有价值的是补充文件内动作起止时间段。

评审点:

11.5 通道之间是否可直接比较

不同通道对应不同传感器、安装位置、前端响应和可能的通道数覆盖。

评审点:

11.6 500 kSPS 前端抗混叠未知

当前结论对 500 kSPS 的判断依赖硬件前端:

如果抗混叠不明确,则 125-200 kHz 甚至更低频段的实际采集都可能被 >250 kHz 折叠污染。

12. 建议 Claude Code 重点审核的问题

请 Claude Code 或评审方优先检查以下问题:

  1. 公式是否正确:用 |FFT|^2 的频带能量占比是否适合当前专家需求?是否需要补充幅值谱占比?
  2. FFT bin 口径next_pow2(2000)=2048 导致 1 ms 不再严格等于 1 kHz bin,这是否需要纠正?
  3. 分型阈值是否合理:A 类 >250kHz <1% 且 125kHz 外 <5%、C 类 >250kHz >=20% 是否过于主观?是否应根据硬件误报/漏报目标重新设定?分型代码现已可通过 ae_field_survey.py classify 重跑。
  4. 全文件统计是否合适:只有文件级 Memo 时,使用全文件能量占比是否会稀释目标动作?是否应以 top windows 或人工标注窗口为主?
  5. 中位数通道结论是否掩盖风险:CH1 中位数极低,但有 11 个 C 类文件;当前“CH1 最适合”是否表达得足够保守?
  6. 跨通道比较是否公平:CH1-CH4 传感器、安装、有效文件数不同,当前通道对比是否应增加限定语?
  7. t-f-A 图是否可能误导:矩阵方向已修正,并加入首帧方向检查表;仍需注意图形经过降采样、dB 裁剪和插值,最终比例以 CSV 为准。
  8. 500 kSPS 判断是否过早:在抗混叠参数未知时,是否应把 125-200kHz 可用 的表述进一步降级?
  9. CH4 高频是否可能是链路/安装问题:是否需要做同一时间段四通道对齐,而不是仅看文件级占比?
  10. 是否必须补做 10000 ms:专家原始建议包含到 10000 ms,目前代表窗长只到 1000 ms,是否影响评审接受度?

13. 建议下一步

优先级从高到低:

  1. 向硬件确认 500 kSPS 板卡 ADC 前端抗混叠低通截止频率、阶数和放大器带宽。
  2. 获取动作时间段标签:现已有文件级 .meas Memo,下一步应补文件内部起止时间段。
  3. 对标签窗口重新统计四类动作的 <=125kHz<=200kHz>250kHz400kHz-1MHz
  4. 对 C 类文件做现场工况复核,确认是否为目标动作还是非目标干扰。
  5. 如果评审要求严格复现专家矩阵,补做严格 n=2000 的 1 kHz bin 版本,以及更长窗口到 10000 ms 的抽样或全量统计。

14. 最终阶段性判断

当前数据支持以下谨慎结论:

以 CH1 广州清诚为主的低频版 500 kSPS 验证值得继续推进;CH2/CH3 可作为辅助对比;CH4 当前高频风险显著,不建议作为 500 kSPS 定型依据。
但在缺少“碰/敲/切/挤”动作时间段标签、缺少 500 kSPS 前端抗混叠参数、且 C 类文件尚未完成按 Memo/现场工况复核之前,不能宣布 500 kSPS 已满足最终交付要求。