2、传感器数据基础:常见传感器类型、数据格式、采样率与时间序列特性
在构建基于TFLite Micro的异常检测系统之前,必须首先理解传感器数据的本质。传感器是物理世界与数字计算之间的桥梁,其输出的数据格式、采样方式以及时间序列特性,直接决定了后续特征工程、模型输入设计和推理结果的可靠性。本章将系统梳理嵌入式设备中常见的传感器类型,解析其数据格式与采样率概念,并深入探讨时间序列数据的核心特性,为后续的模型训练与部署奠定基础。
2.1 常见传感器类型与工作原理
在嵌入式异常检测场景中,传感器选型决定了能够捕获的物理信号类型。不同传感器具有不同的物理原理、输出特性和噪声基底,理解这些差异是正确解读数据的前提。
2.1.1 惯性传感器:加速度计与陀螺仪
加速度计测量物体沿三个正交轴(X、Y、Z)的线性加速度,其工作原理基于微机电系统(MEMS)中的质量块-弹簧结构。当设备加速时,质量块发生位移,通过电容或压阻效应转换为电信号。加速度计的输出包含重力分量(静态)和运动加速度(动态),在异常检测中常用于识别振动、冲击和姿态变化。
陀螺仪则测量绕三个轴的角速度,基于科里奥利效应。MEMS陀螺仪内部有一个高速振动的质量块,当设备旋转时,科里奥利力使质量块在垂直方向产生位移,从而检测角速度。陀螺仪对旋转运动敏感,适合检测旋转异常、抖动和姿态漂移。
实际应用中,加速度计和陀螺仪常组合为惯性测量单元(IMU),例如MPU6050、BMI160等。IMU输出6轴数据(3轴加速度+3轴角速度),在工业设备振动监测、可穿戴设备跌倒检测中广泛应用。
2.1.2 环境传感器:温度与压力
温度传感器(如NTC热敏电阻、热电偶、数字温度芯片DS18B20)测量环境或设备表面温度。在异常检测中,温度数据常用于监测电机过热、电子元件老化、散热系统失效等场景。温度信号变化缓慢,采样率通常较低(1Hz~10Hz即可),但需要关注温度漂移和热惯性。
压力传感器(如MEMS压阻式、电容式)测量气体或液体的压力。在工业管道监测、气动系统故障诊断中,压力数据的突变或周期性波动往往预示着泄漏、堵塞或阀门故障。压力传感器输出通常为模拟电压或数字I2C/SPI接口,量程和精度差异较大。
2.1.3 其他常用传感器
磁力计(电子罗盘)测量地磁场强度,用于方向检测和金属物体接近探测;电流传感器(霍尔效应)用于电机电流监测,可检测堵转、短路等电气异常;声音传感器(麦克风阵列)通过声学特征识别机械异响。在TFLite Micro异常检测项目中,传感器选型应遵循"最小充分"原则——只采集与异常模式最相关的信号,避免数据冗余导致模型复杂化。
| 传感器类型 | 物理量 | 典型量程 | 输出接口 | 典型采样率 | 异常检测应用 |
|---|---|---|---|---|---|
| 加速度计 | 加速度 (g) | ±2g ~ ±16g | I2C/SPI | 50~1000 Hz | 振动、冲击、姿态 |
| 陀螺仪 | 角速度 (°/s) | ±250 ~ ±2000 | I2C/SPI | 50~1000 Hz | 旋转、抖动、漂移 |
| 温度传感器 | 温度 (℃) | -40 ~ +125 | 1-Wire/I2C | 0.5~10 Hz | 过热、散热失效 |
| 压力传感器 | 压力 (kPa) | 10~2000 kPa | 模拟/I2C | 10~100 Hz | 泄漏、堵塞、气动故障 |
| 磁力计 | 磁场 (μT) | ±50 ~ ±1200 | I2C/SPI | 10~100 Hz | 金属接近、方向异常 |
2.2 数据格式与采样率
传感器输出的原始数据格式直接影响TFLite Micro模型的输入预处理。理解数据格式的底层含义,是避免精度损失和错误解读的关键。
2.2.1 原始数据格式与灵敏度
大多数MEMS传感器输出16位有符号整数(int16),通过I2C或SPI总线读取。每个数字量(LSB)对应一个物理量单位,这个对应关系称为灵敏度(Sensitivity),通常以LSB/g或LSB/(°/s)表示。例如,加速度计量程为±2g时,灵敏度约为16384 LSB/g,意味着读取值16384对应1g加速度。
在TFLite Micro中,模型输入通常要求浮点数(float32)或量化整数(int8)。因此,原始int16数据需要转换为物理量单位(如m/s²),再进行归一化或标准化。转换公式为:物理量 = 原始值 / 灵敏度。若使用int8量化输入,还需将浮点数据缩放到[-128, 127]范围。
// 示例:将int16原始加速度数据转换为m/s²
float accel_g = (float)raw_value / 16384.0f; // 转换为g
float accel_ms2 = accel_g * 9.80665f; // 转换为m/s²
// 若模型输入为int8量化,需进一步缩放
int8_t quantized = (int8_t)(accel_ms2 / scale_factor);
2.2.2 采样率的选择原则
采样率(Fs)决定了时间序列的时间分辨率。根据奈奎斯特定理,采样率必须大于信号最高频率的两倍才能无失真重建信号。对于异常检测,采样率的选择应基于异常信号的频率特征:
- 低频异常(如温度漂移):1~10Hz采样率足够,过高采样率只会增加数据量和功耗。
- 中频振动(如轴承磨损):100~1000Hz采样率,需覆盖振动基频及谐波。
- 高频冲击(如碰撞检测):1000Hz以上,需捕捉瞬态峰值。
在TFLite Micro场景中,采样率还受限于MCU的处理能力和内存。例如,STM32F4系列主频168MHz,若采样率1000Hz、3轴加速度计,每秒产生3000个int16数据(6KB),在256KB RAM的MCU上可存储约40秒数据。因此,实际采样率需在信号保真度和资源约束之间权衡。
2.2.3 时间戳与多传感器对齐
当使用多个传感器时,时间同步至关重要。不同传感器可能具有不同的采样率和启动延迟,若未对齐时间戳,特征提取将产生错误。常见的同步方法包括:
- 硬件同步:使用MCU的定时器触发所有传感器同时采样,保证采样时刻一致。
- 软件插值:以最高采样率的传感器为基准,对其他传感器数据进行线性插值或重采样。
- 时间戳标记:每个数据包附带MCU的定时器计数值,后续处理时按时间戳对齐。
2.3 时间序列特性与异常模式
传感器数据本质上是时间序列——按时间顺序排列的观测值序列。理解时间序列的统计特性和异常模式,是设计特征提取和模型架构的基础。
2.3.1 时域特征
时域特征直接从原始时间序列中计算,计算量小,适合MCU实时处理。常用特征包括:
- 均值(Mean):反映信号的直流分量,如加速度计的重力分量。
- 方差/标准差(Variance/Std):反映信号的波动程度,振动异常时方差显著增大。
- 峰值(Peak):窗口内的最大绝对值,用于检测冲击事件。
- 均方根(RMS):反映信号的有效能量,常用于振动强度评估。
- 峰值因子(Crest Factor):峰值与RMS之比,用于区分冲击信号与平稳振动。
2.3.2 频域特征
频域特征通过傅里叶变换(FFT)将时间序列转换到频率域,揭示信号的频率成分。在异常检测中,频域特征能有效识别周期性故障(如轴承磨损会产生特定频率的振动分量)。常用频域特征包括:
- 主频(Dominant Frequency):功率谱中幅度最大的频率,反映旋转机械的基频。
- 频谱质心(Spectral Centroid):功率谱的加权平均频率,反映信号的能量集中区域。
- 频带能量(Band Energy):特定频段(如1kHz~5kHz)内的能量和,用于检测高频振动异常。
在TFLite Micro上执行FFT时,需注意MCU的运算能力。对于256点FFT,Cortex-M4内核约需数千个时钟周期,可满足实时处理需求。若采样率较高,可考虑使用硬件FFT加速器(如STM32F4系列内置的CORDIC)或降低FFT点数。
2.3.3 时间序列的异常模式分类
从时间序列角度,异常模式可分为三类:
| 异常类型 | 定义 | 典型示例 | 检测方法 |
|---|---|---|---|
| 点异常(Point Anomaly) | 单个数据点显著偏离正常范围 | 瞬时冲击、传感器尖峰噪声 | 阈值检测、Z-score |
| 上下文异常(Contextual Anomaly) | 数据点在特定上下文中异常,但全局看正常 | 温度在夏季偏高但仍在量程内 | 滑动窗口统计、季节性分解 |
| 集体异常(Collective Anomaly) | 连续数据序列整体异常,但单个点正常 | 振动幅度逐渐增大、频率漂移 | 序列模式匹配、自回归模型 |
2.4 案例拆解:电机振动异常检测的数据准备
为将上述概念落地,我们以一个工业电机振动监测项目为例,完整演示传感器数据从采集到模型输入的准备过程。
2.4.1 场景与约束
某工厂需要在电机轴承上部署异常检测系统,目标是识别轴承磨损初期的振动特征变化。电机转速为3000 RPM(50Hz),轴承故障特征频率约为150Hz~500Hz。硬件平台为STM32F446RE(Cortex-M4, 180MHz),配备ADXL345加速度计(I2C接口,量程±16g,灵敏度256 LSB/g)。系统需在本地完成推理,功耗受限,采样数据需在MCU内存中缓存。
2.4.2 采样率与窗口设计
根据奈奎斯特定理,要覆盖500Hz的故障频率,采样率至少为1000Hz。考虑到需要分析谐波(最高5倍频=2500Hz),最终选择采样率Fs=3200Hz,满足2.56倍过采样。每个采样窗口取1024点,对应时间长度1024/3200=0.32秒,可分辨约3Hz的频率分辨率,足以区分50Hz基频及其谐波。
窗口重叠率设为50%,即每次滑动512点。这样每秒产生约6.25个窗口(3200/512),每个窗口包含3轴×1024个int16数据(6KB)。在256KB RAM的MCU上,可缓存约40个窗口(约6.4秒数据),满足实时处理需求。
2.4.3 数据预处理流程
// 伪代码:数据采集与预处理
#define Fs 3200
#define WINDOW_SIZE 1024
#define OVERLAP 512
// 1. 配置ADXL345: 量程±16g, 输出数据率3200Hz
adxl345_set_range(ADXL345_RANGE_16G);
adxl345_set_odr(3200);
// 2. 使用DMA循环采集三轴数据到环形缓冲区
dma_start(adxl345_rx_buf, WINDOW_SIZE * 3 * sizeof(int16_t));
// 3. 每采集到OVERLAP个新样本,处理一个窗口
while (1) {
if (dma_available() >= OVERLAP) {
// 提取当前窗口数据(3轴×1024点)
extract_window(current_window, adxl345_rx_buf);
// 转换为物理单位: 原始值/256 = g
for (int i = 0; i < WINDOW_SIZE * 3; i++) {
float_accel[i] = (float)current_window[i] / 256.0f;
}
// 计算时域特征: 每轴均值、方差、RMS、峰值
compute_time_features(float_accel, features);
// 可选: 对X轴做256点FFT,提取频带能量
arm_rfft_fast_f32(&fft_instance, float_accel_x, fft_output, 0);
compute_band_energy(fft_output, 150, 500, &band_energy);
// 将特征打包为模型输入张量 (1, 特征维度)
prepare_model_input(features, band_energy, model_input);
// 调用TFLite Micro推理
interpreter->Invoke();
// 判断异常
if (output_score > THRESHOLD) {
trigger_alarm();
}
}
}
2.4.4 结果与复盘
通过上述流程,系统成功在轴承磨损初期(振动幅度增加约20%)检测到异常。关键经验包括:
- 采样率选择需留有余量:3200Hz采样率虽增加了数据量,但避免了混叠效应,使频域特征更可靠。
- 特征选择要匹配异常类型:轴承磨损主要表现为高频振动能量增加,因此频带能量特征比均值/方差更敏感。
- DMA+环形缓冲区是MCU高效采样的关键:避免了CPU轮询导致的时间戳抖动,保证了采样间隔均匀。
arm_rfft_fast_f32函数,并确保FFT输入缓冲区按16字节对齐。若MCU不支持FPU,需改用定点FFT或降低FFT点数。
2.5 常见误区与总结
在传感器数据准备过程中,初学者常犯以下错误,需特别注意:
- 忽略灵敏度系数:直接使用int16原始值作为模型输入,导致不同量程设置下数据尺度不一致,模型泛化能力差。
- 采样率过低导致混叠:未考虑异常信号的高频成分,采样率不足导致频域特征失真。
- 多传感器时间未对齐:直接拼接不同采样率的传感器数据,导致特征向量中时间错位。
- 窗口长度选择随意:窗口过短导致频率分辨率不足,窗口过长则响应延迟大,无法及时检测突发异常。
- 忽视数据归一化:不同传感器(如加速度计和温度)量纲差异大,未归一化会导致模型训练不稳定。
- 传感器选型应基于异常信号的物理特征,IMU适合振动/姿态检测,温度/压力适合环境监测。
- 数据格式转换必须包含灵敏度换算,确保物理量单位一致。
- 采样率需满足奈奎斯特定理,并考虑MCU内存和处理能力。
- 时间序列特征分为时域(均值、方差、RMS)和频域(主频、频带能量),应根据异常类型选择。
- 多传感器系统必须解决时间同步问题,推荐DMA+定时器硬件触发方案。
掌握传感器数据的基础特性,是构建可靠异常检测系统的第一步。在下一阶段,我们将基于这些原始数据,设计适合TFLite Micro的轻量级特征工程方案,将高维时间序列压缩为低维特征向量,为模型训练提供高质量输入。