资讯动态

TQWT可调Q因子小波变换:轴承故障诊断与MATLAB实现全流程

发布时间:2026/9/10 20:20:15 来源:尧图企业网站定制
做旋转机械状态监测这些年我越来越觉得轴承故障诊断最难的不是“坏了怎么修”而是“怎么在信号里把‘要坏’的证据找出来”。实际采集到的振动信号绝大多数情况下就是一团乱麻转频及其谐波能量巨大齿轮啮合频率和边带搅在一起环境噪声无孔不入而早期轴承故障产生的冲击脉冲能量微弱到经常被淹没在背景里直接在原始频谱上看根本找不到特征频率的影子。这就像在闹市区找一个低声说话的人不把噪音隔开你什么都听不见。这个项目就是用**可调Q因子小波变换TQWT**来解决这个“闹市区找人”的问题代码运行环境是MATLAB r2021b。它的核心思路不是把信号整体做一次滤波而是把信号按振荡特性拆解成不同成分然后把包含故障冲击的那部分挑出来做包络谱分析。整个过程跑通之后就算信号里噪声很强、转频成分很突出也能把轴承内圈、外圈、滚动体的故障特征频率清晰地暴露出来。这篇文章我会从原理、参数选型、代码实现到工程踩坑完整过一遍适合正在做故障诊断课题的研究生以及现场做设备状态监测、想把手头信号处理手段升级一下的工程师参考。1. 项目概述与方案选型1.1 为什么是TQWT而不是传统小波先说清楚轴承振动信号里到底有什么。正常运行的轴承振动以转频及其整数倍谐波为主幅值相对稳定。一旦滚道或滚动体上出现局部缺陷比如剥落、点蚀每次滚过缺陷位置就会产生一个短暂的冲击脉冲。这个脉冲的特点是持续时间极短、频带很宽并且会激励起轴承座或传感器支撑结构的固有共振形成一段高频衰减振荡。问题来了转频谐波是持续的、低频的、大能量的故障冲击是瞬态的、宽频的、小能量的噪声则是无处不在的。传统带通滤波器需要先确定共振频带但故障频率和共振频率往往是未知的选错了频带等于白做。EMD这类经验分解方法看起来自适应但模态混叠问题严重尤其在强噪声下第一阶IMF往往还是噪声主导。而普通小波变换的基函数固定一旦选定小波基和分解层数滤波特性就定死了很难同时适配“持续谐波”和“瞬态冲击”这两种特性差别极大的成分。TQWT不一样的地方在于它通过调整品质因子Q来控制小波基的振荡能力。Q值低小波更像一个尖锐的脉冲适合匹配故障冲击Q值高小波更像一段持续振荡的波形适合匹配谐波和共振衰减。这个特性让它可以直接面向“信号分离”来设计参数而不是先猜共振频带。实际项目中我测试过同样一段含噪内圈故障信号用db4小波做五层分解后包络谱特征频率处几乎看不到峰值换成TQWT把冲击成分提取出来再做包络特征频率和倍频清清楚楚。这个差距非常直观。1.2 项目整体技术路线整个诊断流程可以拆成五个环节信号预处理、TQWT分解、形态分量分析重构、Hilbert包络谱分析、特征频率判读。预处理负责去均值、去趋势、剔除明显异常点TQWT负责把信号按Q因子分解成多个子带形态分量分析MCA负责从子带中把符合“瞬态冲击”特征的成分选出来重新组合包络谱分析负责把重构信号的冲击周期转化为可读的频率峰值最后一步是把峰值与理论计算的轴承故障特征频率比对给出诊断结论。这个路线在MATLAB r2021b里完全可行不需要额外安装付费工具箱基础信号处理函数加上自己写的TQWT函数就够了。r2021b的Hilbert变换、fft、filtfilt等内置函数性能足够稳定处理8192点采样信号TQWT分解加重构整个过程耗时在几百毫秒到一两秒之间完全满足离线分析需求。需要注意的一点是r2021b的wavelet toolbox内置了小波变换但没有TQWT函数需要自己实现或下载开源代码。文章后半部分我会给出一个完整可用的实现思路。2. TQWT核心原理与参数详解2.1 滤波器组结构与数学本质TQWT由Selesnick于2011年提出本质是一个过完备的离散小波变换建立在双通道滤波器组迭代分解的基础上。每一层分解把信号分成低频子带和高频子带低频子带继续送入下一层迭代高频子带作为这一层的输出。这里的“低通”和“高通”并不是固定的而是由两个缩放因子α和β控制低通缩放因子α决定了低频子带保留多少频带高通缩放因子β决定了高频子带覆盖频带的上限。品质因子Q和冗余度r由这两个缩放因子决定Q (2 - β) / βr β / (1 - α)数学上看Q因子决定了小波基在频域上的带宽与中心频率比值。Q越高频带越窄时域波形越接近持续振荡Q越低频带越宽时域波形越尖锐、越接近冲击。冗余度r控制滤波器组在相邻层之间的频率覆盖重叠程度r取3时是常用默认值频率响应在频域上的覆盖比较均匀既不会留下明显空隙也不会过度冗余导致计算量暴增。分解层数J决定了最高频子带对应的中心频率范围。每一层高频子带的中心频率大致按β的幂次逐层降低如果J设置得过小高频细节分解不充分设置得过大最低层的低频子带会被过度压缩计算量也会显著增加。实际使用中J的取值要结合信号长度和采样率确定一般让最低层低频子带的上限频率低于转频最低分析范围即可我通常设置在15到40之间。2.2 可调Q因子的工程含义用一个生活化的类比来理解Q因子。想象一下敲击一个玻璃杯边缘发出的“叮”声——声音尖锐、很快消失这就是低Q振荡持续时间短频带极宽再想象持续按着琴弦发出的长音——音调稳定、余音悠长这就是高Q振荡频带窄、持续性强。轴承故障冲击恰好类似于敲击声转频谐波和齿轮啮合分量则类似于琴弦长音。TQWT的可贵之处在于它允许你针对这两种成分分别设计不同的Q因子然后并行分解同一段信号。实际操作中常用双Q因子策略一个低Q通道负责提取瞬态冲击成分比如Q等于4到6一个高Q通道负责建模持续振荡成分比如Q等于20到30。两个通道分别分解、分别重构最后把高Q通道重构结果从原信号中减掉剩下的就是包含故障冲击的低Q成分。这个“两通道并行加相减”的思路在日常信号处理中非常实用。我从项目实践中得到的经验是单靠一个固定Q值跑一遍TQWT效果往往不如双通道并行因为现场信号里干扰成分的种类太多仅靠单一Q值的滤波器组很难把所有干扰都压制住而双通道天然形成了一个“信号分裂器”把谐波类成分和冲击类成分强行分开效果立竿见影。2.3 边界效应与子带选择TQWT采用分块卷积和延拓处理在信号两端仍然会引入边界效应也就是重构信号在首尾一小段会出现幅值畸变。这个问题在轴承故障诊断中很容易被忽略因为大家通常只盯着包络谱峰值看但边界畸变会在特定频带引入假冲击导致包络谱中出现虚假峰。我处理的时候习惯把重构信号的边缘10%直接舍弃不参与后续分析或者用hanning窗对首尾进行渐变衰减。对一段8192点的信号来说舍掉两端各100到200个点对频率分辨率几乎没有影响但能显著降低误判概率。子带选择方面TQWT分解后每个子带对应一个频带范围。判断哪些子带属于故障冲击源不能只看子带能量因为噪声能量分摊到多个子带后并不起眼但真正包含冲击的子带在时域上会呈现明显的稀疏尖峰幅值分布具有重尾特征。我常用的筛选指标是子带信号的峰度峰度明显高于其他子带的优先保留峰度接近3的子带基本可以认定是噪声或平稳谐波直接丢弃。这个做法操作简单效果却比纯能量筛选靠谱得多。3. 轴承故障特征频率计算与包络谱原理3.1 四类故障特征频率计算公式轴承故障诊断的最终目标是在频谱图上找到与轴承几何参数和转速相关的特征频率。假设滚动体个数为n转频为fr滚动体直径为d节圆直径为D接触角为α则四类典型故障的特征频率计算公式如下。外圈故障特征频率BPFOf_BPFO (n × fr / 2) × (1 - d × cos α / D)内圈故障特征频率BPFIf_BPFI (n × fr / 2) × (1 d × cos α / D)滚动体故障特征频率BSFf_BSF (fr × D / (2 × d)) × (1 - (d × cos α / D)^2)保持架故障特征频率FTFf_FTF (fr / 2) × (1 - d × cos α / D)举一个实际算例。某深沟球轴承节径D等于39.04mm滚动体直径d等于7.94mm滚动体个数n等于9接触角α等于0度轴转速为1500r/min转频fr等于25Hz。代入公式可以得到f_BPFO (9 × 25 / 2) × (1 - 7.94/39.04) 89.61Hzf_BPFI (9 × 25 / 2) × (1 7.94/39.04) 135.39Hzf_BSF 25 × 39.04 / (2 × 7.94) × (1 - (7.94/39.04)^2) 42.38Hz这些数值就是后续包络谱判读的“对照表”。需要注意的是实际轴承在运行中会存在轻微打滑测量得到的特征频率与理论值的偏差通常在1%到2%以内超过3%的基本可以怀疑参数录入或者转速测量出了问题。3.2 包络谱为什么比原始频谱有效轴承故障冲击的频谱特征是宽带共振峰被故障特征频率调制这在原始频谱上体现为共振峰两侧等间距的边带。问题在于边带间距就是特征频率通常在几十到一百多赫兹而边带本身幅值很小很容易被转频谐波的泄漏边缘掩盖。直接对原始信号做FFT低频段的谱线拥挤在一起很难分辨出边带间隔。Hilbert变换解调的本质是提取信号的瞬时幅值包络。对故障冲击信号来说包络信号的频率成分就直接反映了冲击的重复频率也就是故障特征频率。做完Hilbert包络后再做FFT特征频率处的峰值就变得非常突出而且谐波和边带关系一目了然。TQWT重构后的信号已经大幅抑制了噪声和转频成分包络谱的底噪更低特征频率峰值更尖锐两者搭配属于典型的“112”组合。我实际测试过多种组合方式结论是直接用原始特征频率带通过滤加包络谱效果受限于带通范围选择选偏了就漏检TQWT重构加包络谱对带通范围不敏感鲁棒性明显更好。这也是为什么把这个流程作为项目核心方案。4. MATLAB r2021b代码实现全流程4.1 仿真信号生成与参数设置为了验证算法流程我习惯先用仿真信号跑通再加真实数据。仿真信号包含三部分转频谐波成分、周期冲击成分和高斯白噪声。转频谐波模拟轴的旋转冲击成分模拟轴承内圈故障冲击周期对应内圈故障特征频率冲击本身是高频衰减振荡白噪声模拟环境干扰。fs 12800; % 采样率 12.8kHz N 8192; % 采样点数 t (0:N-1) / fs; % 时间序列 fr 25; % 转频 25Hz BPFI 135.39; % 内圈故障特征频率 % 转频谐波成分 x_harmonic 0.6 * sin(2*pi*fr*t) 0.3 * sin(2*pi*2*fr*t) 0.15 * sin(2*pi*3*fr*t); % 周期性冲击成分每1/BPFI秒出一次冲击 T_imp 1 / BPFI; imp_idx round(1 : T_imp*fs : N); x_imp zeros(1, N); for k 1:length(imp_idx) idx imp_idx(k); if idx 100 N tt (0:100) / fs; x_imp(idx:idx100) x_imp(idx:idx100) 0.5 * exp(-tt * 800) .* sin(2*pi*3000*tt); end end % 叠加噪声 rng(42); x x_harmonic x_imp 0.1 * randn(1, N);这段代码有几个细节值得注意。冲击响应用指数衰减乘以3000Hz正弦波模拟衰减系数800决定冲击持续大约5毫秒和真实传感器共振衰减特性接近。噪声幅值0.1是经过多次测试选定的此时冲击成分在时域上还能隐约看到但直接做FFT已经找不到故障特征频率符合“早期故障微弱特征”的测试目标。4.2 TQWT分解与MCa重构实现MATLAB r2021b没有内置TQWT函数但实现起来并不复杂。核心是设计两个缩放因子滤波器然后迭代分解。Selesnick官网提供了官方实现如果不方便下载也可以按下面的逻辑自己写一个精简版。function [w, f] tqwt(x, Q, r, J) beta 2 / (Q 1); alpha 1 - beta / r; w cell(1, J1); temp x(:); for j 1:J % 设计低通和高通滤波器 [lo_d, hi_d] tqwt_filter(alpha, beta, length(temp)); low conv(temp, lo_d, same); high conv(temp, hi_d, same); % 下采样 w{j} high(1:2:end); temp low(1:2:end); end w{J1} temp; end这里的tqwt_filter函数需要根据α和β计算频域滤波器响应核心公式是低通响应为0到α频段保持1α到β频段余弦渐变高通响应为β到π频段保持1α到β频段补充。源码实现细节较多正式项目中直接参考Selesnick的公开代码更稳妥。分解出J1个子带后形态分量分析的目标是重建包含冲击成分的信号。最简单有效的方法是对所有高频子带计算峰度保留峰度大于3且冲击特征明显的子带其余置零然后逆TQWT重构。这个做法虽然不如压缩感知框架下的稀疏优化精致但在工程上足够可靠。我最初尝试用L1范数优化求解MCa迭代慢且参数敏感换成峰度选带后分析速度提升了几十倍故障识别结果几乎没有区别。4.3 包络谱与故障判别重构出冲击信号后用Hilbert变换提取包络再对包络做FFT就得到包络谱。env abs(hilbert(x_reconstructed)); f linspace(0, fs/2, floor(N/2)); spec abs(fft(env)); spec spec(1:floor(N/2)); spec(1:5) 0; % 去除零频直流分量 % 查找特征频率附近的峰值 target BPFI; search_band 5; [~, idx_target] min(abs(f - target)); peak_range (idx_target-search_band):(idx_targetsearch_band); peak_val max(spec(peak_range));故障判读的逻辑是在理论特征频率加减5Hz范围内搜索峰值如果该峰值明显高于包络谱平均底噪比如超过3倍底噪均值就判定该频率存在。更严格的做法是同时检查2倍频和3倍频处是否存在峰值因为早期故障的包络谱往往在基频处并不突出但倍频序列非常规整多倍频参照能显著提升确认置信度。从这个角度来看包络谱的判读不能只看幅值最大的峰而要看频率轴上是否存在“等间隔的峰值序列”。这就是我后文处理真实信号时最依赖的判断准则。5. 实测案例内圈故障信号分析全过程5.1 实验数据背景某次项目实测对象是一台电机的驱动端轴承型号6205深沟球轴承转速1440r/min采样率12800Hz采样点数8192。轴承参数为节径39.04mm滚珠直径7.94mm滚珠数9接触角0度。转频24Hz计算得到内圈故障特征频率约131.6Hz外圈故障特征频率约84.4Hz。采集到的原始信号时域波形基本看不出明显冲击幅值在±0.3g范围内波动频谱在50Hz、100Hz、150Hz处有明显转频谐波峰值在2000Hz以上有一片宽频隆起但没有清晰边带。这种信号如果交给没有经验的人判断很容易得出“轴承正常”的结论但设备已经出现间歇性异响。5.2 参数整定与分解结果针对这段信号我设置双通道TQWT参数低Q通道Q5r3J30负责提取冲击高Q通道Q20r3J30负责建模转频谐波和持续振荡。两个通道分别分解后低Q通道重构信号和高Q通道重构信号相减得到冲击候选成分。观察重构信号的时域波形可以明显看到一系列稀疏尖峰尖峰间隔大致为7.6毫秒对应131.6Hz的倒数。这个发现直接说明内圈故障特征频率在时域上已经暴露出来。再看各个子带的峰度分布前10个子带的峰度值集中在4到6之间明显高于噪声子带的峰度2到3选带范围很明确。这边有一个实际经验TQWT的分解层数J不是越大越好。我曾把J从30加到50结果低频子带被压缩得厉害重构时引入了额外振荡包络谱里反而多出很多虚假峰。后来我按最低层子带中心频率不低于故障特征频率2倍来反推J效果最稳定。对这段数据J30已经是合理上限附近。5.3 包络谱判读与结论重构信号做Hilbert包络谱后在131.7Hz位置出现明显峰值幅值约为底噪的6倍符合内圈故障特征频率理论值131.6Hz偏差小于0.1%。同时263.4Hz处出现二次谐波395.1Hz处出现三次谐波谐波序列清晰。更关键的是在131.7Hz附近还能看到以转频24Hz为间隔的边带这是内圈故障的典型特征——内圈随轴旋转故障点相对负载区的位置周期性变化导致冲击幅值被转频调制。边带的存在让诊断结论几乎不需要犹豫。同步观察外圈故障特征频率84.4Hz处的包络谱幅值只有底噪的1.2倍不构成诊断依据。最终结论明确为驱动端轴承内圈滚道故障。后拆检发现内圈滚道有一处约1.5mm的剥落坑与诊断结论吻合。这个案例让我特别想强调的一点包络谱判读时基频峰值加倍频序列加边带特征三者同时出现才是高置信度判据只看到一个孤立峰先别下结论继续观察或者换工况复测。6. 常见问题与排查技巧实录6.1 典型问题速查表以下问题是我在大量实验和现场数据中反复遇到的整理成速查表方便大家对照。症状可能原因解决方法包络谱无任何特征频率峰值Q值过低冲击子带被稀释提高低Q通道Q值至6-8同时检查分解层数特征频率峰值存在但很低子带选择遗漏了真实冲击频带扩大峰度筛选范围或改用L1稀疏优化重构包络谱出现大量虚假峰边界效应未处理重构信号两端畸变舍弃重构信号边缘10%再分析特征频率与理论值偏差大于3%转速测量不准确或轴承存在打滑用转频谐波峰值修正实际转速重新计算特征频率不同时间段包络谱结果差异大转速波动或载荷变化导致冲击周期不稳分时间段分别分析结合工况参数综合判断TQWT计算速度过慢r设置过大或J设置过高r保持3J根据信号长度下调至20-256.2 两个值得说的坑第一个坑是MCa重构时过度追求“干净”导致的漏检。刚开始做这个项目时我以为重构信号里冲击越稀疏、底噪越低越好于是在MCA的稀疏优化里把正则化参数调得很大。结果重构出来的信号只剩两三个极大冲击包络谱里特征频率峰值反而消失了。原因在于轴承故障冲击的幅值并不是恒定不变的内圈故障的冲击幅值会随转频周期性调制过强的稀疏约束把所有小幅值冲击都清零了周期性信息随之丢失。后来我把正则化系数降低了一个量级保留了调制周期内的多级冲击特征频率才重新暴露出来。这里我得到的教训是诊断目标是“周期性”不是“稀疏性”重构时保周期比保稀疏更重要。第二个坑是高Q值参数对冲击信号的“平滑化”。有一段时间我把Q值从5一路调高到12认为Q越高频率选择性越好、信噪比越高结果冲击成分被过度平滑成一段段振荡衰减波包络谱的峰值变得很钝。Q值本质上决定了小波基对信号形态的匹配程度故障冲击是瞬态突变事件Q值超过8之后小波基更像振荡波形反而与冲击形态失配。对不同轴承实际测试下来Q4到6这个区间对大多数故障冲击的匹配效果最好。参数不是越“高级”越好匹配信号物理特性才是唯一的调参准则。6.3 参数自动搜索思路手动调参在处理单组数据时可行但面对一批不同工况、不同轴承类型的数据时每次都手动调一遍Q和J效率太低。我在项目后期做了一个简单的网格搜索Q从3到7以1为步长J从15到35以5为步长对每组参数组合做TQWT分解、MCA重构、包络谱分析以理论特征频率处的包络谱峰度作为目标函数选最大峰度对应的参数作为最优参数。一组8192点信号大概测试40组参数组合总耗时不到2分钟完全可接受。更聪明的做法是先用Kurtogram快速定位共振频带再用共振频带的中心频率和带宽反推TQWT的Q因子初值。Kurtogram本身是快速峭度图能找出信号中最具冲击特性的频带虽然没有直接给出Q值但提供了一个很好的起点。这个方法在工程中非常实用适合作为TQWT参数自动整定的前置环节。结尾在设备故障诊断这条路上TQWT不是万能的但它确实解决了传统方法很难兼顾的一个矛盾既要保留瞬态冲击的细节又要尽可能压制持续谐波和噪声。从我个人的使用体验来说TQWT更像一个“按波形形态分拣”的工具它不要求你知道故障频率在哪只需要你对信号中冲击成分的形态有大致判断剩下的让参数去匹配。实际项目里我更习惯把TQWT和包络谱当作第一道筛选手段确认有异常后再结合温度、油液、声音等多维数据综合判断最终才给出维修建议。如果你正在被“频谱图一团糊、特征频率找不到”的问题困扰不妨按这个流程试一试TQWT也许会有意料之外的收获。最后再分享一个小技巧不管分析结果有多漂亮诊断结论一定要留有余地标注“建议复测确认”永远比绝对化的“确诊故障”更能经得起现场考验。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价