4. 数据预处理
在TinyML姿态识别项目中,IMU(惯性测量单元)输出的原始数据几乎不可能直接用于模型训练或推理。传感器本身存在零偏、温漂、噪声,而人体动作产生的信号往往叠加在低频趋势和高频干扰之上。如果跳过数据预处理,轻则模型精度下降,重则导致动作分类完全失效。本章围绕数据清洗、去噪滤波、校准标定和时间序列切片四个核心环节,系统讲解从原始IMU数据到可训练样本的完整处理链路。
4.1 数据清洗:剔除异常与缺失
核心原理:IMU传感器在数据采集过程中,可能因硬件抖动、通信丢包、电源波动等原因产生离群点(spike)或缺失值。这些异常值如果不加处理,会被模型误认为真实动作特征,导致分类错误。数据清洗的目标是识别并处理这些异常,保证数据质量。
判断方法:常用的离群点检测方法包括:
- 阈值法:设定加速度计或陀螺仪的合理范围(如加速度±4g,角速度±2000°/s),超出范围即视为异常。
- 滑动窗口统计法:计算窗口内数据的均值与标准差,若某点偏离均值超过3σ,则判定为离群点。
- 差分法:计算相邻采样点的差值,若差值突变超过物理极限(如加速度突变超过2g/ms),则标记为异常。
对于缺失值,可采用线性插值或前向填充法处理。在TinyML场景下,由于计算资源有限,推荐使用简单的前向填充或删除该段数据。
4.2 滤波去噪:低通、高通与卡尔曼滤波
核心原理:IMU信号中的噪声主要分为两类:高频随机噪声(由电子器件热噪声、振动引起)和低频漂移(由温度变化、积分累积误差引起)。滤波的目标是根据信号频率特性,保留有用信号成分,抑制噪声。
| 滤波类型 | 适用场景 | 截止频率/参数 | 优缺点 |
|---|---|---|---|
| 低通滤波 | 去除高频振动噪声,保留动作低频成分 | 5-15Hz(人体动作频率通常低于10Hz) | 实现简单,但会引入相位延迟 |
| 高通滤波 | 去除低频漂移和重力分量 | 0.1-0.5Hz | 可消除积分漂移,但会削弱慢速动作信号 |
| 卡尔曼滤波 | 融合加速度计与陀螺仪数据,估计姿态 | 需建立状态方程和观测方程 | 精度高,但计算量大,TinyML设备需优化 |
操作流程:在TinyML项目中,推荐使用一阶或二阶IIR低通滤波器,因其计算量小、适合嵌入式实现。例如,一阶低通滤波公式为:
y[n] = α * x[n] + (1 - α) * y[n-1]
其中 α = 1 / (1 + 2π * fc / fs)
fc为截止频率,fs为采样率
卡尔曼滤波虽然精度更高,但在资源受限的MCU上需要简化矩阵运算,通常只用于姿态解算而非原始信号滤波。
4.3 数据校准:零偏补偿与标定
核心原理:IMU传感器在静止状态下,加速度计输出应为1g(重力加速度),陀螺仪输出应为0°/s。但由于制造误差和温度影响,实际输出存在零偏(bias)和尺度因子误差。校准的目标是消除这些系统性误差。
校准方法:
- 零偏校准:将设备静止放置30秒以上,计算输出均值作为零偏值,后续采样值减去该值。
- 六面标定法:将设备分别朝上、朝下、左、右、前、后六个方向静止,记录加速度计输出,通过最小二乘法求解尺度因子和零偏。
- 陀螺仪温漂补偿:在设备上电后预热2分钟,记录静止时的陀螺仪输出作为温漂补偿值。
校准后的数据应满足:静止时加速度计模长接近1g,陀螺仪输出接近0。
4.4 时间序列切片:构建训练样本
核心原理:IMU数据是连续的时间序列,而动作分类需要固定长度的输入。时间序列切片通过滑动窗口将连续数据切分为固定长度的样本,每个样本对应一个动作类别标签。
切片参数设计:
- 窗口长度:根据动作持续时间确定。例如,挥手动作约1秒,若采样率为100Hz,则窗口长度为100个采样点。
- 重叠率:通常设为50%-75%,以增加样本数量并避免动作边界被截断。
- 标签分配:窗口中心点对应的动作标签作为该样本的标签。
操作流程:
def sliding_window(data, window_size, overlap):
step = int(window_size * (1 - overlap))
samples = []
for i in range(0, len(data) - window_size + 1, step):
samples.append(data[i:i+window_size])
return samples
切片后的数据形状为(样本数,窗口长度,特征维度),其中特征维度为6(加速度计3轴+陀螺仪3轴)。
4.5 预处理流程总结与实战要点
完整的预处理流程为:原始数据 → 数据清洗 → 滤波去噪 → 校准标定 → 时间序列切片 → 训练样本。在实际项目中,还需注意以下几点:
| 环节 | 关键参数 | 调试建议 |
|---|---|---|
| 采样率 | 50-200Hz | 根据动作频率设定,过高增加计算量,过低丢失细节 |
| 低通截止频率 | 5-15Hz | 观察频谱图,选择信号能量集中区域 |
| 窗口长度 | 1-3秒 | 统计动作时长,取中位数或略大于最大值 |
| 重叠率 | 50%-75% | 样本不足时提高重叠率,但需注意过拟合 |
在TinyML部署阶段,预处理代码需移植到C语言并优化内存占用。例如,将滤波系数预先计算为整数定点数,避免浮点运算;切片操作改为环形缓冲区实现,减少数据拷贝。