4、特征提取概念:时域特征(均值、方差、峰值、RMS)、频域特征(FFT频谱、功率谱、谱质心)及典型应用场景
特征提取是CMSIS-DSP信号处理链路中连接原始采样数据与决策判断的核心桥梁。在嵌入式系统中,ADC采集到的原始波形往往包含大量冗余信息和噪声,直接将其送入分类器或控制逻辑不仅计算开销大,而且难以获得稳定的判别依据。特征提取的本质是通过数学变换,将高维的时域采样序列压缩为低维、具物理意义、对目标状态敏感的数值集合。本章围绕时域与频域两大类特征展开,重点讲解均值、方差、峰值、RMS、FFT频谱、功率谱与谱质心的数学定义、工程计算方法、在CMSIS-DSP中的实现映射,以及它们在电机振动监测、音频场景识别、电源纹波分析等典型场景中的选型逻辑。
上图展示了特征提取在嵌入式信号处理链路中的位置:原始采样序列经过预处理后,分别进入时域与频域两条特征计算路径,最终汇聚到具体应用场景中。时域特征计算简单、实时性好,适合快速判断信号幅值变化;频域特征则能揭示信号的周期性成分,适合识别特定频率的振动或噪声源。实际工程中,往往需要将两类特征组合使用,才能获得足够的判别维度。
4.1 时域特征:均值、方差、峰值与RMS
4.1.1 核心原理与数学定义
时域特征直接对采样序列x[n](n=0,1,...,N-1)进行统计计算,反映信号在幅值维度的分布特性。四个最基础的特征定义如下:
- 均值(Mean):\(\bar{x} = \frac{1}{N}\sum_{n=0}^{N-1}x[n]\),表征信号的直流分量或静态偏移。在振动监测中,均值反映传感器是否发生零漂;在音频中,均值接近零表示信号已去除直流偏置。
- 方差(Variance):\(\sigma^2 = \frac{1}{N}\sum_{n=0}^{N-1}(x[n]-\bar{x})^2\),度量信号围绕均值的波动程度。方差越大,说明信号能量越分散,动态范围越大。
- 峰值(Peak):\(x_{peak} = \max(|x[n]|)\),表示信号的最大瞬时幅值。峰值常用于检测冲击、瞬态异常,但易受噪声尖峰干扰。
- 均方根值(RMS):\(x_{rms} = \sqrt{\frac{1}{N}\sum_{n=0}^{N-1}x^2[n]}\),与信号的有效能量直接相关。对于正弦波,RMS = 峰值/√2;对于随机振动,RMS是衡量振动烈度的标准指标。
这四个特征在CMSIS-DSP中均有对应的优化函数:arm_mean_f32、arm_var_f32、arm_max_f32(配合绝对值操作)、arm_rms_f32。这些函数基于ARM Cortex-M内核的SIMD指令优化,单次计算256点float32数据仅需数十个时钟周期。
4.1.2 工程计算流程与CMSIS实现
在嵌入式环境中计算时域特征,需要遵循以下流程:
- 数据准备:从ADC或传感器读取N点数据存入float32数组,注意对齐到4字节边界以适配CMSIS函数的SIMD访问要求。
- 去直流(可选):若信号含有较大直流分量,先调用
arm_mean_f32计算均值,再从每个样本中减去该均值,避免直流分量掩盖交流特征。 - 特征计算:依次调用
arm_rms_f32、arm_var_f32、arm_max_f32获取RMS、方差和峰值。注意arm_var_f32内部会先计算均值,因此无需重复调用arm_mean_f32。 - 结果归一化:根据应用需求将特征值映射到固定范围(如0~1或-1~1),便于后续分类器输入。
// CMSIS-DSP时域特征计算示例
float32_t data[256]; // 原始采样数据
float32_t mean, var, rms, peak;
uint32_t peak_index;
arm_mean_f32(data, 256, &mean); // 计算均值
arm_var_f32(data, 256, &var); // 计算方差(内部含均值计算)
arm_rms_f32(data, 256, &rms); // 计算RMS
arm_max_f32(data, 256, &peak, &peak_index); // 计算峰值及位置
4.1.3 案例拆解:电机轴承磨损的时域特征判别
背景与约束:某工厂离心泵电机(4极,1470rpm)配置振动传感器,采样率4kHz,每次采集256点。目标是通过时域特征区分正常状态与轴承早期磨损状态。现场约束:MCU为Cortex-M4主频168MHz,特征计算需在1ms内完成。
初始现象:正常运行时,振动RMS约0.8mm/s,峰值约2.5mm/s;磨损初期,RMS缓慢上升至1.2mm/s,但峰值偶尔跳变至5mm/s以上。
分析判断过程:仅看RMS,正常与磨损差异约50%,但受负载波动影响,RMS本身有±20%波动,容易误判。引入峰值/RMS比值后,正常状态比值约3.1,磨损状态比值可达4.5以上,且该比值对负载波动不敏感。
实际操作步骤:
- 采集256点数据,调用
arm_rms_f32和arm_max_f32计算RMS与峰值。 - 计算比值R = peak / rms,设定阈值R_th = 3.8。
- 连续3次采集(间隔100ms)均超过阈值,则触发报警。
结果对比:采用RMS+峰值联合判据后,误报率从每8小时1次降至每30天1次,且能提前约2周发现轴承磨损趋势。
风险与代价:峰值对瞬时冲击敏感,若现场存在电磁干扰,需在ADC前端增加硬件滤波或软件中值滤波。该方案额外增加约200字节RAM和0.3ms计算时间,在可接受范围内。
4.1.4 常见误区与总结
arm_var_f32的结果而忽略均值偏移。当信号含有较大直流分量时,方差会被直流能量主导,掩盖交流波动信息。应先去除直流再计算方差。误区2:将峰值作为唯一异常判据。峰值只反映单点幅值,无法体现信号能量变化。建议至少组合RMS或方差使用。
误区3:忽略数据块大小N对特征稳定性的影响。N过小(如32点)会导致RMS和方差波动大;N过大(如2048点)则实时性差。一般根据信号最低频率成分确定:N ≥ 2×Fs/Fmin。
时域特征的核心优势是计算简单、物理意义明确、适合实时性要求高的场景。但时域特征无法区分不同频率成分的贡献,例如50Hz工频干扰与500Hz机械共振可能产生相同的RMS值。因此,当需要识别特定频率源时,必须引入频域特征。
4.2 频域特征:FFT频谱、功率谱与谱质心
4.2.1 核心原理与数学定义
频域特征通过傅里叶变换将时域信号分解为不同频率分量的幅值与相位信息。CMSIS-DSP提供arm_cfft_f32(复数FFT)和arm_rfft_f32(实数FFT)函数,支持基4/基2混合分解,256点FFT在Cortex-M4上约需20μs。三个核心频域特征定义如下:
- FFT频谱:\(X[k] = \sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N}\),k=0,...,N/2(单边谱)。频谱幅值\(|X[k]|\)反映各频率分量的强度,相位信息用于时延估计或信号重构。
- 功率谱(PSD):\(P[k] = \frac{2|X[k]|^2}{N \cdot F_s}\)(单边功率谱密度),单位通常为g²/Hz或m/s²/Hz。功率谱比幅值谱更平滑,适合识别宽带噪声背景下的窄带信号。
- 谱质心(Spectral Centroid):\(C = \frac{\sum_{k=0}^{N/2} f_k \cdot P[k]}{\sum_{k=0}^{N/2} P[k]}\),其中\(f_k = k \cdot F_s / N\)。谱质心表示信号能量在频率轴上的“重心”,是音频音色识别和机械故障诊断的重要指标。
在CMSIS-DSP中,FFT计算流程为:先调用arm_cfft_f32进行复数FFT,再调用arm_cmplx_mag_f32计算幅值,最后通过逐点平方和累加得到功率谱。谱质心需要额外遍历频谱数组计算加权和。
4.2.2 频域特征计算流程与工程要点
- 加窗处理:直接对截断信号做FFT会产生频谱泄漏。推荐使用汉宁窗(
arm_hanning_f32)或汉明窗,窗函数与信号逐点相乘后再做FFT。 - FFT变换:调用
arm_cfft_f32前需将实数数据填充为复数格式(虚部置0),并设置变换方向标志。CMSIS支持正变换和逆变换,注意位反转和缩放因子处理。 - 幅值/功率计算:使用
arm_cmplx_mag_f32计算幅值谱,然后逐点平方得到功率谱。若需PSD,需除以N×Fs并乘以2(单边谱)。 - 谱质心计算:遍历功率谱数组,累加f_k×P[k]和P[k],两者相除即得谱质心。该操作时间复杂度O(N/2),在256点FFT下约需50μs。
// CMSIS-DSP频域特征计算示例(256点实数FFT)
float32_t input[256]; // 原始时域数据
float32_t window[256]; // 窗函数
float32_t fft_input[512]; // 复数FFT输入(实部+虚部交替)
float32_t mag[128]; // 幅值谱(单边)
float32_t psd[128]; // 功率谱密度
float32_t centroid;
arm_hanning_f32(window, 256); // 生成汉宁窗
for (int i = 0; i < 256; i++) {
fft_input[2*i] = input[i] * window[i]; // 实部加窗
fft_input[2*i+1] = 0; // 虚部置0
}
arm_cfft_f32(&arm_cfft_sR_f32_len256, fft_input, 0, 1); // 正变换
arm_cmplx_mag_f32(fft_input, mag, 128); // 计算幅值
for (int k = 0; k < 128; k++) {
psd[k] = (mag[k] * mag[k]) / (256 * 4000); // 单边PSD
}
// 计算谱质心
float32_t sum_p = 0, sum_fp = 0;
for (int k = 0; k < 128; k++) {
sum_p += psd[k];
sum_fp += k * 4000.0f / 256 * psd[k];
}
centroid = sum_fp / sum_p;
4.2.3 案例拆解:音频场景识别中的谱质心应用
背景与约束:智能家居设备需区分“玻璃破碎声”与“普通敲击声”。设备采用16kHz采样,每次处理512点(32ms帧),MCU为Cortex-M7。玻璃破碎声具有宽频带、高频能量集中的特点,而敲击声能量集中在低频。
初始现象:仅用RMS特征,两种声音的RMS值均在0.3~0.5之间,无法区分。引入谱质心后,玻璃破碎声的谱质心约4200Hz,敲击声约1800Hz,差异显著。
分析判断过程:谱质心对高频成分敏感,玻璃破碎声的宽频冲击激励产生丰富的高频分量,将质心推向高频。但谱质心受环境噪声影响,需结合功率谱峰值频率共同判断。
实际操作步骤:
- 对512点数据加汉宁窗,做512点FFT,计算功率谱。
- 计算谱质心C和峰值频率f_peak。
- 判断条件:C > 3000Hz 且 f_peak > 2000Hz,则判定为玻璃破碎。
结果对比:单独使用谱质心准确率约85%,联合峰值频率后准确率提升至96%。误报主要来自金属撞击声,其谱质心也偏高,但峰值频率通常低于2000Hz。
风险与代价:FFT计算每帧耗时约80μs(Cortex-M7),加上窗函数和功率谱计算,总耗时约120μs,远低于32ms的帧间隔,实时性充足。但需注意,谱质心对采样率敏感,不同设备间需统一采样率或做归一化处理。
4.2.4 常见误区与总结
误区2:混淆幅值谱与功率谱。幅值谱突出强频率分量,功率谱则更均衡地反映能量分布。在检测宽带噪声中的窄带信号时,功率谱更有效。
误区3:谱质心计算时未排除直流分量。直流分量(k=0)的功率可能远大于交流分量,导致谱质心被拉向0Hz。计算前应去除直流或跳过k=0的频点。
频域特征能精确揭示信号的频率构成,但计算量较大,且对FFT点数、窗函数、采样率等参数敏感。在嵌入式系统中,建议先通过时域特征做粗筛,仅在需要精细诊断时启用频域特征,以平衡计算负载与识别精度。
4.3 时域与频域特征的对比选型与典型应用场景
4.3.1 特征对比与选型依据
| 特征类型 | 计算量(256点) | 物理意义 | 抗噪能力 | 典型应用 |
|---|---|---|---|---|
| 均值 | ~5μs | 直流分量 | 强(对随机噪声不敏感) | 传感器零漂检测、电源电压监测 |
| 方差 | ~8μs | 波动程度 | 中(对脉冲干扰敏感) | 振动烈度评估、噪声水平估计 |
| 峰值 | ~3μs | 最大瞬态幅值 | 弱(易受尖峰干扰) | 冲击检测、碰撞报警 |
| RMS | ~6μs | 有效能量 | 较强(对随机噪声有平滑作用) | 电机振动ISO 10816标准评估 |
| FFT频谱 | ~25μs | 频率分量幅值 | 中(需加窗抑制泄漏) | 齿轮啮合频率分析、电机断条检测 |
| 功率谱 | ~30μs | 频率能量分布 | 较强(平方运算抑制小噪声) | 轴承故障特征频率识别、声学分析 |
| 谱质心 | ~35μs | 能量重心频率 | 中(受宽带噪声影响) | 音频场景分类、刀具磨损监测 |
选型原则可归纳为:先时域后频域,先粗后细。若应用只需判断“是否有异常”,RMS+峰值即可;若需定位“异常来自哪个频率成分”,则必须使用FFT或功率谱。谱质心适合作为频域特征的“摘要”,用于快速比较不同信号的频率分布差异。
4.3.2 典型应用场景深度解析
场景一:电机轴承故障诊断。使用RMS评估整体振动烈度(ISO 10816标准),使用功率谱定位故障特征频率(外圈BPFO、内圈BPFI、滚动体BSF)。当RMS超过报警值且功率谱在特征频率处出现明显峰值时,判定为轴承故障。该方案在工业现场已广泛验证,准确率超过90%。
场景二:电源纹波分析。开关电源输出纹波包含开关频率基波及其谐波。使用均值监测直流输出电压,使用FFT频谱分析纹波频率成分,使用谱质心判断纹波能量是否偏向高频(可能预示环路不稳定)。该方法可在线监测电源健康状况,避免使用昂贵的频谱分析仪。
场景三:语音活动检测(VAD)。在低信噪比环境下,时域RMS无法区分语音与噪声。使用功率谱计算谱平坦度(频谱几何均值/算术均值),语音的谱平坦度低(谐波结构明显),噪声的谱平坦度高(接近白噪声)。结合谱质心可进一步区分不同说话人。
4.3.3 特征融合策略与工程实践
单一特征往往难以覆盖复杂工况。推荐采用“时域粗筛+频域精判”的两级策略:
- 第一级(时域):每帧计算RMS和峰值,若RMS超过阈值T1或峰值超过T2,则触发频域分析。
- 第二级(频域):对触发帧做FFT,计算功率谱和谱质心,与故障特征频率库比对,输出诊断结论。
该策略在保证实时性的同时,大幅降低频域计算的平均功耗。例如,在电机监测中,若RMS正常(<1.0mm/s),则每100帧仅需1帧做FFT;若RMS超标,则每帧都做FFT以捕捉瞬态特征。
arm_status返回值检查FFT是否成功,避免因数据对齐错误导致硬错误。对于长期运行的设备,建议定期校准ADC增益和偏移,防止特征值漂移。
4.3.4 常见误区与总结复盘
误区2:忽略采样率与FFT点数的匹配。若采样率过高而FFT点数不足,频率分辨率过粗,无法区分邻近频率;若采样率过低,则可能发生混叠,导致频域特征失真。
误区3:特征值不做归一化直接送入分类器。不同特征的量纲和范围差异大(如RMS约0.1~10,谱质心约100~5000),需进行Z-score归一化或Min-Max缩放,否则分类器会偏向数值大的特征。
特征提取是信号处理与决策系统之间的桥梁。时域特征提供快速、稳定的幅值统计信息,频域特征揭示频率构成与能量分布。在实际工程中,应根据应用场景的实时性要求、计算资源、故障类型等因素,合理选择并组合特征。CMSIS-DSP库提供了高效的实现基础,但特征的有效性最终取决于对物理过程的理解和合理的工程验证。建议在开发初期建立特征-工况映射表,通过现场数据迭代优化阈值和特征组合,确保系统在复杂环境下稳定可靠。