“三高”论文完美复现!基于PSO-VMD-MCKD方法的风机轴承微弱故障诊断,实现早期微弱故障诊断,MATLAB代码实现...

声明:对于作者的原创代码,禁止转售倒卖,违者必究!

本期文章思路来自振动测试与诊断期刊的一篇三高论文,点击链接可跳转。https://mp.weixin.qq.com/s/hmmDj5IwpaozeL4F0iI-2g

4a3f1b0f0383a4e6425367c0979f6d5d.png

文章摘要如下:

针对风机滚动轴承微弱故障信号所具有的非线性和非平稳特征及易被强背景噪声掩盖的特点,提出了一种变分模态分解(variational modal decomposition,简称VMD)和最大相关峭度解卷积(maximum correlated kurtosis deconvolution,简称MCKD)相结合的滚动轴承微弱故障诊断方法。为实现VMD和MCKD的参数自适应选择,采用粒子群优化算法(particle swarm optimization,简称PSO),对两种算法中的参数进行优化。首先,利用PSO优化VMD算法中的α和K,再基于VMD对微弱故障信号分解后的结果,选取最优模态分量;其次,利用PSO优化MCKD算法中的L和T,再基于MCKD算法加强最优分量信号中的故障冲击成分;最后,通过包络谱提取出轴承微弱故障特征。仿真和试验均表明,此方法能够自适应增强轴承微弱故障中的冲击成分,有效提取出被强噪声淹没的轴承微弱故障特征。

之前小淘发过一篇文章:改进的麻雀算法优化最大相关峭度解卷积(SCSSA-MCKD),这篇文章采用的是模拟的仿真信号,而且当时没有像论文中一样,先对VMD进行优化。

本期文章将采用西储大学轴承数据外圈故障130.mat为例,对该论文的主要方法进行完美复现!先看代码目录:所有代码均为.m文件,不是那种加密的.p文件!

3932909036f63ec407333c88c658573b.png

在介绍步骤流程之前,这里先对西储大学的数据进行一个知识补充。

选择130.mat这个数据进行分析处理一下:

5cc11d2445df433c143eab23db0494ef.jpeg

adb2400ec0440ba4ba1f9d81f5d675ef.jpeg

计算出此时的理论故障特征频率约为:

3a57e319920d625c75f91064d27bca5c.png

可以看到130.mat的理论故障频率为107.3050Hz。接下来的所有工作就是要在噪声淹没130.mat数据的情况下,还要能识别出来这个故障频率。

接下来针对代码目录截图讲步骤:

第一步:轴承数据分析

第一步是对西储大学130.mat的分析,大家也可以对其他数据进行分析。由于要模拟轴承被噪声掩盖的微弱故障信号,因此要先对原始的130.mat数据添加高斯白噪声数据,论文的原文也是这么做的。

运行Signal_Analysis.m文件,可以得到与论文中图10(a),图10(b),图10(c)相同的三幅图。并且会保存一个加了高斯白噪声的signal.mat文件,后面第二步是要针对这个signal.mat文件去优化VMD参数的。

641f5c327d63ea53be7c2c32b7041595.png

38fcfb61035967b178080ed6b8dc88a1.png

be751122726e3157498f3b129d342ee5.png

可以看到,添加了高斯噪声的轴承信号,时域波形中几乎观测不出任何冲击成分,而在频谱图中,也无规律可循。对信号进一步进行包络解调,也未发现突出频率成分。

第二步:采用粒子群算法优化VMD,包络谱峰值因子为适应度函数

采用粒子群算法优化VMD参数,并找到最佳IMF分量:将第一步得到的signal.mat复制到第二步的文件夹中,采用VMD方法对第一步得到的signal.mat信号分解,计算分解得到的各个IMF分量的包络谱峰值因子,包络谱峰值因子最大的IMF分量即为最佳IMF分量;

