3、傅里叶变换原理:从连续傅里叶变换到离散傅里叶变换(DFT)的基本数学概念
在TinyML的振动故障诊断场景中,传感器采集到的原始时域信号往往难以直接揭示故障特征。例如,一个正常的轴承振动波形与一个存在内圈剥落的轴承振动波形,在时域上可能看起来都是杂乱无章的振荡,仅凭幅值大小很难区分。傅里叶变换的核心价值在于:它将信号从时间维度映射到频率维度,将复杂的波形分解为一系列不同频率、不同幅值和不同相位的正弦波叠加。这种视角转换使得隐藏在时域信号中的周期性故障特征(如轴承通过频率、齿轮啮合频率及其边带)变得清晰可辨。本节将系统梳理从连续傅里叶变换(CFT)到离散傅里叶变换(DFT)的数学演进逻辑,并重点解释在嵌入式平台上实现频谱分析所必须理解的采样、泄漏与栅栏效应等关键概念。
3.1 从连续世界到离散世界的数学桥梁
傅里叶变换的起点是连续时间信号 x(t)。在理想数学模型中,连续傅里叶变换定义为 X(f) = ∫x(t)·e^(-j2πft)dt,其中积分区间为负无穷到正无穷。这个公式的物理含义是:将信号 x(t) 与不同频率 f 的复指数函数 e^(-j2πft) 做内积,得到的 X(f) 就代表了信号中包含频率 f 成分的强度与相位。然而,在TinyML的实际应用中,我们面对的是微控制器(MCU)通过ADC采样得到的离散数字序列,而非连续函数。因此,必须完成两个关键步骤的转化:时域采样和时域截断。
时域采样以采样周期 T(或采样率 fs = 1/T)对连续信号 x(t) 进行等间隔抽取,得到离散序列 x[n] = x(nT)。根据奈奎斯特采样定理,只有当 fs 大于信号最高频率的两倍时,采样后的离散信号才能无失真地恢复原始连续信号。时域截断则是从无限长的采样序列中取出有限长度 N 个点进行分析,这相当于用一个矩形窗口乘以原始信号。经过这两步处理后,连续傅里叶变换就演化为离散傅里叶变换(DFT),其定义为:
X[k] = Σ_{n=0}^{N-1} x[n] · e^(-j2πkn/N), k = 0, 1, ..., N-1
其中,k 表示频率索引,对应的实际频率为 f_k = k·fs/N。DFT 的输出 X[k] 是一个复数,包含幅度和相位信息。在故障诊断中,我们通常只关心幅度谱 |X[k]|,因为它反映了各频率成分的能量大小。
| 变换类型 | 信号形式 | 频率输出 | 计算复杂度 | 适用场景 |
|---|---|---|---|---|
| 连续傅里叶变换 (CFT) | 连续函数 x(t) | 连续频谱 X(f) | 解析计算 | 理论推导、教科书分析 |
| 离散时间傅里叶变换 (DTFT) | 无限长离散序列 x[n] | 连续周期频谱 | 无法直接计算 | 概念理解、采样理论分析 |
| 离散傅里叶变换 (DFT) | 有限长离散序列 x[0..N-1] | N个离散频点 X[0..N-1] | O(N²) | 数字信号处理基础 |
| 快速傅里叶变换 (FFT) | 有限长离散序列(N=2^m) | 与DFT相同 | O(N log N) | TinyML嵌入式实时分析 |
3.2 DFT的工程实现:参数选择与计算流程
在TinyML设备上实现DFT(通常使用FFT算法)并非简单调用一个库函数,而是需要根据具体的故障诊断任务精心设计参数。核心参数包括采样率 fs、DFT点数 N 和窗函数类型。这三个参数共同决定了频谱分析的质量。
第一步:确定采样率 fs。根据奈奎斯特定理,fs 必须大于目标最高频率的2倍。例如,若需分析轴承外圈故障特征频率(通常在几百赫兹到几千赫兹),且最高关注频率为 5 kHz,则 fs 至少为 10 kHz。实际工程中常留出 20%~30% 的裕量,取 fs = 12.8 kHz 或 16 kHz。
第二步:确定DFT点数 N。N 直接决定了频率分辨率 Δf = fs/N。若需要区分两个频率间隔为 10 Hz 的相邻故障特征(例如电机转频与边带),则 Δf 必须小于 10 Hz,即 N > fs/10 = 1280。考虑到FFT要求 N 为2的整数次幂,可取 N = 2048。此时频率分辨率为 16000/2048 ≈ 7.8 Hz,满足要求。但更大的 N 意味着更长的采样时间和更大的内存占用(N个复数需要 2×N×4 字节,2048点约需16KB RAM),在资源受限的MCU上需要权衡。
第三步:选择窗函数。直接对截断信号做FFT会产生频谱泄漏。若信号频率恰好落在某个频点 k·Δf 上,则泄漏很小;但实际故障特征频率往往不满足此条件。加窗可以抑制泄漏,但会降低频率分辨率。汉宁窗(Hann)是振动分析中最常用的窗函数,其旁瓣衰减较大,主瓣宽度适中。对于冲击类故障(如轴承点蚀),有时也采用矩形窗以保留冲击特征,但需接受较大的泄漏。
典型参数配置示例(基于Cortex-M4内核MCU):
- 加速度传感器采样率:fs = 12.8 kHz
- FFT点数:N = 1024(频率分辨率 12.5 Hz)
- 窗函数:汉宁窗(预先计算并存储于Flash)
- 计算耗时:使用CMSIS-DSP库的arm_cfft_f32,1024点FFT约需 0.5~1 ms @ 100 MHz
- 内存占用:输入/输出数组 2×1024×4 = 8 KB,窗函数表 1024×4 = 4 KB
3.3 案例拆解:电机轴承故障特征频率的DFT提取
某工业电机驱动系统出现异常振动,振动信号由压电式加速度计采集,采样率 fs = 25600 Hz。电机转速为 1470 r/min(转频 fr = 24.5 Hz),轴承型号为 6205,其故障特征系数为:外圈 BPFO = 3.585,内圈 BPFI = 5.415,滚动体 BSF = 2.357。理论计算得到外圈故障特征频率 f_BPFO = fr × 3.585 ≈ 87.8 Hz。
初始现象:时域波形显示存在周期性冲击,但噪声较大,无法直接判断故障位置。目标是通过FFT频谱确认是否存在外圈故障特征频率及其谐波。
分析过程:
- 采集 0.2 秒数据,共 5120 个采样点。为满足FFT点数要求,取 N = 4096(2^12),对应时间长度 T = 4096/25600 = 0.16 秒,频率分辨率 Δf = 6.25 Hz。
- 对原始信号施加汉宁窗,减少频谱泄漏。
- 执行4096点FFT,计算幅度谱 |X[k]|。
- 在频谱中搜索 87.8 Hz 附近的峰值。由于 Δf = 6.25 Hz,87.8 Hz 落在第 k = 87.8/6.25 ≈ 14.05 个频点附近,实际观察第 14 个频点(87.5 Hz)和第 15 个频点(93.75 Hz)的幅度。
结果与判断:频谱显示在 87.5 Hz 处出现明显峰值,幅度为 2.3 m/s²,且在其 2 倍频(175 Hz)和 3 倍频(262.5 Hz)处也存在递减的峰值。同时,在转频 24.5 Hz 附近有较小的调制边带(间隔约 87.8 Hz)。综合判断为轴承外圈存在局部剥落故障。
风险与代价:若直接使用矩形窗而不加窗,频谱泄漏会导致 87.8 Hz 的能量扩散到相邻频点,可能使峰值幅度降低 20% 以上,甚至淹没在噪声中。此外,若 N 选择过小(如 N=512,Δf=50 Hz),则 87.8 Hz 与 100 Hz 频点混叠,无法准确识别故障频率。
工程经验:在TinyML设备上,建议将FFT的输入数据直接使用ADC的原始整数数据(如16位),在FFT前转换为浮点数或Q15定点格式。CMSIS-DSP库同时提供浮点和定点FFT函数,定点版本在无FPU的MCU上速度更快,但需注意动态范围,避免溢出。
3.4 常见误区与总结复盘
在DFT的实际应用中,工程师常陷入以下几个误区,导致频谱分析结果失真或误判。
误区一:采样率越高越好。虽然高采样率可以覆盖更宽的频率范围,但也会导致相同N值下的频率分辨率变差(Δf = fs/N)。例如,将 fs 从 12.8 kHz 提高到 51.2 kHz,若 N 仍为 1024,则 Δf 从 12.5 Hz 恶化到 50 Hz,可能无法分辨间隔小于 50 Hz 的故障特征。正确做法是根据目标最高频率确定 fs,再根据所需频率分辨率确定 N。
误区二:忽略抗混叠滤波。ADC采样前必须使用低通滤波器(抗混叠滤波器)滤除高于 fs/2 的频率成分。若传感器或信号链中存在高频噪声(如开关电源干扰),这些高频成分会折叠到低频段,产生虚假的频谱峰值。在TinyML硬件设计中,应在ADC前端加入RC低通滤波器或使用集成抗混叠功能的ADC。
误区三:直接对原始信号做FFT而不加窗。对于非整周期截断的信号,矩形窗会导致严重的频谱泄漏。一个典型的错误是:采集 1024 点数据,信号频率为 50 Hz,fs = 1000 Hz,则 Δf = 0.977 Hz,50 Hz 恰好落在第 51.2 个频点,由于不是整数,能量会泄漏到第 51 和 52 个频点,造成幅度下降和虚假边带。加汉宁窗后,虽然主瓣变宽,但泄漏显著减少,幅度估计更准确。
误区四:忽视FFT输出顺序。标准FFT输出的第 0 个频点是直流分量,第 1 到 N/2-1 个频点对应正频率,第 N/2 个频点是奈奎斯特频率,第 N/2+1 到 N-1 个频点对应负频率。在嵌入式实现中,若直接取前 N/2 个频点作为频谱,需注意第 0 点(直流)通常需要去除,且频率轴应从 k=1 开始计算。
风险提示:在资源受限的MCU上,FFT计算可能占用大量CPU时间。若需要实时分析(如每 100 ms 更新一次频谱),应评估FFT耗时是否满足实时性要求。对于 N=1024 的浮点FFT,在无FPU的Cortex-M0+上可能需要 10~20 ms,此时可考虑使用定点FFT或降低N值。另外,FFT输入数据的归一化也很重要——若ADC满量程为 ±3.3V,而信号仅占满量程的 1%,则FFT结果的动态范围会受限,需考虑前置放大或使用更高分辨率的ADC。
总结复盘:从连续傅里叶变换到离散傅里叶变换,本质上是将数学上的积分运算转化为有限项的求和运算,以适应数字计算机的处理能力。在TinyML故障诊断中,DFT(通过FFT实现)是频域特征提取的基石。掌握采样率、FFT点数、窗函数三者的关系,理解频率分辨率、频谱泄漏和栅栏效应的物理本质,是正确设计频谱分析模块的前提。实际工程中,应结合具体故障特征频率和MCU资源约束,通过仿真和实验验证参数选择的合理性,避免盲目套用固定配置。