4. 时域分析:均值、方差、均方根值、峰值因子、峭度等统计特征计算与解读

各位同学,欢迎来到时域分析这一讲。

很多人一上来就搞频域分析,搞小波变换,觉得那才叫高端。但我得说一句大实话:时域统计特征,是故障诊断的“第一道防线”。你连时域的基本特征都看不懂,后面的分析很容易跑偏。

我个人习惯,拿到一段振动信号,第一件事不是画频谱,而是先算几个时域统计量。就像医生看病,先量体温、测血压,心里有个底,再去做CT。

4.1 时域统计特征到底在说什么?

说白了,时域分析就是直接对原始振动信号做数学“体检”。

振动信号本质上是一个随时间变化的电压值(或者加速度值)。我们采集到的是一串数字:x₁, x₂, x₃, ..., xₙ。这些数字的分布规律,就藏着轴承的健康状态。

我给大家画个图,看看这些特征之间的关系:

时域统计特征知识体系 原始振动信号 有量纲特征 无量纲特征 概率分布特征 均值 方差/标准差 均方根值 峰值因子 峭度 波形因子 偏度 脉冲因子 裕度因子 有量纲特征受工况影响大,无量纲特征对故障更敏感 实际诊断中建议两者结合使用

4.2 有量纲特征:均值、方差、均方根值

4.2.1 均值(Mean)

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

μ = (1/N) * Σ xᵢ

但我要提醒你:均值对故障诊断的意义其实不大。为什么?因为振动信号通常是交流耦合的,均值基本为零。如果均值明显偏离零,那说明传感器有直流偏置,或者信号采集出了问题。

⚠️ 注意: 均值不为零时,先检查传感器,别急着分析故障!

我在项目里遇到过一回,一个学生拿着数据来找我,说均值有0.5V,怀疑轴承有严重故障。我一看,原来是采集卡的地线没接好。嗯,这种坑我踩过,你们别踩。

4.2.2 方差与标准差(Variance & Standard Deviation)

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

σ² = (1/N) * Σ (xᵢ - μ)²
σ = √σ²

标准差σ和振动信号的能量直接相关。轴承磨损越严重,振动幅度越大,标准差也就越大。

但有个问题——标准差受转速和负载影响很大。同一轴承,转速从1000rpm升到3000rpm,标准差可能翻倍。所以单纯看标准差,容易误判。

4.2.3 均方根值(RMS)

RMS是时域分析里最常用的特征之一:

RMS = √[(1/N) * Σ xᵢ²]

对于零均值信号,RMS和标准差是等价的。RMS直接反映了振动信号的有效能量。

💡 经验值参考:
轴承状态RMS加速度值(m/s²)
良好< 0.5
轻微磨损0.5 ~ 1.5
中度故障1.5 ~ 3.0
严重故障> 3.0

注:以上数值仅供参考,不同设备差异较大,建议建立基线值。

4.3 无量纲特征:峰值因子、峭度

为什么要用无量纲特征?说白了,就是消除工况变化的影响。你想想看,转速变了,RMS会变,但峰值因子和峭度相对稳定。这就很妙了。

4.3.1 峰值因子(Crest Factor)

峰值因子 = 峰值 / RMS

峰值因子反映的是信号中是否存在明显的冲击成分。正常轴承的峰值因子一般在3~5之间。如果出现早期剥落,会产生冲击脉冲,峰值因子会突然升高到8甚至10以上。

我记得有一次,一个风电场的齿轮箱轴承,RMS值只有1.2,看起来还行。但峰值因子到了9.8。我建议他们立即停机检查,结果发现内圈已经出现了一个小剥落坑。再晚一周,可能就碎了。

🔧 实用技巧: 峰值因子对早期故障敏感,但对严重故障反而会下降(因为RMS也变大了)。所以峰值因子适合做早期预警,不适合做趋势监测。

4.3.2 峭度(Kurtosis)

峭度 = (1/N) * Σ [(xᵢ - μ)⁴] / σ⁴

峭度描述的是信号分布的“尖峭程度”。正态分布的峭度是3。如果峭度大于3,说明信号中有更多的极端值(冲击成分)。

我个人的经验:

  • 峭度 ≈ 3:信号接近正态分布,轴承状态良好
  • 峭度 > 3.5:可能存在早期故障,需要警惕
  • 峭度 > 5:大概率有冲击性故障,建议立即深入分析
  • 峭度 > 8:严重故障,可能已经出现裂纹或断裂
⚠️ 避坑指南: 我曾经遇到过峭度高达12的情况,以为是轴承故障,结果发现是传感器安装松动,产生了虚假冲击。所以,高峭度一定要结合时域波形图一起看,别被数据骗了。

4.4 Python实战:一行代码算所有特征

理论讲完了,咱们来点实际的。下面这个函数,是我自己项目里一直在用的,可以直接计算常用的时域统计特征:

import numpy as np

def time_domain_features(signal):
    """
    计算时域统计特征
    signal: 一维数组,振动信号
    """
    features = {}
    
    # 有量纲特征
    features['mean'] = np.mean(signal)           # 均值
    features['var'] = np.var(signal)             # 方差
    features['std'] = np.std(signal)             # 标准差
    features['rms'] = np.sqrt(np.mean(signal**2)) # 均方根值
    
    # 无量纲特征
    peak = np.max(np.abs(signal))                # 峰值
    features['peak'] = peak
    features['crest_factor'] = peak / features['rms']  # 峰值因子
    features['kurtosis'] = np.mean((signal - features['mean'])**4) / (features['std']**4)  # 峭度
    features['skewness'] = np.mean((signal - features['mean'])**3) / (features['std']**3)  # 偏度
    features['shape_factor'] = features['rms'] / np.mean(np.abs(signal))  # 波形因子
    features['impulse_factor'] = peak / np.mean(np.abs(signal))  # 脉冲因子
    
    return features

# 使用示例
# 假设 data 是你的振动信号数组
# result = time_domain_features(data)
# for key, value in result.items():
#     print(f"{key}: {value:.4f}")
📊 实际案例对比:
特征正常轴承外圈故障内圈故障滚动体故障
RMS0.320.891.120.76
峰值因子4.17.89.26.5
峭度2.95.68.34.7
脉冲因子5.211.314.19.8

数据来源:某型深沟球轴承,转速1800rpm,径向负载500N

4.5 时域分析的局限性

说了这么多时域分析的好处,我也得泼盆冷水。

时域统计特征虽然计算简单、物理意义明确,但它有一个致命弱点:无法区分故障类型。你只能知道“有故障”,但不知道是外圈、内圈还是滚动体。这就好比医生知道病人发烧了,但不知道是感冒还是肺炎。

所以,时域分析通常作为初步筛查手段。如果时域特征异常,再进入频域分析、包络分析等更精细的方法。

我个人习惯的流程是:

  1. 先算RMS和峭度,快速判断有无异常
  2. 如果异常,看峰值因子和脉冲因子,判断冲击严重程度
  3. 如果确认有故障,进入频域分析定位故障位置
💡 最后一个小建议: 不要只看单一特征。RMS正常不代表没故障,峭度高也不一定是轴承问题。把多个特征结合起来看,就像拼图一样,才能看到全貌。

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