news 2026/10/10 3:59:01

频域分析实战:从FFT到振动故障诊断的关键技术解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
频域分析实战:从FFT到振动故障诊断的关键技术解析

做振动测试那阵子,我经常碰到一种情况:时域波形图里信号乱成一团,忙活半天也看不出设备到底哪里不对劲。后来习惯了把信号丢到频域里看,几秒就能锁定问题来源。这就是频域分析的价值所在——把时间轴上的复杂波形拆解成不同频率的分量,让隐藏在细节里的特征无处可藏。这篇内容源于我在教材第2.4节“频域分析”基础上整理的项目笔记,结合实际测试场景做了大量补充,适合刚接触信号处理的技术人员,也适合需要快速上手频谱测试的现场工程师参考。

1. 为什么要绕开时域去折腾频域:一个振动问题的复盘

先讲一次真实经历。某台离心泵运行时有异响,现场测振动加速度信号,时域波形看起来就是一堆高低不等的毛刺,峰值大概2.3g,整体没有明显的周期性。按常规流程判断,可能觉得“振动不算大,先跑一段时间看看”。但把这段信号做FFT变换之后,频谱里在293Hz处冒出一个非常干净的尖峰,旁边还有两组边带。查了泵的转速,发现转频是29.5Hz,而这个293Hz刚好是叶片通过频率(叶片数10乘以转频)。边带间距约9.8Hz,对应保持架故障频率的特征。后来拆泵检查,果然发现叶轮吸入口有气蚀损伤,保持架滚道也有了轻微剥落。

这个案例说明一个核心问题:时域波形是多个振动源的叠加结果,直观但混杂。频域分析的目标就是把它拆开,让不同振动源各占一个频率位置,再结合设备结构参数反推故障类型。如果不做频域变换,可能要在时域里做数理统计、看峰值因子、看波形指标,绕很多弯儿还未必能定位到具体部件。

频域分析在实际项目里有几个典型用途:

  • 设备状态监测与故障诊断:轴承故障、齿轮啮合问题、不平衡、不对中都有对应的特征频率。
  • 音频与语音处理:音高识别、降噪、回声消除。
  • 电力系统谐波分析:评估电网谐波污染程度,查找谐波源。
  • 生物医学信号:心率变异性分析、脑电节律提取、肌电信号频域特征。
  • 振动噪声控制:通过模态分析识别结构共振频率,调整结构避开共振带。

这些场景共同的特点是:目标特征在时域里不直观,但在频域里往往表现为单根谱线或窄带凸起。频域分析不是替代时域,而是把时域看不清的信息翻出来,作为诊断判断的重要依据。

我刚做这行时也走过弯路。拿到信号上来就做FFT,结果频谱底部全是漏出来的“山包”,看啥都像故障。后来才明白,FFT之前的采样设置、窗函数选择、平均次数,这些听起来枯燥的参数决定了一张频谱能不能用。本节先把频域分析“为什么值得做”讲清楚,后面几节再从原理和实操细节逐步展开。

2. 从傅里叶变换到FFT:时间轴与频率轴的映射逻辑

频域分析的数学基础是傅里叶变换。它做的事情本质上是把一个时域信号分解为一系列正弦波的加权叠加。任何一个满足条件的信号x(t),都可以写成:

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

产物X(f)是复数,包含幅值和相位两个信息。幅值告诉我们“在这个频率上信号有多强”,相位告诉我们“这个分量的初始角度”。实际工程中最常用的是幅值谱,相位谱在模态分析、传递函数测量等场景用得多一些。

对于第二章内容,我习惯用“混音”来比喻傅里叶变换:一段交响乐录音是几十种乐器声音混合的结果,人耳能直接听出小提琴在哪、大鼓在哪,靠的就是耳蜗里频域分析的生物机制。FFT就相当于给信号做一台“频率筛子”,把混在一起的成分按频率摊开到一张桌面上。

