3、特征提取概念:时域特征、频域特征、统计特征及其在嵌入式场景中的意义

在CMSIS-DSP的优化链条中,特征提取是连接原始传感器数据与决策模型之间的关键桥梁。嵌入式系统(如电机控制、可穿戴设备、工业振动监测)中,ADC采样得到的原始信号往往包含大量冗余信息和噪声,直接送入分类器或控制器不仅计算开销大,而且容易因维度灾难导致模型泛化能力下降。特征提取的本质是用更少的数值保留信号中最具判别力的信息,从而降低后续处理的计算复杂度、存储需求与功耗。本章将系统梳理时域、频域与统计特征三大类方法,并结合嵌入式实时性约束,讨论其工程取舍与CMSIS-DSP下的实现路径。

时域特征 频域特征 统计特征 均值 / 峰值 / 峰峰值 过零率 / 波形因子 均方根 (RMS) 脉冲因子 / 裕度因子 自相关 / 峰值间隔 计算量:O(N) 适合:快速预筛选 FFT 频谱峰值 频谱质心 / 带宽 子带能量分布 谐波幅值比 功率谱密度 (PSD) 计算量:O(N log N) 适合:周期性故障诊断 方差 / 标准差 偏度 (Skewness) 峰度 (Kurtosis) 分位数 / 直方图 熵 / 复杂度 计算量:O(N) 或 O(N log N) 适合:非平稳信号分析 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。

工程经验:在电机堵转检测中,仅用RMS阈值判断容易误触发——因为启动瞬间电流RMS也会短暂升高。更稳健的做法是同时监测RMS变化率(dRMS/dt)和过零率,若RMS快速上升且过零率下降,才判定为堵转。

案例拆解:便携式心电监护仪的QRS波检测

某可穿戴心电设备需在Cortex-M4上实时检测QRS波群,采样率250Hz,每帧处理250个样本(1秒数据)。初始方案直接对原始ECG信号做带通滤波后计算峰值,但运动伪迹导致误检率高达15%。改进方案采用时域特征组合:

  1. 计算信号的一阶差分 \( d[n] = x[n] - x[n-1] \),突出QRS波的陡峭斜率;
  2. 对差分序列做滑动窗口积分(窗口长度约80ms),得到能量包络;
  3. 设定自适应阈值 = 0.3 × 包络的移动平均(每8秒更新一次);
  4. 当包络超过阈值且持续超过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计算频率减半。

风险提示:FFT对频谱泄漏敏感。若采样频率不是信号频率的整数倍,频谱峰值会扩散到相邻频点。解决方法是加窗函数(如汉宁窗),CMSIS-DSP提供arm_hanning_f32。但加窗会降低频率分辨率(主瓣变宽),需在分辨率与泄漏抑制间权衡。

案例拆解:工业风机轴承故障诊断

某工厂风机转速为3000rpm(50Hz),加速度传感器采样率12.8kHz,每次采集1024点。初始方案直接对原始信号做FFT,发现频谱在150Hz处有峰值,但无法确定是否为故障。进一步分析:

  1. 计算轴承外圈故障特征频率 \( f_o = 3.048 \times f_r = 152.4 \)Hz,与150Hz峰值接近;
  2. 提取频谱中150Hz附近的幅值 \( A_{150} \) 与基频50Hz幅值 \( A_{50} \) 的比值 \( R = A_{150}/A_{50} \);
  3. 连续采集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σ之外的离群点。

优化技巧:对于实时性要求高的场景,可采用递推算法。例如,方差递推公式:\( \sigma^2_n = \frac{n-1}{n}\sigma^2_{n-1} + \frac{1}{n}(x_n - \bar{x}_{n-1})^2 \),只需O(1)存储和计算。CMSIS-DSP的arm_var_f32内部已采用类似的两遍算法,但若需逐样本更新,可自行实现递推版本。

案例拆解:可穿戴跌倒检测中的统计特征融合

某智能手环使用三轴加速度计(采样率50Hz),需在跌倒瞬间触发SOS。初始方案仅用加速度幅值 \( A = \sqrt{a_x^2+a_y^2+a_z^2} \) 的峰值判断,但弯腰捡物也会产生类似峰值。改进方案引入统计特征:

  1. 对每2秒窗口(100个样本)计算A的均值、标准差、偏度和峰度;
  2. 跌倒时特征模式:均值先升后降(身体姿态变化)、标准差骤增(剧烈运动)、偏度变为负值(冲击后加速度方向反转)、峰度>10(存在尖锐冲击);
  3. 使用决策树分类器(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(频域)分析振动频谱;若信号无明显周期性,则转向统计特征。

关键提醒:CMSIS-DSP的优化效果高度依赖数据格式。对于Cortex-M4F/M7,使用f32类型并开启FPU可获得最佳性能;对于Cortex-M0/M3,应使用q15或q31定点格式。此外,FFT函数要求输入数据按特定格式排列(如实数FFT需将数据存入复数数组的实部),务必参考CMSIS-DSP文档中的内存布局说明。

在实际项目中,特征提取的实时性优化不应仅关注单个函数的耗时,还需考虑数据搬运开销。建议将ADC采样数据直接存入DMA缓冲区,通过arm_copy_f32或指针操作传递给特征提取函数,避免多次内存拷贝。同时,利用CMSIS-DSP的arm_status返回值检查运算溢出,确保在极端工况下特征值仍有效。