3. 时域特征提取:均值、方差、峰值、峭度等统计指标的计算与物理意义

各位同学,大家好。今天我们聊一个非常基础,但又极其重要的内容——时域特征提取。

很多人一上来就搞什么小波包、EMD分解,觉得时域特征太简单,没什么技术含量。我刚开始做故障诊断那会儿也这么想,结果呢?有一次在现场,一个齿轮箱的故障信号,我折腾了三天没找到问题,最后老工程师过来看了一眼时域波形,说了句「你看这个峭度值,都飙到8了,明显是冲击性故障」。嗯,从那以后,我再也不敢小看这些基础指标了。

说白了,时域特征就是直接从振动信号的时间波形里算出来的统计量。它们计算简单、物理意义明确,是故障诊断的第一道防线。今天我就带大家把这几个指标吃透。

3.1 均值(Mean)——信号的直流分量

均值的计算公式很简单:

μ = (1/N) * Σ x_i    (i = 1 to N)

其中N是采样点数,x_i是第i个采样点的幅值。

物理意义是什么? 均值反映的是信号的直流分量,也就是振动信号围绕哪个中心位置在波动。对于旋转机械来说,如果传感器安装没问题,均值理论上应该接近0。为什么?因为振动是正负对称的。

避坑指南: 我曾经遇到过一个案例,均值一直偏大,排查了半天发现是传感器安装底座松动,导致信号整体偏移。所以,均值异常时,先别急着怀疑齿轮箱,检查一下传感器安装。

在实际工程中,我们通常会在计算其他特征之前,先对信号做「去均值」处理,也就是减去均值。这样后续计算的方差、峭度等指标才更有意义。

3.2 方差(Variance)与标准差——信号的能量波动

方差的计算公式:

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

标准差就是方差的平方根:σ = √σ²

物理意义: 方差衡量的是信号偏离均值的程度。说白了,就是振动得有多「剧烈」。方差越大,说明振动能量越大,齿轮箱的磨损或冲击可能越严重。

我个人习惯用标准差而不是方差,因为标准差的量纲和原始信号一致,单位是m/s²或者g,更直观。比如正常运行时标准差是0.5g,故障时可能变成2.0g,这个变化一眼就能看出来。

小技巧: 在工业现场,我经常用标准差作为「报警阈值」的参考。比如采集正常状态下的数据,计算标准差,然后设定3倍标准差作为预警线。这个方法简单粗暴,但非常有效。

3.3 峰值(Peak Value)与峰峰值(Peak-to-Peak)——冲击的直观体现

峰值就是信号的最大绝对值:Peak = max(|x_i|)

峰峰值是最大值与最小值的差:P-P = max(x_i) - min(x_i)

物理意义: 峰值反映的是信号在某一时刻的最大冲击强度。齿轮出现断齿、轴承出现剥落时,会产生明显的冲击脉冲,峰值会瞬间增大。

我记得有一次做风电齿轮箱的在线监测,正常运行时峰值在2g左右,突然有一天峰值跳到了15g。我立刻建议停机检查,结果发现一个齿面已经出现了严重的疲劳剥落。如果当时只看均方根值,可能还要过几天才能发现异常。

注意: 峰值对单次冲击非常敏感,但也容易受到噪声干扰。所以单独看峰值容易误报。我一般会结合峭度一起看,如果峰值大、峭度也大,那基本可以确定是冲击性故障。

3.4 均方根值(RMS)——信号的有效能量

均方根值,也叫有效值:

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

物理意义: RMS反映的是信号的平均能量水平。对于平稳的振动信号,RMS是最常用的特征指标。ISO 10816等国际标准中,就是用RMS来评价机械振动烈度的。

你想想看,RMS和方差其实很像。如果信号已经去均值了,RMS就等于标准差。但在实际中,RMS更常用,因为它直接反映了振动的「破坏能力」。

3.5 峭度(Kurtosis)——冲击性故障的「照妖镜」

峭度的计算公式稍微复杂一点:

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

对于正态分布信号,峭度值约为3。所以工程上常用「超峭度」:K - 3,让正常信号的峭度归零。

