4、数据采集与预处理:工业传感器数据采集方法、数据清洗、去噪、归一化、时间窗口切分、数据标注策略

工业异常检测模型的性能上限,往往在数据采集与预处理阶段就已注定。TinyML 模型参数量小、算力受限,对输入数据的质量与分布极为敏感。本章聚焦从物理传感器到模型输入张量之间的完整链路,系统讲解工业场景下的数据采集方法、清洗去噪、归一化、时间窗口切分与标注策略,帮助学员建立一套可落地、可复现的数据工程方法论。

工业传感器数据采集与预处理工程链路 物理传感器层 振动/温度/电流/声发射 采样率·量程·安装位置 信号调理与采集 ADC/DAQ/边缘网关 抗混叠滤波·同步采样 数据清洗与去噪 异常值剔除·滤波 缺失值处理·重采样 归一化/标准化 Min-Max / Z-Score 鲁棒缩放 时间窗口切分 滑动窗口·重叠率·步长 窗口长度与频率分辨率 数据标注策略 专家规则·半监督·主动学习 标签粒度·类别不平衡 数据集划分 训练/验证/测试 时间序列防泄漏 TinyML 模型输入张量 形状: [窗口长度 × 特征通道数] · 数据类型: float32/int8 关键控制点:采样率选择 · 抗混叠滤波 · 时间同步 · 归一化参数保存 · 标签一致性

4.1 工业传感器数据采集方法

核心原理:工业异常检测的数据采集并非简单地将传感器接到开发板上读取数值,而是需要根据物理现象、故障频率范围、部署环境与功耗约束,综合确定传感器选型、采样率、量程、安装位置与同步策略。TinyML 场景下,边缘设备通常采用低功耗 MCU 配合 MEMS 传感器(如加速度计、麦克风、温湿度、电流互感器),以 1kHz~50kHz 的采样率采集振动、声音或电流信号。

判断方法:采样率的确定应遵循奈奎斯特采样定理,同时考虑目标故障的特征频率。例如,滚动轴承外圈故障特征频率通常在 100Hz~2kHz 之间,采样率至少应设为 5kHz;而齿轮箱啮合频率可能达到 10kHz 以上,需要 25kHz 以上的采样率。此外,还需考虑抗混叠滤波器——若采样率不足,高频噪声会折叠到低频段,污染故障特征。

传感器类型典型信号采样率范围适用故障类型TinyML 部署注意点
MEMS 加速度计振动加速度1kHz~20kHz轴承磨损、不平衡、松动需考虑量程与噪声密度
麦克风阵列声发射/噪声16kHz~48kHz气阀泄漏、齿轮点蚀环境噪声干扰大,需波束成形
电流互感器电机电流1kHz~10kHz电机转子断条、偏心需关注工频谐波分量
温度传感器温度/热像0.1Hz~10Hz过热、散热不良响应慢,适合慢变异常

案例拆解:某化工厂离心泵预测性维护项目,初始方案采用 20kHz 采样率采集振动信号,但边缘网关 MCU 的 ADC 吞吐量不足,导致数据丢失。经分析,该泵转速为 2900rpm(约 48Hz),主要故障特征频率集中在 500Hz~3kHz 区间。最终将采样率降至 8kHz,并增加 3kHz 低通抗混叠滤波器,数据量减少 60%,同时保留了关键故障特征。部署后模型准确率仅下降 0.8%,但功耗降低 45%。

风险提示:采样率并非越高越好。过高的采样率会带来数据量激增、MCU 处理压力增大、功耗上升等问题。务必根据故障特征频率和部署硬件能力进行折中设计。

4.2 数据清洗与去噪

核心原理:工业现场采集的原始数据往往包含多种噪声与异常:传感器偶发尖峰、电源工频干扰、机械共振、电磁耦合、通信丢包导致的缺失值等。数据清洗的目标是去除无效数据、修正异常值、填补缺失值,同时避免损伤真实故障特征。去噪则是在保留信号突变(故障冲击)的前提下,抑制平稳噪声。

操作流程:

  1. 异常值检测:使用 3σ 准则或 IQR(四分位距)识别离群点。对于振动信号,若某采样点幅值超过正常范围的 5 倍以上,通常判定为传感器尖峰或通信错误。
  2. 缺失值处理:若缺失率低于 5%,可采用线性插值或前向填充;若缺失率超过 20%,建议丢弃该段数据,避免引入虚假信息。
  3. 滤波去噪:根据信号特征选择滤波器。中值滤波适合去除脉冲噪声;巴特沃斯低通滤波适合去除高频噪声;带通滤波(如 500Hz~5kHz)可保留轴承故障特征频段。
  4. 重采样:若不同传感器采样率不一致,需统一重采样至相同时间基准,保证多通道数据对齐。
# 示例:Python 数据清洗流程(伪代码)
import numpy as np
from scipy.signal import medfilt, butter, filtfilt

# 1. 异常值剔除(3σ)
mean = np.mean(signal)
std = np.std(signal)
clean = np.where(np.abs(signal - mean) > 3*std, mean, signal)

# 2. 中值滤波去除脉冲噪声
clean = medfilt(clean, kernel_size=5)

# 3. 带通滤波(500Hz~5kHz)
b, a = butter(4, [500, 5000], btype='band', fs=20000)
filtered = filtfilt(b, a, clean)

常见误区:过度滤波会抹平故障冲击特征。例如,使用 100Hz 低通滤波处理轴承振动信号,虽然噪声大幅降低,但 2kHz 的故障特征也被完全滤除,导致模型无法学习到有效模式。建议在滤波前后对比频谱图,确认故障特征频段未被破坏。

