4、数据采集与预处理:传感器数据采集(加速度计、温度、电流)、数据清洗、归一化、滑动窗口与特征提取
TinyML异常检测模型的性能上限,首先取决于数据质量与特征表达。在资源受限的MCU上部署Autoencoder或One-Class SVM时,模型容量通常被压缩到几十KB以内,这意味着模型无法像云端大模型那样从原始波形中自动学习复杂特征。因此,数据采集与预处理环节不仅是流程起点,更是决定检测精度、误报率与实时性的关键工程环节。本章将围绕传感器选型与采集、数据清洗、归一化、滑动窗口切分以及特征提取五个核心模块展开,并结合工业电机振动监测的实战案例,帮助读者建立一套可落地的数据工程方法论。
4.1 传感器数据采集:从物理量到数字信号
在TinyML异常检测场景中,传感器选型与采集配置直接决定了信号的信息量。以工业设备监测为例,加速度计用于捕捉振动信号,温度传感器监测热异常,电流传感器反映电气负载变化。加速度计通常采用I2C或SPI接口,采样率需满足奈奎斯特采样定理——若设备振动主频为500Hz,则采样率至少为1kHz,实际工程中常取2~5倍裕量。温度传感器如DS18B20采用单总线协议,采样率较低(典型1Hz~10Hz),适合慢变信号。电流传感器如ACS712输出模拟电压,需通过ADC采样,分辨率建议12位以上。
采集配置需关注三个关键参数:采样率决定频域分析上限;量程需覆盖信号动态范围,避免削波;采样时长影响窗口内周期数。例如,对于转速为3000RPM(50Hz)的电机,采集1秒数据可包含50个完整周期,足以支撑频域特征提取。在MCU端,DMA(直接内存访问)技术可减少CPU中断开销,环形缓冲区(Ring Buffer)用于暂存连续数据流。
4.2 数据清洗:剔除噪声与伪异常
传感器原始数据不可避免地包含噪声、尖峰和缺失值。数据清洗的目标是保留真实信号特征,同时去除可能误导模型的伪异常。清洗流程通常包含三个步骤:缺失值处理、尖峰剔除和滤波去噪。
缺失值处理可采用线性插值或中值填充。对于加速度计因通信丢包产生的短时缺失(<10个采样点),线性插值即可满足要求;若缺失超过窗口长度的20%,建议直接丢弃该窗口。尖峰剔除采用3σ准则——计算滑动窗口内数据的均值μ和标准差σ,将超出μ±3σ的采样点替换为窗口内中值。滤波去噪需根据信号频带选择滤波器:巴特沃斯低通滤波器具有最大平坦通带特性,适合振动信号;中值滤波对脉冲噪声抑制效果显著,但会引入相位延迟。
| 清洗方法 | 适用场景 | 参数选择 | 注意事项 |
|---|---|---|---|
| 线性插值 | 短时缺失(<10点) | 相邻有效点 | 不适用于长段缺失 |
| 中值填充 | 尖峰干扰 | 窗口长度5~15 | 保留边缘细节 |
| 3σ剔除 | 随机脉冲噪声 | σ倍数=3 | 对正态分布数据有效 |
| 低通滤波 | 高频噪声 | 截止频率=1.5×信号主频 | 注意相位延迟 |
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};
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点后触发特征提取。此外,窗口边界效应需通过加窗函数(如汉宁窗)抑制频谱泄漏。
- 确定窗口长度:基于信号周期数(≥4个完整周期)和MCU内存预算
- 选择步长:重叠率50%~87.5%,平衡计算量与时间分辨率
- 实现环形缓冲:使用写指针和读指针管理数据流
- 触发特征提取:当缓冲满时,复制窗口数据并启动计算
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 | 信号频率粗略估计 |
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=当前温度-环境温度)解决。
4.7 常见误区与总结
在TinyML数据工程实践中,以下误区需特别警惕:误区一:忽视采样率与故障频率的匹配关系,导致频域特征失效;误区二:在部署端重新计算归一化参数,造成训练与推理分布不一致;误区三:窗口长度过短(<2个信号周期),导致频域分辨率不足;误区四:特征维度过多,超出MCU内存和计算能力。
总结而言,数据采集与预处理是TinyML异常检测系统的地基工程。传感器选型需匹配故障特征频带,数据清洗需平衡噪声抑制与特征保留,归一化参数必须固化部署,滑动窗口需兼顾时间分辨率与内存限制,特征提取应聚焦故障机理。一个经过精心设计的数据工程链路,即使使用简单的Autoencoder模型,也能在MCU上实现高精度的异常检测。建议读者在项目启动初期,先采集少量数据完成全流程验证,再扩展至完整数据集训练,以降低返工风险。