第3章 振动测量与信号分析基础:传感器选型与数据采集

做振动控制这些年,我最大的体会是:测量不准,后面全是白干。传感器选型、数据采集、信号分析,这三步就像盖楼打地基。地基歪了,楼盖得再漂亮也得塌。

今天咱们就聊聊这个基础中的基础。我会结合自己踩过的坑,把传感器选型、采集系统搭建、时域和频域分析这些事儿说透。

3.1 传感器选型:加速度计、速度计、位移计

选传感器,说白了就是回答三个问题:测什么?量程够不够?频率范围对不对?

我个人习惯先看被测对象的振动特性。低频大位移,比如桥梁晃动,用位移计。中频振动,比如机床主轴,用速度计。高频冲击,比如齿轮啮合,用加速度计。

传感器类型 适用频率范围 典型应用场景 我踩过的坑
加速度计 0.5 Hz ~ 10 kHz 轴承故障、齿轮箱、冲击测试 低频信号信噪比差,慎用
速度计 1 Hz ~ 2 kHz 旋转机械、电机振动 温度漂移大,需补偿
位移计 0 ~ 100 Hz 桥梁、建筑、大型结构 安装麻烦,对表面要求高
⚠️ 避坑指南: 我曾经在风电塔筒监测项目中,图便宜选了压电式加速度计测0.1Hz的低频晃动。结果数据全是噪声,根本没法用。后来换了伺服式加速度计,才搞定。低频测量,千万别省这个钱。

选型时还有几个关键参数:灵敏度、量程、频率响应、横向灵敏度。灵敏度越高,信噪比越好,但量程会受限。你想想看,测火箭发动机振动和测空调压缩机,用的传感器能一样吗?

3.2 数据采集系统搭建

传感器选好了,接下来就是采集系统。我见过太多人花大价钱买传感器,却在采集卡上省钱,结果数据质量一塌糊涂。

搭建采集系统,核心就三点:

  • 采样率:至少是最高分析频率的2.56倍。我习惯取5~10倍,留足余量。
  • 抗混叠滤波器:这个必须有!没有的话,高频信号会折叠到低频段,你看到的频谱全是假的。
  • ADC位数:16位是底线,24位更好。位数不够,小信号就被量化噪声淹没了。
💡 实战技巧: 我在做发动机振动测试时,发现采集卡的地线没处理好,50Hz工频干扰特别大。后来把所有传感器和采集卡共地,干扰直接降了20dB。接地问题,永远是第一优先级。

采集系统搭建的流程,我画了张图,你看一眼就明白了:

振动数据采集系统搭建流程 传感器 加速度/速度/位移 信号调理 放大/滤波/隔离 数据采集卡 ADC/抗混叠滤波 计算机 存储/分析/显示 关键参数 采样率 ≥ 2.56 × 最高频率 ADC位数 ≥ 16 bit 抗混叠滤波器:必须有 图3-1 振动数据采集系统搭建流程

3.3 时域分析:峰值与均方根值

数据采回来了,先别急着做FFT。时域分析能给你最直观的感受。

峰值(Peak):信号的最大绝对值。我常用它来判断有没有瞬时冲击。比如齿轮断齿,时域波形上会突然冒出一个尖峰。

均方根值(RMS):反映信号的能量大小。对于平稳振动,RMS比峰值更有工程意义。ISO标准里评价振动烈度,用的就是RMS。

🔑 核心公式:
峰值 = max(|x(t)|)
均方根值 = sqrt( (1/N) * Σ x(t)² )

举个例子。我在做离心泵振动测试时,时域波形显示峰值正常,但RMS偏高。拆开一看,轴承保持架磨损了。如果只看峰值,这个问题就漏掉了。所以我的习惯是:峰值和RMS一起看,互相印证

3.4 频域分析:FFT与功率谱密度

时域信号看着乱糟糟的,一转到频域,规律就出来了。这就是FFT的魅力。

FFT(快速傅里叶变换):把时域信号分解成不同频率的正弦波。每个频率对应一个幅值。你想想看,一个复杂的振动信号,在频域里可能就是几个尖峰。

功率谱密度(PSD):表示信号功率在频率上的分布。单位是g²/Hz或(m/s²)²/Hz。PSD对随机振动特别有用,比如路面激励、风载荷。

💡 实战技巧: 做FFT时,窗函数的选择很关键。我一般这样选:
  • 正弦信号 → 矩形窗(幅值精度高)
  • 随机信号 → 汉宁窗(泄漏小)
  • 冲击信号 → 力窗/指数窗(衰减快)
曾经有个学生做齿轮箱故障诊断,用矩形窗分析随机振动,频谱泄漏得一塌糊涂。换了汉宁窗,故障频率一下就出来了。

下面是一个简单的Python代码示例,演示如何计算FFT和PSD:

import numpy as np
import matplotlib.pyplot as plt

# 生成模拟信号:50Hz正弦 + 200Hz正弦 + 噪声
fs = 1000  # 采样率 1000 Hz
t = np.arange(0, 1, 1/fs)
x = 2 * np.sin(2*np.pi*50*t) + 0.5 * np.sin(2*np.pi*200*t) + 0.2*np.random.randn(len(t))

# FFT
N = len(x)
X = np.fft.fft(x)
freq = np.fft.fftfreq(N, 1/fs)
amp = np.abs(X) / N * 2  # 单边幅值谱

# PSD(使用Welch方法)
from scipy import signal
f, psd = signal.welch(x, fs, nperseg=256)

# 绘图
plt.figure(figsize=(10, 4))
plt.subplot(1,2,1)
plt.plot(freq[:N//2], amp[:N//2])
plt.title('FFT 幅值谱')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')

plt.subplot(1,2,2)
plt.semilogy(f, psd)
plt.title('功率谱密度 (PSD)')
plt.xlabel('频率 (Hz)')
plt.ylabel('PSD (g²/Hz)')
plt.tight_layout()
plt.show()
⚠️ 避坑指南: 我曾经在分析某型发动机振动数据时,发现频谱里有个奇怪的峰值。查了半天,结果是采集卡电源纹波干扰。后来在信号调理环节加了带阻滤波器,才把真实信号和干扰分开。记住:频谱里的每个峰值,都要问一句「这是信号还是噪声?」

最后说一句:振动测量和信号分析,理论不难,难在实践。多动手、多对比、多复盘,慢慢就有感觉了。我做了十几年,每次遇到新问题,还是会翻回这些基础内容。基础不牢,地动山摇。


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