【故障诊断】基于多种方法滚珠轴承内圈和外圈故障诊断(分析故障频率)系统附Matlab代码

 ✅作者简介:热爱科研的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';endif 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径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
2.图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
3 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
4 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
5 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
6 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
7 电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电
8 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
9 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值