运行PSOmain.m,可以得到论文中图11(a),图11(b),和一个PSO寻优VMD最佳参数的曲线图。并会将最佳的IMF分量进行保存,得到best_imf.mat文件,后面第三步要对这个best_imf.mat文件进行操作。第二步的代码运行结果如下:

6c1a0779ba363a9e7fde43f2f2f1be09.png

2c7d5fcab74048461e87adbefb736e5a.png

e774ce745b8d38674a5ac4d26ee39d47.png

最后得到的最佳VMD参数结果为:

4b51394896aa40cadf27d57efa907545.png

从最佳IMF分量的包络谱中观测出在108Hz有明显的突出谱线,其幅值较其他谱线都大,但因为其倍频不够明显突出,不能确定108Hz为轴承故障频率。为了避免错诊,应做进一步分析。

第三步:采用粒子群算法优化MCKD,包络谱峰值因子为适应度函数

采用粒子群算法对最大相关峭度解卷积(MCKD)的三个参数进行寻优,得到增强的IMF分量。原文献中只对MCKD的[L,T]两个参数进行了优化,作者在这里进行了改进,对[L,T,M]三个参数进行了优化,以确保找到最佳的MCKD参数。

将第二步得到的best_imf.mat复制到第三步的文件夹中,运行main.m文件,会得到论文中的图12(a),图12(b),和一个PSO优化MCKD的寻优曲线。

ab9b2d4b44b6ebc1f3e2f0d830938e9b.png

88e82a95e009422239eb2b3ad3ebd9eb.png

05366b614341f1d20db8a615c10373c0.png

处理过程如下:

d240def192db9a53981d13bb906f2f46.png

得到的最佳参数分别是[L,T,M] = [532,111,6];

可以看到,与优化前的IMF分量包络谱比较,得到了明显的增强。解卷积后的包络谱中故障特征频率fi 及其2-9倍频的谱线均清晰可见,表明特征频率被准确提取。均是130.mat理论故障频率的倍数。

能够认真看到这里的同学,作者在这里在稍稍提一句,也算是个水论文不错的方法,可以将此文中的VMD方法换成其他数据分解的方法,也可以将粒子群算法换个算法,还可以对MCKD也找一种替换方法,这论文不就凑出来了嘛哈!

部分代码分享

%% 
clear
clc  
close all
fobj=@mckdcost;       %包络谱峰值因子
%% 选取数据
load best_imf.mat  %注意这里替换为自己的数据即可,数据形式为n行*1列,列数必须为1。
data = best_imf;
%% 设置参数
lb = [100 85 1];    %mckd下限
ub = [1000 142 7];  %mckd上限
dim = 3;            % 优化变量数目
Max_iter=30;       % 最大迭代数目
SearchAgents_no=10;       %种群规模
fs = 12000;   %采样频率
%% 调用PSO函数
[fMin , bestX, Convergence_curve ] = PSO(SearchAgents_no,Max_iter,lb,ub,dim,fobj,data,fs);
%% 画适应度函数曲线图,并输出最佳参数
figure
plot(-Convergence_curve,'Color',[0.9 0.5 0.1],'Marker','>','LineStyle','--','linewidth',1);title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
legend('PSO优化MCKD')
display(['The best solution obtained by PSO is : ', num2str(fix(bestX))]);  %输出最佳位置
display(['The best optimal value of the objective funciton found by PSO is : ', num2str(-fMin)]);  %输出最佳适应度值%% 将最佳的MCKD参数回带,求出结果filterSize = fix(bestX(1));
termIter = 30;
T = fix(bestX(2));
M = fix(bestX(3));
plotMode = 0;
%--------------- Run actual mckd code:数据进行mckd分解---------------------------
[y_final,~,~] = mckd(data,filterSize,termIter,T,M,plotMode);%% 绘制MCKD处理后的时域波形
fs=12000;%采样频率
Ts=1/fs;%采样周期
L=4000;%采样点数,稍微多点即可,不用全部取完
t=(0:L-1)*Ts;%时间序列
figure;
plot(t,y_final); %故障信号
ylabel('幅值','fontsize',12);
xlabel('t/s','fontsize',12);
xlim([0 t(end)])
title('MCKD处理后的时域波形')
set(gcf,'unit','centimeters','position',[10 16 15 5])

