4、传感器数据采集与预处理:采样率选择、数据清洗、归一化、滑动窗口与特征提取
在Edge AI传感器异常检测系统中,数据采集与预处理是决定模型性能与延迟预算的第一道关口。传感器原始信号中混杂着噪声、缺失值与量纲差异,若未经妥善处理直接送入模型,不仅会拉高推理延迟(因无效数据增加计算量),还会导致误报率上升。本章围绕采样率选择、数据清洗、归一化、滑动窗口与特征提取五个核心环节,讲解如何在资源受限的MCU/DSP上,以最小延迟代价获取最具判别力的特征向量。
4.1 采样率选择:从Nyquist到工程折中
核心原理:采样率决定了信号中可保留的最高频率分量。根据Nyquist-Shannon采样定理,采样率需大于信号最高频率的2倍才能无混叠重建。但在Edge AI场景中,采样率并非越高越好——高采样率意味着单位时间内处理的数据量线性增长,直接推高ADC功耗、DMA传输带宽和后续特征提取的计算量。对于振动传感器(如加速度计),典型故障特征频率集中在几十Hz到几kHz;对于电流传感器,工频50Hz及其谐波(最高可达数kHz)是主要关注对象。
工程判断方法:选择采样率需遵循以下步骤:
- 确定信号带宽:通过频谱分析或先验知识,找出故障特征的最高有效频率 fmax。例如,轴承外圈故障特征频率 fo = 0.4×n×fr(n为滚动体数,fr为转频),若 fr=30Hz、n=9,则 fo=108Hz,考虑其3倍谐波,fmax≈324Hz。
- 计算理论最低采样率:fs ≥ 2×fmax,实际工程中取3-5倍裕量,即 fs = (3~5)×fmax。
- 匹配硬件能力:检查MCU的ADC采样率上限、DMA带宽、存储空间。例如,STM32F4系列ADC最高6.6Msps,但实际连续采样受限于DMA和内存。
- 功耗与延迟折中:若系统由电池供电,每增加1kHz采样率,ADC功耗约增加0.5-2mW。此时可考虑自适应采样——在设备空闲时降低采样率,检测到异常征兆时切换高采样率。
4.2 数据清洗:剔除噪声与异常值
核心原理:传感器数据在采集过程中会混入多种噪声:电源纹波(50Hz/100Hz)、电磁干扰(高频尖峰)、机械振动耦合、传感器自身热噪声等。此外,ADC可能产生偶发的野值(spike)或丢数。数据清洗的目标是在不损伤真实信号特征的前提下,最大程度去除这些干扰。清洗操作必须放在归一化之前,因为异常值会扭曲归一化的统计参数(如均值和方差)。
操作流程:
- 缺失值处理:对于ADC丢数,采用线性插值或前值保持。若连续丢数超过3个,建议丢弃该窗口数据并标记。
- 野值剔除:使用Hampel滤波器——计算滑动窗口内的中位数和MAD(绝对中位差),若当前值偏离中位数超过3×1.4826×MAD,则用中位数替换。
- 低通滤波:根据采样率设计截止频率为 fmax×1.5 的IIR滤波器(如Butterworth二阶),或更节省算力的移动平均滤波(窗口长度N=5~15)。
- 工频陷波:若存在50Hz干扰,使用二阶IIR陷波器,Q值设为10-30,避免过度展宽。
// Hampel滤波器伪代码(C语言风格)
#define WIN_SIZE 7
#define N_SIGMA 3.0
float hampel_filter(float x, float buffer[WIN_SIZE]) {
// 将x移入环形缓冲区
memmove(&buffer[1], &buffer[0], (WIN_SIZE-1)*sizeof(float));
buffer[0] = x;
// 计算中位数
float sorted[WIN_SIZE];
memcpy(sorted, buffer, sizeof(sorted));
qsort(sorted, WIN_SIZE, sizeof(float), cmp);
float median = sorted[WIN_SIZE/2];
// 计算MAD
for (int i=0; i<WIN_SIZE; i++) sorted[i] = fabsf(buffer[i]-median);
qsort(sorted, WIN_SIZE, sizeof(float), cmp);
float mad = sorted[WIN_SIZE/2];
// 判断并替换
float threshold = N_SIGMA * 1.4826 * mad;
return (fabsf(x - median) > threshold) ? median : x;
}
4.3 归一化:消除量纲差异与适配定点运算
核心原理:不同传感器通道的量纲和幅值范围差异巨大——加速度计输出±2g(约±2000mV),温度传感器输出0-3.3V,电流传感器输出0-5A。若不归一化,特征提取时幅值大的通道会主导距离计算,导致模型偏向。同时,Edge设备上的MCU通常没有FPU(浮点单元),归一化后的数据映射到定点数(如int16或Q15格式)可大幅加速计算。
归一化方法对比:
| 方法 | 公式 | 适用场景 | Edge端实现代价 |
|---|---|---|---|
| Min-Max | x' = (x - min) / (max - min) | 已知信号范围,如加速度±2g | 需存储min/max,除法可用移位近似 |
| Z-score | x' = (x - μ) / σ | 信号分布未知,存在异常值 | 需在线计算μ/σ,浮点除法 |
| Robust Scaling | x' = (x - median) / IQR | 存在野值,需抗干扰 | 需维护中位数和四分位数,内存开销大 |
| 定点映射 | x' = round(x × 2^N) | MCU无FPU,需Q格式 | 仅需移位和乘法,最快 |
实战建议:在Edge AI中,推荐离线计算归一化参数,在线仅做线性映射。即在开发阶段用采集的数据集计算min/max或μ/σ,固化为常量,运行时只需执行一次乘加操作。例如,将加速度计输出映射到int16范围[-32768, 32767]:
// 离线计算:min=-2.0g, max=2.0g
#define ACC_MIN (-2.0f)
#define ACC_MAX (2.0f)
#define ACC_SCALE (65535.0f / (ACC_MAX - ACC_MIN))
#define ACC_OFFSET (-ACC_MIN * ACC_SCALE - 32768.0f)
int16_t acc_norm(float raw_g) {
return (int16_t)(raw_g * ACC_SCALE + ACC_OFFSET);
}
4.4 滑动窗口:平衡时间分辨率与计算开销
核心原理:异常检测需要基于一段时间内的信号片段(窗口)提取特征,而非单点判断。滑动窗口以固定步长在时间轴上移动,每次生成一个数据帧送入特征提取模块。窗口长度W和步长S直接决定:频率分辨率(Δf = fs/W)、检测延迟(约等于S/fs + 处理时间)、计算量(每步处理W个样本)。
参数选择方法:
- 窗口长度W:至少包含3-5个完整故障特征周期。例如,轴承故障特征频率为108Hz,采样率2kHz,则周期T=9.26ms,W应≥46ms,取W=64ms(128个采样点)。
- 步长S:决定检测延迟。若系统要求100ms内响应,则S ≤ 100ms×fs - W。通常取S = W/4(75%重叠)或W/2(50%重叠)。重叠率越高,特征序列越平滑,但计算量线性增加。
- 内存约束:窗口数据需在RAM中缓存。W=128点×2字节×3轴=768字节,对于典型MCU(RAM≥16KB)可接受。若窗口过长,可考虑DMA双缓冲或分段处理。
背景:某工业电机转速3000rpm(50Hz),加速度计采样率4kHz,MCU为Cortex-M4(168MHz),RAM 64KB。目标:在200ms内检测出轴承外圈故障。
分析:外圈故障特征频率 fo = 0.4×9×50 = 180Hz,周期5.56ms。取窗口包含5个周期 → W=27.8ms,向上取整为32ms(128点)。步长取W/4=8ms(32点),则检测延迟=8ms+处理时间。特征提取采用FFT(128点)+时域统计,总处理时间约3ms,满足200ms要求。
结果:实际部署后,误报率从15%降至2%,检测延迟实测45ms(含通信开销)。复盘发现,窗口重叠率从50%提升至75%后,特征方差降低30%,但CPU占用率从22%升至35%,仍在预算内。
4.5 特征提取:从原始信号到判别向量
核心原理:特征提取将窗口内的原始样本压缩为低维向量,减少模型输入维度,同时增强判别力。Edge AI场景下,特征提取需满足:计算简单(避免复杂变换)、物理可解释(便于调参)、存储友好(特征维度≤32)。
常用特征分类:
| 类别 | 特征 | 计算复杂度 | 适用场景 |
|---|---|---|---|
| 时域 | 均值、方差、峰值、峰峰值、RMS | O(n) | 幅值变化明显的故障(如松动) |
| 时域 | 峭度、偏度、波形因子、峰值因子 | O(n) | 冲击类故障(如轴承点蚀) |
| 频域 | FFT频谱峰值、频谱质心、谱能量 | O(n log n) | 周期性故障(如齿轮断齿) |
| 时频 | 小波包能量(需DWT) | O(n) | 非平稳信号(如变转速工况) |
Edge端优化策略:
- 避免完整FFT:若只需特定频段的能量,使用Goertzel算法(O(n))计算单频点幅值。
- 递推计算:均值、方差等统计量可利用滑动窗口的重叠特性,用递推公式更新,避免每步全量重算。例如,窗口均值 μk = μk-1 + (xnew - xold)/W。
- 定点FFT:使用CMSIS-DSP库的Q15格式FFT,比浮点快3-5倍。
- 特征选择:通过离线训练时的特征重要性排序(如随机森林的feature importance),只保留Top-8特征,减少计算量。
4.6 预处理链路延迟预算核算
在Edge AI系统中,预处理环节的延迟必须纳入整体预算。以一个典型的三轴加速度计异常检测任务为例,假设采样率2kHz,窗口128点,步长32点,MCU主频168MHz:
| 环节 | 操作 | 计算量 | 延迟(μs) |
|---|---|---|---|
| 数据采集 | ADC+DMA传输(3通道×128点) | 384次采样 | 192(DMA后台) |
| 数据清洗 | Hampel滤波(3×128点) | 1152次比较+排序 | ~80 |
| 归一化 | 定点映射(3×128点) | 384次乘加 | ~15 |
| 特征提取 | 时域统计+128点FFT×3轴 | 3×FFT+统计 | ~450(CMSIS-DSP) |
| 合计 | - | - | ~737μs |
上述链路总延迟约0.74ms,加上模型推理(假设2ms),总延迟约2.74ms,远小于10ms预算。若采样率提升至8kHz,FFT点数增至512点,特征提取延迟将升至约2.1ms,总延迟接近4ms,仍可接受。但若窗口长度增至512点,内存占用将达3KB,且FFT延迟增至8ms,此时需考虑分帧处理或降低重叠率。