第三章 振动信号分析基础

大家好,我是老张。今天咱们聊聊振动信号分析。说实话,这玩意儿是风机故障诊断的"基本功"。你想想看,风机转起来,振动信号里藏着多少秘密?轴承磨损、齿轮裂纹、不对中……这些故障都会在振动信号里留下"指纹"。我做了十几年风电,可以负责任地告诉你:读懂振动信号,你就掌握了故障诊断的"密码"。

3.1 振动传感器原理

先说说传感器。振动传感器,说白了就是把机械振动转换成电信号的东西。常用的有三种:

  • 压电式加速度传感器:利用压电晶体的压电效应。振动时晶体变形,产生电荷。我习惯用这种,因为它频响宽、动态范围大。
  • 速度传感器:通过线圈在磁场中运动产生感应电动势。低频响应好,但体积大。
  • 位移传感器:测量轴与探头之间的间隙变化。适合测量轴振动,比如风机的主轴。

嗯,这里要注意:选型时一定要看频率范围。风机振动信号通常在10Hz-10kHz之间,压电式加速度传感器最合适。我曾经在项目里遇到过有人用错了传感器,低频信号全被滤掉了,结果误判了轴承故障……

小技巧:安装传感器时,磁吸座虽然方便,但高频响应会变差。如果测齿轮箱,建议用螺纹安装或胶粘。

3.2 时域特征提取

时域信号,就是振动幅值随时间变化的波形。直接看波形能看出啥?说实话,肉眼很难看出门道。所以我们要提取特征值。

3.2.1 均值

均值反映信号的直流分量。对于振动信号,均值应该接近0。如果均值明显偏离0,说明传感器有零漂,或者信号里有低频干扰。

import numpy as np

def calculate_mean(signal):
    return np.mean(signal)

# 示例
vibration = np.random.randn(1000)  # 模拟振动信号
mean_val = calculate_mean(vibration)
print(f"均值: {mean_val:.4f}")

3.2.2 峰值

峰值就是信号的最大绝对值。它能反映振动的最大冲击强度。我一般用峰值来初步判断有没有"打齿"或者"撞击"。

def calculate_peak(signal):
    return np.max(np.abs(signal))

peak_val = calculate_peak(vibration)
print(f"峰值: {peak_val:.4f}")
注意:峰值对偶然的冲击很敏感。如果信号里有毛刺,峰值会偏大。建议先做平滑处理。

3.2.3 峭度

峭度,这个指标很有意思。它衡量信号分布的"尖锐程度"。正态分布的峭度是3。如果峭度大于3,说明信号里有冲击成分——这往往是早期故障的信号。

def calculate_kurtosis(signal):
    n = len(signal)
    mean = np.mean(signal)
    std = np.std(signal)
    kurt = np.sum((signal - mean)**4) / (n * std**4)
    return kurt

kurt_val = calculate_kurtosis(vibration)
print(f"峭度: {kurt_val:.4f}")

我记得有一次,某风场一台机组齿轮箱振动峭度从3.2突然升到5.8。我当时就判断:轴承可能出问题了。拆开一看,果然保持架断裂。峭度这个指标,对早期故障特别敏感。

3.3 频域特征提取

时域信号看着乱,但转到频域就清晰多了。频域分析的核心思想:任何复杂振动都可以分解成不同频率的正弦波。

3.3.1 FFT(快速傅里叶变换)

FFT是频域分析的基础工具。它把时域信号变换到频域,得到频谱。频谱的横轴是频率,纵轴是幅值。

from scipy.fft import fft, fftfreq

def compute_fft(signal, fs):
    n = len(signal)
    yf = fft(signal)
    xf = fftfreq(n, 1/fs)
    # 只取正频率部分
    idx = np.where(xf >= 0)
    return xf[idx], np.abs(yf[idx]) * 2 / n

fs = 2560  # 采样频率
freqs, mags = compute_fft(vibration, fs)

看频谱时,我习惯先找转频(1X)及其谐波(2X、3X……)。如果出现边频带,那往往就是调制现象——比如齿轮啮合频率被转频调制,说明齿轮可能有故障。

核心要点:
  • 转频:风机转速对应的频率
  • 啮合频率:齿轮齿数×转频
  • 边频带:故障特征频率

3.3.2 包络谱

包络谱,说白了就是"解调"。它专门用来提取高频载波中的低频调制信号。对于轴承故障诊断,包络谱比普通频谱好用得多。

为什么?因为轴承故障产生的冲击会激发结构共振,共振频率很高(几kHz到几十kHz)。普通频谱里这些高频成分混在一起,很难分辨。但包络谱能把冲击的重复频率提取出来——这个频率就是轴承的故障特征频率。

from scipy.signal import hilbert

def compute_envelope_spectrum(signal, fs):
    # 希尔伯特变换求包络
    analytic_signal = hilbert(signal)
    envelope = np.abs(analytic_signal)
    # 对包络做FFT
    freqs, mags = compute_fft(envelope, fs)
    return freqs, mags

env_freqs, env_mags = compute_envelope_spectrum(vibration, fs)

我曾经处理过一个案例:某机组振动频谱看起来很正常,但包络谱里明显出现了轴承外圈故障频率。拆检后发现外圈已经剥落。如果只看普通频谱,这个故障就被漏掉了。

3.4 知识体系总览

下面这张图,是我自己总结的振动信号分析知识框架。你可以把它当作"地图"来用。

振动信号分析知识体系 振动传感器 压电式 速度式 选型要点:频率范围 时域特征提取 均值 峰值 峭度 频域特征提取 FFT频谱 包络谱 解调技术 故障诊断应用 轴承故障 齿轮故障 不平衡/不对中 从传感器选型 → 时域/频域特征 → 故障诊断,形成完整闭环 老张经验

3.5 实战要点总结

最后,我把自己这些年积累的经验整理成一张表,方便你对照:

特征 物理意义 故障指示 注意事项
均值 信号直流分量 传感器零漂、低频干扰 正常应接近0
峰值 最大冲击强度 打齿、撞击 对毛刺敏感
峭度 信号分布尖锐度 早期冲击故障 >3.5需警惕
FFT频谱 频率成分分布 转频、谐波、边频带 注意频率分辨率
包络谱 调制信号提取 轴承故障特征频率 高频共振解调
老张的避坑指南:我曾经犯过一个错误——采样频率设得太低,导致高频成分混叠。后来我养成了习惯:采样频率至少是最高分析频率的2.56倍。另外,数据长度要足够,频率分辨率 = 采样频率/数据点数,分辨率不够的话,相邻频率成分分不开。

好了,这一章的内容就到这里。振动信号分析是门手艺活,光看理论不行,得多动手。建议你找几组实际的风机振动数据,自己算算均值、峰值、峭度,再画个频谱和包络谱看看。嗯,等你真正上手了,就会发现——原来故障信号就在那里,等着你去发现。

专注资料整理