4、数据采集与预处理:传感器数据采集、采样率选择、数据清洗、归一化、滑动窗口与特征提取方法
TinyML 异常告警闭环的起点,是高质量的数据采集与预处理。在资源受限的 MCU(微控制器)上,传感器原始信号往往包含噪声、缺失值、量纲差异和时序漂移,若直接送入模型,轻则降低告警准确率,重则导致误报漏报频发。本章围绕“从物理信号到可用特征张量”的完整链路,系统讲解传感器数据采集的工程要点、采样率选择原则、数据清洗与归一化方法、滑动窗口切分策略,以及面向时序异常检测的特征提取技术。这些步骤共同决定了后续模型能否在低功耗、低算力约束下稳定运行。
4.1 传感器数据采集:从物理量到数字信号的工程要点
核心原理:TinyML 系统通常集成 MEMS 加速度计、陀螺仪、温湿度传感器、电流/电压检测或麦克风等。传感器通过 I2C、SPI 或 ADC 接口将模拟物理量转换为数字信号。采集环节的关键在于保证数据的完整性、时间一致性和低延迟。MCU 需配置正确的采样率、量程和滤波寄存器,并通过 DMA 或中断机制将数据搬运至内存缓冲区,避免 CPU 被频繁打断。
采样率选择原则:采样率需满足奈奎斯特采样定理,即采样频率至少为信号最高频率分量的 2 倍。但实际工程中,考虑到抗混叠滤波器的非理想特性,通常取 5~10 倍。例如,旋转机械的振动异常频率在 50Hz~500Hz 之间,采样率应设为 1kHz~2kHz;而温度变化缓慢,1Hz 采样即可。过高的采样率会浪费功耗和存储,过低则丢失异常瞬态特征。
| 传感器类型 | 典型信号带宽 | 推荐采样率 | 接口 | 备注 |
|---|---|---|---|---|
| 加速度计(振动) | 0.5Hz ~ 500Hz | 1kHz ~ 2kHz | I2C/SPI | 需开启低通滤波 |
| 陀螺仪(角速度) | 0.1Hz ~ 100Hz | 200Hz ~ 500Hz | SPI | 注意零漂 |
| 温湿度 | < 0.1Hz | 0.5Hz ~ 1Hz | I2C | 可休眠唤醒 |
| 电流/电压 | DC ~ 1kHz | 2kHz ~ 4kHz | ADC | 捕捉浪涌 |
| 麦克风(声学) | 20Hz ~ 8kHz | 16kHz | PDM/I2S | 需 PDM 解调 |
4.2 数据清洗:剔除噪声与修复缺失
操作流程:原始传感器数据常包含尖峰噪声、缺失值和漂移。清洗步骤按顺序执行:
- 缺失值处理:对于偶发丢包,采用线性插值或前值填充。若连续缺失超过窗口长度的 10%,直接丢弃该窗口。
- 尖峰剔除:使用中值滤波或 Hampel 滤波器,将超过 3 倍 MAD(绝对中位差)的点替换为邻域中值。
- 低通滤波:对于振动信号,使用二阶 Butterworth 低通滤波器,截止频率设为采样率的 1/4,去除高频噪声。
- 时间戳对齐:多传感器数据需按时间戳同步,以主传感器时钟为基准,线性插值对齐从传感器数据。
案例拆解:某工业电机预测性维护项目,使用加速度计采集振动信号,采样率 2kHz。初始数据中,由于电机启停瞬间产生 5V 尖峰干扰,导致原始信号出现幅值超过 ±8g 的异常点。通过 Hampel 滤波器(窗口大小 11,阈值 3σ)成功剔除尖峰,并将异常点替换为邻域中值。清洗后,信号的 RMS 值从 0.45g 降至 0.32g,更接近真实振动水平。同时,由于 I2C 总线偶尔被高优先级中断抢占,导致约 0.5% 的数据包丢失,采用线性插值修复后,模型误报率降低了 12%。
4.3 归一化:统一尺度与量化准备
核心原理:不同传感器通道的量纲和幅值差异巨大(如加速度 ±2g,温度 0~100℃)。归一化可消除量纲影响,使模型训练更稳定。TinyML 部署时,模型通常使用 int8 量化,因此归一化参数需在训练时统计并固化到 MCU 的 Flash 中。
常用方法对比:
| 方法 | 公式 | 适用场景 | MCU 实现代价 |
|---|---|---|---|
| Min-Max 缩放 | x' = (x - min) / (max - min) | 已知上下界,分布均匀 | 需存储 min/max,2 次运算 |
| Z-score 标准化 | x' = (x - μ) / σ | 数据近似高斯分布 | 需存储 μ/σ,2 次运算 |
| 鲁棒缩放 | x' = (x - median) / IQR | 存在离群点 | 需存储中位数/四分位距 |
| int8 量化 | x_q = round(x' * 127) | 模型部署前 | 需 scale/zero_point |
实战建议:在 MCU 上,推荐使用 Min-Max 缩放并配合 int8 量化。例如,加速度计量程设为 ±4g,归一化到 [-1, 1],再映射到 int8 的 [-127, 127]。这样每个样本仅占 1 字节,RAM 占用大幅降低。归一化参数(min, max)在设备校准阶段写入 Flash,运行时仅需一次乘加运算。
// MCU 端归一化 + 量化示例(C 语言伪代码)
int8_t normalize_and_quantize(float x, float min_val, float max_val) {
float normalized = (x - min_val) / (max_val - min_val); // [0,1]
normalized = normalized * 2.0f - 1.0f; // [-1,1]
int8_t q = (int8_t)(normalized * 127.0f);
return q;
}
4.4 滑动窗口与特征提取:构建时序样本
滑动窗口机制:异常检测模型需要基于一段连续时间序列判断状态。滑动窗口以固定长度 L 截取数据,并以步长 S 滑动。窗口长度决定了模型感知的时间范围,步长影响检测延迟和计算负载。典型配置:窗口长度 128 点(对应 64ms @2kHz),步长 32 点(重叠 75%),保证相邻窗口间特征平滑过渡。
特征提取方法:在 MCU 上直接运行 CNN 或 Transformer 不现实,通常提取手工特征作为模型输入。常用特征分为时域和频域两类:
- 时域特征:均值、方差、RMS、峰值因子、波形因子、峭度、偏度、过零率。峭度对冲击异常敏感,适合轴承故障。
- 频域特征:FFT 后提取频谱质心、谱熵、特定频带能量(如 1x 转频、2x 转频)。需注意 FFT 点数与窗口长度一致,MCU 上可使用 CMSIS-DSP 库加速。
- 统计特征:中位数、四分位距、最大最小值差,适合非平稳信号。
案例拆解:在泵机异常告警系统中,传感器以 1kHz 采样振动信号。窗口长度设为 256 点(256ms),步长 64 点(重叠 75%)。每个窗口提取 8 个特征:RMS、峭度、峰值因子、频谱质心、0~100Hz 频带能量、100~200Hz 频带能量、过零率、波形因子。特征向量共 8 维,送入一个 3 层全连接网络(8→16→2)。在 MCU(Cortex-M4 @ 80MHz)上,特征提取耗时约 3.2ms,推理耗时 0.8ms,总延迟 4ms,满足 10ms 内告警的实时性要求。相比直接使用原始波形,特征提取后模型参数量减少 90%,RAM 占用从 2KB 降至 256B。