4、特征提取概述:时域特征与频域特征的定义与用途
在CMSIS-DSP信号处理链路中,特征提取是将原始采样数据转化为可量化、可比较、可分类指标的核心环节。无论是振动监测、音频识别、生物电信号分析,还是电机故障诊断,特征提取的质量直接决定了后续分类器或阈值判断的上限。本章聚焦两类最基础也最常用的特征集合——时域特征与频域特征,从数学定义、物理含义、CMSIS-DSP实现映射到实际调优案例,帮助你在嵌入式资源约束下做出合理的特征选择与参数权衡。
4.1 时域特征:从波形直接提取的统计量
时域特征直接在原始采样序列上计算,不涉及傅里叶变换,计算量小、实时性好,非常适合资源受限的MCU环境。CMSIS-DSP提供了arm_mean_f32、arm_var_f32、arm_max_f32等函数,可在单次遍历中完成大部分统计特征计算。
4.1.1 核心原理与数学定义
设采样序列为 \( x[n], n=0,1,...,N-1 \),其中N为窗口长度。四个基本时域特征定义如下:
- 均值(Mean):\(\mu = \frac{1}{N}\sum_{n=0}^{N-1}x[n]\),反映信号的直流分量或稳态偏移。在振动监测中,均值偏离零可能表示传感器偏置或机械预紧力异常。
- 方差(Variance):\(\sigma^2 = \frac{1}{N}\sum_{n=0}^{N-1}(x[n]-\mu)^2\),衡量信号围绕均值的波动程度,与信号能量直接相关。CMSIS-DSP中
arm_var_f32内部采用两遍遍历算法以保证数值稳定性。 - 峰值(Peak):\(x_{peak} = \max(|x[n]|)\),捕捉信号的最大瞬时幅值,对冲击、碰撞、瞬态干扰非常敏感。但峰值容易受噪声影响,常与均方根值结合使用。
- 过零率(Zero Crossing Rate, ZCR):统计信号符号变化的次数,即\(ZCR = \frac{1}{N}\sum_{n=1}^{N-1}|\text{sgn}(x[n]) - \text{sgn}(x[n-1])|\)。ZCR与信号主频呈正相关,是语音端点检测和简单频率估计的常用指标。
| 特征 | CMSIS-DSP函数 | 计算复杂度 | 典型用途 | 局限性 |
|---|---|---|---|---|
| 均值 | arm_mean_f32 | O(N) | 直流偏置检测、基线校准 | 对交流分量不敏感 |
| 方差 | arm_var_f32 | O(N) | 振动能量评估、异常检测 | 无法区分频率成分 |
| 峰值 | arm_max_f32 | O(N) | 冲击检测、限幅保护 | 易受噪声干扰 |
| 过零率 | arm_calcZCR(需自行实现) | O(N) | 语音端点检测、频率粗估 | 对噪声和直流偏置敏感 |
4.1.2 判断方法与操作流程
在实际工程中,时域特征提取需要遵循以下流程:
- 窗口选择:根据信号周期确定窗口长度。例如50Hz工频信号,一个周期20ms,若采样率1kHz则N=20;建议至少包含2-3个完整周期。
- 预处理:去除直流分量(减去均值)后再计算方差和峰值,避免直流偏置主导特征值。
- 归一化:若需跨通道比较,建议将特征除以满量程值或RMS值,消除传感器灵敏度差异。
- 缓存管理:在CMSIS-DSP中,使用
arm_fill_f32初始化缓冲区,用arm_copy_f32管理滑动窗口数据。
4.1.3 案例拆解:电机振动异常检测
背景与约束:某工厂压缩机电机,额定转速3000rpm(50Hz),采样率4kHz,每次采集2048点。目标是在MCU上实现实时异常报警,内存预算仅8KB。
初始现象:电机振动RMS值从0.8mm/s缓慢升至1.2mm/s,但未超过ISO 10816报警阈值(2.8mm/s),现场人员无法判断是否需要停机检修。
分析过程:
- 计算2048点窗口的均值:接近0(已去除直流),排除传感器偏置问题。
- 计算方差:从0.64升至1.44,增幅125%,但绝对值仍小。
- 计算峰值:从2.1mm/s升至5.8mm/s,峰值因子从2.6升至4.8。
- 计算过零率:稳定在100Hz附近(50Hz基频×2),排除松动导致的倍频异常。
操作步骤:在CMSIS-DSP中,使用arm_max_f32获取峰值,arm_rms_f32获取RMS,两者比值即为峰值因子。设定阈值4.5,当峰值因子超过阈值且持续3个窗口时触发报警。
结果对比:传统RMS阈值法在RMS达到2.8mm/s时才报警(约2周后),而峰值因子法提前10天预警。后续拆检发现轴承外圈点蚀。
风险与代价:峰值因子对单次随机冲击敏感,可能产生误报。解决方案是采用滑动窗口的中位数滤波,或要求连续3次超阈值才确认。
4.2 频域特征:揭示信号的频率构成
频域特征通过傅里叶变换将时域信号映射到频率轴,能够区分不同频率成分的能量分布。CMSIS-DSP提供arm_cfft_f32(复数FFT)和arm_rfft_f32(实数FFT),后者在嵌入式场景中更常用,因为大多数传感器输出为实数序列。
4.2.1 核心原理与数学定义
对于N点实数序列,arm_rfft_f32输出N/2个有效频点(0~Nyquist频率)。基于FFT结果可计算以下特征:
- FFT频谱:\(X[k] = \sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N}\),幅度谱\(|X[k]|\)直接反映各频率分量的强度。频谱峰值对应的频率即为信号主频。
- 功率谱(PSD):\(P[k] = \frac{|X[k]|^2}{N \cdot f_s}\),表示单位频率上的功率分布。CMSIS-DSP没有直接PSD函数,需先FFT再逐点求模平方。
- 谱质心(Spectral Centroid):\(C = \frac{\sum_{k=0}^{N/2-1} f_k \cdot P[k]}{\sum_{k=0}^{N/2-1} P[k]}\),表示功率加权平均频率,反映信号的"明亮度"。在音频中,谱质心高表示声音尖锐;在机械中,谱质心偏移可能指示故障频率变化。
| 频域特征 | 计算公式 | 物理意义 | CMSIS-DSP实现 |
|---|---|---|---|
| FFT幅度谱 | \(|X[k]|\) | 各频率分量的强度 | arm_rfft_f32 + arm_cmplx_mag_f32 |
| 功率谱密度 | \(|X[k]|^2 / (N \cdot f_s)\) | 功率随频率的分布 | arm_rfft_f32 + 逐点平方 |
| 谱质心 | \(\sum f_k P[k] / \sum P[k]\) | 功率加权平均频率 | arm_dot_prod_f32(两次点积) |
| 谱峰频率 | \(\arg\max_k |X[k]|\) | 主振动频率 | arm_max_f32(对幅度谱) |
4.2.2 判断方法与操作流程
频域特征提取的关键在于FFT参数配置:
- 采样率与FFT点数:频率分辨率\(\Delta f = f_s / N\)。若需分辨1Hz间隔,采样率4kHz时需N≥4096。
- 窗函数选择:CMSIS-DSP不内置窗函数,需自行实现。汉宁窗(Hanning)适用于一般振动分析,平顶窗(Flat-top)适用于幅值精度要求高的场景。
- 频谱泄漏抑制:加窗后频谱主瓣展宽,旁瓣衰减。若信号频率不是\(\Delta f\)的整数倍,泄漏不可避免,需通过插值算法修正。
- 特征提取:对幅度谱或功率谱进行峰值搜索、质心计算、子带能量求和等操作。
4.2.3 案例拆解:齿轮箱故障频率识别
背景与约束:某风电齿轮箱,输入轴转速1800rpm(30Hz),齿数比Z1=32/Z2=96。采样率25.6kHz,FFT点数8192,频率分辨率3.125Hz。目标:在线监测齿轮啮合频率及其边带。
初始现象:齿轮箱振动总值正常,但操作人员反映噪声异常。时域特征(方差、峰值)均未超限。
分析过程:
- 计算齿轮啮合频率:\(f_m = 30 \times 32 = 960Hz\)。
- 对8192点加汉宁窗后执行
arm_rfft_f32,得到4096点幅度谱。 - 在900~1020Hz范围内搜索峰值,发现960Hz处幅度正常,但940Hz和980Hz处出现明显边带(间隔20Hz,对应输入轴转频)。
- 计算谱质心:在0~5kHz范围内,谱质心从正常时的1200Hz偏移至1350Hz,指示高频能量增加。
操作步骤:
// 伪代码示例
arm_rfft_f32(&S, input, output, ifftFlag=0);
arm_cmplx_mag_f32(output, mag, fftLen/2);
// 搜索960Hz附近峰值
for (k = 288; k < 327; k++) { // 900/3.125=288, 1020/3.125=326
if (mag[k] > maxVal) { maxVal = mag[k]; maxIdx = k; }
}
// 计算边带幅度比
sidebandRatio = (mag[maxIdx-6] + mag[maxIdx+6]) / (2 * mag[maxIdx]);
结果对比:边带幅度比从正常时的0.05升至0.23,判断为齿轮齿面磨损导致调制。停机检修发现齿面点蚀面积约15%。
风险与代价:FFT计算耗时约15ms(Cortex-M4 @ 168MHz),加上窗函数和幅度计算,总耗时约20ms,满足50ms实时性要求。但内存占用:8192点float输入+8192点复数输出+4096点幅度=约100KB,需外扩SRAM。
4.3 时域与频域特征的协同使用策略
时域特征计算快但信息量有限,频域特征信息丰富但计算开销大。实际工程中应根据应用场景选择特征组合:
| 应用场景 | 推荐特征组合 | 理由 |
|---|---|---|
| 电机轴承早期故障 | 峰值因子 + 包络谱质心 | 峰值因子捕捉冲击,包络谱质心反映故障频率偏移 |
| 语音端点检测 | 过零率 + 短时能量 | 计算量极小,实时性要求高 |
| 旋转机械不平衡 | 方差 + 1倍频幅值 | 不平衡主要影响基频分量 |
| 齿轮箱磨损 | 边带幅度比 + 谱质心 | 边带比量化调制深度,谱质心反映整体频率漂移 |
4.3.1 特征融合的工程实践
在CMSIS-DSP中实现特征融合时,建议采用以下架构:
- 并行计算:时域特征在ADC DMA传输完成后的空闲时间计算,频域特征在DSP空闲时计算,避免阻塞实时控制。
- 特征归一化:不同特征量纲差异大(如均值0.01 vs 方差100),需归一化到相同尺度。可使用
arm_scale_f32和arm_offset_f32实现min-max归一化。 - 降维处理:若特征维度超过3个,建议使用主成分分析(PCA)或线性判别分析(LDA),但CMSIS-DSP不直接支持,需自行实现或使用简化版本。
arm_cfft_f32的Q15或Q31定点版本,可减少50%以上的计算时间。但定点版本需要手动处理Q格式转换,建议先用浮点版本验证算法,再移植到定点。
4.3.2 常见误区与总结复盘
误区一:特征越多越好。特征维度增加导致计算量线性增长,且可能引入冗余。例如方差和RMS高度相关(RMS² = 方差 + 均值²),同时使用两者不会增加判别信息。
误区二:忽略窗函数影响。矩形窗频谱泄漏严重,可能导致相邻频率分量相互干扰。在频域特征提取前,务必根据信号特性选择合适窗函数。
误区三:固定窗口长度。信号频率变化时,固定窗口可能导致频率分辨率不足或时间分辨率下降。建议根据信号周期动态调整窗口长度,或使用变长FFT。
误区四:忽视数值稳定性。方差计算中,若均值远大于方差,直接使用定义式会因减法抵消导致精度损失。CMSIS-DSP的arm_var_f32采用两遍算法,第一遍计算均值,第二遍计算平方差,有效避免该问题。
总结复盘:时域特征与频域特征并非对立关系,而是互补关系。在CMSIS-DSP项目中,建议先使用时域特征做粗筛(计算量小、实时性高),当检测到异常趋势时再触发频域分析进行精细诊断。这种两级策略在工业监测中已被验证能有效平衡计算资源与诊断精度。特征提取的参数调优本质上是权衡——在MCU的算力、内存、功耗约束下,选择最能区分目标状态的最小特征子集。