第1章:信号处理基础——时域与频域、采样定理、傅里叶变换

各位同学,大家好。我是你们这门课的老朋友。说实话,搞齿轮箱故障诊断这么多年,我最大的体会就是:信号处理不是万能的,但不懂信号处理是万万不能的。今天咱们就从最基础的东西聊起。

你想想看,一个齿轮箱转起来,振动信号里藏着多少秘密?轴转一圈、齿轮啮合一次、轴承滚珠过一遍——这些信息全混在一起。怎么把它们拆开?这就是信号处理要干的事。

1.1 时域信号 vs 频域信号——两种看问题的角度

先问大家一个问题:你拿到一段振动波形,第一眼会看什么?

大多数人会看幅值大小、有没有冲击。这就是时域分析——信号随时间怎么变化。横轴是时间,纵轴是幅值。我刚开始做现场诊断时,就靠看时域波形判断齿轮有没有断齿。但说实话,光看时域,很多信息是藏着的。

举个例子。一个50Hz的正弦波,和一个100Hz的正弦波叠加在一起。时域上看,就是一条弯弯曲曲的线。你能一眼看出它包含两个频率吗?很难。但如果你把它变到频域里,横轴变成频率,纵轴变成幅值——好家伙,两个尖峰清清楚楚地立在那里。

我个人习惯把时域比作「听一首歌的旋律」,频域比作「看这首歌的乐谱」。旋律能听出情绪,但乐谱才能告诉你每个音符是什么、有多高。

核心要点:

  • 时域信号:直观,适合看冲击、幅值变化、周期性
  • 频域信号:精准,适合识别频率成分、分离信号源
  • 两者是同一信号的不同表达,缺一不可

我在项目中遇到过一件事:一台减速机振动偏大,时域波形看着挺正常,就是幅值稍微高了点。结果一做频谱,发现啮合频率的边频带异常丰富——典型的齿轮磨损特征。要是只看时域,这问题就漏过去了。

1.2 采样定理——别让你的数据「说谎」

好,现在问题来了:我们拿到的振动数据,是连续信号吗?

不是。计算机只能处理离散的点。把连续信号变成离散点的过程,叫采样。采样频率多高才够?这就是奈奎斯特采样定理要回答的问题。

定理很简单:采样频率必须大于信号最高频率的两倍。否则,高频信号会伪装成低频信号混进来——这叫混叠

我给大家画个图就明白了。

采样定理示意图:混叠现象 原始高频信号 采样后看到的低频信号(混叠) 采样间隔太大 → 高频被误认为低频 ✅ 正确做法:采样频率 ≥ 2 × 信号最高频率

你看,红色虚线是真实的高频信号。如果我们采样太稀疏(绿色点),把这些点连起来,得到的是蓝色实线——一个低频信号。这就是混叠。你明明测的是高频振动,结果频谱上却出现了一个低频尖峰。诊断方向全偏了。

⚠️ 避坑指南:

我曾经吃过这个亏。现场测齿轮箱振动,采样频率设了2000 Hz,觉得够用了。结果频谱上莫名其妙出现一个200 Hz的尖峰,查了半天没找到振源。后来才发现,齿轮啮合频率是1200 Hz,混叠成了200 Hz。从那以后,我每次采样前都会先估算一下信号的可能最高频率。

💡 实用建议:

工程上一般取采样频率为最高频率的2.56倍或3倍。别卡着2倍,留点余量。另外,采样前一定要加抗混叠滤波器,把高于采样频率一半的成分滤掉。这是标准操作,别省。

1.3 傅里叶变换(FFT)——从时域到频域的「翻译器」

好了,现在我们知道了:时域信号不够用,频域信号更清晰。那怎么把时域变到频域?

答案就是傅里叶变换。说白了,它就是一个数学工具,能把任意信号拆解成一系列正弦波的和。每个正弦波有自己的频率、幅值和相位。

公式长这样:

