3. 信号采集与预处理

振动异常检测项目的成败,往往不取决于算法模型的先进程度,而取决于进入模型之前的信号质量。在TinyML设备(如Cortex-M4/M7内核MCU、ESP32、K210等)上部署FFT模型时,计算资源与内存受限,任何混叠、趋势漂移或噪声干扰都会在频域中被放大,导致误判。本章围绕“从传感器原始电压到可喂入FFT的干净序列”这一完整链路,系统讲解采样率设定、抗混叠滤波、去趋势、去噪与归一化的工程方法。

振动信号采集与预处理链路 加速度传感器 ADXL345 / MPU6050 量程 ±2g ~ ±16g ODR: 1Hz ~ 3200Hz 模拟/数字 采样与抗混叠 采样率 fs ≥ 2×fmax 抗混叠低通滤波器 截止频率 fc ≤ fs/2.56 预处理核心 ① 去趋势 (消除直流/漂移) ② 去噪 (带通/小波) ③ 归一化 (Min-Max/Z-score) 输出: 零均值、等幅值序列 FFT 分析 N=256/512/1024 窗函数: Hanning 频率分辨率 Δf=fs/N 关键参数速查 • 旋转机械特征频率: f = RPM/60 (Hz) • 齿轮啮合频率: GMF = 齿数 × 轴频 • 轴承故障频率: BPFO/BPFI/BSF/FTF (需根据几何参数计算) • 采样时长 T = N/fs ≥ 10个旋转周期 ⚠ 常见错误 • 采样率不足导致频谱混叠,高频成分折叠到低频区 • 未去趋势导致0Hz处巨大能量泄漏 • 归一化不当导致不同传感器数据不可比 I2C/SPI ADC采样 数据流

3.1 采样率设定与奈奎斯特准则

核心原理

奈奎斯特采样定理指出:为了无失真地恢复模拟信号,采样频率 \( f_s \) 必须大于信号最高频率分量 \( f_{max} \) 的两倍,即 \( f_s > 2f_{max} \)。在实际工程中,由于FFT分析需要观察频谱细节,且抗混叠滤波器存在过渡带,通常取 \( f_s = 2.56 \sim 4 \) 倍的 \( f_{max} \)。例如,若关注轴承故障频率最高到 2000 Hz,则采样率应设为 5120 Hz 或 8000 Hz,而非刚好 4000 Hz。

对于旋转机械振动检测,特征频率与转速直接相关。设转速为 \( RPM \),则轴频 \( f_r = RPM/60 \)。齿轮啮合频率 \( GMF = 齿数 \times f_r \),轴承故障频率(BPFO、BPFI、BSF、FTF)需根据轴承几何参数计算。采样率设定必须覆盖这些特征频率的 3~5 倍频,因为故障冲击往往产生丰富的谐波成分。

判断方法与操作流程

  1. 确定最高分析频率:根据设备类型和故障模式,列出所有可能的特征频率及其谐波,取最大值作为 \( f_{max} \)。
  2. 计算最小采样率:\( f_s \ge 2.56 \times f_{max} \),并向上取整到常用采样率(如 1000、2000、5000、10000 Hz)。
  3. 校验频率分辨率:FFT频率分辨率 \( \Delta f = f_s / N \),其中 N 为FFT点数。若需分辨间隔 5 Hz 的两个相邻频率,则 \( N \ge f_s / 5 \)。
  4. 考虑TinyML内存限制:N=256 时需 256 个 float32 样本(1KB),N=1024 时需 4KB。MCU 内存通常 64~512KB,需平衡分辨率与资源。
