4、数据采集与预处理:传感器数据采集(加速度计、温度、电流)、数据清洗、归一化、滑动窗口与特征提取

TinyML异常检测模型的性能上限,首先取决于数据质量与特征表达。在资源受限的MCU上部署Autoencoder或One-Class SVM时,模型容量通常被压缩到几十KB以内,这意味着模型无法像云端大模型那样从原始波形中自动学习复杂特征。因此,数据采集与预处理环节不仅是流程起点,更是决定检测精度、误报率与实时性的关键工程环节。本章将围绕传感器选型与采集、数据清洗、归一化、滑动窗口切分以及特征提取五个核心模块展开,并结合工业电机振动监测的实战案例,帮助读者建立一套可落地的数据工程方法论。

TinyML异常检测数据工程链路 ① 传感器采集 加速度计(ADXL345) 温度(DS18B20) 电流(ACS712) 采样率: 1kHz~10kHz ② 数据清洗 缺失值插补(线性/中值) 异常尖峰剔除(3σ) 去趋势/去均值 低通滤波(截止频率) ③ 归一化 Min-Max: [0,1] Z-score: μ=0, σ=1 鲁棒缩放(中位数/IQR) 需保存缩放参数 ④ 滑动窗口 窗口: 256点 步长: 32点(重叠) 实时流式处理 边缘缓冲管理 ⑤ 特征提取(时域/频域) 时域: 均值、方差、峰值、RMS、峰峰值、峭度 频域: FFT频谱、频谱质心、频带能量比 统计: 过零率、波形因子、脉冲因子 特征维度控制: 8~32维(适配MCU) TinyML模型 Autoencoder/OCSVM 关键工程约束: • MCU内存限制: 特征缓冲通常 ≤ 4KB,窗口数据需分块处理 • 实时性: 单窗口处理时间 ≤ 窗口步长时间(如32ms@1kHz采样) • 可复现性: 归一化参数与特征提取参数需固化到模型包中

4.1 传感器数据采集:从物理量到数字信号

在TinyML异常检测场景中,传感器选型与采集配置直接决定了信号的信息量。以工业设备监测为例,加速度计用于捕捉振动信号,温度传感器监测热异常,电流传感器反映电气负载变化。加速度计通常采用I2C或SPI接口,采样率需满足奈奎斯特采样定理——若设备振动主频为500Hz,则采样率至少为1kHz,实际工程中常取2~5倍裕量。温度传感器如DS18B20采用单总线协议,采样率较低(典型1Hz~10Hz),适合慢变信号。电流传感器如ACS712输出模拟电压,需通过ADC采样,分辨率建议12位以上。

采集配置需关注三个关键参数:采样率决定频域分析上限;量程需覆盖信号动态范围,避免削波;采样时长影响窗口内周期数。例如,对于转速为3000RPM(50Hz)的电机,采集1秒数据可包含50个完整周期,足以支撑频域特征提取。在MCU端,DMA(直接内存访问)技术可减少CPU中断开销,环形缓冲区(Ring Buffer)用于暂存连续数据流。

工程经验:在电池供电的无线传感器节点中,加速度计采样率从1kHz提升到5kHz,功耗将增加约3倍。建议根据异常类型动态调整采样率——正常工况下低频采样(100Hz),检测到能量突变后切换高频采样(2kHz)进行精细诊断。

4.2 数据清洗:剔除噪声与伪异常

传感器原始数据不可避免地包含噪声、尖峰和缺失值。数据清洗的目标是保留真实信号特征,同时去除可能误导模型的伪异常。清洗流程通常包含三个步骤:缺失值处理、尖峰剔除和滤波去噪。

缺失值处理可采用线性插值或中值填充。对于加速度计因通信丢包产生的短时缺失(<10个采样点),线性插值即可满足要求;若缺失超过窗口长度的20%,建议直接丢弃该窗口。尖峰剔除采用3σ准则——计算滑动窗口内数据的均值μ和标准差σ,将超出μ±3σ的采样点替换为窗口内中值。滤波去噪需根据信号频带选择滤波器:巴特沃斯低通滤波器具有最大平坦通带特性,适合振动信号;中值滤波对脉冲噪声抑制效果显著,但会引入相位延迟。