X(f) = ∫ x(t) · e^(-j2πft) dt

别被公式吓到。你只需要记住:傅里叶变换把时间函数变成频率函数。计算机里用的是快速傅里叶变换(FFT),就是傅里叶变换的高效算法版本。

我给大家看一段Python代码,演示怎么对一个简单的振动信号做FFT:

import numpy as np
import matplotlib.pyplot as plt

# 生成一个模拟振动信号:50Hz + 120Hz 叠加
fs = 1000           # 采样频率 1000 Hz
t = np.arange(0, 1, 1/fs)  # 时间向量,1秒
f1, f2 = 50, 120
x = 0.6 * np.sin(2*np.pi*f1*t) + 0.4 * np.sin(2*np.pi*f2*t)

# 做FFT
N = len(x)
X = np.fft.fft(x) / N          # 归一化
freq = np.fft.fftfreq(N, 1/fs) # 频率轴

# 只取正频率部分
half_N = N // 2
X_mag = np.abs(X[:half_N])     # 幅值
freq_pos = freq[:half_N]

# 打印结果
print("前5个频率点的幅值:")
for i in range(5):
    print(f"  {freq_pos[i]:.1f} Hz → {X_mag[i]:.4f}")

# 找到两个主峰
peaks = np.argsort(X_mag)[-2:][::-1]
print(f"\n主频率成分:{freq_pos[peaks[0]]:.1f} Hz, {freq_pos[peaks[1]]:.1f} Hz")

运行这段代码,你会看到两个尖峰:一个在50 Hz,一个在120 Hz。幅值分别是0.6和0.4——和咱们生成信号时设的参数完全一致。这就是FFT的威力:把混在一起的信号拆得清清楚楚。

关于FFT的几个关键点:

  • 频率分辨率 = 采样频率 / FFT点数。点数越多,频率分得越细。但点数多意味着数据长,计算慢。要权衡。
  • 频谱泄漏:如果信号周期不是采样时长的整数倍,能量会「漏」到相邻频率上。解决办法是加窗函数(汉宁窗、海明窗等)。
  • 幅值精度:FFT给出的幅值受窗函数影响。不加窗时,单频信号的幅值最准;加窗后幅值会偏低,需要修正。

我记得有一次做齿轮箱跑合试验,需要监测某个啮合频率的幅值变化。一开始直接用FFT,发现幅值忽大忽小,不稳定。后来才意识到是转速波动导致信号不是整周期截断,频谱泄漏严重。加了汉宁窗之后,数据就稳了。嗯,这些小细节,现场碰一次就记住了。

1.4 本章知识体系总览

最后,我把这一章的核心逻辑画成一张图,方便大家整体把握:

第1章 知识体系:信号处理基础 齿轮箱振动信号 时域 vs 频域 时域:看幅值、冲击、周期 频域:看频率成分、边频带 两者互补,缺一不可 采样定理 fs ≥ 2 × f_max 防混叠:加抗混叠滤波器 工程上取 2.56 倍 傅里叶变换 (FFT) 时域 → 频域的桥梁 频率分辨率 = fs / N 注意频谱泄漏与加窗 核心逻辑: 采集信号 → 正确采样 → 时域观察 → FFT变换 → 频域分析 → 故障诊断

这张图把咱们这一章的核心串起来了。你从齿轮箱上采集振动信号,首先要保证采样正确(采样定理),然后从时域和频域两个角度去看(时域vs频域),最后用FFT把时域变到频域,找到故障特征频率。

说白了,信号处理就是给振动信号「做CT」——一层一层把信息剥出来。后面几章我们会深入讲怎么用这些工具做真正的故障诊断。但今天这些基础,是后面所有内容的地基。地基不牢,楼盖不高。

好,这一章就到这儿。大家回去可以拿一段真实的振动数据试试FFT,看看能不能找到主要的频率成分。动手做一遍,比看十遍都管用。


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