设备类型典型特征频率范围推荐采样率FFT点数频率分辨率
低速电机 (300 RPM)5~50 Hz256 Hz2561 Hz
高速主轴 (12000 RPM)200~2000 Hz5120 Hz51210 Hz
齿轮箱 (含啮合频率)100~5000 Hz12800 Hz102412.5 Hz
轴承早期故障 (高频冲击)500~10000 Hz25600 Hz102425 Hz
风险提示:采样率并非越高越好。过高的采样率导致数据量激增,在TinyML设备上会显著增加功耗和存储压力。例如,将采样率从 5 kHz 提升到 20 kHz,相同时长下的数据量变为 4 倍,FFT计算量也线性增加。应根据实际故障特征频率合理设定,而非盲目追求高采样率。

3.2 抗混叠滤波

核心原理

混叠(Aliasing)是指当信号中含有高于 \( f_s/2 \) 的频率成分时,这些高频成分会“折叠”回低频区域,与真实低频信号叠加,造成频谱失真。例如,采样率 1000 Hz 时,一个 600 Hz 的信号会被误认为 400 Hz(因为 1000-600=400)。抗混叠滤波器是一个低通滤波器,其截止频率 \( f_c \) 设定在 \( f_s/2 \) 之前,通常取 \( f_c = 0.4 \times f_s \),确保高于 \( f_c \) 的成分被充分衰减(至少 -40dB)。

在TinyML硬件中,抗混叠滤波有两种实现方式:模拟滤波(在ADC之前使用RC有源滤波器)和数字滤波(在ADC之后使用FIR/IIR滤波器)。模拟滤波适合高频抑制,但会增加硬件成本;数字滤波灵活可调,但需要额外的计算开销。对于大多数MCU内置ADC,建议在传感器输出端加一级简单的RC低通滤波(截止频率约 \( f_s/2 \)),再在软件中做数字滤波。

操作流程与参数选择

// 数字抗混叠滤波示例 (一阶IIR低通,fs=1000Hz, fc=400Hz)
float alpha = 0.2;  // 滤波系数,由fc和fs计算
float filtered = 0;
for (int i = 0; i < N; i++) {
    filtered = alpha * raw[i] + (1 - alpha) * filtered;
    out[i] = filtered;
}

实际工程中,一阶IIR滤波器的阻带衰减只有 -20dB/十倍频,对于强干扰场景不够。建议使用二阶巴特沃斯滤波器(-40dB/十倍频)或FIR滤波器(线性相位,但计算量大)。在Cortex-M4上,可使用CMSIS-DSP库的 arm_biquad_cascade_df1_f32 函数高效实现。

经验值:对于振动信号,抗混叠滤波器的截止频率设为 \( f_c = 0.4 \times f_s \) 是工程惯例。例如采样率 5120 Hz,则截止频率设为 2048 Hz,这样既保留了 0~2000 Hz 的有效频带,又对 2560 Hz 以上的成分有足够衰减。

3.3 去趋势与去均值

核心原理

振动传感器输出的原始信号通常包含直流偏置(DC offset)和低频趋势项。直流偏置来源于传感器的零点漂移或信号调理电路的偏置电压;趋势项则可能由温度漂移、机械松动或传感器安装不稳引起。这些低频成分在FFT中会表现为 0 Hz 附近的巨大能量,掩盖真实的低频故障特征,并导致频谱泄漏。

去趋势的核心是消除信号中的直流分量和缓慢变化的趋势。最简单的方法是去均值:计算整个采样序列的平均值并减去。但若信号存在线性或非线性趋势,仅去均值不够,需使用多项式拟合去趋势(如一次或二次多项式)或高通滤波(截止频率 1~5 Hz)。

实现方法与代码示例

// 去均值 (最常用)
float mean = 0;
for (int i = 0; i < N; i++) mean += raw[i];
mean /= N;
for (int i = 0; i < N; i++) data[i] = raw[i] - mean;