2.1 离散傅里叶变换与FFT的关系

现实中的信号经过采样后变成离散序列。对离散序列做傅里叶变换,叫做离散傅里叶变换(DFT),直接按公式计算N个点的DFT,运算量是N²次复数乘法。当N是1024时,大约要做100万次运算,可以接受。但当N到达65536时,直接算就变得非常慢。FFT(快速傅里叶变换)利用旋转因子的对称性和周期性,把运算量降到N·log₂(N),这就是FFT能成为工业标准算法的根本原因。

Python里最常用的是NumPy库的numpy.fft.fft函数,底层封装了FFTPACK和FFTW的算法,做64K点变换速度非常快,完全满足在线监测系统的实时性需求。

2.2 采样率与奈奎斯特频率的边界

采样定理规定,要无失真地重建一个最高频率为f_max的信号,采样率f_s必须不低于2·f_max,否则会发生频率混叠。FFT结果里能显示的最大频率分量是f_s/2,这个值叫奈奎斯特频率。例如采样率是25600Hz,奈奎斯特频率就是12800Hz。如果信号里存在超过12800Hz的成分,会在频谱里折叠到低频区域形成伪峰,看起来像真实成分,其实是混叠的产物。

做现场测试时,我习惯在数据采集前端加抗混叠滤波器,一般设置为测试频率上限的0.8倍。比如想看5000Hz以内的频谱,采样率设12800Hz,低通滤波截止频率5000Hz左右,这样基本能杜绝混叠问题。

2.3 频率分辨率与采样时长强绑定

频谱里相邻两根谱线之间的间隔叫频率分辨率,公式是Δf = 1/T,其中T是采样总时长。T越长,谱线越密,频率分辨率越高。1600Hz采样率下采样1秒,分辨率只有1Hz;采样10秒,分辨率能做到0.1Hz。这个关系经常被忽视——有人想要高分辨率,结果只采了0.5秒数据,频谱里两根相邻故障边带挤在一起,根本分不开。

但也别陷入一个误区:为了追求极致分辨率无限加长采样时间。对旋转机械来说,转速波动会让谱线变宽,过长的采样时间反而会把峰值“抹”平。经验值是在保证能分辨目标最小频率间隔的前提下,采样时长控制在几十秒以内。先估算目标频率间隔Δf_min,再反推T_min = 1/Δf_min,这是做参数预算的第一步。

3. 频谱计算里绕不开的窗函数与平均处理

直接对有限长度采样段做FFT,相当于给无限长的信号硬切了一个矩形窗口。切出来的两端如果不连续,频谱里就会产生能量泄漏——本应该集中在一根谱线上的能量,像墨水晕开一样糊到两侧的频段,真实峰值被压低,旁边多出成片的假分量。这就是为什么要加窗。

3.1 窗函数怎么选:从矩形窗到布莱克曼窗

窗函数的实质是让采样段两端平滑地衰减到零,减少截断跳变。不同窗函数的主瓣宽度和旁瓣高度不同,各有适用场景,我整理了一个对比表:

窗函数主瓣宽度旁瓣衰减频率分辨率幅值精度适用场景
矩形窗最窄13dB(较差)最好较差短时瞬态信号、校准测试
汉宁窗较宽31dB好较好通用振动分析,多用于旋转机械
哈明窗较窄43dB较好好语音、随机信号处理
布莱克曼窗最宽58dB差很好需要极低旁瓣的谐波分析

以汉宁窗为例,它计算式是w(n) = 0.5(1 - cos(2πn/(N-1)))。实测下来,对连续平稳振动信号,加汉宁窗之后再变换,幅值误差大概能控制在1%以内,旁瓣也不会把邻近的小峰值盖住。如果是做阶次跟踪分析或整周期截取,可以优先考虑矩形窗——它能做到不衰减幅值,前提是采样时长正好是信号周期的整数倍,这在变转速工况下很难保证。

