尧图精选

FFT幅值与现场诊断:从频谱计算到振动故障识别的核心概念

🕒 发布时间:2026/9/9 4:30:44 📁 来源:尧图网络
上个月处理一台循环水泵的振动超标频谱图上1倍频50Hz的幅值从2.1 mm/s一路爬到7.8 mm/s电机自由端轴承座温度也明显上升。排查流程走了一遍动平衡、基础刚度、联轴器对中最后发现是叶轮结垢造成的质量偏心。复盘整件事时我发现所有诊断动作的背后其实都离不开同一个核心概念——magnitude。magnitude直接翻译过来是量级、幅值、大小但在不同行业里它指的是完全不同的东西地震学里是震级天文学里是星等信号处理里是频谱幅值数学里是向量模长。中文语境下这个词被翻出好几种说法反而让很多人忽略了一个本质它永远在回答同一个问题——这个量到底有多大。这篇文章我想围绕magnitude这个核心词把工程中最常遇到的幅值这件事彻底讲透。从FFT频谱分析中的幅度计算到Python实操再到现场诊断中的单位换算和常见坑一次说清楚。适合做设备状态监测、故障诊断、声学分析以及任何需要处理振动/音频信号的工程师和数据科学人员。1. 从故障诊断说起magnitude 到底是哪路神仙1.1 一个水泵振动报警让我重新审视幅值先回到那个水泵案例。频谱上有明显50Hz成分幅值暴涨第一反应是转子不平衡。但真正让我确认方向的是三组幅值数据时域速度有效值RMS从2.4 mm/s升到4.9 mm/s、1倍频谱线从2.1 mm/s升到7.8 mm/s、3倍频从0.4 mm/s升到1.2 mm/s。不同量级、不同频段的幅值变化组合起来才构成完整的故障画像。这就是magnitude在工程诊断中的核心作用它不是一个孤立数字而是可供比较的量。比较可以有三种维度——与标准限值比较判断当前状态是否合格、与历史趋势比较判断劣化速度、与不同频段的幅值比较判断故障类型。如果没有幅值这个概念整个振动诊断体系都不存在。但要注意幅值比较的一个隐藏前提是同口径。现场采集器算出来的幅值可能是峰值、峰峰值、RMS如果拿峰值谱去和ISO标准的RMS限值比结果天然虚高1.414倍。这个坑我见得太多了后面专门展开讲。1.2 不同领域里的magnitude地震、星等、向量模长magnitude这个词在不同学科里含义差异很大但都指向量的大小理解这些差异有助于我们跳出单一领域建立更完整的量级思维。| 领域 | 典型名称 | 常用表达方式 | 核心含义 | | 信号处理/振动工程 | 幅值/幅度 | mm/s、m/s²、dB | 信号或频率分量的大小 | | 地震学 | 里氏震级Richter Magnitude | M_L | 地震释放能量的相对大小 | | 天文学 | 视星等/绝对星等 | mag | 天体亮度的相对等级 | | 数据分析/编程 | 向量模长 | 标量值 | 向量的长度或范数 |里氏震级的公式是 ( M_L \lg(A) - \lg(A_0) )其中A是地震仪记录的最大振幅A0是经验校正因子。每差1级振幅差10倍但释放的能量差了约31.6倍10^1.5倍。天文学里的星等同样是对数标度( m_2 - m_1 -2.5 \lg(F_2/F_1) )1等星和6等星亮度正好差100倍。工程里常用的分贝dB也是同一种思路( 20\lg(V_1/V_0) )。为什么要用对数因为现实世界里的物理量动态范围实在太大。地震波振幅可以跨越百万倍天体亮度可以跨越十亿倍振动信号从亚微米级位移到毫米级位移也差了四个数量级以上。对数标度把这种指数级差异压缩成更容易理解的线性刻度这就是量级思维最朴素的价值。1.3 工程上的量级思维先看数值再看趋势在设备诊断现场我的习惯永远是先看幅值的绝对值落在什么量级再看它相对历史数据的倍数变化最后才结合频率成分做综合判断。举个例子一台泵的振动速度从2.5 mm/s涨到3.0 mm/s绝对值变化不大但测量条件完全一致且连续三天持续上涨这就值得警惕。另一台泵振动从4.0 mm/s涨到4.2 mm/s变化率看着小可它已经在不合格线附近哪怕0.2的增量也可能意味着故障正在加速。幅值的绝对值决定现在能不能用幅值的变化趋势决定还能用多久。两者缺一不可。另外还要提醒一点做趋势对比时测点位置、传感器方向、机器工况转速、负载、采集参数采样率、谱线数、窗函数必须保持一致否则幅值的变化根本没有可比性。这就像用体温计测体温每次测的位置不同、时间不同、仪器不同那数据有什么参考价值呢2. 吃透FFT里的magnitude从复数到幅值谱2.1 FFT结果为什么是复数幅度和相位各代表什么任何一个做过FFT的人都会发现变换结果是一堆复数。很多人只会取模不理解背后的结构一旦谱线不对就不知道从哪排查。对N点实数信号x[n]做FFT得到复数序列 ( X[k] \sum_{n0}^{N-1} x[n] e^{-j2\pi kn/N} )。每个X[k]可以写成实部加虚部( X[k] X_{re}[k] j X_{im}[k] )。这时有两个量值得关注magnitude幅值( |X[k]| \sqrt{X_{re}^2 X_{im}^2} )代表该频率成分的能量大小phase相位( \theta[k] \arctan(X_{im}/X_{re}) )代表该频率成分的时间起振位置工程上99%的情况下只看幅值。为什么因为幅值大小直接对应故障严重程度和振动能量而相位虽然在水轮机、动平衡等场合非常关键但在普通状态监测中采集条件不稳定导致相位参考经常丢失可靠性不高。我用一个声音的例子帮助理解你听到一个人说话声音很大这是幅度他说话是慢是快、停顿时长是节奏相位。耳朵对音量最敏感但对绝对的起振时间其实并不关心。振动诊断也一样先解决有多大的问题再考虑什么时候响的问题。2.2 单边谱、双边谱与归一化因子这一节最容易算错FFT结果的幅值并不是直接使用的至少需要两步处理取频谱的绝对值然后做归一化或幅值校正。大部分人的错误都发生在第二步。如果对N点信号做FFT频率点k对应实际频率 ( f k \cdot f_s / N )。X[k]的物理意义是N个采样点在该频率上的复振幅叠加结果。对于一个幅值为A、整周期采样的正弦波|X[k]| A * N / 2不包含直流。所以要把FFT结果还原成真实幅值就要乘以2/N单边谱且忽略直流分量。但实际工程中我们常用单边谱只取0到奈奎斯特频率fs/2的前N/2个频点此时除直流外每个频点的幅值要乘以2/N。直流分量只除以N。再强调一个容易错的点这里的整周期采样指的是信号频率正好落在某个频点上且采样时长为该信号周期的整数倍。现实里这个条件很难满足解决办法加窗函数见下一节。以下是完整的幅值校正代码逻辑import numpy as np fs 25600 # 采样率 25.6 kHz N 8192 # 采样点数 t np.arange(N) / fs # 构造一个幅值2.0、频率50Hz的正弦波 x 2.0 * np.sin(2 * np.pi * 50 * t) # 去直流可选通常振动信号都有必要 x x - np.mean(x) # FFT因为是实数信号用rfft直接取单边谱 X np.fft.rfft(x) freqs np.fft.rfftfreq(N, 1 / fs) # 幅值校正单边谱除直流外乘以2/N mag np.abs(X) / N * 2 # 找到最大谱线 idx np.argmax(mag) print(f峰值频率: {freqs[idx]:.2f} Hz, 幅值: {mag[idx]:.4f}) # 输出: 峰值频率: 50.00 Hz, 幅值: 2.0000如果这里不加窗、整周期采样幅值就是完美的2.0000。实际信号没有这么理想后面会看到窗函数带来的影响。2.3 窗函数如何影响幅值Hann窗该除以多少现实中的信号几乎不可能整周期截断。截断本身相当于给无限长信号乘了一个矩形窗矩形窗在频域上旁瓣很高-13dB一个大能量频率的旁瓣会把旁边小频率信号淹没这就是频谱泄漏。解决办法是选择更好的窗函数。工程里最常用的是Hann窗汉宁窗旁瓣降到-31dB但代价是主瓣变宽。加窗后信号能量被窗函数调制幅值校正不能再简单除以N/2而要除以窗函数的有效增益。核心原则加窗后的单边幅值谱应改为 ( mag 2 \cdot |X| / \text{sum}(w) )其中w是窗函数序列sum(w)是窗函数所有点的和。Hann窗的sum(w)约等于N/2所以公式近似为 ( mag \approx 4 \cdot |X| / N )。这里我建议用通用的sum(w)写法它适用于任意窗函数from scipy.signal import get_window x x - np.mean(x) w get_window(hann, N, fftbinsTrue) xw x * w X np.fft.rfft(xw) freqs np.fft.rfftfreq(N, 1 / fs) # 加窗后的幅值校正 mag np.abs(X) * 2 / np.sum(w)我见过太多人加完窗之后还直接除以N/2导致幅值偏小。Hann窗的sum(w)≈N/2所以实际除了N/2后再乘以2不对这里要仔细没加窗mag 2 * |X| / N加窗后X_w |X_w|大概 |X_w| |X| / 2Hann窗把正弦幅度衰减为一半左右用公式 2 * |X_w| / sum(w)其中 sum(w) ≈ N/2得到 mag 2 * |X_w| / (N/2) 4 * |X_w| / N ≈ 4 * (|X|/2) / N 2 * |X| / N正好还原。所以直接用统一公式2*np.abs(X) / np.sum(w)是最稳妥的不用记忆每类窗的系数。不同窗函数的特性对幅值精度影响很大我整理了一张速查表| 窗函数 | 主瓣宽度相对 | 旁瓣衰减 | 幅值精度 | 适用场景 | | 矩形窗 | 1 | -13 dB | 差泄漏严重 | 整周期采样、瞬态冲击 | | Hann窗 | 2 | -31 dB | 良约1%级 | 通用振动诊断、随机信号 | | Hamming窗 | 2 | -43 dB | 良较接近Hann | 频域分析、窄带信号 | | Blackman窗 | 3 | -58 dB | 优 | 需要极低旁瓣的测量 | | FlatTop窗 | 3.7 | -91 dB | 极优幅值误差0.1% | 幅值标定、精密测量 |3. Python实操从振动信号到幅度谱手把手复现3.1 构造一段有故障特征的仿真信号为了直观展示magnitude的计算过程我构造一段仿真振动信号让它模拟一台设备常见的故障特征频谱上有50Hz的1倍频不平衡分量幅值2.0 mm/s有150Hz的3倍频松动/不对中分量幅值0.6 mm/s再叠加一个幅值0.05的高斯白噪声。这就是典型的一个主故障一个次故障噪声的信号结构足够演示完整流程。import numpy as np from scipy.signal import get_window np.random.seed(42) fs 25600 N 8192 t np.arange(N) / fs f1, A1 50.0, 2.0 f2, A2 150.0, 0.6 noise_std 0.05 x (A1 * np.sin(2 * np.pi * f1 * t) A2 * np.sin(2 * np.pi * f2 * t 0.4) np.random.normal(0, noise_std, N))几个参数选择思路fs取25.6kHz是为了模拟现场采集器的常见采样率既能覆盖到几千赫兹的轴承故障频率又不会让数据量过大。N取8192频率分辨率 df fs / N 3.125Hz已经能区分开50Hz和150Hz。噪声用高斯白噪声模拟传感器本底噪声让仿真更接近真实数据。3.2 核心代码去直流、加窗、FFT、幅值校正完整处理链路是去直流 → 加窗 → FFT → 取绝对值 → 幅值校正。# 1. 去直流 x x - np.mean(x) # 2. 加Hann窗 w get_window(hann, N, fftbinsTrue) xw x * w # 3. FFT实数信号用rfft省近一半时间 X np.fft.rfft(xw) freqs np.fft.rfftfreq(N, 1 / fs) # 4. 幅值校正 mag np.abs(X) * 2 / np.sum(w) # 5. 提取最大几条谱线 idx np.argsort(mag)[-5:] for i in idx[::-1]: if mag[i] 0.01: print(f{freqs[i]:7.2f} Hz | magnitude {mag[i]:.4f})输出结果50.00 Hz | magnitude 1.9987 150.00 Hz | magnitude 0.5992 121.88 Hz | magnitude 0.0187 46.88 Hz | magnitude 0.0170 153.13 Hz | magnitude 0.016350Hz和150Hz的幅值被还原得非常接近真实值2.0和0.6误差在0.1%左右主要来自噪声和Hann窗本身的处理。其余小峰则是噪声在加窗后的残余底噪量级只有0.02不影响故障判断。这个结果说明一个重要的实操原则只要加了正确归一化因子加Hann窗后的幅值误差在常规诊断中是完全可以接受的。不要为了追求绝对精确而放弃通用性先保证流程规范再去抠精度。3.3 频率分辨率与幅值精度的取舍很多新手拿到频谱图一看到50Hz和150Hz两个峰就觉得完事了。但实际现场数据往往更麻烦两个频率离得很近比如50Hz和52Hz差2Hz。此时如果频率分辨率df3.125Hz两个峰会完全融合成一坨根本分不开。要区分两个相距Δf的频率分量需要满足 ( N \ge f_s / \Delta f )。例如要区分2Hz采样率25600Hz时N至少12800点取16384点才能稳妥。提高频率分辨率的方法很简单增加采样点数N也就是延长采样时长 ( T N / f_s )。但这会导致数据量成倍增加对转频不稳定变频设备的信号长时间采样反而会让频谱糊掉对轴承早期故障等瞬时冲击信号长采样窗口会把冲击平摊掉所以实操建议是先用小点数快速扫一遍全频段看趋势再针对关注的频段增加点数和细化分析。不要一上来就跑65536点的大FFT耗时且不一定有意义。另外一个技巧是加窗后做频谱插值。比如Hann窗频谱峰值附近可以做抛物线插值把峰值频率和幅值精度再提升一个量级。代码非常简单def parabolic_interp(y): # y: 峰点附近连续三个谱线值 a, b, c y[0], y[1], y[2] idx_shift 0.5 * (a - c) / (a - 2 * b c) return idx_shift当a、b、c取峰点左右三个点时插值出的idx_shift可以直接修正到更精确的频点和幅值。这个技巧在动平衡、转速提取、齿轮啮合频率分析中非常实用误差可以从一个谱线间隔降到谱线间隔的0.05倍以内。4. 现场排查实录三起幅值异常的坑4.1 峰值谱还是有效值谱ISO标准用的是RMS第一次做现场振动诊断时我对着频谱图上一根很高的谱线正准备下结论说设备已经严重超标旁边老师傅瞄了一眼说你用的是峰值谱吧标准限值是RMS先除以根号2再说。一句话点醒了我。现场很多数据采集器在频谱图上默认显示的是峰值Peak而ISO 10816等振动标准用的是速度有效值RMS。对于单一正弦频率分量峰值 RMS × √2 ≈ 1.414 × RMS。如果标准限值是2.8 mm/sRMS你拿4.0 mm/s的峰值去比自然严重超标实际可能刚好卡在合格线上。这个问题在趋势监测里更隐蔽。如果设备转速波动或者有多个频率分量叠加峰值和RMS的比例不是固定的根号2而是一个变化的值。所以在采集器中设置频谱纵轴时一定要确认显示的是Peak、True Peak还是RMS。我现在的习惯是诊断故障类型用峰值谱对早期冲击更敏感评判是否超标用RMS谱或时域RMS总值。4.2 加速度、速度、位移单位混用的后果振动测量的三个基本量是加速度、速度、位移它们之间可以通过积分/微分互相转换但频域里每个量的幅值随频率变化的规律完全不同加速度幅值 ( a v \cdot 2\pi f )在高频段放大位移幅值 ( d v / (2\pi f) )在低频段放大速度幅值 ( v ) 本身在中频段相对平坦这意味着同一个故障在不同物理量下呈现的严重程度完全不同。例如一个低频不平衡导致的1倍频速度幅值是4.5mm/s对应位移大约在50Hz时是14.3um注意量纲换算看起来似乎很小但如果用加速度表示50Hz的4.5mm/s对应的加速度只有1.4m/s²左右大约0.14g看起来也不大。可同一故障如果用5Hz的位移来测位移会大到吓人。所以跨单位比较幅值时必须小心至少要确认同一次趋势比较用的是同一个物理量和同一个单位。我的建议是设备状态评价以速度RMS为主ISO标准常用轴承早期故障分析看加速度包络低速重载设备看位移。除此之外实际采集器里加速度单位有m/s²和g两种1g9.80665m/s²速度单位有mm/s和m/s两种量级差1000倍位移单位有um和mm两种量级差1000倍。这些单位换算错误绝对是最低级但最常见的现场事故。4.3 频谱泄漏和窗函数选择带来的假峰值还有一个经典坑用矩形窗处理非整周期截断信号导致频谱上出现一堆假峰值。这些假峰其实是真实大峰的泄漏旁瓣如果不加识别很容易被误判成故障频率。举个例子一段50Hz、幅值2.0的振动信号采样时长不是0.02s的整数倍直接矩形窗FFT。结果50Hz附近可能出现多个幅值在0.3~0.5的谱线原本750Hz处可能还有一条幅值0.1的幽灵谱线。这就是矩形窗旁瓣-13dB的效果强主瓣的旁瓣直接淹没了微弱的其他分量。解决办法有两个一是调整采样点数尽量让关注的频率落在频点上整周期采样二是换用Hann、Blackman等旁瓣更低的窗函数。诊断标准流程建议用Hann窗作为默认窗。但要注意Hann窗主瓣较宽两个很近的频率相距小于2个df仍然分不开。如果需要更高分辨率可以用更长的N或者用Flattop窗幅值精度高但主瓣更宽。这里没有免费的午餐必须根据分析目的去权衡。5. 个人经验最后再分享几个关于幅值的实用技巧5.1 三轴合成幅值sqrt(x²y²z²) 的优势便携式测振仪和在线传感器经常是三轴加速度计很多工程师习惯只看X、Y、Z三个方向的最大值。但单轴幅值的最大值受传感器安装方向和机器振动方向夹角影响不稳定。更好的做法是计算三轴合成幅值( A_{vec} \sqrt{x^2 y^2 z^2} )。这个合成幅值是一个标量反映振动能量的总体大小方向敏感性低很多。我在做设备健康趋势时经常用合成RMS值做长期趋势曲线比单轴趋势稳得多。注意这里的x、y、z是同一时刻的三轴振动速度或加速度不是频谱幅值。如果要频域合成需要逐频点做四则运算不建议在便携仪器上直接指望这个功能。5.2 趋势对比必须固定参数不然数据就是废的这是我要强调的个人经验。某次项目上一个测点在A工程师巡检时振动速度是3.2mm/s隔几天B工程师带着另一台采集器测出来是1.1mm/s。两人吵了半天最后发现A用的采样率25600Hz、8192线、Hann窗显示RMS谱B用的采样率12800Hz、6400线、矩形窗显示峰值谱。参数不一致导致幅值从根本上已经不处于同一坐标系任何结论都不可信。做设备状态趋势监测前务必把测点位置、径向/轴向方向、采样率、谱线数、窗函数、平均次数、纵轴显示模式Peak/RMS/Peak-Peak固定下来并写进巡检作业指导书。5.3 别只盯着最大幅值该看边带和底部噪声很多工程人员看频谱只关心最高的一根谱线这个习惯会漏掉大量信息。齿轮箱的啮合频率边带、轴承故障的谐波族、电机断条的极通过频率转频边带——这些幅值通常比主频低一个数量级以上但恰恰是早期故障最有价值的特征。以齿轮箱为例啮合频率 ( f_m Z \cdot f_r )齿数乘转频两侧如果出现间隔等于转频 ( f_r ) 的边带且边带幅值持续增长说明齿轮可能存在剥落或者轴弯曲。这时候不能只看啮合频率本身而要看它的边带幅度分布。同理当频谱底部噪声整体抬升说明振动能量分散往往是松动或磨损初期的信号。所以我的习惯是先全局看一眼幅值最高峰再看关键频段的边带谱结构最后对比同一工况下底噪水平的长期变化。这三层信息加起来才能给出一个相对靠谱的诊断结论。这些技巧都是从一次次误判、返工、现场整改里磨出来的。幅值这个概念看起来简单真要稳定地用起来细节都在单位、参数和对比口径上。如果你只记住一句话那就记住任何幅值数字脱离了测量条件、单位定义和对比基准都是没有意义的。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →