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 特征参数的选择策略

说了这么多参数,到底该用哪些?我的建议是分阶段选择:

  1. 早期预警阶段: 用峭度、峰值因子。这些参数对微弱冲击最敏感。
  2. 趋势跟踪阶段: 用RMS、峰值。这些参数能反映故障的发展趋势。
  3. 故障定位阶段: 用频谱和包络谱。找到具体的故障频率,确定故障类型。
  4. 严重程度评估: 用边频带幅值、频率方差。判断故障到了什么程度。
避坑指南: 我曾经犯过一个错误——只用单一参数做诊断。有一次RMS值没怎么变,但峭度已经翻倍了。后来拆机发现,轴承外圈已经出现剥落。所以一定要多参数联合判断,别偷懒。

好了,关于时域和频域特征参数,今天就聊到这儿。这些参数是后续所有诊断方法的基础。你可以在实际项目中多试试,找到最适合自己设备的那套参数组合。


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