3. 数据采集与预处理

电机振动异常评分模型的效果上限,在数据采集阶段就已经被决定。采集到的振动信号是否真实、完整、干净,直接决定了后续特征工程和模型训练的天花板。本章聚焦于从传感器原始输出到可训练数据集的全链路处理流程,涵盖采样率选择、抗混叠滤波、去趋势、去噪、归一化以及数据分割与标注六大核心环节。我们将从工程实践角度出发,结合TinyML部署的算力与存储约束,给出可落地的操作路径与参数选择依据。

TinyML电机振动异常评分——数据采集与预处理工程链路 ① 传感器与采样 加速度计 IEPE/ICP 采样率 fs ≥ 2.56×fmax ② 抗混叠滤波 硬件低通滤波器 截止频率 fc ≈ 0.4×fs ③ 信号预处理 去趋势 → 去噪 → 归一化 消除直流/工频/量纲差异 ④ 数据分割 滑动窗口 50%重叠 窗长 = 10~20个旋转周期 数据标注与数据集构建 工况标签 转速/负载/温度 健康状态标签 正常/异常/故障类型 数据集划分 训练/验证/测试 70/15/15 TinyML部署 INT8量化/剪枝 关键参数速查 • 采样率:10kHz~50kHz(根据电机转速与故障特征频率) • 窗长:1024~4096点(覆盖10~20个旋转周期) • 归一化:Z-score或Min-Max,需在训练集上拟合参数

上图展示了从传感器到TinyML部署的完整数据工程链路。在实际项目中,每个环节的参数选择都直接影响模型在边缘设备上的推理精度与稳定性。下面我们逐一展开每个环节的核心原理与操作要点。

3.1 采样率选择:从奈奎斯特到工程裕量

核心原理:采样率决定了振动信号能够表征的最高频率成分。根据奈奎斯特采样定理,采样率必须大于信号最高频率的两倍,否则会发生频谱混叠,导致高频成分折叠到低频区域,污染故障特征。然而,工程实践中我们通常采用更高的裕量系数。对于电机振动监测,需要关注的频率范围包括:转频(1×)、倍频(2×、3×…)、轴承故障特征频率(BPFO、BPFI、BSF、FTF)以及齿轮啮合频率。这些特征频率往往分布在数百赫兹到数千赫兹之间。

判断方法:采样率的选择应遵循以下步骤:

  1. 确定电机最高转速(RPM),计算转频 f_r = RPM / 60。
  2. 识别需要监测的最高故障特征频率,通常取轴承外圈故障频率 BPFO 的 5~10 倍作为上限。
  3. 设定采样率 fs ≥ 2.56 × f_max(工程常用系数),推荐 fs = 10 × f_r 至 20 × f_r。
电机类型典型转速范围推荐采样率分析频带
小型伺服电机3000~6000 RPM20~50 kHz0~10 kHz
工业异步电机1000~3000 RPM10~25 kHz0~5 kHz
大型低速电机100~600 RPM2~10 kHz0~2 kHz
经验提醒:TinyML设备通常使用MEMS加速度计(如ADXL345、LSM6DS3),其最大输出数据率(ODR)为3200Hz~6.6kHz。若需更高采样率,需选用IEPE传感器配合外部ADC,这会增加硬件成本和功耗。在课程项目中,我们推荐使用10kHz采样率作为默认值,兼顾精度与MCU处理能力。

3.2 抗混叠滤波:硬件与软件的双重保障

核心原理:抗混叠滤波器的目的是在采样之前滤除高于奈奎斯特频率(fs/2)的信号成分。理想情况下,应在ADC之前放置硬件低通滤波器(模拟滤波器),确保进入采样器的信号带宽受限。然而,在TinyML低成本方案中,许多MEMS传感器内部已集成抗混叠滤波器,但其截止频率往往固定且不够陡峭。因此,软件层面的数字滤波(如FIR或IIR低通滤波器)成为必要的补充。

操作流程:

  • 检查传感器数据手册,确认内部ADC是否包含抗混叠滤波,记录其-3dB截止频率。
  • 若内部滤波不足,在MCU中实现二阶或四阶巴特沃斯低通滤波器,截止频率设为 0.4 × fs。
  • 对于离线分析,可使用Python的scipy.signal.butter设计滤波器,并生成C代码部署到MCU。
# Python端设计抗混叠滤波器示例
from scipy.signal import butter, filtfilt
import numpy as np

fs = 10000  # 采样率 10kHz
fc = 4000   # 截止频率 4kHz
b, a = butter(4, fc/(fs/2), btype='low')
filtered_signal = filtfilt(b, a, raw_signal)
风险提示:切勿在采样率较低(如2kHz)时省略抗混叠滤波。电机变频器产生的PWM载波频率(通常为2~16kHz)会混叠到低频段,形成虚假的故障特征,导致模型误判。务必在硬件或软件层面完成滤波。

3.3 去趋势与去噪:还原真实振动特征

核心原理:振动信号中常包含趋势项(直流偏移、缓慢漂移)和噪声成分(白噪声、工频干扰)。趋势项会掩盖低频故障特征,噪声则降低信噪比。去趋势通常采用减去均值或高通滤波(截止频率1~5Hz)实现;去噪则可采用小波变换、中值滤波或带通滤波。

