第四节:时域分析——峰值、峰峰值、均值、均方根值、波形因子、峭度
各位工程师朋友,大家好。今天我们来聊聊时域分析。
很多人一上来就搞频谱、包络谱,觉得时域太简单。其实不然。我个人习惯是:拿到数据,先看时域波形。为什么?因为时域信号最直观,很多故障特征在时域里一眼就能看出来。
咱们这节课,就把时域里最常用的几个指标讲透。峰值、峰峰值、均值、均方根值、波形因子、峭度。这些概念你肯定都听过,但真正用对、用好,还是有点门道的。
一、时域分析的核心逻辑
先看一张图,帮你建立整体认知。
这张图把时域指标分成了三类:幅值参数、能量参数、统计参数。咱们一个一个来拆解。
二、峰值与峰峰值
峰值,就是信号的最大绝对值。说白了,就是波形最高点到零线的距离。
峰峰值,是最大值减最小值。也就是波形最高点到最低点的距离。
这两个指标有什么用?
- 峰值:适合检测冲击信号。比如齿轮断齿、轴承滚动体故障,瞬间冲击会产生很高的峰值。
- 峰峰值:适合评估振动烈度。很多标准(比如ISO 10816)就是用峰峰值来评判设备状态的。
重要提示:峰值对单次冲击很敏感,但容易受噪声干扰。我建议你配合滤波使用,别直接拿原始数据算峰值。
三、均值与均方根值
均值,就是信号的平均值。对于振动信号来说,均值通常接近零。为什么?因为振动是围绕平衡位置来回摆动的。
但注意了——如果均值明显偏离零,说明传感器有直流偏置,或者设备有单向受力的情况。我在现场遇到过一台风机,均值一直偏大,查了半天发现是传感器安装底座松了。
均方根值(RMS),这个才是重点。它反映了信号的有效能量。
计算公式很简单:
RMS = sqrt( (1/N) * Σ x[i]² )
说白了,就是把每个点平方,求平均,再开方。
RMS为什么重要?因为它代表了振动的「有效值」。你想想看,一个持续的高RMS值,说明设备一直在承受较大的振动能量,这对寿命是有影响的。
| 指标 | 物理含义 | 典型应用 |
|---|---|---|
| 峰值 | 最大瞬时幅值 | 冲击检测、齿轮故障 |
| 峰峰值 | 振动总行程 | ISO标准评估、低速设备 |
| 均值 | 信号直流分量 | 传感器偏置检查、单向受力 |
| 均方根值 | 有效振动能量 | 轴承磨损、不平衡、松动 |
四、波形因子
波形因子 = RMS / 均值(取绝对值后的均值)。
这个指标有什么用?它反映了波形的「形状特征」。
- 标准正弦波:波形因子 ≈ 1.11
- 方波:波形因子 = 1.0
- 脉冲信号:波形因子会很大
我在诊断一台压缩机时,发现波形因子从1.1突然跳到了1.8。拆开一看,阀片已经碎了一块。波形因子对波形畸变非常敏感,是个好用的辅助指标。
实用技巧:波形因子配合趋势分析效果更好。单独看一个数值意义不大,但跟踪它的变化趋势,能提前发现故障苗头。
五、峭度
峭度,英文叫Kurtosis。这个指标有点意思,它衡量的是信号分布的「尖峭程度」。
计算公式:
Kurtosis = (1/N) * Σ ((x[i] - mean) / std)⁴
嗯,这里要注意——峭度对冲击信号极其敏感。
- 正常振动信号:峭度 ≈ 3(高斯分布)
- 有冲击故障:峭度 > 3,甚至能到10以上
- 纯正弦波:峭度 ≈ 1.5
我曾经用峭度检测一个轴承的早期故障。RMS值还没什么变化,峭度已经从3.2涨到了5.8。拆检发现保持架已经出现裂纹。峭度是早期故障的「侦察兵」。
避坑指南:峭度对单次强冲击非常敏感,但也会被随机噪声干扰。我曾经被一个松动的螺栓骗过——峭度很高,拆开一看只是螺栓松了,轴承本身没问题。所以峭度要结合其他指标一起看,别单独下结论。
六、实战应用:如何组合使用
说了这么多,到底怎么用?我分享一个实战套路。
- 第一步:看RMS趋势。RMS持续上升,说明设备状态在恶化。
- 第二步:看峭度。如果峭度突然升高,说明出现了冲击性故障。
- 第三步:看波形因子。波形因子配合峭度,可以判断是持续冲击还是偶发冲击。
- 第四步:看峰值/峰峰值。确认冲击的幅值大小,评估严重程度。
举个例子。我处理过一台离心泵,RMS缓慢上升了两个月,峭度突然从3.0跳到7.2。波形因子也从1.2涨到1.6。我判断是轴承出现了点蚀。拆检确认,滚动体上已经有明显的剥落坑。
你看,这几个指标组合起来,就像一套组合拳。单独用哪一个都有局限,但放在一起,诊断准确率能提高不少。
七、代码实现
最后,给一段Python代码。你可以直接拿去用。
import numpy as np
def time_domain_features(signal):
"""
计算时域特征指标
signal: 一维数组,振动信号
"""
# 峰值
peak = np.max(np.abs(signal))
# 峰峰值
peak_to_peak = np.max(signal) - np.min(signal)
# 均值
mean = np.mean(signal)
# 均方根值
rms = np.sqrt(np.mean(signal**2))
# 波形因子
# 注意:均值取绝对值后再计算
abs_mean = np.mean(np.abs(signal))
if abs_mean != 0:
form_factor = rms / abs_mean
else:
form_factor = 0
# 峭度
n = len(signal)
if n > 1 and np.std(signal) != 0:
kurtosis = np.mean((signal - mean)**4) / (np.std(signal)**4)
else:
kurtosis = 0
return {
'峰值': round(peak, 4),
'峰峰值': round(peak_to_peak, 4),
'均值': round(mean, 4),
'均方根值': round(rms, 4),
'波形因子': round(form_factor, 4),
'峭度': round(kurtosis, 4)
}
# 示例用法
# features = time_domain_features(your_signal)
# print(features)
这段代码我用了很多次,稳定可靠。你直接复制到项目里就能用。
好了,时域分析的核心指标就讲到这里。记住一句话:时域是基础,别小看它。很多故障在时域里就已经暴露了,只是你没注意到而已。
公众号:蓝海资料掘金营,微信deep3321