3.2 频谱平均:时域平均与频域平均

现场信号普遍带噪声。理论上FFT也会把噪声平均地分布到整个频带里,但个别随机毛刺仍然会形成假峰。处理办法是做平均。

  • 时域平均:把多段时域信号先叠加再平均,能抑制周期性信号中与触发信号不同步的成分,适合齿轮、轴承故障分析。
  • 频域平均:对多段FFT幅值谱做平均,按平均方式又分为线性平均、指数平均和峰值保持。线性平均用于抑制随机噪声,指数平均侧重跟踪缓慢变化的过程,峰值保持用于捕捉瞬态最大振动。

我现场做轴承振动测量时,一般设置为16次线性平均。采样率25600Hz,每段采样0.4秒,16段总耗时6.4秒左右。这组参数测出来的谱线稳定,底噪平直,重复性很好。

3.3 零填充:看着变密了,但不会变“真”

有些初学者发现分辨率不够,就拼命补零。零填充(zero padding)确实会让频谱曲线看起来更光滑、峰值位置更精确,但物理分辨率一点都没变——补零并没有增加真实采样时长,只是对频谱做了插值。如果两根真实谱线的间隔小于1/T,补再多零也分不开它们。真正提高分辨率的方法只有一个:延长采样时间。

做实际项目时,我会先用短采样快速预览整段频谱,锁定关心的频段范围,再用长时间采样高分辨率分析细节。这样效率高,也不会把补零当成灵丹妙药。

提示:加窗会引起幅值衰减,必须做幅值恢复修正。通常是把窗函数求和后除以点数得到恢复系数(如汉宁窗约0.5,修正时乘以2),如果用的是分析软件,要确认它的幅值校正默认开启。

4. 读懂频谱图:幅值谱、功率谱与那些容易被误读的信号

把FFT跑完拿到频谱,不等于完成分析。实际操作中,读谱和写谱一样关键,里面几个常见的“坑”值得多说几句。

4.1 三种谱的意义与单位选择

FFT直接算出来的是复数谱,工程上常用三种转换结果:

  • 幅值谱:取绝对值,单位与原始信号一致(如振动速度mm/s),对单一频率成分,幅值对应该频率正弦分量的真实峰值。
  • 功率谱:幅值谱的平方,反映能量分布,突出大峰值,但小信号容易被压扁。
  • 功率谱密度PSD:功率谱除以频率分辨率,单位变成g²/Hz,具有归一化意义,适合比较不同分辨率下的随机振动水平。

旋转机械诊断一般用幅值谱,方便直接对设备标准(如ISO 10816系列给出速度有效值)做比对。随机振动环境试验适合用PSD,才能在统一基准上比较不同测量参数下的数据。测噪声信号时常用功率谱,因为声学里更关注能量而不是瞬时幅值。

4.2 频谱底噪的量级有意义

一张正常频谱,底部应该是平的,起伏在几个dB以内。如果底部像山脉一样起伏很大,要么是采样段太短,随机起伏没平均掉;要么是信号本身有强烈的调幅调频现象,比如齿轮箱的啮合频率两侧经常会看到成对出现的边带。

频谱里的“树叶”底噪平均高度,反映了系统噪声底限。例如一台加速度传感器灵敏度10mV/g,配恒流源供电,FFT平均64次后底噪大约能到0.001g²/Hz量级。如果底噪明显高于这个水平,先检查测量链路——传感器是否松动、线缆是否接触不良、屏蔽层是否正常接地,这些问题在频谱上比在时域里更容易发现。

4.3 峰值解读:基频、谐波、边带和“假峰”

频谱中每一根峰值都应该有说法,我给现场工程师培训时总结过一套初判套路:

  • 基频峰值:和转频(或者电源频率50Hz)对应,能量大小反映不平衡或基础松动程度。
  • 谐波峰值:出现在基频整数倍处,常见于不对中、轴弯曲、齿轮啮合问题。
  • 边带:围绕某个中心频率对称分布的成对谱线,间距等于调制频率,常见于轴承故障、齿轮局部损伤。
  • 异步峰:和数据采集系统时钟或干扰源有关,比如某条峰值正好是100Hz及其倍频,先查工频干扰,别急着拆设备。

最容易误判的是频谱泄漏造成的裙边峰。某次我测一个风机的振动,频谱在转频附近出现一堆密集峰,乍一看很像故障边带,仔细查才发现是转速波动大+加矩形窗导致的。换成汉宁窗、增加平均次数,那些峰就消失了。所以遇到“可疑峰值”,要养成改变参数重测的习惯——真实故障频率会在不同窗函数和平均次数下稳定出现,泄漏伪峰则会明显变形甚至消失。

4.4 对数坐标让动态范围更清楚

频谱图默认用线性坐标,优点是低幅值区域看得清,缺点是大峰值和小峰值同时存在时,小峰值会被压成一条直线。我习惯先看线性坐标的整体,再切到对数坐标(dB)观察底噪和小边带。比如在1000Hz处有5g的大峰,1Hz处只有0.02g的小峰,线性坐标下小峰完全看不见,对数坐标下两者都能兼顾。频谱的纵轴单位改成dB参考1g,一幅图就能容纳比1000:1还大的动态范围。

5. 用一个滚动轴承故障案例走完频域分析全流程

理论讲了不少,这里用一个实际滚动轴承外圈故障案例串起整个操作过程,读者可以照这个流程复现。

5.1 工况参数与采集设置

被测对象是某输送机减速箱输入轴端的圆柱滚子轴承,型号NU2308EM。转速实测918r/min,换算转频fr约15.3Hz。轴承几何参数:滚动体数量z=13,滚动体直径d=17.5mm,节圆直径D=100mm,接触角α=0°。采样率定在25600Hz,低通滤波截止5000Hz,采样时长1秒,采用汉宁窗,线性平均16次,加速度传感器磁座吸附在轴承座正上方,灵敏度10mV/g。

5.2 特征频率计算

轴承故障特征频率按材料接触关系公式计算:

外圈故障特征频率BPFO = (z/2) · fr · (1 - (d/D) · cosα)

代入数值:BPFO = (13/2) × 15.3 × (1 - 17.5/100) ≈ 99.5/2 ≈ 82.2Hz

内圈BPFI = (z/2) · fr · (1 + (d/D) · cosα) ≈ 6.5 × 15.3 × 1.175 ≈ 117Hz

滚动体外圈单点故障频率BSF ≈ 68.3Hz,保持架故障频率FTF ≈ 6.4Hz。

计算过程看起来繁琐,但实际做判断时只需要记住特征频率落在哪个频段:外圈故障不到100Hz,内圈约117Hz,都远低于采样率,无需担心混叠。

5.3 FFT计算代码与频谱初判

以下是我用的简化Python示例,直接调NumPy完成FFT和幅值谱提取:

import numpy as np import matplotlib.pyplot as plt fs = 25600 # 采样率 t = 1.0 # 采样时长 n = int(fs * t) # 采样点数 # 假设 data 是从采集卡读出的加速度数组,长度接近于n # data = np.fromfile('vibration.dat', dtype=np.float32) win = np.hanning(n) data_win = data[:n] * win y = np.fft.rfft(data_win) mag = 2.0 * np.abs(y) / n # 乘以2得到单边谱幅值 freq = np.fft.rfftfreq(n, 1/fs) # 只看0~500Hz频段 mask = (freq >= 0) & (freq <= 500) plt.plot(freq[mask], mag[mask]) plt.xlabel('Frequency [Hz]') plt.ylabel('Acceleration [g]') plt.grid(True) plt.show()

