4. 时域分析基础:均值、均方根值、峰值、峰峰值、波形因子、峭度指标

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

说实话,时域分析是振动信号处理里最直观、也最容易被忽视的一块。很多人一上来就搞FFT、搞小波变换,结果连最基本的均值都没搞清楚,后面分析全跑偏了。我刚开始做振动分析那会儿,也犯过这种错误。

今天咱们就把时域里的几个核心指标掰开揉碎了讲清楚。你想想看,一个振动信号摆在你面前,你第一眼想看什么?无非就是它有多大、有多抖、有没有尖刺。这几个指标,就是回答这些问题的。

4.1 均值(Mean)—— 信号的直流分量

均值,说白了就是信号的平均水平。数学上很简单:

μ = (1/N) * Σ x[i]   (i = 1 到 N)

但在工程实践中,均值往往代表传感器的偏置电压,或者安装时的预紧力。我遇到过一台离心泵,振动值一直偏大,查了半天发现是加速度计安装螺栓拧太紧了,均值直接漂了0.2g。去掉均值后,真正的振动幅值其实在正常范围内。

避坑指南: 我曾经在分析齿轮箱数据时,忘了去除均值就直接算RMS,结果RMS值比实际大了30%。记住:做时域分析前,第一件事就是去均值(去直流分量)。

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。如果你算出来偏离这个值很多,说明信号里有谐波或者噪声。

实战技巧: 我在分析风机振动时,发现波形因子从1.12变成了1.35。一查,原来是叶片通过频率的谐波分量增加了。波形因子虽然简单,但能快速判断信号是否"干净"。

4.5 峭度指标(Kurtosis)—— 冲击的探测器

峭度,也叫峰度,衡量信号分布的"尖峭"程度。公式:

Kurtosis = (1/N) * Σ ((x[i] - μ) / σ)^4

其中σ是标准差。正态分布的峭度是3。工程上常用"超峭度"(Kurtosis - 3),这样正态分布就是0。

峭度指标是我做轴承故障诊断时的"杀手锏"。为什么?

  • 正常轴承:峭度 ≈ 3(接近正态分布)
  • 早期故障:峭度 > 3(出现冲击脉冲)
  • 严重故障:峭度可能回落(冲击被平滑)

我曾经用峭度指标提前两周预警了一台轧机轴承的保持架断裂。当时RMS值只上升了5%,但峭度从3.2飙到了5.8。拆开一看,保持架已经裂了一道缝。

核心要点: 峭度对早期冲击特别敏感,但它不能区分是轴承故障还是齿轮啮合冲击。所以一定要结合频谱分析一起看。

4.6 知识体系总览

下面这张图,把时域分析的核心指标串起来了。你可以把它当作一个检查清单:拿到信号后,按这个顺序过一遍,基本不会漏掉关键信息。

时域分析核心指标体系 振动信号时域分析 幅值特征 能量特征 分布特征 均值 峰值 峰峰值 均方根值 (RMS) 波形因子 (RMS/整流均值) 峭度 (Kurtosis) 超峭度 (K-3) 实战应用建议 先看RMS判断整体烈度 → 再看峭度检测冲击 → 最后用峰值确认报警阈值

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()
运行结果解读: 你会发现峭度明显大于3,因为我们在信号里加了冲击。如果去掉冲击,峭度会接近3。这就是峭度检测冲击的原理——简单粗暴,但有效。

好了,时域分析的基础指标就讲到这里。这些指标虽然基础,但用好了能解决80%的现场问题。下次你拿到振动数据,别急着上频谱,先把这几个指标算一遍,心里就有底了。


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