基于matlab的包络谱分析,目标信号→希尔伯特变换→得到解析信号→求解析信号的模→得到包络信...
基于matlab的包络谱分析目标信号→希尔伯特变换→得到解析信号→求解析信号的模→得到包络信号→傅里叶变换→得到Hilbert包络谱包络谱分析能够有效地将这种低频冲击信号进行解调提取。 程序已调通可直接运行。最近在搞设备故障诊断的时候经常遇到轴承损伤引发的周期性冲击信号。这种信号就像心跳监测仪突然抽风——原本平稳的高频振动信号里每隔0.1秒就蹦出个咯噔的异常波形。传统频谱分析直接扑街因为冲击特征全被高频载波淹没了。这时候就该包络谱分析上场表演了。先来整个模拟信号找找感觉。假设我们有个2000Hz的载波信号每隔0.01秒被100Hz的冲击调制别问为什么选这个数问就是轴承故障经典频率。上代码fs 20000; % 采样率得是最高频率的5倍以上 t 0:1/fs:0.1; carrier sin(2*pi*2000*t); % 载波信号 envelope 0.5*(1 square(2*pi*100*t, 10)); % 包络信号 x carrier .* envelope 0.2*randn(size(t)); % 加噪更真实这里用方波模拟冲击效果10%的占空比让冲击更尖锐。加高斯白噪是要验证算法的抗干扰能力毕竟现场数据比这脏多了。接下来是重头戏——希尔伯特变换。很多新手会直接拿hilbert()函数的结果当包络其实掉坑里了analytic_signal hilbert(x); % 这才是正确打开方式 amplitude_envelope abs(analytic_signal);hilbert函数返回的是解析信号实部是原信号虚部才是希尔伯特变换结果。取模长得到的就是包络线相当于把信号装进塑料袋拎起来抖一抖剩下那个塑料袋的形状。看看处理效果subplot(211) plot(t, x) hold on plot(t, amplitude_envelope, LineWidth, 2) title(原始信号与包络)运行后应该能看到一条淡蓝色波形被红色包络线紧紧裹住尤其在冲击位置会有明显凸起。这时候的包络信号已经剥离了高频载波剩下我们需要分析的慢动作回放。基于matlab的包络谱分析目标信号→希尔伯特变换→得到解析信号→求解析信号的模→得到包络信号→傅里叶变换→得到Hilbert包络谱包络谱分析能够有效地将这种低频冲击信号进行解调提取。 程序已调通可直接运行。最后上频谱分析N length(amplitude_envelope); f (0:N-1)*(fs/N); envelope_spectrum abs(fft(amplitude_envelope))/N*2; subplot(212) plot(f(1:N/2), envelope_spectrum(1:N/2)) xlabel(Frequency (Hz)) title(Hilbert包络谱) xlim([0 500]) % 聚焦低频段注意这个xlim不是随便设的——冲击频率100Hz可能会在频谱上出现2倍频、3倍频。如果看到100Hz位置有鹤立鸡群的尖峰恭喜你成功揪出了故障特征。对比原始信号的频谱自己试着plot一下绝对是一团乱麻找不到北。而包络谱就像开了八倍镜让隐藏在噪声里的周期冲击无所遁形。这个方法在轴承、齿轮箱故障诊断中屡试不爽特别是早期故障时冲击能量微弱的情况。有个坑提醒下采样率不足会导致包络谱出现频率混叠。曾经有个项目采样率设成5000Hz结果该出现的100Hz峰死活不现身后来发现包络信号带宽超过2500Hz直接导致频谱镜像——血的教训啊完整代码放这复制粘贴直接运行此处应插入完整可运行代码包含前文提到的所有代码片段及图像绘制命令
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2445205.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!