2、时域与频域基础:信号表示、时域波形与频谱的关系,为什么需要频域分析
TinyML 设备(如振动传感器、麦克风、加速度计)采集到的原始信号,本质上是一串随时间变化的数值序列。绝大多数工程师的第一反应是直接查看这段波形——看幅值、看周期、看有没有“毛刺”。这种在时间轴上观察信号的方式称为时域分析,它直观、易于实现,但在处理故障特征时往往力不从心。一个微弱的轴承早期损伤信号,可能完全淹没在正常的振动背景中;两个频率接近的信号叠加后,时域波形看起来只是一个“变粗”的正弦波,肉眼无法分辨。要解决这类问题,必须将信号从时间轴转换到频率轴,即进行频域分析。本章将系统讲解信号在时域与频域中的表示方法、二者之间的数学关系,以及为什么频域分析是 TinyML 故障特征提取的基石。
上图展示了时域与频域对同一物理信号的不同观察方式。时域波形是信号最原始的存在形式,而频谱则揭示了信号内部的频率构成。对于 TinyML 故障诊断而言,频域分析的核心价值在于:故障往往对应特定的频率特征。例如,滚动轴承的内圈故障特征频率约为 3.5 倍转频,齿轮断齿的特征频率为啮合频率及其边带。这些频率成分在时域中可能被噪声掩盖,但在频谱中却清晰可辨。
2.1 信号表示:从连续时间到离散序列
在嵌入式系统中,传感器输出的物理量(振动加速度、声压、电流)首先经过采样保持电路,被转换为离散时间序列。设采样频率为 fs,采样间隔 Δt = 1/fs,则连续信号 x(t) 被表示为离散序列 x[n] = x(n·Δt),其中 n = 0, 1, 2, ..., N-1。N 为采样点数,决定了频率分辨率 Δf = fs/N。
这里有一个关键约束:奈奎斯特采样定理要求采样频率必须大于信号最高频率成分的两倍,否则会发生混叠(Aliasing),高频成分会“折叠”到低频区域,造成频谱失真。例如,若轴承故障特征频率为 2.5 kHz,采样频率至少应为 5 kHz,工程上通常取 5~10 倍以保证余量。
| 参数 | 符号 | 计算公式 | 典型值(振动监测) |
|---|---|---|---|
| 采样频率 | fs | ≥ 2 × fmax | 12.8 kHz / 25.6 kHz |
| 采样点数 | N | 2m(FFT 要求) | 1024 / 2048 / 4096 |
| 频率分辨率 | Δf | fs / N | 12.5 Hz(12.8k/1024) |
| 采样时长 | T | N / fs | 0.08 s ~ 0.32 s |
在 TinyML 场景中,采样点数和采样频率直接决定了内存占用和计算量。一个 1024 点的 FFT 需要约 4 KB 的浮点缓冲区(若用 int16 则为 2 KB),而 Cortex-M4 内核执行 1024 点 FFT 大约需要 1~3 ms(取决于时钟频率和优化程度)。因此,在算法设计之初就要根据 MCU 资源合理选择 N 和 fs,而不是盲目追求高分辨率。
2.2 时域波形与频谱的数学关系:傅里叶变换
傅里叶变换是连接时域与频域的桥梁。对于离散序列 x[n],其离散傅里叶变换(DFT)定义为:
X[k] = Σ_{n=0}^{N-1} x[n] · e^{-j·2π·k·n/N},k = 0, 1, ..., N-1
其中 X[k] 是第 k 个频率分量的复数值,其模 |X[k]| 表示该频率成分的幅值,幅角表示相位。实际应用中,直接计算 DFT 的复杂度为 O(N²),而快速傅里叶变换(FFT)利用旋转因子的对称性和周期性,将复杂度降至 O(N·log₂N)。以 1024 点 FFT 为例,DFT 需要约 100 万次复数乘法,而 FFT 仅需约 1 万次,计算量降低两个数量级。
理解频谱时需要注意以下几点:
- 频谱是离散的:由于采样序列是有限长的,频谱在频域上以 Δf 为间隔离散分布,每个频点 k 对应的实际频率为 f = k·Δf。
- 幅值修正:FFT 输出的幅值需要乘以 2/N(单边谱)才能得到真实幅值。直流分量(k=0)只需乘以 1/N。
- 窗函数的影响:直接对截断信号做 FFT 会产生频谱泄漏,旁瓣会掩盖邻近的微弱信号。加汉宁窗(Hann)可将旁瓣衰减约 31 dB,但主瓣宽度增加一倍,频率分辨率下降。
2.3 为什么需要频域分析:时域难以解决的四个问题
时域分析并非无用,它在检测冲击、削顶、间歇性异常时非常有效。但在以下四类场景中,频域分析具有不可替代的优势:
- 微弱特征提取:轴承早期点蚀产生的冲击能量很小,时域波形中幅值变化可能只有正常水平的 1%~2%,肉眼无法分辨。但在频谱中,故障特征频率处的幅值会明显高于噪声基底,通过设定阈值即可识别。
- 多频率成分分离:一台设备可能同时存在转子不平衡(1×转频)、不对中(2×转频)、齿轮啮合(齿数×转频)等多种振动源。时域波形是这些成分的叠加,无法区分;频谱则像“光谱仪”一样,将每种成分分离到独立的频点上。
- 趋势监测与早期预警:通过跟踪特定频段的能量变化(如 1 kHz~3 kHz 的轴承高频段),可以建立设备劣化趋势曲线。当能量值超过基线 3 倍时,即使时域波形仍正常,系统也能提前报警。
- 抗噪声干扰:时域信号的信噪比往往很低,但经过 FFT 后,随机噪声的功率被平均分配到所有频点,而确定性故障特征集中在少数频点。因此,频域分析等效于一种“窄带滤波”,能显著提高信噪比。
| 对比维度 | 时域分析 | 频域分析 |
|---|---|---|
| 信息类型 | 幅值随时间变化 | 幅值随频率分布 |
| 故障敏感度 | 对冲击敏感,对微弱磨损不敏感 | 对周期性特征敏感,可检测早期微弱故障 |
| 计算复杂度 | 低(均值、峰值、RMS) | 中(FFT 需 O(N·logN)) |
| 抗噪能力 | 弱,噪声直接叠加在波形上 | 强,噪声被分散到各频点 |
| 实时性 | 高,逐点计算 | 需攒够 N 点才能计算,有延迟 |
| 典型应用 | 超限报警、冲击检测 | 故障分类、趋势预测、特征提取 |
2.4 案例拆解:电机轴承故障的时域与频域对比
某工厂一台 4 极异步电机(额定转速 1470 rpm,转频 fr = 24.5 Hz)驱动离心泵,振动传感器安装在电机驱动端轴承座上。设备运行半年后,巡检人员发现时域波形幅值略有增大(从 2.1 mm/s 升至 2.8 mm/s),但仍低于报警值 4.5 mm/s。时域波形看起来只是“噪声变大了一些”,无法判断是否存在故障。
采集 2048 点数据,采样频率 fs = 12.8 kHz,频率分辨率 Δf = 6.25 Hz。对信号加汉宁窗后进行 FFT,得到频谱如下:
频点(k) 频率(Hz) 幅值(mm/s)
4 25.0 1.82 ← 转频 1×fr
8 50.0 0.45 ← 2×fr(轻微不对中)
12 75.0 0.12 ← 3×fr
35 218.8 0.08 ← 噪声基底
36 225.0 0.31 ← 疑似故障特征频率
37 231.3 0.09
72 450.0 0.06 ← 2×故障特征频率
分析过程:
- 计算轴承外圈故障特征频率 BPFO = 0.4 × Nball × fr。该轴承有 9 个滚动体,BPFO = 0.4 × 9 × 24.5 ≈ 88.2 Hz。但频谱中 88 Hz 附近并无明显峰值。
- 再计算内圈故障特征频率 BPFI = 0.6 × 9 × 24.5 ≈ 132.3 Hz。频谱中 132 Hz 处幅值仅 0.05 mm/s,也不突出。
- 注意到 225 Hz 处有 0.31 mm/s 的峰值,且 450 Hz 处有 0.06 mm/s 的二次谐波。225 Hz 恰好等于 9 × 25 Hz(转频的 9 倍),这可能是保持架故障特征频率(FTF)的整数倍,也可能是滚动体通过频率。
- 进一步检查时域波形,发现每 0.04 s(对应 25 Hz)有一个微小的冲击脉冲,但幅值仅比噪声高 0.3 mm/s,肉眼几乎不可见。
最终诊断:保持架磨损导致滚动体间距不均匀,产生 225 Hz 的周期性冲击。由于时域幅值未超限,传统保护系统不会报警;但频域分析在故障早期就捕捉到了特征频率。随后安排停机检修,发现保持架确有裂纹,更换轴承后 225 Hz 峰值消失,振动幅值降至 1.9 mm/s。
2.5 常见误区与总结复盘
在 TinyML 频域特征提取的实践中,初学者常犯以下错误:
- 误区一:采样频率越高越好。高采样率导致数据量激增,MCU 内存和功耗压力增大。应根据最高故障特征频率选择采样率,通常取最高关注频率的 4~8 倍即可。
- 误区二:忽略窗函数。直接对原始信号做 FFT 会产生严重泄漏,导致相邻频点互相干扰。必须加窗,且窗函数的选择会影响幅值精度和频率分辨率。
- 误区三:只看幅值谱,忽略相位。虽然 TinyML 中通常只用幅值特征,但相位信息在识别特定故障(如不对中)时仍有价值。若 MCU 资源允许,可保留相位特征。
- 误区四:频率分辨率不足。若 Δf 大于故障特征频率的间隔,两个相邻频率成分会合并为一个峰。例如,转频 24.5 Hz 和 25 Hz 的区分需要 Δf < 0.5 Hz,即 N > 25.6k 点,这在 MCU 上不现实。此时应通过增加采样时长或使用 Zoom-FFT 技术。
总结复盘:时域与频域不是对立关系,而是互补关系。时域适合快速判断“有没有异常”,频域适合精确回答“是什么故障”。在 TinyML 系统中,建议按以下流程设计:
- 确定目标故障类型及其特征频率范围,据此选择采样率和采样点数。
- 实现加窗 + FFT + 幅值谱计算,提取 3~5 个关键频段的能量或峰值作为特征。
- 将特征输入轻量级分类器(如决策树、1D-CNN),完成故障识别。
- 在 MCU 上验证实时性和功耗,必要时降低 FFT 点数或采用分段处理。