频谱图上最显著的峰值出现在82Hz附近,幅值约0.35g,旁边还有倍频164Hz和246Hz,衰减依次降低。再看82Hz两边的边带,间距约6.3Hz,和FTF计算值接近。这个“特征频率+边带低频调制”的组合,基本可以判定外圈滚道存在局部损伤。

5.4 包络谱进一步确认

如果光靠幅值谱不够决断,可以做包络分析。思路是先把原始信号用带通滤波锁到故障特征频率附近的共振频带(比如这个案例选2000~5000Hz带通),再取包络,对包络信号做FFT,就得到包络谱。包络谱里故障特征频率会非常干净地冒出来,谐波也清晰可辨。实际测得包络谱在82Hz有明显单峰,倍频164Hz、246Hz也能看见,这时故障结论基本跑不了。

包络谱的原理是:滚动体撞击局部缺陷时产生冲击,激发结构高频共振,共振的幅值被缺陷频率调制。对高频段做包络,相当于解调,把调制信号恢复出来。

5.5 检修验证与参数复盘

拆开轴承实测之后发现外圈滚道有一处约3mm宽的剥落坑,损伤位置和频谱判断一致。这个案例复盘后有两条经验值得记录:

  • 传感器安装位置影响极大。之前吸在外壳侧面,特征频率幅值只有正确位置的1/3左右,包络谱里几乎看不到故障特征。改到轴承座正上方之后,信号能量集中,故障特征清晰可辨。
  • 特征频率理论计算值受轴承尺寸参数影响,不同厂家同型号轴承的内外径槽曲率与游隙略有差异,判断时允许±2%左右偏差。如果做了温度补偿和转速同步测量,理论频率与实际频率误差会更小。

6. 频域分析进阶方向与我在项目里反复用到的经验

频域分析做到后面,基础FFT不够用的情况越来越多。这里整理我工作里实际用到的三个扩展方向,以及总结出来的一些习惯做法,供读者参考。

6.1 倒频谱:解卷积的一把好手

倒频谱本质是对功率谱做一次逆FFT,横轴单位叫“倒频率”,单位是秒。它能再把频谱上周期性的边带周期“压”回一根谱线,非常适合处理齿轮箱这种多个调制源叠加的复杂信号。齿轮箱频谱里有好几对边带,间距各不相同,直接看图谱非常费劲。把倒频谱画出来,每个边带间隔对应一根清晰的谱峰,识别效率高很多。我处理齿轮箱故障时,常和包络谱搭配使用,一个找调制源,一个确认故障频率。

6.2 短时傅里叶变换与小波变换:对付非平稳信号

FFT默认信号是平稳的,也就是统计特性不随时间变化。但设备启停过程、冲击响应、变速工况下的信号都不是平稳的。短时傅里叶变换(STFT)把信号切成短段,逐段做FFT,得到频率随时间变化的谱图;小波变换更进一步,对不同频段自动调节时间窗口,低频看长时间、高频看短时间,适合捕捉瞬态冲击。

做启停机分析时,我用STFT画出振动瀑布图,能直观看到转频穿越结构共振点时的振动放大过程。变速机组的阶次跟踪也有类似效果,但需要专门的转速通道。STFT窗口长度选多少需要权衡:窗口越长,频率分辨率越高,时间分辨率越差;窗口越短则相反。经验是先根据转速变化率估计最多能容忍的时间模糊,再定窗口长度。

6.3 多通道频域分析:相位比幅值更关键

幅值谱告诉我们“某频率有多大”,相位谱则告诉我们“不同测点之间的先后关系”。做模态试验时,我们同时测量激励点和若干个响应点的频响函数,从相位信息里识别振型;做动平衡时,用键相脉冲锁定转频相位,再根据试重前后的振动矢量变化,计算影响系数。

这里提示一个容易忽略的细节:FFT输出的相位初始值和数据采集起点有关,不同段数据之间没有可比性,除非用了外部触发或键相脉冲做整周期同步。所以一般相位分析都要配转速脉冲信号,没有同步信号时,相位谱里最可能体现的是相对相位关系。