4.3 归一化与标准化

核心原理:TinyML 模型通常使用 int8 量化部署,输入数据范围必须映射到固定区间(如 [-1, 1] 或 [0, 1])。归一化不仅能加速模型收敛,还能消除不同传感器通道之间的量纲差异。但工业数据常受工况变化影响(如负载波动导致振动幅值变化),简单的 Min-Max 归一化可能失效。

判断方法:

  • Min-Max 归一化:适用于数据分布相对稳定、无极端离群点的场景。公式:x' = (x - min) / (max - min)。
  • Z-Score 标准化:适用于数据近似高斯分布、存在少量离群点的场景。公式:x' = (x - μ) / σ。
  • 鲁棒缩放:使用中位数和 IQR,对离群点不敏感,适合工业振动信号。
关键经验:归一化参数(min/max 或 μ/σ)必须在训练集上计算并保存,部署时使用同一组参数对实时数据进行变换。切勿在推理时重新计算全局统计量,否则会导致数据分布漂移。

实战场景:某电机电流信号在正常工况下幅值为 0.5A~2A,但在启动瞬间可达 8A。若直接使用 Min-Max 归一化,正常数据将被压缩到 [0, 0.2] 区间,模型难以区分细微异常。解决方案是:先剔除启动段数据,再对稳态段进行 Z-Score 标准化,最后将结果裁剪到 [-3, 3] 范围。

4.4 时间窗口切分

核心原理:工业异常检测模型通常不处理单点数据,而是处理一段连续时间序列。时间窗口切分将长序列划分为固定长度的短片段,每个片段作为一个独立样本输入模型。窗口长度直接影响频率分辨率与计算量:窗口越长,频率分辨率越高,但延迟和内存占用也越大。

操作流程:

  1. 确定窗口长度:根据故障特征周期确定。例如,旋转机械每转一圈产生一次冲击,窗口应至少包含 5~10 个旋转周期。对于 48Hz 的轴转速,窗口长度建议为 0.2s~0.5s(对应 1600~4000 个采样点 @8kHz)。
  2. 设置重叠率:相邻窗口之间通常有 50%~75% 的重叠,以增加样本数量并避免故障事件恰好落在窗口边界。但重叠率过高会导致样本高度相关,造成过拟合。
  3. 滑动步长:步长 = 窗口长度 × (1 - 重叠率)。例如窗口 400 点、重叠 75%,则步长为 100 点。
  4. 样本均衡:切分后需统计正常/异常样本比例,若类别不平衡,可采用过采样(SMOTE)或欠采样策略。
窗口长度频率分辨率样本数(10分钟数据)适用场景
128 点62.5Hz~4600快速响应、高频故障
512 点15.6Hz~1150平衡分辨率与样本量
2048 点3.9Hz~290低频故障、精细频谱分析

案例拆解:某风电齿轮箱振动监测项目,原始采样率 25kHz,故障特征频率为 800Hz 的齿轮啮合频率边带。若窗口取 256 点(约 10ms),频率分辨率仅 97Hz,无法分辨 5Hz 的边带间隔。将窗口延长至 2048 点(约 82ms),频率分辨率提升至 12Hz,成功提取边带特征。但样本量从 12000 降至 1500,通过 75% 重叠率恢复至 5600 个样本,满足训练需求。

注意:时间窗口切分时,必须确保训练集、验证集、测试集之间没有重叠窗口,否则会造成数据泄漏,导致模型评估结果虚高。建议按时间顺序划分:前 70% 数据训练,中间 15% 验证,最后 15% 测试。

4.5 数据标注策略

核心原理:工业异常检测的标注成本极高,且存在标签噪声(不同专家对同一信号的判断可能不一致)。标注策略的目标是在有限预算下获取高质量标签,同时处理类别不平衡和标签粒度问题。

判断方法:

  • 标签粒度:分为设备级(正常/异常)、故障类型级(轴承磨损/不平衡/松动)、严重程度级(轻微/中度/严重)。TinyML 场景建议先做设备级二分类,再逐步细化。
  • 标注来源:优先使用设备维护记录、停机日志等客观标签;其次由专家根据频谱图人工标注;最后可结合半监督学习,用模型预测辅助标注。
  • 类别不平衡处理:工业场景中正常样本远多于异常样本(通常 100:1 甚至更高)。可采用焦点损失(Focal Loss)、异常样本过采样、或合成少数类样本(如 SMOTE)等方法。

实战场景:某注塑机注塑压力异常检测项目,工厂提供了 3 个月的运行数据,但仅有 12 次故障记录。初始标注策略为:将故障发生前 5 秒至故障恢复后 5 秒的数据标记为异常,其余为正常。但模型误报率高达 30%。经分析,部分正常数据包含工艺切换(如换模、调参)导致的压力波动,被误标为异常。改进策略为:结合工艺参数(如模具温度、注射速度)排除工艺切换段,仅将设备故障导致的压力异常标记为异常。最终误报率降至 5%。

复盘经验:标注前必须与工艺工程师确认工况变化节点,将正常工艺调整与真实故障区分开。建议建立标注规范文档,包含典型波形示例、边界情况定义、多人交叉验证机制。

总结:数据采集与预处理是 TinyML 工业异常检测项目中最耗时、最影响最终效果的环节。采样率与窗口长度决定了模型能看到的物理信息范围;清洗与去噪决定了信号质量;归一化决定了模型训练的稳定性;标注策略决定了模型学习的目标是否正确。建议在项目启动初期投入 40% 以上的时间进行数据工程,并建立标准化的数据处理流水线,确保从开发到部署的数据一致性。