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.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