案例拆解:在某电机轴承外圈故障模拟实验中,我们采集了10kHz采样率的振动信号。初始信号包含明显的直流偏置(约1.2V)和50Hz工频干扰。处理流程如下:

  1. 去趋势:计算信号均值并减去,消除直流分量。
  2. 去工频:使用50Hz陷波滤波器(带宽±1Hz)消除工频及其谐波。
  3. 带通滤波:保留500Hz~5000Hz频带,突出轴承故障特征。

处理前后对比:原始信号的信噪比(SNR)为8.5dB,处理后提升至21.3dB,故障特征频率(BPFO=123.5Hz)的幅值从0.02g提升至0.15g,模型可识别性显著增强。

实战要点:去趋势和去噪的参数需根据电机工况动态调整。例如,在变转速工况下,带通滤波器的通带应随转频变化,否则会滤除有效故障成分。建议在预处理阶段保存滤波参数,便于后续模型解释。

3.4 归一化:统一量纲,加速收敛

核心原理:振动信号的幅值受传感器灵敏度、安装位置、电机负载等因素影响,不同设备间的量纲和幅值范围差异较大。归一化可以消除这些差异,使模型专注于振动形态特征而非绝对幅值。常用的归一化方法包括:

  • Min-Max归一化:将数据映射到[0,1]区间,公式为 x' = (x - min) / (max - min)。
  • Z-score标准化:使数据均值为0,标准差为1,公式为 x' = (x - μ) / σ。

判断方法:对于TinyML部署,推荐使用Z-score标准化,因为其参数(μ, σ)更稳定,且对异常值不敏感。Min-Max归一化在存在极端峰值时会导致正常数据被压缩到很小的区间。

方法适用场景部署复杂度鲁棒性
Min-Max幅值范围已知且稳定低(需存储min/max)较差(受异常值影响)
Z-score幅值波动大、多设备通用低(需存储μ/σ)较好
稳健Z-score存在离群点中(需存储中位数/MAD)最好
经验提醒:归一化参数必须在训练集上计算并保存,验证集和测试集使用相同的参数进行变换,避免数据泄漏。在MCU上部署时,将μ和σ存储为浮点常量,在推理前对输入窗口执行相同的变换。

3.5 数据分割与标注:构建高质量训练集

核心原理:振动信号是时间序列,不能将连续数据直接输入模型,需要分割成固定长度的窗口。窗口长度应覆盖至少10~20个旋转周期,以保证每个窗口包含完整的故障特征周期。同时,窗口之间通常设置50%重叠,以增加样本数量并保持时间连续性。

操作流程:

  1. 确定窗口长度 N = fs × T_window,其中 T_window = 10~20 / f_r。
  2. 设置步长 stride = N / 2(50%重叠)。
  3. 对每个窗口计算标签:根据采集时的工况记录(转速、负载)和健康状态(正常/异常)进行标注。
  4. 划分数据集:训练集70%、验证集15%、测试集15%,确保同一电机或同一工况的数据不跨集合,避免数据泄漏。

案例拆解:某项目采集了4台电机的振动数据,每台电机包含正常、轴承外圈故障、内圈故障三种状态。采样率10kHz,电机转速1500RPM(转频25Hz)。窗口长度设为1024点(约0.1秒,覆盖2.5个旋转周期),步长512点。最终生成样本数:每台电机每状态约2000个窗口,总计24000个样本。数据集划分时,将2台电机作为训练集,1台作为验证集,1台作为测试集,确保模型泛化能力。

常见误区:不要将同一连续时间段的相邻窗口同时放入训练集和测试集,这会导致模型“记住”时间相关性而非学习故障特征。务必按电机或按时间段划分数据集。

3.6 预处理流程的TinyML部署优化

在MCU上实现上述预处理时,需考虑算力和内存限制。建议将预处理步骤合并为一次遍历:读取原始数据 → 减去均值(去趋势) → 应用IIR滤波器(去噪) → 执行Z-score归一化 → 存入特征缓冲区。IIR滤波器相比FIR更节省计算量,但需注意数值稳定性,使用级联二阶节(SOS)实现。

// MCU端预处理伪代码
float process_sample(float raw) {
    // 去趋势:减去预计算的均值
    float detrended = raw - mean_value;
    // IIR带通滤波(二阶节)
    float filtered = iir_sos_apply(&sos, detrended);
    // Z-score归一化
    float normalized = (filtered - mu) / sigma;
    return normalized;
}

通过将预处理参数(均值、滤波器系数、μ/σ)存储在Flash中,MCU可以在每次推理时快速加载并应用,无需重复计算。对于采样率10kHz、窗口1024点的场景,预处理耗时约2ms(基于Cortex-M4 @ 80MHz),完全满足实时性要求。

总结复盘:数据采集与预处理是TinyML振动监测项目的基石。采样率决定频率分辨率,抗混叠滤波保证信号真实性,去趋势与去噪提升信噪比,归一化统一量纲,数据分割与标注决定模型泛化能力。每个环节的参数选择都应基于电机工况和故障特征频率进行工程权衡,并在部署前通过离线数据验证。建议在项目初期建立标准化的预处理流水线,将参数配置化,便于后续多设备部署和模型迭代。