每个代码都有详细的注释,文中提到的所有图片均可运行出来!大家按照文中步骤一一运行即可。

05代码获取

   完整代码获取,点击下方卡片后台回复关键词,不区分大小写:

tgdm829

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在qml中将一个16进制表示的颜色加上透明度

在qml中,我们在指定控件的颜色时,可以直接通过16进制的字符串来表示,比如"#ff0000"; 这种方式也比较符合UI设计人员的使用习惯。 但是假如要在此颜色的基础上,加个透明度的话,就要重新计算一番,比…

【iOS逆向与安全】插件开发之某音App直播间自动发666

1.目标 由于看直播的时候主播叫我发 666,支持他,我肯定支持他呀,就一直发,可是后来发现太浪费时间了,能不能做一个直播间自动发 666 呢?于是就花了几分钟做了一个。 2.操作环境 越狱iPhone一台 frida ma…

c++ 纯虚函数、抽象类

一、 纯虚函数 抽象类 只要有一个纯虚函数&#xff0c;这个类称为抽象类 抽象类的特点 1、无法实例化 2、抽象类的子类&#xff0c;必须要重写父类中的纯虚函数&#xff0c;否者也属于抽象类 例子一 #include <iostream> #include <string.h> using namespa…

tensorflow cuda gpu 安装

Windows 安装 CUDA/cuDNN 需要注意的是一定要选择 TensorFlow 和 CUDA相匹配&#xff0c;还需要查看下自己GPU的驱动版本&#xff0c;如果不匹配会出现很多问题。GPU驱动的版本可在 NVIDIA控制面板里找到&#xff1a; CUDA个版本与驱动的关系如下&#xff1a; GPU版本的 Tensor…

Laravel框架 - IOC容器详解

IOC 容器代码 好了&#xff0c;说了这么多&#xff0c;下面要上一段容器的代码了. 下面这段代码不是laravel 的源码&#xff0c; 而是来自一本书《laravel 框架关键技术解析》. 这段代码很好的还原了laravel 的服务容器的核心思想. 代码有点长&#xff0c; 小伙伴们要耐心看. …

JMeter断言之JSON断言

JSON断言 若服务器返回的Response Body为JSON格式的数据&#xff0c;使用JSON断言来判断测试结果是较好的选择。 首先需要根据JSON Path从返回的JSON数据中提取需要判断的实际结果&#xff0c;再设置预期结果&#xff0c;两者进行比较得出断言结果。 下面首先介绍JSON与JSON…

【深度学习】LeNet网络架构

文章目录 什么是LeNet代码实现网络架构 什么是LeNet LeNet是一种经典的卷积神经网络&#xff0c;由Yann LeCun等人在1998年提出。它是深度学习中第一个成功应用于手写数字识别的卷积神经网络&#xff0c;并且被认为是现代卷积神经网络的基础。 LeNet模型包含了多个卷积层和池…

Spark

Apache Spark是一种快速、通用、可扩展的大数据处理引擎&#xff0c;旨在处理大规模数据集并进行高效的数据分析。与Hadoop MapReduce相比&#xff0c;Spark具有更高的性能和更丰富的功能&#xff0c;可以处理更复杂的数据处理任务。以下是Apache Spark的一些基本概念&#xff…

idea2023+springboot 热部署配置

pom 中配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency>idea

蓝桥杯每日一题2023.9.21