// 线性去趋势 (消除一次趋势)
float sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
for (int i = 0; i < N; i++) {
    sum_x += i; sum_y += data[i];
    sum_xy += i * data[i]; sum_xx += i * i;
}
float slope = (N * sum_xy - sum_x * sum_y) / (N * sum_xx - sum_x * sum_x);
float intercept = (sum_y - slope * sum_x) / N;
for (int i = 0; i < N; i++) data[i] -= (slope * i + intercept);
案例拆解:某离心泵振动监测项目中,传感器输出在 10 秒内从 1.65V 缓慢漂移到 1.72V(模拟量),叠加 50Hz 的振动信号。若直接做FFT,0Hz 处出现幅值 0.07V 的巨大分量,而 50Hz 处的真实振动幅值仅 0.02V,被完全淹没。通过去均值后,0Hz 分量降至接近 0,50Hz 特征清晰可见。进一步做线性去趋势后,低频段(0~5Hz)的虚假能量也大幅降低,轴承故障特征(约 23Hz)得以显现。

3.4 去噪方法

核心原理

振动信号中的噪声来源包括:电磁干扰(EMI)、电源纹波、传感器本底噪声、机械结构共振等。去噪的目标是保留故障特征频率成分,抑制无关噪声。常用方法分为三类:频域滤波(带通/带阻)、时域平滑(移动平均/中值滤波)、自适应滤波(小波变换、卡尔曼滤波)。

在TinyML场景下,计算资源有限,推荐使用带通滤波:根据设备特征频率范围设定通带,例如关注 10~1000 Hz 的振动,则使用带通滤波器滤除 10 Hz 以下和 1000 Hz 以上的成分。带通滤波同时实现了去趋势(低端截止)和抗混叠(高端截止)的功能。

滤波方法对比

方法计算量延迟适用场景TinyML可行性
移动平均低 (O(N))低平滑随机噪声✅ 推荐
中值滤波中 (O(N log N))中去除脉冲/尖峰⚠ 需排序
IIR带通低 (O(N))低频带选择✅ 推荐
FIR带通高 (O(N×M))高线性相位要求⚠ 需权衡
小波变换高高非平稳信号❌ 不推荐
常见误区:过度滤波会滤除真实故障特征。例如,轴承早期故障的冲击信号包含丰富的高频成分(可达 10 kHz 以上),若带通滤波上限设为 1000 Hz,会完全丢失这些冲击特征。建议先做频谱分析,确定故障特征频率范围,再设定滤波参数。

3.5 归一化方法

核心原理

归一化的目的是消除不同传感器、不同量程、不同安装位置带来的幅值差异,使特征具有可比性。在TinyML模型中,归一化还能加速模型收敛、提高数值稳定性。常用方法有:Min-Max归一化(映射到 [0,1])、Z-score标准化(零均值、单位方差)、幅值归一化(除以最大值或RMS值)。

对于振动信号,推荐使用Z-score标准化,因为它对异常值不敏感,且保留了信号的相对波动信息。Min-Max归一化在存在尖峰脉冲时会导致正常信号被压缩到很小的范围。

实现与选择

// Z-score 标准化
float mean = 0, std = 0;
for (int i = 0; i < N; i++) mean += data[i];
mean /= N;
for (int i = 0; i < N; i++) std += (data[i] - mean) * (data[i] - mean);
std = sqrt(std / N);
for (int i = 0; i < N; i++) norm[i] = (data[i] - mean) / std;

// Min-Max 归一化
float min = data[0], max = data[0];
for (int i = 1; i < N; i++) {
    if (data[i] < min) min = data[i];
    if (data[i] > max) max = data[i];
}
for (int i = 0; i < N; i++) norm[i] = (data[i] - min) / (max - min);
实战建议:在TinyML部署时,归一化参数(均值、标准差)应在训练阶段从大量正常样本中统计得到,并作为常量固化在代码中。不要在推理时动态计算,否则会引入额外延迟且可能因单次样本统计不稳定导致特征失真。

3.6 完整预处理流程与案例复盘

