基于EMD的滚动轴承故障诊断算法matlab仿真

150 阅读4分钟

1.算法运行效果图预览

1.jpeg

2.jpeg

3.jpeg  

2.算法运行软件版本

matlab2022a

 

 

3.算法理论概述

        基于经验模态分解(Empirical Mode Decomposition,EMD)的滚动轴承故障诊断算法是一种有效的非平稳信号处理方法,特别适用于处理非线性、非平稳的振动信号。该方法通过自适应地将复杂信号分解为一系列固有模态函数(Intrinsic Mode Functions,IMFs),进而提取出信号的时频特征,为滚动轴承的故障诊断提供有力支持。

 

3.1EMD的基本原理

        EMD方法的核心思想是根据信号自身的局部时域特性,自适应地将其分解为一系列固有模态函数。每个IMF代表信号中不同频率尺度的振荡模式,且具有明确的物理意义。

 

固有模态函数(IMF)

固有模态函数是满足以下两个条件的函数:

 

在整个数据序列中,极值点(包括极大值点和极小值点)的数量与过零点的数量相等或最多相差一个。

在任意时刻,由局部极大值点定义的上包络线和由局部极小值点定义的下包络线的均值为零。

筛分过程

EMD通过以下步骤对信号进行筛分,得到一系列IMF:

a252d90a3a66d5f1ac63adac4ba54fe9_82780907_202402192210520286969576_Expires=1708352452&Signature=jC7lb66h6vWMOHNXlXuEJK8ITGI%3D&domain=8.png  

3.2 基于EMD的滚动轴承故障诊断算法

信号预处理

        首先,对采集到的滚动轴承振动信号进行预处理,包括降噪、去趋势等,以减少噪声和其他干扰因素对故障诊断的影响。

 

EMD分解

        将预处理后的信号作为输入,应用EMD方法进行分解,得到一系列IMF。每个IMF代表信号中不同频率尺度的振荡模式,反映了滚动轴承不同故障特征的信息。

 

特征提取

        从分解得到的IMFs中提取出与滚动轴承故障相关的特征。常用的特征包括IMF的能量、均方根值、峰值、峭度等。这些特征能够有效地描述滚动轴承的状态和故障类型。

 

故障诊断

        利用提取的特征构建故障诊断模型实现对滚动轴承故障类型的自动识别和诊断。

 

        为了验证基于EMD的滚动轴承故障诊断算法的有效性,可以采用实验数据进行验证。首先,采集不同状态下(正常、不同故障类型)的滚动轴承振动信号;然后,应用EMD方法进行信号分解和特征提取;最后,利用提取的特征训练故障诊断模型,并对测试数据进行故障诊断。通过比较诊断结果与真实故障类型的符合程度,评估算法的性能和准确性。

 

 

 

4.部分核心程序 `axes(handles.axes5)

[x,t,ssf,yy,fxs]=plotspec2(IMF(1,:),1/fs);

plot(t,x)  

xlabel('Sample number');

ylabel(['imf(',num2str(1),')']);

title(['imf(',num2str(1),')信号']);

xlim([0,t(end)]);

 

axes(handles.axes7)

plot(ssf,abs(fxs))         % plot magnitude spectrum

xlabel('频率');

ylabel('幅度')   % label the axes

title(['imf(',num2str(1),')频谱']);

   

axes(handles.axes8)

[yt,Vm]=func_baoluo(IMF(1,:),fs,1);

[maxv,maxl]=max(Vm);

hold on

plot(yt(maxl),maxv,'r*');

title(['imf(',num2str(1),')包络谱']);

xlim([0,500]);

 

 

axes(handles.axes9)

[x,t,ssf,yy,fxs]=plotspec2(IMF(2,:),1/fs);

plot(t,x)  

xlabel('Sample number');

ylabel(['imf(',num2str(2),')']);

title(['imf(',num2str(2),')信号']);

xlim([0,t(end)]);

 

axes(handles.axes10)

plot(ssf,abs(fxs))         % plot magnitude spectrum

xlabel('频率');

ylabel('幅度')   % label the axes

title(['imf(',num2str(2),')频谱']);

   

axes(handles.axes11)

[yt,Vm]=func_baoluo(IMF(2,:),fs,1);

[maxv,maxl]=max(Vm);

hold on

plot(yt(maxl),maxv,'r*');

title(['imf(',num2str(2),')包络谱']);

xlim([0,500]);

 

 

 

 

 

if LEVELview>=3

figure;

for i=1:LEVELview

   

 

    [x,t,ssf,yy,fxs]=plotspec2(IMF(i,:),1/fs);

   

    subplot(LEVEL,3,3*i-2);

    plot(t,x)  

    xlabel('Sample number');

    ylabel(['imf(',num2str(i),')']);

    title(['imf(',num2str(i),')信号']);

    xlim([0,t(end)]);

   

   

    subplot(LEVEL,3,3*i-1);

    plot(ssf,abs(fxs))         % plot magnitude spectrum

    xlabel('频率');

    ylabel('幅度')   % label the axes

    title(['imf(',num2str(i),')频谱']);

   

   

    subplot(LEVEL,3,3*i);

 

    [yt,Vm]=func_baoluo(IMF(i,:),fs,1);

    [maxv,maxl]=max(Vm);

    maxv

    hold on

    plot(yt(maxl),maxv,'r*');

   

    title(['imf(',num2str(i),')包络谱']);

    xlim([0,500]);

   

end

end

 

% --- Executes on button press in pushbutton4.

function pushbutton4_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton4 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

clc;

clear;

close all;

 

 

% --- Executes on button press in pushbutton5.

function pushbutton5_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton5 (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA)

parameters;

 

figure;

for i=1:LEVEL

y_cum = cumest(IMF(i,:)',4,512);

    subplot(LEVEL,2,2*i-1);

    plot(t,x)  

    xlabel('Sample number');

    ylabel(['imf(',num2str(i),')']);

    title(['imf(',num2str(i),')信号']);

    xlim([0,t(end)]);

   

   

    subplot(LEVEL,2,2*i);

    plot(y_cum)  

    title(['imf(',num2str(i),')高阶谱']);

end`