第四章 时域特征提取:均值、方差、均方根、峰值因子、峭度、波形因子等统计特征的计算与工程意义

各位同学,大家好。今天我们来聊聊时域特征提取。说实话,这是状态监测里最基础、也最容易被忽视的一块。很多人一上来就搞FFT、小波变换,结果连均值都没算明白——嗯,我见过不少这样的案例。

时域特征,说白了就是直接从原始振动信号里算出来的统计量。它们不涉及频域变换,计算量小,物理意义明确。在工业现场,很多时候一个峭度值就能告诉你轴承是不是出问题了。

4.1 均值与方差:信号的中心与离散程度

均值,就是信号的平均水平。公式很简单:

μ = (1/N) * Σ x_i

但我要提醒你——均值在旋转机械监测里,往往没什么用。为什么?因为振动信号是交流分量,均值反映的是直流偏置。如果传感器有零漂,均值会偏离零,但这不代表设备有问题。

避坑指南: 我曾经在风电项目里,看到有人用均值做趋势分析,结果发现均值缓慢上升,以为是轴承磨损。查了半天,其实是传感器安装座松了。所以,均值更多用于数据质量检查,而不是故障诊断。

方差,描述信号偏离均值的程度:

σ² = (1/N) * Σ (x_i - μ)²

方差大,说明振动能量大。但方差有个问题——它的量纲是原始信号的平方。比如加速度信号单位是m/s²,方差单位就成了(m/s²)²,物理意义不直观。所以工程上更常用标准差σ,也就是方差的平方根。

4.2 均方根值:振动能量的直接体现

均方根(RMS)是状态监测里最常用的特征之一:

RMS = sqrt((1/N) * Σ x_i²)

RMS的物理意义很明确——它代表信号的有效值,直接反映振动能量。在ISO 10816等标准中,设备振动烈度就是用RMS来评定的。

我个人习惯,在设备正常运行时,RMS值应该相对稳定。如果RMS突然增大,说明振动能量增加了,可能是转子不平衡、不对中或者松动。

经验之谈: 我在化工厂监测离心泵时,发现RMS值从2.3mm/s缓慢上升到3.8mm/s,持续了两个月。拆检后发现叶轮结垢严重。RMS的长期趋势,比单次阈值判断可靠得多。

4.3 峰值因子与波形因子:冲击特征的识别

峰值因子,也叫波峰因数:

Crest Factor = X_peak / RMS

其中X_peak是信号的最大绝对值。峰值因子对冲击信号非常敏感。正常振动信号接近正弦波,峰值因子约1.414。如果出现冲击,峰值会变大,RMS变化不大,峰值因子就会升高。

波形因子

Shape Factor = RMS / ( (1/N) * Σ |x_i| )

波形因子反映信号波形与正弦波的偏离程度。正弦波的波形因子约1.11。如果波形因子变大,说明信号中出现了尖峰或平顶。

你想想看,这两个指标配合使用效果很好。峰值因子高、波形因子也高——大概率是冲击性故障。峰值因子高但波形因子正常——可能是单次干扰。

4.4 峭度:冲击信号的敏感探测器

峭度(Kurtosis)是时域特征里的明星指标:

K = (1/N) * Σ ((x_i - μ)/σ)⁴

峭度衡量信号分布的"尾巴"有多重。正态分布的峭度是3。工程上常用归一化峭度(减去3),这样正态分布峭度为0。

峭度大于3,说明信号有较多冲击成分。峭度小于3,信号偏平缓。我在齿轮箱监测中,峭度从3.2跳到8.7,三天后齿轮就断了——嗯,峭度是早期故障的预警器。

核心要点: 峭度对早期故障非常敏感,但故障发展到一定程度后,峭度反而可能下降。所以峭度适合做早期预警,不适合做故障程度评估。

4.5 各特征的工程意义对比

特征 物理意义 适用场景 注意事项
均值 直流分量 数据质量检查 对故障不敏感
方差/标准差 振动能量 整体趋势监测 量纲不直观
均方根 有效振动能量 ISO标准评定 对早期冲击不敏感
峰值因子 冲击程度 轴承、齿轮故障 受单次干扰影响大
波形因子 波形畸变程度 配合峰值因子使用 单独使用意义有限
峭度 冲击概率密度 早期故障预警 故障后期可能下降

4.6 Python代码实现

下面是我常用的时域特征提取函数。代码不复杂,但要注意数值稳定性:

import numpy as np

def extract_time_features(signal):
    """
    提取时域统计特征
    signal: 一维数组,振动信号
    """
    # 均值
    mean_val = np.mean(signal)
    
    # 方差
    var_val = np.var(signal)
    
    # 标准差
    std_val = np.std(signal)
    
    # 均方根
    rms_val = np.sqrt(np.mean(signal**2))
    
    # 峰值
    peak_val = np.max(np.abs(signal))
    
    # 峰值因子
    crest_factor = peak_val / rms_val if rms_val != 0 else 0
    
    # 波形因子
    abs_mean = np.mean(np.abs(signal))
    shape_factor = rms_val / abs_mean if abs_mean != 0 else 0
    
    # 峭度
    kurtosis_val = np.mean((signal - mean_val)**4) / (std_val**4) if std_val != 0 else 0
    
    return {
        'mean': mean_val,
        'variance': var_val,
        'std': std_val,
        'rms': rms_val,
        'peak': peak_val,
        'crest_factor': crest_factor,
        'shape_factor': shape_factor,
        'kurtosis': kurtosis_val
    }
代码小贴士: 注意分母为零的情况。我在处理停机数据时,信号全是零,峭度直接除零报错。加个判断,安全很多。

4.7 知识体系结构图

下面这张图,是我梳理的时域特征提取知识体系。你可以看到,六个特征分成了三个维度:能量维度、冲击维度、波形维度。

时域特征提取知识体系 时域特征 能量维度 冲击维度 波形维度 均值 方差/标准差 均方根 峰值因子 峭度 波形因子 三个维度覆盖了振动信号的统计特性 能量维度:反映振动强度 冲击维度:检测早期故障 波形维度:描述信号形态

4.8 工程应用中的注意事项

最后,我总结几条实战经验:

  • 不要只看单一特征。我曾经只靠峭度做判断,结果误报率很高。后来把RMS、峰值因子、峭度三个特征结合起来,准确率提升了很多。
  • 注意采样长度。时域特征对采样点数敏感。太短了统计不稳定,太长了计算量大。我一般取1024或2048点,刚好覆盖10个以上旋转周期。
  • 趋势比绝对值重要。单个RMS值2.5mm/s说明不了什么,但连续三天从2.0涨到2.5,就值得关注了。
  • 预处理不能省。去均值、去趋势项、滤波——这些步骤不做,特征值就是错的。我在一个项目里,因为没去直流分量,峭度算出来全是错的,排查了两天才发现。
一句话总结: 时域特征计算简单,但工程意义深刻。均值看数据质量,RMS看能量,峭度看冲击。三个维度配合使用,就能覆盖大部分故障场景。

好了,这一章就到这里。时域特征是状态监测的基石,把这些基础打牢,后面学频域特征、时频分析才会事半功倍。


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