清洗方法适用场景参数选择注意事项
线性插值短时缺失(<10点)相邻有效点不适用于长段缺失
中值填充尖峰干扰窗口长度5~15保留边缘细节
3σ剔除随机脉冲噪声σ倍数=3对正态分布数据有效
低通滤波高频噪声截止频率=1.5×信号主频注意相位延迟
风险提示:过度滤波会抹除真实异常特征。例如,轴承早期故障产生的冲击脉冲频率可达5kHz~10kHz,若低通截止频率设为2kHz,将完全丢失该故障特征。建议先进行频谱分析,确定信号有效频带后再设计滤波器。

4.3 归一化:统一尺度与分布

归一化是Autoencoder等神经网络模型训练的必要步骤。不同传感器(加速度、温度、电流)的量纲和数值范围差异巨大——加速度计输出±16g,温度输出20~80℃,电流输出0~5A。若不归一化,模型将偏向数值范围大的特征,导致小数值特征被忽略。

两种主流归一化方法各有适用场景:Min-Max归一化将数据映射到[0,1]区间,公式为x'=(x-min)/(max-min),适用于数据分布均匀且已知上下界的场景;Z-score归一化使数据均值为0、标准差为1,公式为x'=(x-μ)/σ,适用于数据分布近似高斯且存在离群值的场景。对于TinyML部署,需特别注意:归一化参数(min/max或μ/σ)必须在训练阶段计算并固化,部署时直接使用这些参数进行变换,不能在MCU上重新计算。

// 部署端归一化代码示例(C语言)
typedef struct {
    float min_val;
    float max_val;
} NormParams;

float minmax_norm(float x, NormParams p) {
    return (x - p.min_val) / (p.max_val - p.min_val + 1e-8);
}

// 预计算参数(训练阶段获得)
NormParams accel_norm = {-16.0f, 16.0f};
NormParams temp_norm = {20.0f, 80.0f};
NormParams curr_norm = {0.0f, 5.0f};
关键决策:若训练数据与部署环境的数据分布存在漂移(如季节变化导致环境温度偏移),建议使用Z-score归一化并定期更新μ和σ参数。在MCU上,浮点运算成本较高,可将归一化参数转换为定点数(如Q15格式)以加速计算。

4.4 滑动窗口:时间序列的切分策略

滑动窗口将连续时间序列切分为固定长度的样本,是TinyML模型输入的标准格式。窗口长度W和步长S是两个核心超参数:窗口长度决定单个样本包含的时间信息量,步长决定相邻样本的重叠程度。对于振动信号,窗口长度通常取信号主频周期的4~8倍,例如50Hz主频对应周期20ms,窗口长度取100~160ms(即100~160个采样点@1kHz)。步长一般取窗口长度的1/8~1/4,以保证相邻窗口间有足够重叠,避免漏检。

在MCU上实现滑动窗口需考虑内存限制。以256点窗口、16位整型数据为例,单个窗口占用512字节,若使用双缓冲(当前窗口+下一窗口)则需1KB内存。对于内存仅4KB的MCU,可采用分块处理策略:每次DMA传输64点数据,通过状态机累积到256点后触发特征提取。此外,窗口边界效应需通过加窗函数(如汉宁窗)抑制频谱泄漏。

  1. 确定窗口长度:基于信号周期数(≥4个完整周期)和MCU内存预算
  2. 选择步长:重叠率50%~87.5%,平衡计算量与时间分辨率
  3. 实现环形缓冲:使用写指针和读指针管理数据流
  4. 触发特征提取:当缓冲满时,复制窗口数据并启动计算

4.5 特征提取:从高维原始数据到低维特征向量

特征提取将窗口内的原始采样点压缩为低维特征向量,直接降低模型输入维度。对于Autoencoder模型,输入维度从256维降至8~32维,可显著减少模型参数量和推理时间。特征分为三类:时域特征、频域特征和统计特征。

时域特征包括均值(反映直流分量)、方差(反映能量)、峰值(反映冲击强度)、均方根值RMS(反映有效能量)、峰峰值(反映振动幅度)和峭度(反映信号分布尖锐度)。频域特征通过对窗口数据执行FFT获得,包括频谱质心(反映主频位置)、频带能量比(将频谱分为低频0~100Hz、中频100~500Hz、高频500Hz以上三个频带,计算各频带能量占比)。统计特征如过零率(反映信号频率)、波形因子(RMS/整流平均值)和脉冲因子(峰值/整流平均值)可补充时域信息。