蓝桥杯2021年第十二届省赛真题-异或数列 - C语言网 (dotcpp.com) 题目描述 Alice 和 Bob 正在玩一个异或数列的游戏。初始时&#xff0c;Alice 和 Bob 分别有一个整数 a 和 b&#xff0c;有一个给定的长度为 n 的公共数列 X1, X2, , Xn。 Alice 和 Bob 轮流操作&#xff0…

Rsync学习笔记2

Rsync&#xff1a; 增量操作&#xff1a; 1&#xff09; server01服务文件变动。 [rootserver03 tp5shop]# rsync -av /usr/local/nginx/html/tp5shop root192.168.17.109:/usr/local/nginx/html/ sending incremental file listsent 88,134 bytes received 496 bytes 177,…

如何评估测试用例的优先级?

评估测试用例的优先级&#xff0c;有助于我们及早发现和解决可能对系统稳定性和功能完整性产生重大影响的问题&#xff0c;助于提高测试质量&#xff0c;提高用户满意度。 如果没有做好测试用例的优先级评估&#xff0c;往往容易造成对系统关键功能和高风险场景测试的忽略&…

黑马JVM总结(十八)

&#xff08;1&#xff09;G1_FullGC的概念辨析 SerialGC&#xff1a;串行的&#xff0c;ParallelGC&#xff1a;并行的 &#xff0c;CMS和G1都是并发的 这几种垃圾回收器的新生代回收机制时相同的&#xff0c;SerialGC和ParalledGC&#xff1a;老年代内存不足触发的叫FullGC…

zabbix自定义监控、钉钉、邮箱报警 (五十六)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 一、实验准备 二、安装 三、添加监控对象 四、添加自定义监控项 五、监控mariadb 1、添加模版查看要求 2、安装mariadb、创建用户 3、创建用户文件 4、修改监控模版 5、…

Vue2的学习

computed计算属性 概念 基于现有数据&#xff0c;计算出来的新属性&#xff0c;依赖的数据变化&#xff0c;会自动重新计算 语法 声明在computed配置项中&#xff0c;一个计算属性对应一个函数这是一个属性{{计算属性名}}&#xff0c;不是方法注意不要忘记return <body…

uniapp开发h5,解决项目启动时,Network: unavailable问题

网上搜了很多&#xff0c;发现都说是要禁用掉电脑多余的网卡&#xff0c;这方法我试了没有好&#xff0c;不晓得为啥子&#xff0c;之后在网上看&#xff0c;uniapp的devServer vue2的话对标的就是webpack4的devserver&#xff08;除了复杂的函数配置项&#xff09;&#xff0c…

持有NPDP证书是否可以进入高薪行业?

对于NPDP&#xff0c;一部分人考完PMP&#xff0c;想要继续提升自己的职场竞争力&#xff0c;一部分人是想直接考NPDP&#xff0c;但不确定它是否真的可以帮助到自己的职业发展&#xff0c;还处于一个犹豫踌躇的状态&#xff0c;那么我就来详细的介绍下NPDP考试的相关讯息&…

HTML5+CSS3+JS小实例:鼠标控制飞机的飞行方向

实例:鼠标控制飞机的飞行方向 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…

【unity】关于技能释放shader.CreateGPUProgram造成卡顿,优化和定位方法。

关于优化方法&#xff0c;UWA这边有介绍 Unity移动端游戏性能优化简谱之 CPU耗时调优|单帧|动画|调用|unity|实例化_网易订阅 对此&#xff0c;我们可以将Shader通过ShaderVariantCollection收集要用到的变体并进行AssetBundle打包。在将该ShaderVariantCollection资源加载进内…

KubeSphere 在互联网医疗行业的应用实践

作者&#xff1a;宇轩辞白&#xff0c;运维研发工程师&#xff0c;目前专注于云原生、Kubernetes、容器、Linux、运维自动化等领域。 前言 2020 年我国互联网医疗企业迎来了“爆发元年”&#xff0c;越来越多居民在家隔离期间不方便去医院看诊&#xff0c;只好采取在线诊疗的手…