希尔伯特变换在机械故障诊断中的包络分析实践

张开发
2026/4/16 5:40:13 15 分钟阅读

分享文章

希尔伯特变换在机械故障诊断中的包络分析实践
1. 希尔伯特变换与机械故障诊断的奇妙结合第一次接触希尔伯特变换是在研究生时期当时实验室的轴承试验台频繁出现异常振动。导师让我尝试用信号处理方法找出故障特征那是我第一次见识到这个数学工具在机械诊断中的强大威力。希尔伯特变换就像给振动信号装上了X光机能够穿透复杂的波形表象直接捕捉到隐藏在其中的故障特征。在实际工程中机械故障往往表现为振动信号中的周期性冲击。比如轴承出现点蚀时滚动体经过损伤点会产生周期性冲击但这些冲击信号常常被强背景噪声和其他振动成分淹没。传统频谱分析就像在嘈杂的菜市场找人很难分辨特定声音。而包络分析通过希尔伯特变换提取信号的轮廓相当于把声音转换成波形图让故障特征一目了然。我处理过最典型的案例是某电厂风机轴承的早期故障诊断。原始振动信号频谱杂乱无章但经过希尔伯特包络分析后清晰显现出78Hz的特征频率及其谐波与计算得到的轴承外圈故障频率完全吻合。这种早期预警让设备得以在计划停机时更换轴承避免了非计划停机带来的上百万元损失。2. 希尔伯特变换的核心原理剖析2.1 从三角函数到解析信号的思维跃迁理解希尔伯特变换最直观的方式是从简单的余弦波开始。假设有个信号x(t)cos(ωt)它的希尔伯特变换结果是H[x(t)]sin(ωt)。这相当于给原信号增加了90度相位延迟因此希尔伯特变换器也被称为理想移相器。但真正的魔法发生在构造解析信号时。我们把原信号作为实部希尔伯特变换结果作为虚部就得到了z(t)cos(ωt)j·sin(ωt)e^(jωt)。这个复数信号的模就是包络|z(t)|1相位则是∠z(t)ωt。对于更复杂的调制信号这个包络正好对应着信号的幅度变化轮廓。我在教学中常用手电筒照射旋转圆柱体的例子来解释圆柱体表面的标记是原始信号墙面上的光影是其希尔伯特变换而解析信号就是标记点在三维空间中的完整运动轨迹。包络就是轨迹到中心轴的距离完美呈现了信号的幅度变化。2.2 频域视角下的本质理解从频域看希尔伯特变换相当于一个特殊的滤波器对正频率成分乘以-j相位延迟90度对负频率成分乘以j相位超前90度直流分量置零这种特性使得构造的解析信号只包含正频率成分能量更集中。在MATLAB中实现频域希尔伯特变换时我通常会这样操作function envelope freq_hilbert(signal) N length(signal); X fft(signal); h zeros(1,N); h(1) 1; h(2:ceil(N/2)) 2; if mod(N,2)0 h(N/21) 1; end analytic ifft(X.*h); envelope abs(analytic); end这种实现方式计算效率高而且直观展示了希尔伯特变换的频域操作本质。在处理长信号时比时域卷积方法快数十倍。3. 机械故障诊断的完整实战流程3.1 轴承故障信号的模拟生成在开发诊断算法时我习惯先用模拟信号验证方法有效性。下面这段代码生成典型的轴承外圈故障信号function fault_signal generate_bearing_fault(fs, duration, fault_freq) t 0:1/fs:duration; % 正常振动成分 normal_vib 0.2*sin(2*pi*120*t) 0.1*sin(2*pi*240*t); % 故障冲击序列 impulse_train zeros(size(t)); interval round(fs/fault_freq); impulse_train(1:interval:end) 1; % 冲击响应衰减振荡 damp 150; resp exp(-damp*(0:1/fs:0.02)).*sin(2*pi*3000*(0:1/fs:0.02)); % 合成故障信号 fault_signal normal_vib 0.5*conv(impulse_train, resp, same) 0.02*randn(size(t)); end这个模型包含了三个关键要素基础振动来自设备正常运转的谐波成分周期性冲击故障特征的主要表现间隔对应故障频率背景噪声模拟实际测量环境中的随机干扰3.2 包络分析的进阶技巧直接对原始信号做希尔伯特变换往往效果不佳我总结出几个关键预处理步骤带通滤波先聚焦在共振频段。用MATLAB设计椭圆滤波器[b,a] ellip(4,0.1,40,[2000 4000]/(fs/2),bandpass); filtered_signal filtfilt(b,a,raw_signal);平方解调增强冲击特征squared_signal filtered_signal.^2;移动平均平滑抑制随机噪声window_size round(fs/1000); % 1ms窗口 smoothed movmean(squared_signal, window_size);完整的包络分析函数可以这样实现function [envelope, env_spectrum] enhanced_hilbert(signal, fs) % 带通滤波 [b,a] ellip(4,0.1,40,[2000 4000]/(fs/2),bandpass); filtered filtfilt(b,a,signal); % 平方解调 demodulated filtered.^2; % 希尔伯特变换 analytic hilbert(demodulated); raw_env abs(analytic); % 包络平滑 envelope movmean(raw_env, round(fs/1000)); % 包络频谱 N length(envelope); env_spectrum abs(fft(envelope))/N; end3.3 故障特征频率的精准识别获得包络信号后频谱分析就能揭示故障特征。这个案例展示了如何识别轴承外圈故障fs 12000; % 采样率12kHz fault_freq 85; % 理论计算的外圈故障频率 % 生成故障信号 signal generate_bearing_fault(fs, 1, fault_freq); % 增强包络分析 [envelope, env_spectrum] enhanced_hilbert(signal, fs); % 频谱分析 N length(env_spectrum); f (0:N-1)*fs/N; figure; plot(f(1:N/2), env_spectrum(1:N/2)); xline(fault_freq, r--, LineWidth, 1.5); xline(2*fault_freq, r:, LineWidth, 1.2); title(包络频谱 - 轴承外圈故障特征); xlabel(频率 (Hz)); ylabel(幅值); legend(包络谱, 故障频率, 二倍频); grid on;在实际诊断中我还会计算故障特征指标% 提取故障频率附近的峰值 search_band [0.95, 1.05] * fault_freq; idx f search_band(1) f search_band(2); peak_value max(env_spectrum(idx)); % 计算信噪比 noise_floor median(env_spectrum); SNR 20*log10(peak_value/noise_floor); fprintf(故障频率峰值: %.3f\n, peak_value); fprintf(信噪比: %.1f dB\n, SNR);4. 工程应用中的经验与陷阱4.1 参数选择的黄金法则经过数十个项目的积累我总结出这些参数选择经验采样频率至少是最高关注频率的5倍通常10-20kHz足够分析时长包含至少100个故障周期例如故障频率50Hz则采集2秒以上带通范围选择共振频段通常比故障频率高2-3个数量级平滑窗口约为1-2个故障周期长度太大会模糊特征常见错误包括采样率不足导致频率混叠分析时长太短导致频谱分辨率不够带通范围选择错误漏掉故障信息过度平滑抹除冲击特征4.2 实际案例中的挑战与应对在某汽车变速箱测试项目中我们遇到了调制干扰问题齿轮啮合频率(1200Hz)调制了轴承故障频率(83Hz)导致包络频谱出现边带。解决方案是先用高通滤波器(800Hz)去除低频啮合成分对滤波后信号做平方解调用独立分量分析(ICA)分离混合信号另一个风电齿轮箱案例中变转速工况导致故障频率漂移。我们开发了基于阶次跟踪的改进方法用转速脉冲信号重采样为角度域等间隔信号在阶次域进行包络分析识别固定阶次(如3.5阶)的故障特征4.3 与其他方法的对比优势相比传统方法希尔伯特包络分析的独特优势在于无需预先知道共振频带通过平方解调自动突出冲击成分保留相位信息可以同时分析瞬时频率变化计算效率高FFT实现适合在线监测可视化直观包络波形和频谱易于解读但与小波变换相比在非平稳信号处理上稍逊与盲源分离相比对混合信号的区分能力有限。因此在实际项目中我们常采用组合策略先用ICA分离各源信号再对疑似故障信号做包络分析。

更多文章