传感器基础:常见传感器类型的工作原理与输出特性
TinyML 应用的起点是物理世界与数字世界的交汇点——传感器。无论你是在做可穿戴设备、工业预测性维护,还是智能家居中的语音唤醒,模型性能的上限往往由传感器数据质量决定。本章将系统梳理 TinyML 开发中最常用的七类传感器,从物理原理、电气输出特性到数据形态,帮助你建立"选型—采样—预处理"的完整认知链路。
上图展示了 TinyML 数据链路的完整视图:物理世界的信号首先被传感器阵列捕获,经过信号调理后转换为数字量,最终进入微控制器进行特征提取和推理。理解每个环节的输出特性,是后续设计采样策略和模型输入格式的前提。
2.1 惯性传感器:加速度计与陀螺仪
核心原理:加速度计基于 MEMS(微机电系统)技术,内部包含一个由硅微结构构成的悬臂梁和检测质量块。当设备加速时,质量块因惯性产生位移,改变电容或压阻值,通过 ASIC 电路转换为数字信号。陀螺仪则利用科里奥利效应——当质量块在旋转参考系中振动时,会产生垂直于振动方向的位移,该位移与角速度成正比。
输出特性对比:
| 参数 | 加速度计 (如 LIS3DH) | 陀螺仪 (如 L3GD20) |
|---|---|---|
| 输出量 | 线加速度 (m/s² 或 g) | 角速度 (°/s 或 rad/s) |
| 量程 | ±2g ~ ±16g | ±250 ~ ±2000 °/s |
| 轴数 | 3 轴 (X, Y, Z) | 3 轴 (X, Y, Z) |
| 噪声密度 | ~220 µg/√Hz | ~0.03 °/s/√Hz |
| 典型接口 | I²C / SPI | I²C / SPI |
| 数据格式 | 16-bit 有符号整数 | 16-bit 有符号整数 |
工程判断方法:在 TinyML 项目中,选择加速度计量程时需考虑应用场景。例如,人体活动识别(走路、跑步)通常使用 ±2g 或 ±4g 量程,而工业设备振动监测可能需要 ±16g。采样率方面,根据奈奎斯特定理,采样率应至少为信号最高频率的 2 倍。人体运动频率通常低于 20 Hz,因此 50 Hz 采样率已足够;而机械振动分析可能需要 1 kHz 以上。
2.2 磁力计与姿态参考系统
核心原理:磁力计(电子罗盘)基于磁阻效应或霍尔效应,测量地球磁场在三个轴向上的分量。典型量程为 ±49 gauss(高斯),分辨率可达 0.15 mgauss。磁力计与加速度计、陀螺仪组合构成 9 轴姿态参考系统(AHRS),可提供航向角(Yaw)的绝对参考。
输出特性与校准:磁力计输出易受硬铁(周围铁磁性材料)和软铁(磁场扭曲)效应影响,导致椭圆拟合误差。在部署前必须进行校准:
- 将设备在空间中缓慢旋转,画"8"字轨迹,采集至少 200 个样本点。
- 计算三轴数据的最大值和最小值,得到偏移量
offset = (max + min) / 2。 - 计算缩放因子
scale = (max - min) / 2,归一化到单位球面。 - 将校准参数写入设备 Flash,在运行时实时补偿。
2.3 环境传感器:温湿度与气压
核心原理:温湿度传感器(如 SHT30)内部集成电容式湿度传感元件和带隙温度传感器。湿度测量基于聚合物吸湿后介电常数变化,温度测量基于 PN 结电压与温度的线性关系。气压传感器(如 BMP280)则利用压阻式或电容式膜片,测量大气压力变化,分辨率可达 0.18 Pa(相当于 1.5 cm 高度差)。
输出特性与数据形态:
| 传感器 | 输出范围 | 精度 | 响应时间 | 典型应用 |
|---|---|---|---|---|
| SHT30 温度 | -40 ~ 125 °C | ±0.2 °C | 2 s | 环境监测 |
| SHT30 湿度 | 0 ~ 100 %RH | ±2 %RH | 8 s | 农业大棚 |
| BMP280 气压 | 300 ~ 1100 hPa | ±1 hPa | 1 s | 楼层检测 |
采样策略:环境传感器变化缓慢,通常采用低采样率(0.1 ~ 1 Hz)以节省功耗。在 TinyML 场景中,气压计可用于室内楼层识别——每升高 1 米,气压下降约 0.12 hPa。通过滑动窗口滤波(窗口大小 10 个样本)去除瞬时噪声,可稳定区分相邻楼层。
2.4 声学传感器:麦克风阵列与 PDM 接口
核心原理:MEMS 麦克风基于电容变化原理,振膜在声压作用下产生位移,改变与背板之间的电容,通过 ASIC 转换为数字信号。TinyML 中常用的数字麦克风(如 ICS-43434)输出 PDM(脉冲密度调制)信号,由 1-bit 高速脉冲流(典型 2.4 MHz)表示模拟波形,需通过抽取滤波器转换为 PCM 数据。
输出特性与数据链路:
// PDM 到 PCM 转换流程(伪代码)
// 1. 配置 MCU 的 PDM 外设,设置时钟分频
pdm_config.clk_freq = 2400000; // 2.4 MHz PDM 时钟
pdm_config.decimation = 64; // 抽取因子
pdm_config.gain = 40; // 数字增益 (dB)
// 2. 启动 DMA 传输,接收 PDM 数据
pdm_start_dma(pdm_buffer, PDM_BUFFER_SIZE);
// 3. 在中断回调中执行抽取滤波
void pdm_data_ready(uint8_t *pdm_data, uint32_t size) {
// 使用 CIC 滤波器 + FIR 补偿滤波器
cic_filter(pdm_data, pcm_output, size, 64);
fir_compensation(pcm_output, pcm_output, size/64);
}
关键参数:麦克风灵敏度通常为 -26 dBFS(相对于 1 Pa 声压),信噪比(SNR)典型值为 61 dBA,最大声压级(AOP)为 105 dB SPL。在 TinyML 语音唤醒应用中,采样率通常设为 16 kHz,帧长 30 ms(480 个样本),帧移 10 ms(160 个样本)。
背景:某智能家居项目需要识别"小智小智"唤醒词,MCU 为 Cortex-M4F @ 80 MHz,Flash 512 KB。
初始现象:直接使用 48 kHz 采样率导致 CPU 占用率 85%,无法同时运行 VAD(语音活动检测)和神经网络推理。
分析过程:唤醒词主要能量集中在 300 Hz ~ 3.4 kHz 频段,48 kHz 采样率存在大量冗余高频信息。
操作步骤:① 将采样率降至 16 kHz;② 使用 512 点 FFT 提取 40 维 Mel 滤波器组特征;③ 将特征帧率控制在 50 帧/秒。
结果对比:CPU 占用率降至 32%,模型准确率从 91.2% 提升至 93.5%(因为减少了高频噪声干扰)。
复盘经验:采样率并非越高越好,应根据任务频段需求和数据量约束综合权衡。对于语音任务,16 kHz 是精度与计算量的最佳平衡点。
2.5 传感器数据采集的通用方法论
操作流程:无论使用哪种传感器,TinyML 数据采集都应遵循以下标准化流程:
- 需求分析:明确任务类型(分类、回归、异常检测),确定所需传感器类型和数量。
- 量程与分辨率匹配:确保传感器量程覆盖信号动态范围,分辨率满足最小可检测变化。
- 采样率设定:根据信号最高频率和 MCU 算力确定采样率,预留 2~3 倍过采样余量。
- 数据同步:多传感器场景下,使用时间戳或中断同步机制,确保数据对齐。
- 数据标注:在采集时同步记录标签(如动作类别、环境状态),避免事后标注的歧义。
- 数据存储:使用二进制格式(如 NPY、TFRecord)存储,减少体积并便于后续加载。
常见误区与总结:
- 误区一:忽略传感器上电稳定时间。MEMS 传感器通常需要 10~50 ms 稳定,立即读取会产生初始漂移。
- 误区二:直接使用原始 ADC 值而不进行单位换算。不同传感器的量程和位宽不同,统一转换为物理单位(g、°/s、Pa)是模型泛化的基础。
- 误区三:忽视温度对传感器的影响。加速度计和陀螺仪的零偏随温度变化,在宽温范围应用时需进行温度补偿。
- 误区四:采样率过高导致数据冗余。过高的采样率不仅增加功耗,还会使模型输入维度膨胀,增加过拟合风险。
传感器选型和数据采集是 TinyML 项目中最具"杠杆效应"的环节——前期投入 30% 的精力做好数据基础,可以节省后期 70% 的模型调优时间。建议读者在开发板上实际运行本章涉及的传感器驱动代码,记录不同运动状态和环境条件下的数据波形,建立对传感器输出特性的直觉认识。这种"手感"将在后续特征工程和模型设计时发挥重要作用。