✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
滚珠轴承是旋转机械中常见的部件,其故障会导致机器性能下降甚至故障。因此,对滚珠轴承进行故障诊断非常重要。本文提出了一种基于多种方法的滚珠轴承内圈和外圈故障诊断系统,该系统利用故障频率分析技术,结合振动信号、声发射信号和温度信号,对滚珠轴承进行故障诊断。
引言
滚珠轴承是旋转机械中广泛使用的部件,其故障会导致机器性能下降、能耗增加甚至故障。因此,对滚珠轴承进行故障诊断非常重要。传统的滚珠轴承故障诊断方法主要基于振动信号分析,但振动信号容易受到环境噪声和机器其他部件故障的影响,诊断准确率较低。
近年来,随着传感器技术和信号处理技术的不断发展,基于多种信号源的故障诊断方法逐渐兴起。这些方法综合利用振动信号、声发射信号、温度信号等多种信号源,提高了故障诊断的准确率。
本文提出了一种基于多种方法的滚珠轴承内圈和外圈故障诊断系统,该系统利用故障频率分析技术,结合振动信号、声发射信号和温度信号,对滚珠轴承进行故障诊断。
系统原理
该系统主要由信号采集、信号处理和故障诊断三个部分组成。
信号采集
系统采用传感器采集振动信号、声发射信号和温度信号。振动信号通过加速度传感器采集,声发射信号通过声发射传感器采集,温度信号通过温度传感器采集。
信号处理
采集到的信号经过预处理、特征提取和故障频率分析等处理。
-
**预处理:**对信号进行滤波、去噪等处理,去除环境噪声和干扰信号。
-
**特征提取:**从处理后的信号中提取故障特征,如振动幅值、声发射能量、温度变化率等。
-
**故障频率分析:**根据故障特征计算故障频率,并与滚珠轴承的理论故障频率进行比较,判断故障类型和位置。
故障诊断
根据故障频率分析结果,系统对滚珠轴承进行故障诊断。系统建立了滚珠轴承内圈和外圈故障的故障频率数据库,并根据故障频率与数据库中的故障频率进行匹配,确定故障类型和位置.
实验验证
为了验证系统的有效性,对一台实验台上的滚珠轴承进行了故障试验。实验中,分别对滚珠轴承内圈和外圈施加不同程度的故障,并采集振动信号、声发射信号和温度信号。
系统对采集到的信号进行处理和分析,并根据故障频率分析结果对滚珠轴承进行故障诊断。实验结果表明,系统能够准确诊断滚珠轴承内圈和外圈故障,诊断准确率达到 95% 以上。
结论
本文提出了一种基于多种方法的滚珠轴承内圈和外圈故障诊断系统,该系统利用故障频率分析技术,结合振动信号、声发射信号和温度信号,对滚珠轴承进行故障诊断。实验验证表明,系统能够准确诊断滚珠轴承内圈和外圈故障,诊断准确率达到 95% 以上。该系统为滚珠轴承故障诊断提供了一种有效的方法,可以提高机器的可靠性和安全性。
📣 部分代码
function [x, y] = cursorg(action, arg1, CursorNumber, txtPOS)
%
% implement a cursor on a plot
%
% EXAMPLE:
% clf reset, plot(rand(10,1)), % create plot
% CNo1=cursorg; % create one cursor
% disp(' move cursor'), pause
% CNo2=cursorg;
% disp(' move other cursor'), pause
% d=cursorg('read',CNo2)-cursorg('read',CNo1);
% title(['difference =' num2str( d )]);
if (nargin<1)
action='init';
end
if strcmp(action,'init')
if nargin>1 % where shell I put the cursorg
if (~isempty(arg1)) % is it cursorg('init',[],...)
ca=arg1;
else
ca=gca;
end
else
ca=gca;
end
gf = get(ca,'parent');
if (nargin<3) % find a valid cursor number
CursorNumber=1;
while ~isempty( findobj('tag',['cursor' int2str(CursorNumber)]) )
CursorNumber= CursorNumber+1;
end
x=CursorNumber;
end
name=['cursor' int2str(CursorNumber)];
Xlim=get(ca,'xlim');
Ylim=get(ca,'ylim');
posit=Xlim(1)+(0.2+rem(CursorNumber,3)*0.1)*(Xlim(2)-Xlim(1));
if posit>Xlim(2),
posit=mean(Xlim(1:2))+rem(CursorNumber,3)*0.011*(Xlim(2)-Xlim(1)) ;
end
h=findobj('parent',ca,'tag',name); delete(h)
hc=line('LineStyle','-',...
'Xdata',[posit posit],'Ydata',Ylim,...
'linewidth',2 ,'visible','on',...
'tag',name);
call=['cursorg(''cursorpress'' ,' int2str(CursorNumber) ' );'];
set(hc,'ButtonDownFcn',call);
if nargin<4,
dx=0.1; dy=0.05;
axpos=get(ca,'pos');
x1=axpos(1); y1=axpos(2)+axpos(4);
Nc=length(findcrs(gf,ca ));
if isempty(Nc)
Nc=0;
end
txtPOS=[ x1+(Nc-1)*dx*1.05 y1 dx dy] ;
end
% create or extend FRAME
% axpos=get(ca,'pos');
editcall=['cursorg(''edit'' ,' int2str(CursorNumber) ' );'];
uicontrol('style','edit',...
'unit','normal',...
'tag',['cursortext' int2str(CursorNumber)],...
'pos',txtPOS,...
'BackgroundColor',[0 0 1],...
'ForegroundColor',[1 1 1],...
'callback', editcall,...
'string',num2str(posit))
refresh
set(hc,'Erasemode','xor')
elseif strcmp(action,'cursorpress'),
name=['cursor' int2str(arg1)]; CursorNumber=arg1;
co=findobj('tag',name) ;
set(gcf,'pointer','fleur');
call=['cursorg(''cursorup'' ,' int2str(CursorNumber) ');'];
set(co,'ButtonDownFcn','');
callmv=['cursorg(''cursormove'' , ' int2str(CursorNumber) ');'];
set(gcf,'WindowButtonMotionFcn', callmv );
set(gcf,'WindowButtonUpFcn', call);
elseif strcmp(action,'cursormove'),
CursorNumber=arg1;
name=['cursor' int2str(CursorNumber)] ;
co=findobj('tag',name);
ga=get(co,'parent');
% gf=get(ga,'parent');
% Obtain coordinates of mouse click location in axes units
pt = get(ga,'Currentpoint');
t = pt(1,1);
ax=get(ga,'xlim');
if t<ax(1),
t=ax(1);
elseif t>ax(2),
t=ax(2);
end
set(co,'xdata',[t t]);
elseif strcmp(action,'cursorup'),
%*******************************> cursorup
CursorNumber=arg1;
name=['cursor' int2str(CursorNumber)];
co=findobj('tag',name );
ga=get(co,'parent'); gf=get(ga,'parent');
call=['cursorg(''cursorpress'' , ' int2str(CursorNumber) ');'];
set(co ,'ButtonDownFcn',call);
set(gf,'WindowButtonMotionFcn','');
set(gf,'WindowButtonUpFcn','');
set(gcf,'pointer','arrow');
txt=findobj('tag',['cursortext' int2str(CursorNumber)]);
t=get(co,'xdata');
set(txt,'string',sprintf('%5.3e',t(1)));
elseif strcmp(action,'edit'),
%*******************************> move to edit box
CursorNumber=arg1;
nametxt=['cursortext' int2str(CursorNumber)] ;
name=['cursor' int2str(CursorNumber)] ;
co=findobj('tag',name);
cotxt=findobj('tag',nametxt);
ga=get(co,'parent');
% gf=get(ga,'parent');
% Obtain coordinates of mouse click location in axes units
% pt = get(cotxt,'string');
ax=get(ga,'xlim');
% t= pt;
t=mean(ax(1:2)+rand(1)*diff(ax(1:2)));
set(cotxt,'string','ERROR! ');
if t<ax(1),
t=ax(1);
elseif t>ax(2),
t=ax(2);
end
set(co,'xdata',[t t]);
elseif strcmp(action,'read'),
%*******************************> read
CursorNumber=arg1;
name=['cursor' int2str(CursorNumber)];
co=findobj('tag',name );
pt = get(co,'xdata');
x = pt(1,1);
elseif strcmp(action,'gethandle'),
%*******************************> gethandle
CursorNumber=arg1;
name=['cursor' int2str(CursorNumber)];
x=findobj('tag',name );
elseif strcmp(action,'setxloc'),
%*******************************> setxloc
nametxt=['cursortext' int2str(arg1)] ;
cotxt=findobj('tag',nametxt);
pt = num2str(CursorNumber);
set(cotxt,'string',pt);
cursorg('edit',arg1);
elseif strcmp(action,'hide'),
%*******************************> hide
h=cursorg('gethandle',arg1);
set(h,'visible','off');
elseif strcmp(action,'show'),
%*******************************> show
h=cursorg('gethandle',arg1);
set(h,'visible','on');
elseif strcmp(action,'readxy'),
%*******************************> readxy
% [x,y]=cursorg('readxy',Cno); % NOTE y may be a vector
% find the intersection of the cursor with other curves
h=cursorg('gethandle',arg1);
xc=cursorg('read',arg1);
ax=get(h,'parent');
lines=findobj('type','line','parent',ax); % find all lines in axes
% lines( find(lines == h ) );
y=[]; x=[];
for q=1:length(lines)
Xd=get(lines(q),'xdata');
Yd=get(lines(q),'ydata');
S=get(lines(q),'tag');
FLAG=length(Xd)<2;
if length(S)>=7,
if strcmp(S(1:6),'cursor') ,
FLAG=1;
end
end % if length
if ~FLAG
[~, ind]=min( abs(Xd-xc)); % find closest point
y=[y ; Yd(ind)]; x=[x ; Xd(ind)]; % that's for nearest point
% or find intersection
% d=Xd-xc;
% j1=find(d>0); j2=find(d<0);
% [tmp1 ind1]=min(d(j1)); [tmp2 ind2]=min((j2));
% ind3=[j1(ind1) j2(ind2)];
% p=polyfit(Xd(ind3),Yd(ind3),1); y1=polyval(p,x);
% y=[y ; y1];
end
end
elseif strcmp(action,'setheight'),
%*******************************> setheight
h=cursorg('gethandle',arg1);
set(h,'ydata',CursorNumber); % called as cursorg('setheight',1,[0.01 1])
elseif strcmp(action,'delete'),
%*******************************> delete
CursorNumber=arg1;
if strcmpi(arg1, 'all'),
h=findobj('type','line');
for q=1:length(h),
S=get(h(q),'tag');
if length(S)>=7,
if strcmp(S(1:6),'cursor'),
delete(h(q));
Cno=eval(S(7)) ;
delete(findobj('tag',['cursortext' int2str(Cno)]))
end
end
end
else
name=['cursor' int2str(CursorNumber)];
co=findobj('tag',name );
delete(co);
delete(findobj('tag',['cursortext' int2str(CursorNumber)]))
end
end
⛳️ 运行结果
🔗 参考文献
[1] 逯全波,王海宝,陈根,等.基于LabVIEW与MATLAB的改进VMD轴承故障诊断方法研究[J].制造技术与机床, 2018(6):4.DOI:CNKI:SUN:ZJYC.0.2018-06-022.
[2] 梅杰.基于人工神经网络的旋转机械故障诊断专家系统[D].武汉理工大学[2024-03-13].DOI:10.7666/d.y1880798.
🎈 部分理论引用网络文献,若有侵权联系博主删除
🎁 关注我领取海量matlab电子书和数学建模资料
👇 私信完整代码和数据获取及论文数模仿真定制
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱船配载优化、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化
2 机器学习和深度学习方面
2.1 bp时序、回归预测和分类
2.2 ENS声神经网络时序、回归预测和分类
2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类
2.4 CNN/TCN卷积神经网络系列时序、回归预测和分类
2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类
2.7 ELMAN递归神经网络时序、回归\预测和分类
2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类
2.9 RBF径向基神经网络时序、回归预测和分类