4. 时域特征提取(上):均值、方差、均方根值、峰值、峰峰值

各位同学,欢迎来到时域特征提取的第一讲。

咱们做轴承故障诊断,说白了就是跟振动信号打交道。你拿到的原始信号,其实就是一堆密密麻麻的时间序列数据。直接看波形?嗯,能看出点门道,但远远不够。我们需要把这些原始数据“浓缩”成几个有代表性的数值,这就是特征提取。

今天咱们先聊五个最基础、也最常用的时域特征。我个人习惯把它们叫做“五大金刚”——均值、方差、均方根值、峰值、峰峰值。别小看它们,很多复杂的诊断逻辑,底层都是靠这几个量撑起来的。

核心观点:时域特征是从振动信号中提取的第一道“指纹”。它们计算简单,物理意义明确,是后续所有高级分析的基础。

4.1 均值(Mean)——信号的“直流分量”

均值的公式很简单:
μ = (1/N) * Σ x_i

它描述的是信号的“中心趋势”。

在轴承振动里,均值反映的是传感器安装的静态偏移,或者信号中的直流分量。一个正常的轴承,振动信号应该围绕零值上下波动。如果均值明显偏离零,你首先得检查传感器是不是装歪了,或者采集卡有没有零漂问题。

我的经验:有一次在现场,一个测点均值总是0.5V左右,其他测点都正常。排查了半天,结果是传感器磁座吸上了一个小铁屑,导致预紧力变了。你看,均值这个小参数,有时候能帮你快速定位硬件故障。

在Python里计算均值,我推荐直接用NumPy:

import numpy as np

# 假设 signal 是你的振动数据数组
mean_value = np.mean(signal)
print(f"均值: {mean_value:.4f}")

4.2 方差(Variance)——信号的“波动程度”

方差公式:
σ² = (1/N) * Σ (x_i - μ)²

方差衡量的是信号偏离均值的程度。说白了,就是信号“抖”得有多厉害。

在轴承故障诊断中,方差对磨损类故障非常敏感。当轴承开始出现早期磨损,振动能量会逐渐增大,方差也会随之上升。但要注意,方差对冲击性故障(比如点蚀)的反应不如后面要讲的峰值那么直接。

避坑指南:我曾经犯过一个错误——直接用方差判断故障严重程度。结果发现,一个松动的轴承方差很大,但实际损伤并不严重。后来才明白,方差反映的是整体能量,而故障特征往往藏在特定频段里。所以,方差适合做趋势监测,不适合做单一判据。

Python实现:

variance_value = np.var(signal)
print(f"方差: {variance_value:.4f}")

4.3 均方根值(RMS)——信号的“有效能量”

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

均方根值,也叫有效值。它是振动信号中最常用的特征之一。

你想想看,一个正弦波的RMS是峰值的0.707倍。对于随机振动,RMS直接反映了振动的能量大小。在轴承诊断里,RMS值稳定上升,通常意味着故障在发展。ISO 10816等国际标准,也是用RMS来评定设备振动等级的。

我个人习惯把RMS当作“体检报告”里的基础指标。它不挑故障类型,但能告诉你设备整体健康状态。

rms_value = np.sqrt(np.mean(signal**2))
print(f"均方根值: {rms_value:.4f}")

4.4 峰值(Peak Value)——信号的“最大冲击”

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

峰值对冲击性故障极其敏感。比如轴承内圈出现一个剥落坑,每当滚动体滚过这个坑,就会产生一个巨大的冲击。这个冲击在时域波形上就是一个很高的尖峰。

但这里有个坑——峰值非常容易受噪声干扰。一个偶然的电磁干扰,就能让峰值飙升好几倍。所以,我一般不会单独用峰值做诊断,而是把它和RMS结合起来看。

实用技巧:峰值与RMS的比值,叫做“峰值因子”(Crest Factor)。正常轴承的峰值因子在3-5之间。如果这个值突然变大,说明出现了明显的冲击成分——这往往是早期故障的信号。

peak_value = np.max(np.abs(signal))
print(f"峰值: {peak_value:.4f}")

4.5 峰峰值(Peak-to-Peak)——信号的“总摆幅”

峰峰值 = 最大值 - 最小值:
P-P = max(x_i) - min(x_i)

峰峰值描述的是信号波动的总范围。在旋转机械中,峰峰值常用于评估轴的振动位移。比如电涡流传感器测轴心轨迹时,峰峰值就是关键指标。

对于轴承故障,峰峰值和峰值类似,都对冲击敏感。但峰峰值包含了正负两个方向的摆幅,能更全面地反映振动幅度。

pp_value = np.max(signal) - np.min(signal)
print(f"峰峰值: {pp_value:.4f}")

4.6 知识体系总览

为了让你更直观地理解这五个特征的关系,我画了一张图:

时域特征提取(上)知识体系 振动信号时域特征 均值 (Mean) 直流分量/静态偏移 方差 (Variance) 波动程度/磨损敏感 均方根值 (RMS) 有效能量/国际标准 峰值 (Peak) 最大冲击/早期故障 峰峰值 (P-P) 总摆幅/轴位移 应用建议 趋势监测用RMS | 早期冲击用峰值 | 硬件异常查均值 综合诊断:峰值因子 = 峰值 / RMS

4.7 综合实战:一个完整的特征提取函数

在实际项目中,我习惯把这些特征封装成一个函数,一次性算完:

def extract_time_features(signal):
    """
    提取时域基本特征
    参数:
        signal: numpy数组,振动信号
    返回:
        dict: 包含五个特征的字典
    """
    features = {}
    
    features['mean'] = np.mean(signal)
    features['variance'] = np.var(signal)
    features['rms'] = np.sqrt(np.mean(signal**2))
    features['peak'] = np.max(np.abs(signal))
    features['peak_to_peak'] = np.max(signal) - np.min(signal)
    features['crest_factor'] = features['peak'] / features['rms'] if features['rms'] != 0 else 0
    
    return features

# 使用示例
# 假设你有一段轴承振动数据
# signal_data = np.load('bearing_data.npy')
# result = extract_time_features(signal_data)
# for key, value in result.items():
#     print(f"{key}: {value:.4f}")

我的建议:拿到一个新数据集,第一件事就是算这五个特征。把它们画成趋势图,你就能快速了解设备状态的变化趋势。我曾经用这个方法,提前两周预警了一台风机轴承的早期故障。

4.8 小结

今天咱们聊了五个最基础的时域特征。它们各有侧重:

  • 均值——看传感器装没装好
  • 方差——看信号抖不抖
  • 均方根值——看能量大不大
  • 峰值——看有没有冲击
  • 峰峰值——看总摆幅

记住,单一特征都有局限性。真正的高手,是把它们组合起来用。比如峰值因子、峭度等复合指标,就是基于这些基础特征衍生出来的。下一节,咱们继续聊剩下的几个时域特征——峭度、偏度、波形因子等。

专注资料整理