资讯详情

航空发动机齿轮振动信号细化谱分析:Zoom FFT原理与Matlab实现

📅 2026/10/5 3:00:55 | 华诺云谱 👁 阅读
航空发动机齿轮振动信号细化谱分析:Zoom FFT原理与Matlab实现
干航空发动机齿轮箱振动信号分析这几年我感触最深的一件事就是故障特征从来不缺缺的是把它从频谱里抠出来的手段。齿轮的啮合频率和它两侧那些间隔为转频的边带往往就挤在几百赫兹的窄带里直接做普通FFT糊成一团是常态。细化谱分析Zoom FFT就是专门治这个毛病的工具配上Matlab几十行代码就能把目标频段放大了看。这篇文章我把原理、代码、参数选择和踩过的坑一次性讲清楚给需要处理齿轮振动信号、尤其是航空发动机这类宽频复杂信号的工程师做个参考。1. 齿轮振动信号的频率结构为什么故障信息都堆在窄带里1.1 啮合频率与边带的物理来源齿轮振动信号里最核心的成分是啮合频率。一对齿轮啮合时轮齿交替进入和退出啮合啮合刚度周期性变化产生周期性冲击这个冲击频率就是啮合频率fm z × fr其中z是齿轮齿数fr是该轴的转频。航空发动机内部齿轮级数多每对齿轮副都有自己的啮合频率整个振动频谱实际上是多组啮合频率及其谐波的叠加。真正让故障诊断头疼的是边带。齿轮出现局部缺陷比如齿面剥落、断齿时每转一圈就产生一次额外冲击这个冲击对啮合振动形成幅值调制齿面磨损、轴弯曲则会造成啮合刚度波动带来相位调制。调制的结果就是在啮合频率fm两侧对称生成一系列以转频fr为间隔的边带分量fm ± k×frk1,2,3,...。边带间隔等于故障轴的转频边带的疏密、幅度分布直接对应故障类型和严重程度。所以齿轮箱诊断的焦点基本都锁定在啮合频率附近这几十赫兹的窄带里。1.2 航空发动机场景下的特殊难点航空发动机齿轮箱跟普通工业齿轮箱有两个明显区别。第一频率成分极其密集。一台发动机里转子、各级齿轮、轴承、叶片都参与振动转速又高啮合频率动辄几千赫兹各阶谐波和边带相互交叠全频带谱图上根本分不清谁是谁。第二可用的平稳数据段很短。试车台条件下转速、负载都在变化真正平稳的段往往只有一两秒想靠攒长数据来提高频率分辨率不太现实。普通FFT的频率分辨率是 Δf fs / NN是FFT点数。假设采样率8192Hz分析1秒数据分辨率只有1Hz。如果故障轴的转频只有2~3Hz边带间隔就这么小普通谱上边带和主峰旁瓣搅在一起小边带基本被淹没。这时候需要的不是看得更远而是在一个局部区域看得更细——这就是细化谱分析登场的时机。2. Zoom FFT原理拆解频移、抗混叠滤波与重采样是怎么把谱放大的2.1 先说清楚分辨率提高M倍到底指什么网上很多教程开口就是细化谱能把频率分辨率提高M倍这话严格说容易误导。物理上一段时长为T的信号频率分辨能力的上限就是1/T不管你怎么处理都不可能超越这个极限。那细化谱到底改变了什么关键在于FFT的分辨率公式还有另一种写法。原始信号采样率fs、FFT点数N分辨率是fs/N。细化谱通过频移把目标频段搬到零频附近再用低采样率重采样等效采样率变成了fs fs/M。如果在同样的FFT点数N下做谱分析谱线间隔就变成Δf fs / N fs / (M·N)网格密度确实是原来的M倍。代价是什么重采样之后同样N点FFT覆盖的物理时间变成了M倍也就是说细分出来的网格一部分是靠补零插值得到的显示分辨力而不是完全独立的新信息。但它依然有巨大的工程价值一是谱线网格变细峰形不再因为落在两个格点之间而被抹平二是抗混叠滤波本质上做了一次窄带带通把带外强分量滤掉了弱边带不会再被远处大峰的旁瓣压住动态范围内能显形的东西多得多。所以准确理解是细化谱没有凭空变出信息但它把计算资源和显示动态范围集中到了目标窄带让原本看不清的特征真正可读。2.2 三步核心操作频移、低通、抽取Zoom FFT的经典实现路径是三条第一步频率搬移。选定要细化的中心频率fc把目标频段整体搬到零频附近。方法是让信号乘以复指数exp(-j2πfc t)相当于在频域上把频谱向左平移fc Hz。搬移之后原来在fc处的大峰变成了直流附近的分量后续分析就围绕零频展开。第二步抗混叠低通滤波。搬移后目标频段外面的成分散落在离零频更远的位置如果不处理就抽取这些成分会折叠进目标频段里造成混叠。所以抽取之前必须低通滤波截止频率设为fs/(2M)左右把目标带宽之外的能量滤掉。第三步重采样抽取。每隔M个点取一个样本采样率从fs降到fs/M。这一步相当于换了一台采样率更低的采集系统去重新观察这个窄带信号后续FFT才能用更细的网格去匹配它。2.3 为什么还要用Hilbert变换这个细节很多教程一句话带过但实际踩坑率极高。直接拿实信号x(t)去乘exp(-j2πfc t)频谱里原本在fc和-fc处的两根谱线会分别被搬到0和-2fc处。由于FFT频谱是周期性的-2fc处的分量会折叠回可见频段形成镜像谱峰让你误以为目标附近多出一个真实的频率成分。解决办法是先做Hilbert变换把实信号变成解析信号。Matlab里一行hilbert(x)就搞定解析信号只保留正频率分量频移之后不会再产生镜像。这是整个工具链里绝对不能省的一步。2.4 两条实现路线怎么选细化谱还有另一条路Chirp-Z变换CZTMatlab直接有czt函数它可以在任意频率区间直接加密计算频谱不用重采样。我的选型经验很明确做齿轮振动分析优先用Zoom FFT路线而不是CZT。原因有两个。第一CZT是纯频域计算结果不保留重采样后的时域信号而齿轮分析经常需要接包络解调、时域同步平均这些后续手段Zoom FFT抽取后的信号可以继续往下走扩展性好。第二CZT计算量跟输出点数直接相关频带稍宽一点就慢Zoom FFT用抽取把采样率降下来了计算效率高不少。3. 一个可以直接用的Matlab细化谱函数3.1 zoomFFT函数实现下面这个函数是我在实际项目中反复用过的版本结构清晰参数可调function [f_zoom, X_zoom] zoomFFT(x, fs, fc, M, Nfft, winType) % zoomFFT 基于频移抗混叠抽取的细化谱分析 % x : 输入信号列向量 % fs : 原始采样率 (Hz) % fc : 细化中心频率 (Hz) % M : 细化倍数等效采样率降低为 fs/M % Nfft : 细化谱FFT点数建议取与原谱相同数量级 % winType : 窗函数hann(默认), blackman, flattop if nargin 5 || isempty(Nfft) Nfft 8192; end if nargin 6 || isempty(winType) winType hann; end N length(x); t (0:N-1) / fs; % 1) 解析信号去掉负频率分量避免频移后的镜像谱 xa hilbert(x); % 2) 频率搬移把中心频率 fc 移到 0 Hz 附近 xShift xa .* exp(-1j*2*pi*fc*t); % 3) 抗混叠低通 M 倍抽取重采样 xDs resample(xShift, 1, M); % 4) 加窗 FFT Nseg min(Nfft, length(xDs)); xWin xDs(1:Nseg) .* window(winType, Nseg); X fft(xWin, Nfft); % 5) 频率轴换算细化后的实际带宽为 fs/M以 fc 为中心 f_zoom fc (0:floor(Nfft/2)) * (fs / M) / Nfft; X_zoom X(1:floor(Nfft/2)1); end3.2 关键设计说明函数里我特意用了resample而不是直接downsample或xDs xShift(1:M:end)。很多人从教材抄完代码就用downsample这是大坑。resample内置了高质量的抗混叠FIR滤波器抽取前先滤掉fs/(2M)以上的频率成分保证重采样过程不产生折叠。手动抽取的话你得自己设计并级联低通滤波器过渡带、阻带衰减都要调麻烦且容易出错。频率轴换算也经常错。抽取后信号等效采样率是fs/M所以FFT单边频率步进是(fs/M)/Nfft再整体加上中心频率fc得到f_zoom。这里千万不要忘了除以M否则画出来的谱峰位置全偏。Nfft的选择我经验是取和原始普通FFT相同或者接近的值比如8192或4096即使抽取后实际点数比Nfft少FFT内部自动补零网格照样细画出来的谱线平滑可读。真要较真独立分辨单元上限就是抽取后的有效点数length(xDs)但工程上我们关心的是边带结构能不能数清所以不必死抠这个。4. 参数怎么定细化中心频率、倍数M、窗函数和谱线数的实战经验4.1 先画粗谱再定中心频率细化谱是一把手术刀不是万能放大镜。拿到的第一件事永远是先做一段常规FFT不管多糊先确认可疑特征的大致位置确定要看多宽。具体做法全频段粗谱里找感兴趣的谱峰簇记下上限F1、下限F2。中心频率取中间值fc(F1F2)/2带宽就是BwF2-F1。比如我想看啮合频率两侧各12Hz以内的边带结构带宽就是24Hz中心频率就直接取啮合频率值。一个常见的失败案例是随手把中心频率取在某个谱峰上但目标边带其实是围绕另一个稍偏移的频率分布的细化后边带偏到显示区间一侧看起来像是被切掉了一半。先量后切这个次序不能乱。4.2 细化倍数M的约束细化后的可用带宽被压缩为 ±fs/(2M)所以M必须满足M ≤ fs / Bw要留裕量我一般取M fs / (2Bw)左右。以fs8192Hz、Bw24Hz为例理论上M可以取到几百但从实际效果看M在4~32之间最舒服。理由有三一是抽取后有效数据点数变成N/MM太大会导致FFT统计性变差谱线毛刺多二是抗混叠滤波器对fs/(2M)处的过渡带要求越来越苛刻带外抑制容易出问题三是细化谱本身配合窄带滤波已经把带外噪声和干扰滤掉了继续加大M带来的更细网格边际收益很低反而拖慢计算。反过来M太小也不行。细化带宽超过目标带宽太多抗混叠滤波就没起到足够的带外抑制小边带又会被远处的强峰旁瓣盖住失去细化的意义。4.3 窗函数不是小事很多人做细化谱时不加窗或者随便加个矩形窗这在齿轮信号上效果很差。齿轮振动分量多达几十个矩形窗旁瓣只比主瓣低13dB一个主峰旁边能拖出长长的裙带弱边带全被淹没。我的默认选择是汉宁窗hann主瓣宽一点但旁瓣衰减快适合边带结构识别。如果关心幅值精度比如要量化边带相对主峰的dB值用flattop窗更稳如果目标频带内有两个靠得非常近的分量想分开可以用blackman窗换更低的旁瓣。细化谱没有消除泄漏的本质它只是在更窄的观测带内重新做了一次加窗FFT选错窗照样糊。4.4 数据够稳才有细化的意义最后一条经验细化谱的前提是数据段平稳。航空发动机试车时转速若有持续漂移边带会像失焦一样变宽细化谱放大之后反而更难看。遇到这种情况先做阶次跟踪把转速拉平或者对数据做时域同步平均把随机成分压下去再上细化谱。顺序反了细化倍数越大越尴尬。5. 完整实例从普通FFT到细化谱的实操链路5.1 构造一段含弱边带的模拟齿轮振动信号为了准确演示细化谱的效果我构造了一段参数可控的信号模拟低速轴故障齿轮的啮合振动加边带调制fs 8192; % 采样率 T 1.0; % 总时长1秒 N fs * T; t (0:N-1) / fs; fr 2.6; % 故障轴转频非整数故意制造泄漏 z 292; % 齿数 fm z * fr; % 啮合频率 759.2 Hz % 啮合主峰 前后三阶边带幅度按0.4^k递减 signal 1.0 * cos(2*pi*fm*t); for k 1:3 signal signal 0.4^k * cos(2*pi*(fm k*fr)*t); signal signal 0.4^k * cos(2*pi*(fm - k*fr)*t); end % 加高斯噪声 signal signal 0.08 * randn(N, 1);这里故意把转频设为2.6Hz让所有分量都落在1Hz整数频率格点的缝隙里。这样普通FFT的谱峰必然泄漏到相邻格点峰形变胖、幅度下降边带很难看——这正是实际测试数据里最常见的情况。5.2 第一步普通FFT粗谱Nfft 8192; w hann(Nfft); X1 fft(signal .* w, Nfft); f1 (0:Nfft/2) * fs / Nfft; amp1 2 * abs(X1(1:Nfft/21)) / sum(w); figure; plot(f1, amp1); xlim([740 780]); grid on; xlabel(频率/Hz); ylabel(幅值);这段代码执行后先把显示范围切到740~780Hz看到的普通谱是759.2Hz附近一个宽大的主峰因为频率不在整数格点上主峰被摊到两三个格点上面看起来比实际宽一阶边带距离主峰仅2.6Hz勉强能从主峰旁瓣里分辨出一个小鼓包二阶、三阶边带已经完全混进主瓣泄漏和噪声里基本不可见。5.3 第二步对主峰附近做细化谱fc fm; % 细化中心频率即啮合频率 M 8; % 细化倍数 Nfft 8192; % 与普通谱相同的FFT点数 [fz, Xz] zoomFFT(signal, fs, fc, M, Nfft, hann); spec_db 20 * log10(abs(Xz) / max(abs(Xz))); % 归一化dB谱 figure; plot(fz, spec_db); xlim([fm-12 fm12]); ylim([-70 0]); grid on; xlabel(频率/Hz); ylabel(相对幅值/dB);细化之后对比非常明显谱线网格从1Hz变成了fs/(M·Nfft)0.125Hz。主峰稳定落在759.2Hz最近的格点上峰形干净三对边带在±2.6Hz、±5.2Hz、±7.8Hz处一根一根排开一阶边带约-8dB二阶约-16dB三阶约-24dB跟理论设定基本吻合。底噪约-55dB三阶边带依然清晰露出噪声底之上。5.4 两种谱的结果对照观察项普通FFT1Hz网格细化谱0.125Hz网格主峰形态摊到2~3格点明显变宽单点尖锐位置准确一阶边带勉强可见幅度偏低清晰位置准确二阶边带混入主瓣泄漏不可辨清晰可读三阶边带完全淹没露出噪声底约6dB这一段模拟信号跑完基本能直观理解细化谱的定位它不改变你手里数据的物理长度但把可读的细节大幅提高了。5.5 再验证一个场景近频分量的分离我还额外试过一个场景在啮合频率旁边人为塞入一个只差0.8Hz的微弱分量。普通FFT无论怎么调窗都只能看到一个不对称的大包因为1Hz分辨率下0.8Hz的间隔根本分不开。细化谱M16后网格细到0.0625Hz两个分量在谱图上呈现明显的双峰。这个场景在实测试车里其实不少见——比如两级齿轮的啮合频率凑巧很近或者转频相差极小的两根轴的边带叠在一起。能分出两个峰和一个不对称峰对故障定位完全是两个结论。6. 工程实测里最容易踩的五个坑6.1 跳过Hilbert出现镜像假峰这是我把函数给同事用之后反馈最多的问题。省略hilbert直接频移或者用了real(xShift)把复信号转回实信号频谱上就会在fc±某个位置出现不存在的镜像分量而且幅度还不小。排查方法很简单对已知频率的仿真信号跑一遍看谱峰是否精确落在设定频率上。如果多出对称的峰先检查这一步。6.2 用downsample代替resample窄带外面的大峰折叠进来直接抽取的后果是混叠。细化谱本来就是为了把带外干扰滤掉用downsample等于把抗混叠滤波这一步丢掉了。齿轮箱振动信号往往是宽频强、窄带弱折叠进来的高频分量可能比你要看的边带大几十倍谱图直接报废。判断方法抽出前后的信号波形做一次FFT对比如果细化谱里出现明显不属于目标频段的强峰十有八九是混叠。6.3 频率轴忘了除以M谱峰位置整体偏移第一次写zoomFFT时很容易把频率轴写错。抽取后信号的FFT频率步进是(fs/M)/Nfft不是fs/Nfft。忘了除M的话所有谱峰位置都会向中心频率外侧偏移偏移量和M成正比。我用过一个土办法验证对单频信号比如纯1000Hz正弦做细化谱看峰是不是精准在1000Hz上。能过这个测试频率轴基本就没错。6.4 M取值过大有效点数不足有人图省事直接把M设成64甚至128结果细化谱变得满是毛刺。原因很简单原始1秒数据抽取8倍只剩1024点抽取64倍只剩128点加窗FFT之后统计方差极大谱线全是噪声尖刺。记住一个经验公式抽取后的有效点数应不低于512最好在1024以上M要根据这个反向约束。6.5 以为细化谱能救转速漂移的数据最后一个是理念问题。细化谱处理的是静止频谱如果信号在观察窗口内有明显的频率漂移边带自始至终都是糊的放大之后只是把糊态看得更清楚不可能变清晰。航空发动机数据里这种情况很普遍我现在的处理习惯是先看时域波形和短时傅里叶变换确认稳态段再截出最平稳的1~2秒做细化。这一步做对了细化谱的效率会高很多。我个人在实际项目里还有个习惯任何新数据在正式细化处理之前都先构造一个和真实信号频率结构接近的仿真信号把整套代码跑通、峰位核对无误再上真实数据。参数统一代码复用省掉大量来回试错的时间。细化谱这东西用好了是诊断利器用岔了会造出根本不存在的故障特征谨慎一点总没错。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