4. 时域分析基础:均值、均方根值、峰值、峰峰值、波形因子、峭度指标
各位同学,欢迎来到时域分析这一讲。
说实话,时域分析是振动信号处理里最直观、也最容易被忽视的一块。很多人一上来就搞FFT、搞小波变换,结果连最基本的均值都没搞清楚,后面分析全跑偏了。我刚开始做振动分析那会儿,也犯过这种错误。
今天咱们就把时域里的几个核心指标掰开揉碎了讲清楚。你想想看,一个振动信号摆在你面前,你第一眼想看什么?无非就是它有多大、有多抖、有没有尖刺。这几个指标,就是回答这些问题的。
4.1 均值(Mean)—— 信号的直流分量
均值,说白了就是信号的平均水平。数学上很简单:
μ = (1/N) * Σ x[i] (i = 1 到 N)
但在工程实践中,均值往往代表传感器的偏置电压,或者安装时的预紧力。我遇到过一台离心泵,振动值一直偏大,查了半天发现是加速度计安装螺栓拧太紧了,均值直接漂了0.2g。去掉均值后,真正的振动幅值其实在正常范围内。
4.2 均方根值(RMS)—— 信号的能量代表
均方根值,也叫有效值。它反映的是信号的能量大小。公式:
RMS = sqrt( (1/N) * Σ x[i]² )
为什么RMS这么重要?因为对于旋转机械,RMS值直接对应振动烈度。ISO 10816标准里,评判设备状态好坏,用的就是RMS值。
我个人习惯,在监测滚动轴承时,会同时看RMS和峰值。RMS稳定上升,说明磨损在加剧;RMS突然跳变,那可能是出现了冲击性故障。
| 指标 | 物理含义 | 典型应用 |
|---|---|---|
| 均值 | 直流分量/偏置 | 传感器校准、去除趋势项 |
| RMS | 信号能量/有效值 | 振动烈度评估、ISO标准 |
| 峰值 | 最大瞬时幅值 | 冲击检测、保护报警 |
| 峰峰值 | 振动摆幅 | 位移监测、轴系对中 |
4.3 峰值与峰峰值(Peak & Peak-to-Peak)
峰值就是信号的最大绝对值。峰峰值是最大值减最小值。
Peak = max(|x[i]|)
Peak-to-Peak = max(x[i]) - min(x[i])
这里有个容易混淆的点:对于正弦波,峰值是RMS的√2倍。但实际振动信号不是纯正弦波,所以这个关系不成立。我建议你直接用原始数据算,别偷懒用换算。
峰峰值在位移监测中特别常用。比如汽轮机的轴振,通常用峰峰值表示,单位是微米。我记得有一次现场调试,轴振峰峰值从80μm突然涨到150μm,我一看波形,明显是出现了半频涡动——这就是峰峰值的好处,能直观反映摆幅大小。
4.4 波形因子(Form Factor)
波形因子 = RMS / 均值绝对值。但注意,均值去直流后接近0,所以实际工程中,波形因子通常定义为:
波形因子 = RMS / 整流平均值
整流平均值 = (1/N) * Σ |x[i]|
这个指标有什么用?它告诉你信号的波形形状。纯正弦波的波形因子是1.11。如果你算出来偏离这个值很多,说明信号里有谐波或者噪声。
4.5 峭度指标(Kurtosis)—— 冲击的探测器
峭度,也叫峰度,衡量信号分布的"尖峭"程度。公式:
Kurtosis = (1/N) * Σ ((x[i] - μ) / σ)^4
其中σ是标准差。正态分布的峭度是3。工程上常用"超峭度"(Kurtosis - 3),这样正态分布就是0。
峭度指标是我做轴承故障诊断时的"杀手锏"。为什么?
- 正常轴承:峭度 ≈ 3(接近正态分布)
- 早期故障:峭度 > 3(出现冲击脉冲)
- 严重故障:峭度可能回落(冲击被平滑)
我曾经用峭度指标提前两周预警了一台轧机轴承的保持架断裂。当时RMS值只上升了5%,但峭度从3.2飙到了5.8。拆开一看,保持架已经裂了一道缝。
4.6 知识体系总览
下面这张图,把时域分析的核心指标串起来了。你可以把它当作一个检查清单:拿到信号后,按这个顺序过一遍,基本不会漏掉关键信息。
4.7 实战代码示例
下面这段Python代码,我建议你直接跑一遍。它把今天讲的6个指标一次性算完,还带可视化。
import numpy as np
import matplotlib.pyplot as plt
# 生成模拟信号:正弦波 + 冲击 + 噪声
fs = 1000
t = np.arange(0, 1, 1/fs)
signal = 1.5 * np.sin(2 * np.pi * 50 * t) # 50Hz正弦
signal[200:210] += 3.0 # 模拟冲击
signal += 0.2 * np.random.randn(len(t)) # 噪声
# 去均值
signal_dc = signal - np.mean(signal)
# 计算指标
mean_val = np.mean(signal)
rms_val = np.sqrt(np.mean(signal_dc**2))
peak_val = np.max(np.abs(signal_dc))
pp_val = np.max(signal_dc) - np.min(signal_dc)
rect_mean = np.mean(np.abs(signal_dc))
form_factor = rms_val / rect_mean
kurtosis_val = np.mean((signal_dc / np.std(signal_dc))**4)
print(f"均值: {mean_val:.3f}")
print(f"均方根值: {rms_val:.3f}")
print(f"峰值: {peak_val:.3f}")
print(f"峰峰值: {pp_val:.3f}")
print(f"波形因子: {form_factor:.3f}")
print(f"峭度: {kurtosis_val:.3f}")
# 可视化
plt.figure(figsize=(10, 4))
plt.plot(t, signal, 'b-', linewidth=0.8)
plt.axhline(y=peak_val, color='r', linestyle='--', label=f'峰值={peak_val:.2f}')
plt.axhline(y=-peak_val, color='r', linestyle='--')
plt.axhline(y=rms_val, color='g', linestyle='--', label=f'RMS={rms_val:.2f}')
plt.axhline(y=-rms_val, color='g', linestyle='--')
plt.xlabel('时间 (s)')
plt.ylabel('幅值')
plt.title('时域信号与关键指标')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
好了,时域分析的基础指标就讲到这里。这些指标虽然基础,但用好了能解决80%的现场问题。下次你拿到振动数据,别急着上频谱,先把这几个指标算一遍,心里就有底了。
公众号:蓝海资料掘金营,微信deep3321