4. 数据采集与预处理

TinyML 异常告警闭环的起点,是高质量的数据采集与预处理。在资源受限的 MCU(微控制器)上,传感器原始信号往往包含噪声、缺失值、量纲差异和时序漂移,若直接送入模型,轻则降低告警准确率,重则导致误报漏报频发。本章围绕“从物理信号到可用特征张量”的完整链路,系统讲解传感器数据采集的工程要点、采样率选择原则、数据清洗与归一化方法、滑动窗口切分策略,以及面向时序异常检测的特征提取技术。这些步骤共同决定了后续模型能否在低功耗、低算力约束下稳定运行。

① 传感器数据采集 IMU / 温湿度 / 电流 I2C / SPI / ADC 读取 采样率选择 DMA / 中断缓冲 ② 数据清洗 缺失值插补 异常尖峰剔除 滤波去噪 时间戳对齐 ③ 归一化 Min-Max 缩放 Z-score 标准化 鲁棒缩放 量化为 int8 ④ 窗口与特征 滑动窗口切分 时域特征 频域特征 特征张量输出 数据流水线:原始信号 → 干净时序 → 统一尺度 → 窗口特征 → 模型输入 每个环节都影响告警延迟与误报率,需在 MCU 上以确定性延迟完成 关键参数 • 采样率:100Hz~1kHz • 窗口长度:32~256点 • 重叠率:50%~75% • 特征维度:5~20 典型传感器配置 • 加速度计:±2g~±16g,ODR 100Hz • 温度/湿度:1Hz 采样即可 • 电流/电压:1kHz 捕捉暂态 • 麦克风:16kHz 用于声学异常 MCU 资源预算 • RAM:窗口缓冲 + 特征向量 • Flash:滤波系数 + 归一化参数 • 算力:特征提取 < 5ms/窗口 • 功耗:传感器 + MCU < 50mW

4.1 传感器数据采集:从物理量到数字信号的工程要点

核心原理:TinyML 系统通常集成 MEMS 加速度计、陀螺仪、温湿度传感器、电流/电压检测或麦克风等。传感器通过 I2C、SPI 或 ADC 接口将模拟物理量转换为数字信号。采集环节的关键在于保证数据的完整性、时间一致性和低延迟。MCU 需配置正确的采样率、量程和滤波寄存器,并通过 DMA 或中断机制将数据搬运至内存缓冲区,避免 CPU 被频繁打断。

采样率选择原则:采样率需满足奈奎斯特采样定理,即采样频率至少为信号最高频率分量的 2 倍。但实际工程中,考虑到抗混叠滤波器的非理想特性,通常取 5~10 倍。例如,旋转机械的振动异常频率在 50Hz~500Hz 之间,采样率应设为 1kHz~2kHz;而温度变化缓慢,1Hz 采样即可。过高的采样率会浪费功耗和存储,过低则丢失异常瞬态特征。

传感器类型典型信号带宽推荐采样率接口备注
加速度计(振动)0.5Hz ~ 500Hz1kHz ~ 2kHzI2C/SPI需开启低通滤波
陀螺仪(角速度)0.1Hz ~ 100Hz200Hz ~ 500HzSPI注意零漂
温湿度< 0.1Hz0.5Hz ~ 1HzI2C可休眠唤醒
电流/电压DC ~ 1kHz2kHz ~ 4kHzADC捕捉浪涌
麦克风(声学)20Hz ~ 8kHz16kHzPDM/I2S需 PDM 解调
经验提醒:在 MCU 上使用 DMA 环形缓冲区采集传感器数据,可避免数据丢失。缓冲区大小建议为窗口长度的 2~3 倍,以便滑动窗口读取时不会覆盖未处理的数据。

4.2 数据清洗:剔除噪声与修复缺失

操作流程:原始传感器数据常包含尖峰噪声、缺失值和漂移。清洗步骤按顺序执行:

  1. 缺失值处理:对于偶发丢包,采用线性插值或前值填充。若连续缺失超过窗口长度的 10%,直接丢弃该窗口。
  2. 尖峰剔除:使用中值滤波或 Hampel 滤波器,将超过 3 倍 MAD(绝对中位差)的点替换为邻域中值。
  3. 低通滤波:对于振动信号,使用二阶 Butterworth 低通滤波器,截止频率设为采样率的 1/4,去除高频噪声。
  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。

总结复盘:数据采集与预处理是 TinyML 异常告警的基石。采样率需匹配信号带宽,清洗需平衡去噪与保留异常,归一化需考虑量化部署,滑动窗口需权衡延迟与计算量。建议在开发初期就建立标准化的数据流水线,并在真实硬件上验证每个环节的耗时与资源占用。常见误区包括:采样率过高导致功耗失控、滤波过度掩盖早期故障、归一化参数未固化导致模型失效、窗口重叠率过低造成检测抖动。通过本章方法,可构建一条稳健、高效的数据预处理链路,为后续模型训练与部署奠定基础。