第三章 振动测试与信号分析
做液冷系统这么多年,我越来越觉得振动测试是个「良心活」。你测出来的数据好不好看,很多时候不取决于你花了多少钱买设备,而取决于你懂不懂传感器、懂不懂信号处理。这一章,我就把我在振动测试和信号分析上踩过的坑、总结的经验,掰开揉碎了讲给你听。
3.1 加速度传感器选型
选传感器,说白了就是选「眼睛」。眼睛不好使,后面分析得再漂亮也是白搭。
3.1.1 传感器类型
市面上常见的加速度传感器主要有三种:
- 压电式(ICP):我最常用的类型。自带电荷放大器,信号稳定,抗干扰能力强。适合做模态测试和FFT分析。
- 电容式(MEMS):便宜、体积小,但低频响应好。我一般用在泵体振动监测上,测个趋势还行。
- 应变式:精度高,但贵。说实话,液冷系统里用得不多,除非你做精密研究。
我的个人习惯:做模态测试时,我首选ICP传感器。为什么?因为它不需要额外供电,直接接数据采集卡就能用。有一次我在现场忘了带电源模块,还好带的是ICP传感器,不然那天就白跑了。
3.1.2 关键参数
选传感器,你盯着这三个参数看就够了:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 量程 | ±50g ~ ±500g | 液冷系统振动一般不大,50g够用。但锤击法测试时,冲击峰值可能到200g以上,我建议选±500g的。 |
| 频率范围 | 0.5Hz ~ 10kHz | 液冷系统的结构模态一般在2kHz以内,但为了看高频噪声,10kHz是底线。 |
| 灵敏度 | 10mV/g ~ 100mV/g | 灵敏度越高,信号越干净。但量程会变小。我一般选50mV/g的,折中。 |
避坑指南:我曾经在选传感器时只看量程,忽略了频率范围。结果测出来的数据在500Hz以上全是噪声,后来才发现传感器的谐振频率只有2kHz。嗯,从那以后我选传感器必看频率响应曲线。
3.2 FFT频谱分析
FFT,说白了就是把时域信号变成频域信号。你想想看,时域信号就像一段录音,你听到的是「嗡嗡嗡」的声音,但不知道是哪个频率在响。FFT一出手,你就能看到「50Hz有峰值、120Hz有峰值」,问题一目了然。
3.2.1 FFT的基本原理
我不跟你讲傅里叶变换的数学公式,那个你查书就行。我只说工程上怎么用:
- 采样率:至少是最高分析频率的2.56倍。我习惯用2.56倍,不是2倍。为什么?因为抗混叠滤波器需要过渡带。
- 频率分辨率:Δf = 采样率 / FFT点数。分辨率越高,越能看清两个相近的频率。我一般设1024点或2048点。
- 窗函数:这个很重要。我常用的有:
- 汉宁窗:最通用,适合连续振动信号。
- 矩形窗:适合冲击信号,比如锤击法。
- 平顶窗:适合校准,幅值精度高。
我遇到过的情况:有一次做泵体振动分析,FFT图上总有一个莫名其妙的49.8Hz峰值。我以为是泵的转速频率,但怎么算都对不上。后来才发现是市电50Hz的工频干扰,因为没加窗函数,频谱泄漏把50Hz的能量扩散到了49.8Hz。加了汉宁窗后,问题就解决了。
3.2.2 代码示例
下面是我常用的Python代码,做FFT分析用:
import numpy as np
import matplotlib.pyplot as plt
def fft_analysis(data, fs):
"""
data: 时域信号
fs: 采样率 (Hz)
"""
n = len(data)
# 加汉宁窗
window = np.hanning(n)
data_windowed = data * window
# FFT
fft_data = np.fft.fft(data_windowed)
fft_mag = np.abs(fft_data[:n//2]) * 2 / n
# 频率轴
freq = np.fft.fftfreq(n, 1/fs)[:n//2]
return freq, fft_mag
# 使用示例
fs = 2560 # 采样率
t = np.arange(0, 1, 1/fs)
signal = np.sin(2*np.pi*50*t) + 0.5*np.sin(2*np.pi*120*t)
freq, mag = fft_analysis(signal, fs)
plt.figure(figsize=(10, 4))
plt.plot(freq, mag)
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')
plt.grid(True)
plt.show()
小技巧:做FFT之前,一定要先做去直流处理。就是把信号减去它的平均值。不然0Hz处会有一个大峰值,把其他频率都淹没了。我习惯用 data = data - np.mean(data) 这一步。
3.3 时频域特征提取
FFT只能告诉你「有什么频率」,但不知道「这些频率什么时候出现」。时频分析就是解决这个问题的。
3.3.1 时域特征
时域特征,说白了就是看信号本身的统计量:
- 峰值:最大振动幅值。我用来判断有没有冲击。
- 均方根值(RMS):振动能量的大小。液冷系统振动标准一般用RMS值。
- 峭度:信号分布的尖锐程度。峭度大于3,说明有冲击成分。我在轴承故障诊断中经常用。
3.3.2 频域特征
频域特征,就是从FFT结果里提取的关键信息:
- 峰值频率:最大幅值对应的频率。一般是泵的转速频率。
- 边频带:主频率旁边的微小频率。我在项目中遇到过,边频带往往预示着调制现象,比如齿轮啮合问题。
- 谐波:基频的整数倍。谐波多,说明非线性问题严重。
3.3.3 时频图(Spectrogram)
时频图,就是把信号切成一段一段,每段做FFT,然后拼在一起。横轴是时间,纵轴是频率,颜色深浅代表幅值大小。
from scipy.signal import spectrogram
f, t, Sxx = spectrogram(data, fs, nperseg=256)
plt.pcolormesh(t, f, 10*np.log10(Sxx), shading='gouraud')
plt.ylabel('频率 (Hz)')
plt.xlabel('时间 (s)')
plt.colorbar(label='功率谱密度 (dB)')
plt.show()
实战经验:有一次我分析一个冷板振动问题,FFT图上只有一个50Hz峰值,怎么都找不到原因。后来做了时频图,才发现50Hz的幅值在每10秒会突然增大一次。顺着这个线索,我找到了一个间歇性接触不良的管路支架。你看,时频图有时候比FFT更管用。
3.4 模态测试锤击法
模态测试,说白了就是「敲一下,听一听」。你敲一个结构,它会有自己的「固有频率」和「振型」。锤击法是最简单、最常用的模态测试方法。
3.4.1 锤击法的原理
你用锤子敲一下结构,结构会产生自由振动。加速度传感器记录下这个振动信号,然后通过FFT分析,就能得到结构的频响函数(FRF)。频响函数的峰值,就是结构的固有频率。
我常用的锤击法流程是这样的:
- 布点:在结构上画网格,每个网格点就是一个测点。
- 安装传感器:一般固定一个参考点,然后移动锤击点。或者固定锤击点,移动传感器。
- 锤击:用带力传感器的锤子敲击。每次敲击要干脆利落,不要连击。
- 采集数据:记录力信号和加速度信号。
- 计算FRF:FRF = 加速度FFT / 力FFT。
我曾经犯过的错:刚开始做锤击法时,我总想「多敲几次取平均」,结果敲出来的数据乱七八糟。后来才明白,锤击法要求每次敲击的力大小和方向尽量一致。不一致的话,平均反而会引入误差。我现在的方法是:每个点敲3次,如果3次FRF曲线重合度好,就取平均;不好,就重新敲。
3.4.2 锤击法的关键参数
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 锤头材质 | 橡胶/塑料/金属 | 橡胶头适合低频(<500Hz),金属头适合高频(>2kHz)。我一般先用橡胶头试。 |
| 采样时间 | 0.5s ~ 2s | 要保证振动衰减完。我习惯看时域信号,等幅值降到初始的10%以下再停止采集。 |
| 触发方式 | 上升沿触发 | 力信号超过阈值时开始采集。阈值我设成最大力值的10%。 |
3.4.3 模态参数识别
得到FRF曲线后,你需要识别出模态参数:
- 固有频率:FRF峰值对应的频率。
- 阻尼比:用半功率带宽法计算。阻尼比 = (f2 - f1) / (2 * fn),其中f1和f2是峰值下降3dB对应的频率。
- 振型:把所有测点的FRF幅值和相位画出来,就能看到结构在某个频率下的变形形状。
我的习惯:识别模态参数时,我不用自动算法。为什么?因为自动算法经常把噪声峰值也识别成模态。我都是手动看FRF曲线,一条一条地确认。虽然慢,但准确。你想想看,模态参数错了,后面的结构修改方案就全错了,那代价更大。
3.5 本章知识体系
下面这张图,是我自己总结的振动测试与信号分析的知识框架。你照着这个思路走,基本不会跑偏。
这张图你看懂了吗?从传感器选型开始,到FFT分析,再到时频域特征提取,最后落到模态测试。每一步都是环环相扣的。传感器选错了,FFT分析就是白做;FFT参数设不对,时频特征就是错的;时频特征没搞明白,模态测试就是瞎敲。
好了,这一章的内容就到这里。振动测试和信号分析,说白了就是「用数据说话」。你测出来的数据好不好,取决于你懂不懂原理、会不会选参数、有没有经验。我希望你学完这一章,能少走一些我当年走过的弯路。