物理意义: 峭度衡量的是信号分布的「尾巴」有多重。说白了,就是信号中是否存在大的冲击成分。正常齿轮箱的振动信号接近正态分布,峭度在3左右。当出现断齿、轴承点蚀等冲击性故障时,信号中会出现大幅值的脉冲,峭度会显著增大,可能到5、8甚至更高。

实战经验: 我曾经用峭度做过一个轴承故障的早期预警。当时RMS值还在正常范围内,但峭度已经从3.2缓慢上升到了4.5。我判断轴承可能出现了早期点蚀,建议在下次检修时更换。拆下来一看,果然滚道上已经有了微小的剥落坑。峭度对早期故障的敏感性,是RMS比不了的。

3.6 其他常用时域指标

除了上面几个核心指标,还有几个在工程中也很常用:

指标名称 计算公式 物理意义
波形因子 RMS / 平均绝对值 反映波形的形状特征,正常齿轮箱约1.1-1.3
峰值因子 Peak / RMS 衡量冲击程度,越大说明冲击越明显
脉冲因子 Peak / 平均绝对值 与峰值因子类似,对冲击更敏感
裕度因子 Peak / ( (1/N) * Σ √|x_i| )² 对磨损类故障较敏感

这些指标本质上都是不同统计量的比值,各有各的敏感方向。我个人习惯把峰值因子和峭度放在一起看,一个看幅值变化,一个看分布形态,互补性很好。

3.7 知识体系总览

下面这张图,我把时域特征的整体逻辑梳理了一下,方便大家理解:

时域特征提取知识体系 时域振动信号 均值 (直流分量) 方差/标准差 (波动) 峰值/峰峰值 (冲击) 峭度 (分布形态) 传感器安装检查 振动烈度评价 冲击故障检测 早期故障预警 衍生指标:波形因子、峰值因子、脉冲因子、裕度因子 核心原则:单一指标不可靠,多指标联合分析 均值+方差+峰值+峭度 → 综合判断 图3-1 时域特征提取知识体系 从原始信号到多维度特征,最终实现故障的准确判断

3.8 代码实现示例

说了这么多理论,我们来点实际的。下面是用Python计算这些指标的代码,我在项目中一直在用这个模板:

import numpy as np

def time_domain_features(signal):
    """
    计算时域特征
    signal: 一维振动信号数组
    """
    # 均值
    mean_val = np.mean(signal)
    
    # 方差和标准差
    var_val = np.var(signal)
    std_val = np.std(signal)
    
    # 峰值和峰峰值
    peak_val = np.max(np.abs(signal))
    pp_val = np.max(signal) - np.min(signal)
    
    # 均方根值
    rms_val = np.sqrt(np.mean(signal**2))
    
    # 峭度(使用超峭度,正态分布时为0)
    kurt_val = np.mean((signal - mean_val)**4) / (std_val**4) - 3
    
    # 波形因子
    sf_val = rms_val / np.mean(np.abs(signal))
    
    # 峰值因子
    cf_val = peak_val / rms_val
    
    # 脉冲因子
    if_val = peak_val / np.mean(np.abs(signal))
    
    return {
        'mean': mean_val,
        'variance': var_val,
        'std': std_val,
        'peak': peak_val,
        'peak_to_peak': pp_val,
        'rms': rms_val,
        'kurtosis': kurt_val,
        'shape_factor': sf_val,
        'crest_factor': cf_val,
        'impulse_factor': if_val
    }

# 使用示例
# 假设采集了一段振动数据
vibration_data = np.random.randn(1000)  # 模拟正常信号
features = time_domain_features(vibration_data)
for key, value in features.items():
    print(f"{key}: {value:.4f}")

实用建议: 在实际项目中,我通常会把这段代码封装成一个类,放在数据预处理模块里。每次采集到新数据,自动计算这些特征,然后存入数据库。这样后续做趋势分析、阈值报警都非常方便。

3.9 小结

好了,今天的内容就到这里。时域特征虽然基础,但它们是故障诊断的基石。我见过太多人一上来就搞复杂算法,结果连最基本的均值、峭度都没搞清楚,最后分析出来的结论漏洞百出。

记住一句话:先看时域,再看频域,最后才是高级方法。 这是我在现场摸爬滚打多年总结出来的经验。

下一章我们会聊频域特征提取,到时候你会发现,时域和频域结合起来,很多问题就一目了然了。


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