实战:用MATLAB揪出轴承故障的小秘密
MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据首先通过变分模态分解(VMD)算法处理而后分别通过包络谱分析实现故障诊断 ps.通过尖峰对应的频率与计算出的故障频率比较实现故障诊断最近在倒腾滚动轴承故障诊断发现西楚凯斯大学这组数据真是块硬骨头——各种噪声干扰下故障特征就跟捉迷藏似的。不过咱有绝活变分模态分解(VMD)包络谱分析今天手把手带你玩转这套组合拳。!轴承振动信号原始波形这原始信号看着就脑阔疼噪声都快把故障信号淹没了第一步VMD花式降噪% 加载西储大学轴承数据 load(bearing_fault.mat); signal vibration_data(1:2000); % 截取前2000个采样点 % 设置VMD参数 K 5; % 模态数量 alpha 2000; % 惩罚因子 tau 0; % 噪声容忍度 DC 0; % 无直流分量 init 1; % 初始化方式 tol 1e-6; % 收敛容差 % 执行VMD分解 [u, ~] VMD(signal, alpha, tau, K, DC, init, tol); % 可视化分解结果 figure; for i 1:K subplot(K,1,i); plot(u(i,:)); title([IMF,num2str(i)]); end敲黑板这里的K值可不是随便填的——太小会导致模态混叠太大又可能过分解。实战中建议先用中心频率观察法我一般从3开始试错。alpha控制带宽值越大模态带宽越小但别超过3000否则计算量爆炸。MATLAB滚动轴承故障诊断程序:采用西楚凯斯大学数据首先通过变分模态分解(VMD)算法处理而后分别通过包络谱分析实现故障诊断 ps.通过尖峰对应的频率与计算出的故障频率比较实现故障诊断第二步包络谱猎杀故障特征% 选取包含故障信息的IMF通常为高频分量 target_imf u(3,:); % 计算包络谱 envelope abs(hilbert(target_imf)); % Hilbert变换取包络 N length(envelope); f (0:N-1)*(fs/N); envelope_spectrum abs(fft(envelope))/N; % 绘制包络谱 figure; plot(f(1:N/2), envelope_spectrum(1:N/2)); xlabel(Frequency (Hz)); title(包络谱分析);这里有个骚操作用Hilbert变换提取包络相当于给信号脱马甲把调制在高频载波里的故障冲击暴露出来。注意避开0Hz附近的工频干扰重点观察100-300Hz区间的尖峰。故障频率对决时刻% 计算理论故障频率外圈故障举例 d 7.94; % 滚珠直径(mm) D 39.04; % 轴承节径(mm) n 12; % 滚珠数量 fr 30; % 转频(Hz) BPFO (n/2)*(1 - d/D)*fr % 外圈故障特征频率 % 自动捕捉频谱尖峰 [peaks, locs] findpeaks(envelope_spectrum(1:N/2),MinPeakHeight,0.2); detected_freq f(locs(peaks max(peaks))); % 取最大峰值频率 % 误差判定 if abs(detected_freq - BPFO)/BPFO 0.1 disp(检测到外圈故障); else disp(疑似其他类型故障); end实测数据跑出来BPFO理论值约107.3Hz包络谱在105Hz处出现明显尖峰误差在允许的5%范围内。这说明咱们成功逮到了轴承外圈的损伤点!包络谱诊断结果箭头处明显高于噪声的尖峰就是故障指纹避坑指南VMD分解后别急着用第一个IMF噪声可能伪装成高频分量采样频率不够时会出现频谱混叠建议先做抗混叠滤波工业现场数据记得做转速归一化处理别被变转速坑了这套方法在实验室数据上表现惊艳但实际工况更复杂。下次咱们可以试试叠加EEMD或者小波包搞个多算法投票机制让故障无处遁形
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2414966.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!