标准流程

  1. 原始采集:设置采样率 \( f_s \),采集 N 点数据(N 为 2 的幂,如 256/512/1024)。
  2. 抗混叠:硬件RC滤波 + 软件IIR低通(截止频率 \( f_s/2.56 \))。
  3. 去趋势:去均值 + 线性去趋势(消除直流和漂移)。
  4. 带通滤波:根据特征频率范围设定带通(如 10~2000 Hz)。
  5. 归一化:Z-score标准化,使用预计算的均值/标准差。
  6. 加窗:对归一化后的数据乘以Hanning窗(减少频谱泄漏)。
  7. FFT:计算幅值谱,提取特征频率幅值。

案例拆解:电机轴承故障检测

背景与约束:某工厂一台 4 极异步电机(额定转速 1450 RPM),配套 6205 深沟球轴承。需在 STM32F407(Cortex-M4, 168MHz, 192KB RAM)上实现实时振动监测,检测轴承外圈故障(BPFO)。

初始参数:轴频 \( f_r = 1450/60 = 24.17 \) Hz,6205 轴承 BPFO = 3.585 × \( f_r \) ≈ 86.6 Hz。考虑 3 倍频,最高分析频率设为 300 Hz。采样率取 \( f_s = 1024 \) Hz(满足 2.56×300=768 Hz 要求),FFT点数 N=512,频率分辨率 \( \Delta f = 2 \) Hz。

预处理实施:

  • 抗混叠:RC 低通(截止 400 Hz)+ 软件二阶巴特沃斯低通(截止 350 Hz)。
  • 去趋势:去均值 + 一次多项式去趋势(消除温度漂移)。
  • 带通:10~300 Hz 带通(滤除低频摆动和高频噪声)。
  • 归一化:Z-score,均值/标准差从 100 组正常样本统计。
  • 加窗:Hanning 窗,减少频谱泄漏。

结果对比:未预处理时,FFT频谱在 0~5 Hz 有巨大能量(幅值 0.8),86.6 Hz 处幅值仅 0.05,无法识别。预处理后,0~5 Hz 能量降至 0.02,86.6 Hz 处幅值 0.31,信噪比提升约 16 dB。进一步在 173.2 Hz(2×BPFO)和 259.8 Hz(3×BPFO)处也观察到明显峰值,确认外圈故障。

代价与风险:预处理总耗时约 3.2 ms(含滤波和FFT),在 168MHz MCU 上占用约 15% CPU,可满足 100 Hz 的实时处理需求。风险在于带通滤波上限 300 Hz 可能遗漏更高频的早期故障特征,后续可通过提高采样率至 2048 Hz 并增加 FFT 点数来扩展频带。

复盘经验:① 采样率设定必须基于设备实际特征频率,而非随意选择;② 去趋势是振动信号预处理中最容易被忽略但影响最大的步骤;③ 归一化参数必须离线统计,在线使用;④ 预处理链路的每一步都要在开发板上验证耗时,确保满足实时性要求。

3.7 常见误区与总结

误区后果正确做法
采样率刚好等于 2×fmax抗混叠滤波器过渡带导致边缘频率失真取 2.56~4 倍 fmax
忽略直流偏置直接做FFT0Hz 巨大能量掩盖低频故障必须去均值/去趋势
对所有信号使用相同归一化参数不同传感器数据不可比按传感器/工况分别统计
过度滤波丢失真实故障特征先频谱分析再定滤波范围
在推理时动态计算均值/标准差增加延迟且特征不稳定离线统计,固化参数

信号采集与预处理是振动异常检测系统的“地基”。一个设计良好的预处理链路,能够显著提升FFT频谱的信噪比,使故障特征清晰可辨;反之,再优秀的分类模型也无法从失真的数据中提取有效信息。在TinyML环境下,每一步预处理都需在算法效果与计算资源之间取得平衡。建议开发者在实际部署前,使用采集的真实振动数据离线验证预处理参数,再移植到MCU上运行,确保系统在真实工况下的鲁棒性。