特征类别特征名称计算公式物理意义
时域RMS√(Σx²/n)信号有效能量
时域峭度E[(x-μ)⁴]/σ⁴冲击特征敏感度
频域频谱质心Σ(f·P(f))/ΣP(f)主频位置
频域频带能量比E_band/E_total频带分布特征
统计过零率N_zero/N_total信号频率粗略估计
特征维度控制:虽然特征越多信息越丰富,但MCU上浮点运算和内存开销随维度线性增长。建议采用特征选择方法(如基于相关性的筛选)将维度控制在16维以内。对于Autoencoder模型,输入维度每增加8维,模型参数量约增加30%,推理时间增加约20%。

4.6 实战案例:电机轴承故障监测的数据工程

某工厂需要对一台额定转速为1500RPM(25Hz)的异步电机进行轴承异常监测。电机安装有ADXL345加速度计(量程±16g,采样率2kHz)、DS18B20温度传感器(采样率1Hz)和ACS712电流传感器(采样率1kHz)。目标是在MCU(STM32L4,192KB RAM)上部署Autoencoder模型,检测轴承磨损初期的振动异常。

初始现象:电机正常运行时,加速度计RMS值为0.8g,温度稳定在65℃±2℃,电流有效值为4.2A。轴承出现早期磨损后,振动信号中出现周期性冲击脉冲,频率约为轴承故障特征频率(BPFO=3.2×25=80Hz),但RMS值仅上升至1.1g,传统阈值报警无法识别。

数据采集配置:加速度计采样率设为2kHz(满足80Hz故障频率的25倍采样),窗口长度取256点(128ms,包含约3.2个故障周期),步长64点(重叠率75%)。温度数据每窗口取平均值作为1维特征,电流数据每窗口计算RMS值作为1维特征。

预处理流程:首先对加速度数据进行3σ尖峰剔除(窗口长度11点),然后进行截止频率为500Hz的巴特沃斯低通滤波(保留故障特征频率及其谐波)。归一化采用Z-score方法,训练阶段计算各特征的μ和σ并固化。特征提取共生成12维特征:加速度时域6维(均值、方差、峰值、RMS、峰峰值、峭度)、加速度频域4维(频谱质心、三个频带能量比)、温度均值1维、电流RMS 1维。

实施效果:在正常工况下采集2000个窗口作为训练集,Autoencoder模型(输入12维,隐藏层8维,输出12维)重建误差阈值为0.05。部署后,轴承磨损初期(RMS=1.1g)时,模型重建误差升至0.23,成功触发报警。相比传统RMS阈值法(需RMS>1.5g才报警),提前约3周发现异常。

风险与代价:该方案增加了约15%的MCU计算负载(特征提取+推理),但通过将特征提取放在DMA中断中执行,主循环负载仅增加5%。温度特征在冬季环境温度下降时出现漂移,导致误报率上升,后通过引入环境温度补偿(将温度特征替换为温升ΔT=当前温度-环境温度)解决。

复盘经验:数据工程的核心在于特征与故障机理的匹配。本案例中,峭度特征对冲击脉冲高度敏感,而RMS特征对持续磨损更有效。建议在特征设计阶段,先通过频谱分析确定故障特征频率,再针对性设计频域特征,避免盲目堆砌特征维度。

4.7 常见误区与总结

在TinyML数据工程实践中,以下误区需特别警惕:误区一:忽视采样率与故障频率的匹配关系,导致频域特征失效;误区二:在部署端重新计算归一化参数,造成训练与推理分布不一致;误区三:窗口长度过短(<2个信号周期),导致频域分辨率不足;误区四:特征维度过多,超出MCU内存和计算能力。

总结而言,数据采集与预处理是TinyML异常检测系统的地基工程。传感器选型需匹配故障特征频带,数据清洗需平衡噪声抑制与特征保留,归一化参数必须固化部署,滑动窗口需兼顾时间分辨率与内存限制,特征提取应聚焦故障机理。一个经过精心设计的数据工程链路,即使使用简单的Autoencoder模型,也能在MCU上实现高精度的异常检测。建议读者在项目启动初期,先采集少量数据完成全流程验证,再扩展至完整数据集训练,以降低返工风险。