4. 数据采集实战:用加速度传感器采集齿轮箱振动数据
各位同学,大家好。今天咱们进入一个非常实战的环节——数据采集。说实话,很多搞故障诊断的朋友,算法玩得飞起,但一到现场接传感器就懵了。我当年第一次去车间采集数据,拿着加速度传感器愣是不知道往哪儿贴,还被老师傅笑话了半天。嗯,今天咱们就把这块补上。
4.1 加速度传感器怎么选?
齿轮箱振动信号,说白了就是测加速度。市面上主流的是压电式加速度传感器,也有MEMS型的。我个人习惯用压电式的,抗干扰能力强,频率响应也宽。
选型时你主要看三个参数:
- 灵敏度:一般选100 mV/g左右的,太灵敏容易饱和,太迟钝小信号抓不到
- 频率范围:齿轮箱振动通常在0.5 Hz~10 kHz,选0.5 Hz~15 kHz的够用
- 量程:普通齿轮箱选±50 g,重载工况选±100 g
我的小经验: 现场安装时,千万别用手按着传感器测。我见过有人图省事,结果数据全是手抖的噪声。一定要用磁座或者胶粘,实在不行用蜂蜡。
4.2 数据格式解析:.csv 和 .mat
采集完数据,你拿到的无非两种格式:CSV或者MAT。咱们一个一个说。
4.2.1 CSV格式
CSV就是逗号分隔的文本文件。打开一看,第一行通常是时间戳,后面是加速度值。举个例子:
时间(s),加速度(m/s²)
0.000,0.0123
0.001,0.0456
0.002,-0.0234
...
这种格式最友好,Excel能直接打开。但要注意,采样率信息通常不写在CSV里,你得单独记着。我曾经吃过这个亏,拿了一堆CSV回来,忘了采样率,等于白采。
4.2.2 MAT格式
MAT是MATLAB的二进制格式。里面可以存变量名、采样率、单位等信息。比如:
data.mat 中包含:
- fs: 51200 (采样率)
- acc: [1×102400 double] (加速度数据)
- time: [1×102400 double] (时间轴)
我个人更推荐MAT格式,因为信息完整。但如果你团队里有人不用MATLAB,那就得转成CSV。
4.3 数据导入Python
好了,数据到手了,怎么弄进Python?我直接上代码,你们跟着敲就行。
4.3.1 导入CSV
import pandas as pd
import numpy as np
# 读取CSV
df = pd.read_csv('vibration_data.csv')
time = df['时间(s)'].values
acc = df['加速度(m/s²)'].values
# 手动指定采样率(假设已知)
fs = 51200
dt = 1 / fs
print(f"数据长度: {len(acc)} 点")
print(f"采样时长: {len(acc) * dt:.2f} 秒")
注意: CSV里如果第一行是中文列名,pandas默认能识别。但有些老设备导出的CSV编码是GBK,你得加个参数 encoding='gbk'。
4.3.2 导入MAT
import scipy.io as sio
# 读取MAT文件
mat_data = sio.loadmat('vibration_data.mat')
# 查看里面有哪些变量
print(mat_data.keys())
# 提取数据
fs = mat_data['fs'][0][0] # 采样率
acc = mat_data['acc'][0] # 加速度数据
time = mat_data['time'][0] # 时间轴
print(f"采样率: {fs} Hz")
print(f"数据点数: {len(acc)}")
避坑指南: 我曾经遇到一个MAT文件,里面变量名是中文的,scipy直接报错。解决办法是让采集软件导出时用英文变量名,或者在MATLAB里先转一下。
4.4 数据快速检查
数据导进来之后,别急着分析。先看一眼波形,确认没有异常。我一般这样做:
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 4))
plt.plot(time[:5000], acc[:5000]) # 只看前5000点
plt.xlabel('时间 (s)')
plt.ylabel('加速度 (m/s²)')
plt.title('原始振动信号预览')
plt.grid(True)
plt.show()
如果看到波形有突然的尖峰或者平顶,那可能是传感器松了或者数据采集卡饱和了。这种数据直接扔掉,别心疼。
4.5 本章知识体系
下面这张图,是我自己总结的数据采集到导入的完整流程,你们可以保存下来当个参考:
4.6 常见问题与避坑
| 问题 | 原因 | 解决办法 |
|---|---|---|
| 数据全是0 | 传感器没接好或线断了 | 检查BNC接头,用万用表测通断 |
| 波形有毛刺 | 电源干扰或接地不良 | 加屏蔽线,检查接地 |
| MAT文件打不开 | 版本不兼容或变量名含中文 | 用MATLAB v7.3以下版本保存 |
| CSV乱码 | 编码问题 | 用 encoding='gbk' 或 'utf-8' 试 |
最后说一句: 数据采集是整个故障诊断的根基。你算法再牛,数据是脏的,结果全是扯淡。我见过太多人花80%时间调算法,却不愿意花20%时间把数据采好。嗯,你自己品。