3、传感器数据采集基础

做AIoT项目,第一步就是跟传感器打交道。说白了,传感器就是嵌入式系统的眼睛和耳朵。你算法再牛,数据质量不行,一切都是白搭。我见过太多项目,花大把时间调模型,最后发现是传感器数据本身就有问题。

这一章,咱们就聊聊传感器数据采集的那些事儿。我会结合Reality AI工具,带你走一遍完整的流程。

3.1 采样率与分辨率:两个核心参数

先搞清楚两个最基础的概念:采样率和分辨率。很多新手容易搞混,其实它们完全是两码事。

采样率

采样率,就是传感器每秒采集多少个数据点。单位是Hz(赫兹)。比如100Hz,就是一秒采100个点。

采样率怎么选?有个著名的奈奎斯特定理:采样率至少要是信号最高频率的2倍。举个例子,人的步频大概在1-3Hz,那用10Hz采样就绰绰有余了。但如果是电机振动,频率可能到几百Hz,那采样率就得往上提。

我的经验: 我在做工业设备预测性维护时,振动信号采样率设到了2kHz。一开始觉得太高,后来发现高频成分里藏着轴承早期故障的特征。嗯,采样率宁高勿低,但也要考虑MCU的存储和算力。

分辨率

分辨率,指的是传感器能感知到的最小变化量。常见的有8位、10位、12位、16位。位数越高,能区分的等级就越多。

拿12位分辨率来说,它能将测量范围分成4096个等级。如果加速度计量程是±2g,那每个等级代表约0.001g的变化。分辨率越高,数据越精细。

分辨率 等级数 适用场景
8位 256 简单运动检测
10位 1024 姿态识别
12位 4096 振动分析
16位 65536 高精度测量
注意: 分辨率不是越高越好。高分辨率意味着更多数据量,对MCU的存储和传输都是考验。我曾经为了追求高精度,用了16位分辨率,结果MCU内存直接爆了。后来换成12位,效果完全够用。

3.2 使用Reality AI内置工具采集加速度计数据

Reality AI有个很贴心的功能:内置的数据采集工具。你不用写一行代码,就能把传感器数据抓下来。

操作步骤其实很简单:

  1. 连接好你的开发板(比如STM32或NXP的板子)
  2. 在Reality AI中打开Data Acquisition模块
  3. 选择加速度计传感器,配置采样率和量程
  4. 点击开始采集,晃动板子或者做动作
  5. 采集完成后,数据会自动保存

我个人习惯是先做一次空采,就是板子静止不动,看看基线噪声有多大。这能帮你判断传感器本身的质量。

关键点: Reality AI采集时,会自动加上时间戳。这个时间戳很重要,后续做时域分析全靠它。

3.3 数据格式解析:CSV与BIN

采集完的数据,通常有两种格式:CSV和BIN。你得知道它们各自的特点。

CSV格式

CSV就是逗号分隔的文本文件。用Excel或者记事本就能打开。每一行是一个采样点,列分别是时间戳、X轴、Y轴、Z轴数据。

举个例子:

timestamp,ax,ay,az
0.000,0.12,-0.03,1.02
0.010,0.15,-0.01,1.01
0.020,0.11,-0.04,1.03
...

CSV的好处是直观,方便查看。但缺点也很明显:文件体积大,解析慢。如果你采集了几分钟的数据,CSV文件可能几十MB。

BIN格式

BIN是二进制文件,数据以原始字节形式存储。体积小,读写快,但肉眼看不懂。

BIN文件的结构一般是这样的:

文件头(包含采样率、量程等信息)
数据块1(时间戳 + X + Y + Z)
数据块2(时间戳 + X + Y + Z)
...

每个数据块的大小是固定的。比如时间戳用4字节浮点数,每个轴用2字节整数,那一个数据块就是10字节。

我的建议: 调试阶段用CSV,方便看数据。正式采集用BIN,节省空间。我在一个项目中,用BIN格式把数据量从200MB压缩到了15MB,MCU的Flash瞬间就够用了。

3.4 数据质量检查:缺失值与噪声判断

数据采完了,别急着训练模型。先做质量检查。这一步能帮你省下大量调试时间。

检查缺失值

缺失值就是数据中突然出现的空白或异常值。常见原因有:

  • 传感器瞬间掉电或通信中断
  • 缓冲区溢出,数据被覆盖
  • 时钟不同步,时间戳跳跃

怎么检查?简单的方法就是看时间戳是否连续。如果两个时间戳之间的间隔突然变大,那中间肯定丢了数据。

我写了个小脚本,专门检查缺失值:

import pandas as pd

data = pd.read_csv('sensor_data.csv')
time_diff = data['timestamp'].diff()
missing = time_diff[time_diff > 0.011]  # 假设采样间隔是0.01s
print(f"发现 {len(missing)} 个缺失点")

判断噪声水平

噪声是传感器自带的随机波动。完全没有噪声的传感器是不存在的。关键是要判断噪声是否在可接受范围内。

判断方法:

  1. 让传感器静止,采集一段数据
  2. 计算数据的标准差
  3. 标准差越小,噪声越低

举个例子,静止状态下加速度计的标准差如果在0.01g以内,说明噪声控制得不错。如果超过0.05g,那就要检查传感器供电是否稳定,或者有没有电磁干扰。

避坑指南: 我曾经遇到过一个问题:采集的数据看起来很正常,但模型就是训练不好。后来仔细检查才发现,传感器安装位置有松动,导致数据里混入了高频振动噪声。嗯,从那以后,我每次采集前都会先检查传感器的物理固定。

知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作一个快速参考。

传感器数据采集知识体系 核心参数 采集工具 数据格式 采样率 (Hz) 决定时间分辨率 Reality AI 内置采集模块 CSV / BIN 文本 vs 二进制 分辨率 8/10/12/16位 量程选择 奈奎斯特定理 采集流程 连接板子 配置参数 开始采集 数据解析 时间戳对齐 字节序处理 文件头解析 数据质量检查:缺失值 → 噪声判断 → 可用性评估

数据采集是整个AI项目的地基。地基不稳,上面盖的房子再漂亮也没用。我建议你每次采集完数据,都花几分钟做一次质量检查。养成这个习惯,后面会省很多事。

好了,这一章就到这里。记住:采样率决定你能看到什么,分辨率决定你能看多清楚,数据格式决定你怎么存,质量检查决定数据能不能用。这四个点,一个都不能少。


公众号:蓝海资料掘金营,微信deep3321