4. 振动信号时域统计特征提取

振动信号时域统计特征提取 学习卡片

时域统计特征的计算与基线判读

时域统计特征直接从采样点序列计算,不需要FFT,适合在线快速评估。对一段长度为 N 的振动信号 x[i](单位 mm/s 或 g),本节使用四个核心指标:

  • 均方根值 RMS:反映振动能量总量,RMS = sqrt( (1/N) * Σ x[i]² ),是判断整体振动烈度的首选指标。
  • 峰值 Peak:max(|x[i]|),对冲击敏感,用于捕捉瞬时大幅值。
  • 峰值因子 Crest = Peak / RMS:无量纲,正常轴承约 3~4,出现早期局部损伤时冲击使峰值上升而RMS变化不大,Crest 会明显增大。
  • 峭度 Kurtosis:K = (1/N) * Σ (x[i]-μ)⁴ / σ⁴,正态信号约为 3,冲击成分使其迅速上升,是轴承早期故障的敏感指标。
判读逻辑:RMS 判断“振得有多厉害”,Crest 与峭度判断“振得有多尖”。两者结合可区分“整体劣化”与“局部冲击”。
时域统计特征提取与状态判读流程 振动信号 x[i] N = 8192 点 fs = 10 kHz 时域特征计算 RMS = √(Σx²/N) Peak = max(|x|) Crest = Peak / RMS Kurtosis = Σ(x-μ)⁴/(Nσ⁴) 与基线对比 RMS_base = 2.1 Crest_base = 3.2 Kurt_base = 3.0 阈值 ±20% 状态判读 正常 注意 报警 示例计算数据(教学假设值) 指标 基线值 当前值 偏差 判读 RMS (mm/s) 2.10 2.35 +11.9% 正常 Crest 3.20 4.80 +50.0% 注意 Kurtosis 3.00 5.60 +86.7% 报警 判读逻辑 RMS 偏差 ≤ 20% 且 Crest、峭度正常 → 状态正常 RMS 偏差 20%~50% 或 Crest 明显上升 → 注意,加密监测 RMS 偏差 > 50% 或峭度 > 5 → 报警,安排检修

计算实现与验证

以下 Python 代码对一段模拟的实测振动信号完成上述四个指标的计算,并与基线值对比输出判读结果。信号由正常分量与周期性冲击分量叠加而成,用于演示峭度与峰值因子对冲击的敏感性。

import numpy as np

# ---- 1. 构造教学示例信号(模拟实测振动) ----
fs = 10000          # 采样频率 Hz
N = 8192            # 采样点数
t = np.arange(N) / fs

# 正常分量:转频 25 Hz + 2 倍频,幅值 1.5 mm/s
normal = 1.5 * np.sin(2*np.pi*25*t) + 0.6 * np.sin(2*np.pi*50*t)

# 冲击分量:每 0.1 s 一个衰减冲击(模拟轴承局部损伤)
impact = np.zeros(N)
for k in range(0, N, int(0.1*fs)):
    idx = np.arange(k, min(k+80, N))
    impact[idx] += 3.0 * np.exp(-0.08*(idx-k)) * np.sin(2*np.pi*3000*(idx-k)/fs)

x = normal + impact + 0.2*np.random.randn(N)   # 叠加少量噪声

# ---- 2. 时域统计特征计算 ----
rms = np.sqrt(np.mean(x**2))
peak = np.max(np.abs(x))
crest = peak / rms
mu = np.mean(x)
sigma = np.std(x)
kurt = np.mean((x - mu)**4) / (sigma**4)

print(f"RMS      = {rms:.3f} mm/s")
print(f"Peak     = {peak:.3f} mm/s")
print(f"Crest    = {crest:.3f}")
print(f"Kurtosis = {kurt:.3f}")

# ---- 3. 与基线对比判读 ----
baseline = {"RMS": 2.10, "Crest": 3.20, "Kurtosis": 3.00}
current  = {"RMS": rms, "Crest": crest, "Kurtosis": kurt}

for key in baseline:
    dev = (current[key] - baseline[key]) / baseline[key] * 100
    print(f"{key:8s} 基线={baseline[key]:.2f}  当前={current[key]:.2f}  偏差={dev:+.1f}%")

# 判读规则
if rms > baseline["RMS"]*1.5 or kurt > 5.0:
    status = "报警:安排检修"
elif rms > baseline["RMS"]*1.2 or crest > baseline["Crest"]*1.3:
    status = "注意:加密监测"
else:
    status = "正常"
print("状态判读:", status)
上述信号为教学构造的示例数据,输出数值会因随机噪声种子不同而略有波动。实际使用时,基线值应来自设备健康状态下的多次测量统计,而非单次采样。

结果判读要点

指标正常范围异常趋势典型原因
RMS接近基线 ±20%持续上升不平衡、松动、整体磨损
Crest3 ~ 4明显增大局部冲击、早期点蚀
Kurtosis约 3> 5 且持续轴承/齿轮局部损伤

当 RMS 变化不大但 Crest 和峭度同时上升时,应优先怀疑局部损伤而非整体劣化;反之,RMS 大幅上升而峭度接近 3,则更可能是不平衡或松动等分布性故障。本例的示例数据中 RMS 仅上升约 12%,但峭度升至 5.6,属于典型的“局部冲击”特征。