6.4 我反复踩过然后记住的坑

最后列几条我在频域分析项目里实际踩过的坑,没什么理论高度,但特别实用:

  1. 换上新的采集卡后,先做一次自检校准再测数据,通道不平坦度会直接影响频谱幅度偏置。
  2. 做加速度积分得到速度谱时,数据要先去掉趋势项再做FFT,否则零频附近会出现一大片假能量。
  3. 传感器低温环境下灵敏度漂移明显,冬天户外测试前要把传感器预热稳定,再做一次静态偏置检查。
  4. 数据文件命名必须带转速记录。有一次回看历史数据做对比,频率轴和转速对应不上,排查半天才发现当日转速记录漏了,导致特征频率换算没法定标。
  5. FFT分析软件的分辨率带宽带来了“底噪压低”的假象:分辨率从10Hz压窄到1Hz,随机底噪会下降,但真实信号峰值不变。对比不同时期的频谱时,务必保持相同的分辨率参数和平均次数,否则对比结果没有意义。

如果自己写FFT脚本,建议手边准备一组标准正弦信号(已知频率和幅值)做脚本验证。我常用的是1kHz正弦波加50Hz正弦波,幅值分别设为1和0.3,采出来看FFT能不能在两条谱线上给出正确的幅值比和频率位置。能把这步跑通,再放心处理现场数据。

频域分析这个工具,用不好的人觉得它抽象,用顺手的人会发现它就像放大镜——时域、频域互为佐证,才能把设备状态看得透彻。我的做法是每测一组数据都先存好原始时域波形,再做FFT处理,后面需要做包络谱或者STFT随时可以回头取。坚持这个习惯之后,很多“查不到”的问题,最后都能在前面埋好的数据里找出原因来。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 3:58:48

Q学习梯度滤波:提升强化学习训练稳定性与收敛速度

1. 项目概述&#xff1a;这不是又一个“加个Trick就发顶会”的RL小改进“QF3: Fast Flow RL with Filtered Q-Gradients”——光看标题&#xff0c;你可能会下意识划走&#xff1a;又是缩写堆砌、又是Flow、又是Filtered&#xff0c;听着像某篇ICML投稿的标题幻觉。但如果你真在…

作者头像 李华
网站建设 2026/10/10 3:58:08

RK3588接入ThingsBoard:MQTT、HTTP、COAP实测

RK3588这块板子拿到手还没捂热&#xff0c;我们极物科技这边就给它定了第一个正经任务&#xff1a;在Ubuntu 20.04系统下&#xff0c;把它和ThingsBoard平台之间的三条数据通道全部实测一遍。你没看错&#xff0c;不是先跑yolov8做图像识别&#xff0c;而是先解决"数据怎么…

作者头像 李华
网站建设 2026/10/10 3:58:05

ScienceClaw:面向科学智能体的持续自演化评测框架

1. 项目概述&#xff1a;这不是又一个AI评测榜单&#xff0c;而是一次对“科学智能体”进化能力的极限压力测试你有没有想过&#xff0c;当一个AI系统被扔进真实的科研场景里——不是解几道标准考题&#xff0c;而是要连续追踪一篇Nature子刊的预印本更新、重新设计实验变量、调…

作者头像 李华
网站建设 2026/10/10 3:55:46

UE4生存游戏工程源码拆解:架构、调参与避坑指南

简介&#xff1a;这套UE4生存类游戏工程源码采用纯蓝图方式实现&#xff0c;完整覆盖资源收集、制造合成、交互玩法和存档机制&#xff0c;适合从零接触蓝图或希望拓展生存制造类项目经验的开发者。资源共422个文件&#xff0c;以359个uasset蓝图与资产文件为主体&#xff0c;另…

作者头像 李华