3、特征提取概念:时域特征、频域特征、统计特征及其在嵌入式场景中的意义
在CMSIS-DSP的优化链条中,特征提取是连接原始传感器数据与决策模型之间的关键桥梁。嵌入式系统(如电机控制、可穿戴设备、工业振动监测)中,ADC采样得到的原始信号往往包含大量冗余信息和噪声,直接送入分类器或控制器不仅计算开销大,而且容易因维度灾难导致模型泛化能力下降。特征提取的本质是用更少的数值保留信号中最具判别力的信息,从而降低后续处理的计算复杂度、存储需求与功耗。本章将系统梳理时域、频域与统计特征三大类方法,并结合嵌入式实时性约束,讨论其工程取舍与CMSIS-DSP下的实现路径。
上图展示了三类特征在嵌入式信号处理链路中的定位:时域特征直接对采样序列做轻量级运算,频域特征依赖FFT变换,统计特征则从概率分布角度刻画信号形态。在实际工程中,这三者并非互斥,而是常常组合使用——例如先通过时域RMS快速判断设备是否处于异常状态,再触发频域分析定位故障频率成分。下面逐一展开其数学定义、物理含义与嵌入式实现要点。
3.1 时域特征:最直接的信号描述
核心原理
时域特征直接对ADC采集的离散序列 \( x[n] \)(n=0,1,...,N-1)进行算术运算,计算复杂度通常为O(N),非常适合在中断服务程序或低优先级任务中快速执行。最常用的时域特征包括:
- 均值(Mean):\(\bar{x} = \frac{1}{N}\sum_{n=0}^{N-1}x[n]\),反映信号的直流分量。在振动监测中,均值漂移可能指示传感器零点偏移或机械结构松动。
- 均方根(RMS):\( x_{rms} = \sqrt{\frac{1}{N}\sum_{n=0}^{N-1}x^2[n]} \),是信号能量的度量,对交流分量敏感。电机电流的RMS值可直接反映负载转矩变化。
- 峰值与峰峰值:\( x_{peak} = \max(|x[n]|) \),\( x_{pp} = \max(x[n]) - \min(x[n]) \)。用于检测瞬态冲击,如齿轮啮合时的碰撞脉冲。
- 波形因子(Form Factor):\( FF = x_{rms} / ( \frac{1}{N}\sum_{n=0}^{N-1}|x[n]| ) \),即RMS与整流平均值的比值。纯正弦波的FF约为1.11,而脉冲信号的FF远大于此,可用于区分波形形态。
- 过零率(Zero Crossing Rate):单位时间内信号穿越零点的次数,反映信号频率的粗略估计。在语音端点检测中常用。
嵌入式实现要点
CMSIS-DSP提供了arm_mean_f32、arm_rms_f32、arm_max_f32等函数,内部采用循环展开与SIMD指令优化。但需注意:RMS计算涉及平方和累加,当N较大时需防止32位累加器溢出。建议分段累加或使用arm_power_f32先计算功率再开方。对于峰值检测,CMSIS-DSP的arm_max_f32返回最大值及其索引,但若需同时获取正负峰值,需自行遍历两次或使用arm_absmax_f32。
案例拆解:便携式心电监护仪的QRS波检测
某可穿戴心电设备需在Cortex-M4上实时检测QRS波群,采样率250Hz,每帧处理250个样本(1秒数据)。初始方案直接对原始ECG信号做带通滤波后计算峰值,但运动伪迹导致误检率高达15%。改进方案采用时域特征组合:
- 计算信号的一阶差分 \( d[n] = x[n] - x[n-1] \),突出QRS波的陡峭斜率;
- 对差分序列做滑动窗口积分(窗口长度约80ms),得到能量包络;
- 设定自适应阈值 = 0.3 × 包络的移动平均(每8秒更新一次);
- 当包络超过阈值且持续超过100ms时,判定为一次QRS波。
该方案仅使用加减法和乘法,无除法运算,在CMSIS-DSP的arm_sub_f32和arm_add_f32辅助下,单帧处理耗时从原来的2.3ms降至0.8ms(CPU主频100MHz),误检率降至2%以下。关键教训:时域特征组合比单一特征更鲁棒,但需注意特征间的冗余性——差分积分与原始信号峰值高度相关,实际部署时只保留差分积分特征即可。
常见误区
- 忽略直流偏置:若传感器输出含有固定偏置,RMS和峰值会失真。应先做去均值处理(
arm_mean_f32后逐点相减)。 - 窗口长度选择不当:窗口太短则特征波动大,太长则响应滞后。对于旋转机械,窗口应至少包含2-3个旋转周期。
- 过度依赖浮点运算:在无FPU的Cortex-M0上,float运算会被编译器转为软浮点库,耗时增加数倍。可改用Q15定点格式,CMSIS-DSP提供完整的定点函数。
3.2 频域特征:揭示周期性成分
核心原理
频域特征通过离散傅里叶变换(DFT)将时域信号映射到频率轴,其快速算法FFT将计算复杂度从O(N²)降至O(N log N)。对于嵌入式系统,CMSIS-DSP提供arm_cfft_f32(复数FFT)和arm_rfft_f32(实数FFT),后者利用实信号频谱的共轭对称性,计算量减半。常用频域特征包括:
- 频谱峰值及其频率:\( f_{peak} = \arg\max_f |X(f)| \),用于识别主导振动频率。在电机轴承故障中,外圈故障特征频率 \( f_o = \frac{n}{2}f_r(1-\frac{d}{D}\cos\alpha) \) 会出现在频谱峰值附近。
- 频谱质心(Spectral Centroid):\( SC = \frac{\sum_{k=0}^{N/2} f_k \cdot P_k}{\sum_{k=0}^{N/2} P_k} \),其中 \( P_k = |X(k)|^2 \)。质心反映信号能量集中的频率区域,高质心意味着信号偏“亮”(高频成分多)。
- 子带能量比:将频谱划分为若干子带(如低频0-100Hz、中频100-500Hz、高频500Hz以上),计算各子带能量占总能量的比例。在语音识别中,Mel频率倒谱系数(MFCC)即基于子带能量。
- 谐波畸变率(THD):\( THD = \frac{\sqrt{\sum_{k=2}^{H} P_k}}{P_1} \),其中 \( P_1 \) 为基波功率,\( P_k \) 为第k次谐波功率。用于评估电源质量或音频功放失真。
嵌入式实现要点
FFT的实时性瓶颈在于:内存占用(N点复数FFT需2N个float)和计算延迟。以256点实数FFT为例,CMSIS-DSP在Cortex-M4F上约需0.1ms(主频168MHz),但若采样率10kHz,FFT帧间隔为25.6ms,计算占比不足1%,完全可接受。然而,若需连续滑动FFT(每次滑动1个样本),则计算量剧增。工程上通常采用重叠50%的分帧策略,即每帧包含N个样本,但每次只移动N/2个样本,这样FFT计算频率减半。
arm_hanning_f32。但加窗会降低频率分辨率(主瓣变宽),需在分辨率与泄漏抑制间权衡。
案例拆解:工业风机轴承故障诊断
某工厂风机转速为3000rpm(50Hz),加速度传感器采样率12.8kHz,每次采集1024点。初始方案直接对原始信号做FFT,发现频谱在150Hz处有峰值,但无法确定是否为故障。进一步分析:
- 计算轴承外圈故障特征频率 \( f_o = 3.048 \times f_r = 152.4 \)Hz,与150Hz峰值接近;
- 提取频谱中150Hz附近的幅值 \( A_{150} \) 与基频50Hz幅值 \( A_{50} \) 的比值 \( R = A_{150}/A_{50} \);
- 连续采集10帧,计算R的均值和标准差。正常轴承R约为0.05,故障初期R升至0.2,严重故障时R>0.5。
该方案在Cortex-M7上使用arm_rfft_f32,1024点FFT耗时约0.3ms,加上窗函数和幅值提取,总耗时0.5ms,远小于帧间隔80ms。部署后成功预警了3次轴承早期故障。复盘发现:仅依赖单一频点幅值容易受噪声干扰,应同时监测故障频率附近±5Hz内的能量和,以提高鲁棒性。
常见误区
- FFT点数与采样率不匹配:频率分辨率 \( \Delta f = f_s / N \),若N太小则无法区分相邻频率成分。例如采样率10kHz、N=128时,分辨率78Hz,无法分辨50Hz与60Hz。
- 忽略FFT的周期性假设:FFT隐含信号是周期延拓的,若帧首尾不连续会产生高频伪影。必须加窗或采用重叠处理。
- 过度设计频域特征:对于缓慢变化的信号(如温度),频域分析毫无意义。应先通过时域或统计特征判断信号是否具有周期性。
3.3 统计特征:刻画分布形态
核心原理
统计特征从概率分布角度描述信号,不依赖时间顺序,适合分析非平稳或随机性强的信号。常用统计特征包括:
- 方差与标准差:\( \sigma^2 = \frac{1}{N}\sum_{n=0}^{N-1}(x[n]-\bar{x})^2 \),反映信号波动幅度。在结构健康监测中,应变信号的方差增大可能预示裂纹扩展。
- 偏度(Skewness):\( S = \frac{1}{N}\sum_{n=0}^{N-1}(\frac{x[n]-\bar{x}}{\sigma})^3 \),度量分布不对称性。正偏度表示右尾较长,负偏度表示左尾较长。轴承磨损早期,振动信号的偏度会从0附近向正值偏移。
- 峰度(Kurtosis):\( K = \frac{1}{N}\sum_{n=0}^{N-1}(\frac{x[n]-\bar{x}}{\sigma})^4 - 3 \),度量分布尾部厚度。正态分布K=0,K>0表示重尾(存在异常尖峰)。齿轮点蚀故障时,振动信号的峰度显著升高。
- 分位数与直方图:如25%分位数、75%分位数,或直接统计幅度直方图。在无线信道分析中,接收信号强度的直方图可用于判断多径衰落类型。
- 信息熵:\( H = -\sum_{i=1}^{M} p_i \log_2 p_i \),其中 \( p_i \) 为信号幅度落在第i个区间的概率。熵值高表示信号复杂、不可预测,常用于脑电信号(EEG)的清醒/睡眠状态分类。
嵌入式实现要点
统计特征的计算通常需要两遍遍历:第一遍求均值,第二遍求方差/偏度/峰度。CMSIS-DSP没有直接提供偏度/峰度函数,但可组合arm_mean_f32、arm_power_f32和arm_dot_prod_f32实现。例如,偏度计算可先求 \( z[n] = (x[n]-\bar{x})/\sigma \),再调用arm_power_f32计算 \( z^3 \) 的均值。注意:偏度和峰度对异常值极其敏感,单个传感器毛刺可能导致K值从3跳到50,因此需先做中值滤波或剔除3σ之外的离群点。
arm_var_f32内部已采用类似的两遍算法,但若需逐样本更新,可自行实现递推版本。
案例拆解:可穿戴跌倒检测中的统计特征融合
某智能手环使用三轴加速度计(采样率50Hz),需在跌倒瞬间触发SOS。初始方案仅用加速度幅值 \( A = \sqrt{a_x^2+a_y^2+a_z^2} \) 的峰值判断,但弯腰捡物也会产生类似峰值。改进方案引入统计特征:
- 对每2秒窗口(100个样本)计算A的均值、标准差、偏度和峰度;
- 跌倒时特征模式:均值先升后降(身体姿态变化)、标准差骤增(剧烈运动)、偏度变为负值(冲击后加速度方向反转)、峰度>10(存在尖锐冲击);
- 使用决策树分类器(CART),输入4个统计特征,输出“跌倒/非跌倒”。
在Cortex-M4上,4个统计特征的计算耗时约0.2ms(100个样本),决策树推理仅需几次比较,总耗时<0.5ms。实测灵敏度95%,特异度99%。复盘发现:峰度是最具判别力的特征,但单独使用误报率高;与偏度组合后,可有效区分“跌倒”与“快速坐下”。此外,统计特征对传感器安装方向不敏感,无需复杂的姿态解算。
常见误区
- 样本量不足:偏度和峰度的估计方差随N增大而减小,N<50时结果不可靠。建议至少使用128个样本。
- 忽略信号的非平稳性:统计特征假设信号是平稳的,若信号包含趋势项(如温度漂移),应先做去趋势处理(如差分或高通滤波)。
- 特征冗余:标准差与RMS高度相关(RMS = sqrt(σ² + mean²)),同时使用会引入共线性,影响分类器性能。应通过相关性分析剔除冗余特征。
3.4 三类特征的对比与嵌入式选型
| 维度 | 时域特征 | 频域特征 | 统计特征 |
|---|---|---|---|
| 计算复杂度 | O(N),极低 | O(N log N),较高 | O(N)~O(N log N),中等 |
| 内存占用 | 仅需几个标量 | 需存储FFT中间结果(2N float) | 需存储直方图或分位数数组 |
| 实时性 | 可逐样本更新 | 需整帧处理,有延迟 | 需整帧处理,但延迟低于FFT |
| 抗噪能力 | 弱,易受脉冲干扰 | 强,可分离频带噪声 | 中等,偏度/峰度对离群点敏感 |
| 物理可解释性 | 直观(峰值、均值) | 明确(频率成分) | 抽象(分布形态) |
| 典型应用 | 过流保护、QRS检测 | 轴承故障、语音识别 | 跌倒检测、EEG分类 |
选型原则可归纳为:先时域快速筛查,再频域精确定位,统计特征作为补充。例如,电机控制器中,过流保护必须用RMS(时域)实现微秒级响应;而预测性维护则需FFT(频域)分析振动频谱;若信号无明显周期性,则转向统计特征。
f32类型并开启FPU可获得最佳性能;对于Cortex-M0/M3,应使用q15或q31定点格式。此外,FFT函数要求输入数据按特定格式排列(如实数FFT需将数据存入复数数组的实部),务必参考CMSIS-DSP文档中的内存布局说明。
在实际项目中,特征提取的实时性优化不应仅关注单个函数的耗时,还需考虑数据搬运开销。建议将ADC采样数据直接存入DMA缓冲区,通过arm_copy_f32或指针操作传递给特征提取函数,避免多次内存拷贝。同时,利用CMSIS-DSP的arm_status返回值检查运算溢出,确保在极端工况下特征值仍有效。