3、时域分析基础:均值、方差、均方根值、峰值因子、峭度等时域指标的计算与解读
各位同行,咱们今天聊聊时域分析。说实话,很多刚入行的朋友一上来就盯着频谱图看,觉得那才叫“高级”。但我个人习惯,拿到一段振动信号,第一件事永远是先看时域波形,算几个最基本的统计指标。
为什么?因为时域指标就像人的体检报告——体温、血压、心率。这些基础数据虽然简单,但能告诉你设备当前“身体状态”的大致方向。频谱分析是CT扫描,时域指标就是血常规,各有各的用处。
核心观点:时域指标是故障诊断的“第一道防线”。它们计算简单、物理意义明确,能快速判断设备是否存在异常。
3.1 均值(Mean)——信号的中心位置
均值,说白了就是信号的平均水平。对于一段离散的振动信号 \( x_1, x_2, ..., x_N \),它的计算公式是:
\[ \bar{x} = \frac{1}{N} \sum_{i=1}^{N} x_i \]
嗯,这里要注意:对于理想的正弦振动信号,均值应该接近于0。因为正半周和负半周会相互抵消。但实际中,如果传感器有直流偏置,或者轴心位置发生了偏移,均值就会偏离0。
我在项目中遇到过一次,某台离心压缩机的振动均值从0.02mm突然跳到了0.15mm。当时现场工程师以为是传感器坏了,我坚持让他们检查轴瓦温度——结果发现是轴瓦磨损导致转子下沉了。你看,一个简单的均值变化,背后可能是严重的机械故障。
实用技巧:均值的变化通常与以下故障相关:
- 轴心位置偏移(轴承磨损、不对中)
- 传感器直流偏置故障
- 转子热弯曲
3.2 方差(Variance)与标准差(Standard Deviation)——信号的波动程度
均值告诉你信号的中心在哪,方差则告诉你信号“散开”的程度。方差的计算公式:
\[ \sigma^2 = \frac{1}{N} \sum_{i=1}^{N} (x_i - \bar{x})^2 \]
标准差就是方差的平方根:\(\sigma = \sqrt{\sigma^2}\)。为什么要有标准差?因为它的量纲和原始信号一致,方便直观理解。
你想想看,一个健康的轴承,振动信号的方差应该相对稳定。如果方差突然变大,说明信号的能量分布变散了——可能是出现了冲击、摩擦或者松动。
我曾经帮一个电厂诊断引风机的振动问题。频谱图上能看到一些边频,但不太明显。我算了一下标准差,发现比历史数据大了将近3倍。后来拆机检查,发现轴承保持架已经断裂了。标准差这个指标,有时候比频谱更敏感。
注意:方差对异常值非常敏感。如果信号中存在单个大幅值的噪声尖峰,方差会被严重拉高。建议在计算前先做简单的异常值剔除处理。
3.3 均方根值(RMS)——信号的有效能量
均方根值,也叫有效值。它是振动信号最常用的指标之一。公式:
\[ X_{RMS} = \sqrt{\frac{1}{N} \sum_{i=1}^{N} x_i^2} \]
均方根值有什么好处?它同时考虑了信号的幅值和持续时间。一个幅值大但持续时间短的冲击,RMS可能并不高;而一个幅值中等但持续稳定的振动,RMS反而会更高。
在ISO 10816标准中,振动烈度就是用RMS来定义的。比如,对于大型旋转机械,RMS值在4.5 mm/s以下属于良好,4.5~11.2 mm/s属于报警区,超过11.2 mm/s就要停机检查了。
| RMS范围 (mm/s) | 设备状态 | 建议措施 |
|---|---|---|
| < 4.5 | 良好 | 正常监测 |
| 4.5 ~ 11.2 | 报警 | 加强监测,安排检修 |
| > 11.2 | 危险 | 立即停机检查 |
我个人习惯,在设备巡检时,会先看RMS的趋势曲线。如果RMS在缓慢上升,说明故障在逐渐发展;如果RMS突然跳变,那就要警惕突发性故障了。
3.4 峰值因子(Crest Factor)——冲击的敏感指标
峰值因子的定义很简单:
\[ C_f = \frac{X_{peak}}{X_{RMS}} \]
其中 \( X_{peak} \) 是信号的峰值(最大绝对值)。
为什么这个指标有用?你想想看,一个纯正弦波的峰值因子是 \(\sqrt{2} \approx 1.414\)。如果信号中存在冲击成分,峰值会变大,但RMS变化不大,所以峰值因子会升高。
对于滚动轴承,早期故障(比如点蚀)会产生周期性冲击,峰值因子会明显上升。但随着故障发展,冲击变得连续,RMS也跟着上升,峰值因子反而可能下降。所以,峰值因子更适合检测早期故障。
经验值参考:
- 正常轴承:峰值因子 3 ~ 5
- 早期故障:峰值因子 5 ~ 10
- 严重故障:峰值因子可能反而下降(因为RMS也大了)
3.5 峭度(Kurtosis)——信号分布的“尖峰”程度
峭度是衡量信号概率分布形状的指标。公式:
\[ K = \frac{1}{N} \sum_{i=1}^{N} \left( \frac{x_i - \bar{x}}{\sigma} \right)^4 \]
对于正态分布信号,峭度值约为3。如果峭度大于3,说明信号分布比正态分布更“尖”——也就是有更多的极端值(冲击)。如果峭度小于3,说明信号分布更“平”——可能是随机噪声占主导。
我记得有一次在风电齿轮箱的故障诊断中,频谱图上几乎看不出异常,但峭度值达到了8.5。我判断是齿轮出现了早期裂纹。后来用内窥镜一看,果然在齿根发现了微裂纹。峭度这个指标,对早期微弱冲击特别敏感。
实用建议:峭度与峰值因子配合使用效果更好。峰值因子对单个大冲击敏感,峭度对连续的小冲击更敏感。两者结合,可以更全面地判断冲击特征。
3.6 代码实现:一键计算所有时域指标
说了这么多理论,咱们来点实际的。下面是我常用的一个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)
# 均方根值
rms_val = np.sqrt(np.mean(signal**2))
# 峰值
peak_val = np.max(np.abs(signal))
# 峰值因子
crest_factor = peak_val / rms_val if rms_val != 0 else 0
# 峭度
kurtosis_val = np.mean((signal - mean_val)**4) / (std_val**4) if std_val != 0 else 0
return {
'均值': mean_val,
'方差': var_val,
'标准差': std_val,
'均方根值': rms_val,
'峰值': peak_val,
'峰值因子': crest_factor,
'峭度': kurtosis_val
}
# 示例:生成一段模拟信号并计算
np.random.seed(42)
t = np.linspace(0, 1, 1000)
normal_signal = np.sin(2 * np.pi * 50 * t) + 0.2 * np.random.randn(1000)
fault_signal = normal_signal.copy()
fault_signal[100:110] += 2.0 # 模拟冲击
print("正常信号指标:")
for k, v in time_domain_features(normal_signal).items():
print(f"{k}: {v:.4f}")
print("\n故障信号指标:")
for k, v in time_domain_features(fault_signal).items():
print(f"{k}: {v:.4f}")
运行这段代码,你会发现故障信号的峰值因子和峭度明显升高,而均值变化不大。这就是时域指标的魅力——用简单的数学,揭示复杂的故障特征。
3.7 知识体系总览
为了让大家更直观地理解这些指标之间的关系,我画了一张图:
这张图把咱们今天讲的内容串起来了。从振动信号出发,四个分支对应不同的时域指标,每个指标都有其特定的应用场景。最下面那条注意事项,是我用真金白银换来的教训——千万别只看一个指标就下结论。
3.8 小结
好了,今天的内容就到这里。咱们回顾一下:
- 均值:信号的中心位置,反映轴心偏移
- 方差/标准差:信号的波动程度,反映能量分散
- 均方根值:信号的有效能量,ISO标准的核心指标
- 峰值因子:冲击的敏感指标,适合早期故障
- 峭度:信号分布的尖峰程度,对微弱冲击敏感
这些指标虽然简单,但用好了就是利器。我建议你在实际项目中,先把这些指标算出来,画成趋势图,再结合频谱分析,诊断准确率能提高不少。
下一章咱们会聊频域分析,到时候你会发现,时域和频域其实是“一枚硬币的两面”。
公众号:蓝海资料掘金营,微信deep3321