4. 信号处理基础:时域分析、频域分析与时频分析
各位工程师朋友,大家好。这一章我们聊聊信号处理。说实话,干我们风电振动分析这行,信号处理就是吃饭的家伙。你拿到的原始数据,说白了就是一堆电压值或者加速度值,乱七八糟的。怎么从这里面看出门道?就得靠时域、频域和时频分析这三板斧。
我个人习惯,拿到数据先做时域分析,心里有个大概。然后再做频域,找具体频率。最后,如果遇到非平稳信号,就得请出时频分析这个杀手锏。咱们一个一个来。
4.1 时域分析:最直观的第一印象
时域分析,说白了就是看波形。横轴是时间,纵轴是幅值。你想想看,一个正常的风机,振动波形应该是平稳的、随机的。如果突然出现一个很大的尖峰,或者波形变得有规律了,那肯定有问题。
常用的时域指标,我归纳为三个:峰值、均方根值和峭度。
4.1.1 峰值
峰值就是信号的最大绝对值。这个指标很简单,但很实用。我在项目中遇到过,有一次塔筒振动报警,一看峰值,比平时大了三倍。上去一查,原来是螺栓松了。峰值对瞬时冲击特别敏感,但缺点也很明显——它容易受噪声干扰。一个偶然的毛刺,就能让峰值变得很大。
4.1.2 均方根值
均方根值,英文叫RMS,是反映信号能量的指标。它比峰值稳定得多,是振动分析中最常用的量。说白了,RMS值越大,振动能量越大,对设备的破坏力也越大。
举个例子,一个轴承正常磨损时,RMS值会缓慢上升。如果RMS值突然跳变,那可能是出现了严重故障。我一般用RMS值做长期趋势监测,每天记录一次,画成曲线,一目了然。
其中 x_i 是采样点,N 是采样点数。
4.1.3 峭度
峭度这个指标,很多人容易忽略。它反映的是信号分布的"尖锐程度"。正常振动信号,峭度值接近3。如果峭度远大于3,说明信号中有很多冲击成分。
我记得有一次,一个齿轮箱的振动RMS值变化不大,但峭度从3.2飙到了8.5。我当时就觉得不对劲,拆开一看,齿轮上已经有了裂纹。峭度对早期故障特别敏感,尤其是轴承和齿轮的局部损伤。
4.2 频域分析:找到故障的"身份证"
时域分析能告诉你"有没有问题",但频域分析能告诉你"问题出在哪"。每个旋转部件都有自己特定的频率,比如转频、齿轮啮合频率、轴承故障频率。通过频域分析,我们可以把这些频率找出来。
4.2.1 FFT(快速傅里叶变换)
FFT是频域分析的核心工具。它把时域信号变换到频域,让我们看到信号由哪些频率成分组成。说白了,就是把一堆乱糟糟的波形,拆解成一个个正弦波。
做FFT时,有几个参数要特别注意:采样频率和采样点数。采样频率至少是最高分析频率的两倍,这是奈奎斯特定理说的。采样点数决定了频率分辨率,点数越多,分辨率越高。
# Python示例:简单的FFT分析
import numpy as np
import matplotlib.pyplot as plt
# 生成模拟信号:50Hz + 120Hz + 噪声
fs = 1000 # 采样频率 1000Hz
t = np.arange(0, 1, 1/fs)
x = 0.7*np.sin(2*np.pi*50*t) + 1.2*np.sin(2*np.pi*120*t) + 0.5*np.random.randn(len(t))
# 做FFT
X = np.fft.fft(x)
freq = np.fft.fftfreq(len(x), 1/fs)
# 只取正频率部分
X_mag = np.abs(X[:len(X)//2])
freq_pos = freq[:len(freq)//2]
# 绘制频谱
plt.plot(freq_pos, X_mag)
plt.xlabel('频率 (Hz)')
plt.ylabel('幅值')
plt.title('FFT频谱分析')
plt.grid(True)
plt.show()
4.2.2 功率谱密度
功率谱密度,简称PSD,是FFT的升级版。它描述的是信号功率在频率上的分布。对于随机振动,PSD比FFT更稳定,更物理。说白了,FFT看的是幅值,PSD看的是能量。
在风电行业,PSD常用于分析风载荷引起的振动。风是随机的,它的能量分布在很宽的频率范围内。通过PSD,我们可以知道哪个频段的能量最大,从而优化控制策略。
| 指标 | FFT | PSD |
|---|---|---|
| 物理意义 | 幅值 | 功率/能量 |
| 适用信号 | 周期信号、确定性信号 | 随机信号、平稳信号 |
| 单位 | g 或 m/s² | g²/Hz 或 (m/s²)²/Hz |
| 稳定性 | 受噪声影响大 | 平均后更稳定 |
4.3 时频分析:对付"变脸"信号的绝招
前面说的时域和频域分析,都假设信号是平稳的。但风机的振动信号,很多是非平稳的。比如变桨过程中,转速在变,频率也在变。这时候,时频分析就派上用场了。
4.3.1 短时傅里叶变换
短时傅里叶变换,简称STFT。它的思路很简单:把信号切成一段一段,对每一段做FFT。这样,我们就能看到频率随时间的变化。
STFT有个关键参数:窗函数和窗长。窗长决定了时间分辨率和频率分辨率的平衡。窗越长,频率分辨率越高,但时间分辨率越低。反之亦然。这是个trade-off,没有完美的选择。
4.3.2 小波变换
小波变换是STFT的升级版。它用可伸缩的小波基函数代替了固定长度的窗函数。低频时用长窗,高频时用短窗,自动适应信号特点。说白了,小波变换能同时兼顾时间和频率的分辨率。
小波变换在风电中应用很广。比如,检测叶片裂纹、齿轮箱早期故障,小波变换比STFT更灵敏。我记得有一次,一个轴承的微弱冲击信号,在STFT上几乎看不到,但在小波时频谱上清晰可见。
# Python示例:小波变换(使用PyWavelets库)
import pywt
import numpy as np
import matplotlib.pyplot as plt
# 生成模拟信号:频率随时间变化
fs = 1000
t = np.linspace(0, 1, fs)
x = np.sin(2*np.pi*50*t**2) # 频率从0线性增加到100Hz
# 做连续小波变换
scales = np.arange(1, 128)
coef, freqs = pywt.cwt(x, scales, 'morl', sampling_period=1/fs)
# 绘制时频谱
plt.imshow(np.abs(coef), extent=[0, 1, freqs[-1], freqs[0]],
aspect='auto', cmap='jet')
plt.xlabel('时间 (s)')
plt.ylabel('频率 (Hz)')
plt.title('小波时频谱')
plt.colorbar(label='幅值')
plt.show()
4.4 三种方法的对比与选择
说了这么多,到底什么时候用哪种方法?我总结了一个简单的选择逻辑:
- 先做时域分析:看峰值、RMS、峭度,判断有没有异常。这是第一步,快速筛查。
- 再做频域分析:如果时域有异常,用FFT或PSD找具体频率,定位故障源。这是第二步,精确定位。
- 最后用时频分析:如果信号是非平稳的,或者故障特征在时域和频域都不明显,用小波或STFT。这是第三步,深度挖掘。
嗯,这套流程我用了十几年,基本没出过大的偏差。当然,具体问题还得具体分析。比如,对于轴承故障,我习惯先看峭度,再看包络谱。对于齿轮故障,我更喜欢用倒频谱。这些后面章节会详细讲。
公众号:蓝海资料掘金营,微信deep3321