3. 信号基础:振动信号的时域与频域特征参数
各位工程师朋友,大家好。今天我们聊聊振动信号的特征参数。说实话,这是整个轴承故障诊断的基石。你想想看,传感器采集回来的原始数据,就像一堆没加工的矿石,特征参数就是从中提炼出来的金子。
我个人习惯把特征参数分成两大类:时域的和频域的。为什么这么分?因为故障信号在不同域里表现不一样。时域参数能快速告诉你「有没有问题」,频域参数则能告诉你「问题出在哪」。两者配合,才能把故障看得明明白白。
3.1 时域特征参数:快速判断有没有问题
时域分析,说白了就是直接看波形。我刚开始做振动分析那会儿,最喜欢盯着示波器上的波形看。后来发现,光看波形不行,得用数学指标说话。
3.1.1 有量纲参数
这类参数跟信号的绝对大小有关。单位是什么,算出来就是什么。
| 参数名称 | 计算公式 | 物理意义 | 工程应用 |
|---|---|---|---|
| 峰值 (Peak) | Xp = max|x(t)| | 信号的最大瞬时值 | 检测冲击性故障 |
| 均值 (Mean) | X̄ = (1/N)∑x(t) | 信号的直流分量 | 判断传感器偏置 |
| 均方根值 (RMS) | Xrms = √[(1/N)∑x²(t)] | 信号的有效能量 | 评估振动烈度 |
| 方差 (Variance) | σ² = (1/N)∑(x(t)-X̄)² | 信号波动程度 | 衡量稳定性 |
我的经验: 均方根值是我最常用的指标。ISO 10816标准就是用RMS值来评判设备状态的。我在一个风机项目里,RMS值从2.3 mm/s涨到4.1 mm/s,我就知道轴承开始出问题了。
3.1.2 无量纲参数
这类参数的好处是不受载荷、转速变化的影响。你想想看,同一台设备,今天满载明天半载,RMS值肯定不一样。但峭度值基本不变。
- 峭度 (Kurtosis): 反映波形的尖峭程度。正常轴承的峭度≈3,故障时能飙到10以上。
- 峰值因子 (Crest Factor): 峰值除以RMS。早期故障信号里常有冲击,这个值会明显变大。
- 脉冲因子 (Impulse Factor): 峰值除以绝对均值。对冲击更敏感。
- 裕度因子 (Margin Factor): 峰值除以方根幅值。适合检测磨损类故障。
注意: 我曾经在一个项目里只盯着峭度看,结果误报了好几次。后来发现,当故障发展到一定程度,峭度反而会下降。所以无量纲参数适合早期检测,但不能单独用。
3.2 频域特征参数:定位故障根源
时域参数告诉你「有问题」,频域参数告诉你「哪里有问题」。为什么?因为每种故障都有自己特定的频率特征。
3.2.1 频谱分析基础
把时域信号通过FFT变换到频域,就能看到不同频率成分的能量分布。轴承故障频率通常跟转速和轴承几何尺寸有关。
# 计算轴承故障特征频率(Python示例)
import numpy as np
def bearing_fault_freqs(rpm, n_balls, d_ball, d_pitch, contact_angle):
"""
rpm: 转速 (转/分钟)
n_balls: 滚动体数量
d_ball: 滚动体直径 (mm)
d_pitch: 节圆直径 (mm)
contact_angle: 接触角 (度)
"""
fr = rpm / 60.0 # 转频 (Hz)
angle_rad = np.deg2rad(contact_angle)
f_outer = n_balls / 2.0 * fr * (1 - d_ball/d_pitch * np.cos(angle_rad))
f_inner = n_balls / 2.0 * fr * (1 + d_ball/d_pitch * np.cos(angle_rad))
f_ball = d_pitch / d_ball * fr * (1 - (d_ball/d_pitch * np.cos(angle_rad))**2)
f_cage = fr / 2.0 * (1 - d_ball/d_pitch * np.cos(angle_rad))
return {
'outer_race': f_outer,
'inner_race': f_inner,
'ball': f_ball,
'cage': f_cage
}
# 示例:某风机轴承
freqs = bearing_fault_freqs(1480, 12, 8.5, 65, 0)
print(f"外圈故障频率: {freqs['outer_race']:.2f} Hz")
print(f"内圈故障频率: {freqs['inner_race']:.2f} Hz")
3.2.2 关键频域参数
| 参数名称 | 定义 | 诊断价值 |
|---|---|---|
| 重心频率 (FC) | 频谱的能量重心位置 | 故障时频率重心会偏移 |
| 均方频率 (MSF) | 频率的加权平均值 | 反映频谱分布变化 |
| 频率方差 (VF) | 频率分布的离散程度 | 故障时频谱变分散 |
| 边频带幅值 | 故障频率两侧的调制边带 | 判断故障严重程度 |
核心要点: 我一般先看频谱里有没有故障特征频率。如果有,再看边频带的间距和幅值。边频带越密、幅值越高,说明故障越严重。这是我在上百个轴承案例里总结出来的规律。
3.3 包络分析:从调制信号中提取故障
这里我要重点说说包络分析。为什么?因为轴承早期故障信号往往被高频噪声淹没,直接看频谱根本看不出来。
包络分析的思路很简单:先对信号做希尔伯特变换,提取出包络线,然后再对包络线做FFT。这样就能把隐藏在载波里的故障信息提取出来。
# 包络分析示例
from scipy import signal
import numpy as np
def envelope_analysis(x, fs):
"""
x: 原始振动信号
fs: 采样频率 (Hz)
"""
# 希尔伯特变换求包络
analytic_signal = signal.hilbert(x)
envelope = np.abs(analytic_signal)
# 对包络做FFT
n = len(envelope)
freq = np.fft.rfftfreq(n, d=1/fs)
envelope_fft = np.fft.rfft(envelope)
return freq, np.abs(envelope_fft)
实用技巧: 包络分析时,带通滤波器的中心频率选在轴承的固有频率附近效果最好。我一般先用锤击法测出轴承座的固有频率,再设置滤波器参数。这样包络谱里的故障特征会非常清晰。
3.4 特征参数的选择策略
说了这么多参数,到底该用哪些?我的建议是分阶段选择:
- 早期预警阶段: 用峭度、峰值因子。这些参数对微弱冲击最敏感。
- 趋势跟踪阶段: 用RMS、峰值。这些参数能反映故障的发展趋势。
- 故障定位阶段: 用频谱和包络谱。找到具体的故障频率,确定故障类型。
- 严重程度评估: 用边频带幅值、频率方差。判断故障到了什么程度。
避坑指南: 我曾经犯过一个错误——只用单一参数做诊断。有一次RMS值没怎么变,但峭度已经翻倍了。后来拆机发现,轴承外圈已经出现剥落。所以一定要多参数联合判断,别偷懒。
好了,关于时域和频域特征参数,今天就聊到这儿。这些参数是后续所有诊断方法的基础。你可以在实际项目中多试试,找到最适合自己设备的那套参数组合。
公众号:蓝海资料掘金营,微信deep3321