白鲸优化算法优化VMD参数,最小包络熵为适应度函数,提取最小包络熵对应的IMF分量,采集最佳IMF分量的9种时域指标,提取特征向量。以西储大学数据为例,附MATLAB代码

news2024/10/7 10:18:24

大家看到这篇文章,肯定会有疑问,难道本篇文章和上一篇文章不是一个意思嘛,这是来凑数的嘛……其实不然,如果各位读者仔细看,就会发现本篇文章和上一篇文章大有不同,这篇文章也是我一直以来想在上一篇文章基础上补充的文章。如果没看过我上一篇文章的,可以跳转这里:

(4条消息) 麻雀算法SSA,优化VMD,适应度函数为最小包络熵,包含MATLAB源代码,直接复制粘贴!_今天吃饺子的博客-CSDN博客https://blog.csdn.net/woaipythonmeme/article/details/128785256?spm=1001.2014.3001.5501先说一下本文干了什么!

正如标题所讲,白鲸优化算法优化VMD参数,最小包络熵为适应度函数,提取最小包络熵对应的IMF分量,采集最佳IMF分量的9种时域指标,提取特征向量。如果我说的不清楚,大家可以参考这篇文献。

[1]杨森,王恒迪,崔永存,李畅,唐元超.基于改进AFSA的参数优化VMD和ELM的轴承故障诊断[J].组合机床与自动化加工技术,2023(04):67-70.

 这里也浅浅的截个图,给大家看看他的主要思路,红线部分即是本篇文章做的事情。

这里我先简单说一下本篇文章与我写的上一篇文章的不同之处。这一段大家不想看的可以忽略哈,直接往下看就行(点这里)

  1. 本篇文章采用的是白鲸优化算法优化VMD参数,之所以选这个方法是因为:①这个算法比上一篇文章所用的麻雀优化算法要更加易于理解,评论区看到很多小伙伴,在用麻雀算法时候碰到了很多bug,用这个方法也是尽量避免bug;②白鲸优化算法是2022年提出的,距离今天还算比较新,大家在学习VMD优化的时候也可以学学这个新算法。
  2. 先说上一篇文章的思路是:首先采用麻雀优化算法对VMD参数进行优化,得到最佳的K值和α值,而依据就是最小包络熵。好的大家到这里都一目了然,也容易理解,但是再往下该怎么利用这个K值和α值呢?
  3. 这里目前作者知道的方法有两种:①将K值和α值回带,求出每个IMF分量的近似熵,用这个近似熵值构建特征向量;②再求最小包络熵的时候,把最小包络熵的索引值idx(也就是你分解得到的K个IMF分量中,到底哪个分量的包络熵最小?)作为函数输出,然后将K值,α值和这个索引值idx都回带,计算该索引值对应的IMF分量的峭度值,峰值,均值,裕度因子等等指标,从而构建特征向量。
  4. 两种方法各有千秋,最后机器学习模型的诊断结果都是很好的。两个方法都能找到参考文献。第一个方法,缺陷是没有完全用到这个包络熵,只是以包络熵为最小目标函数去优化VMD参数了而已,然后对每个IMF分量求了近似熵,而不单单是对最小包络熵对应的IMF分量求了近似熵,当然这样也就没法构成特征向量了哈!第二个方法是只让最小的包络熵对应的IMF分量当做当前数据的主要特征,然后求一些峰值,裕度因子,均值,方差等指标构建特征向量。

不知道讲到这里大家会不会蒙了哈。如果蒙了也不要紧,咱们直接看结果,看代码就ok啦,等看完代码再回来看以上解释。

 接下来依旧是先上结果:

 BWO-VMD迭代曲线图:

采用白鲸优化算法对VMD参数进行优化,设置参数如下:程序中种群个数是10个,迭代次数为50次,以上两幅图是以97.mat正常数据为例,最后得到了最佳的两个VMD参数值为:2500,10(这里多一句嘴哈,如果大家没有这个边界值的疑问,那下一段就直接忽略。

  • 上一篇文章,大家很纠结这个值为啥在边界上呀,为啥和一些参考文献不一致啊,作者这里统一说一下,首先你要多试几次,然后要对不同的数据进行尝试,种群个数选成20也可以,增加搜索范围,如果说依旧是边界,那就把数据的采样点个数增加一下(下面会在程序中讲到数据点采样个数,我会标记出来))。总之,我现在不管是不是边界值,我最后的机器模型诊断效果不错,能够正确识别该故障,这个目的达到不就行了吗,各位读者,其他一些文献中提到的值,不一定就肯定是正确的(这里就不多说了哈,懂的都懂)。
  • 下面也附上一张我换了数据的迭代图,此数据是105.mat大家可以看到,这个就不在边界上了哈!
  •  

接下来就是上代码啦,首先是数据处理代码,上文提到的修改采样点个数就是在这个代码中。

  • 这个大家也可以看我另一篇文章,那篇文章有下载西储大学数据和数据处理脚本文件的方法。大家有数据的也可以直接复制该代码,与轴承数据放在同一文件夹下即可。(正所谓巧妇难为无米之炊,数据一定要先处理好哈!当然大家如果需要更多别的数据,我之后也会稍微整理一篇文章,当然也不收费的哦!经过几年的积累,作者这里还是多少有点数据的哈)。

(西储大学轴承数据处理--附MATLAB代码_今天吃饺子的博客-CSDN博客https://blog.csdn.net/woaipythonmeme/article/details/131214489?spm=1001.2014.3001.5501

clc;
clear;
addpath(genpath(pwd));
%DE是驱动端数据 FE是风扇端数据 BA是加速度数据 选择其中一个就行
load 97.mat  %正常
load 105.mat  %直径0.007英寸,转速为1797时的  内圈故障
load 118.mat   %直径0.007,转速为1797时的  滚动体故障
load 130.mat  %直径0.007,转速为1797时的  外圈故障
load 169.mat   %直径0.014英寸,转速为1797时的  内圈故障
load 185.mat    %直径0.014英寸,转速为1797时的  滚动体故障
load 197.mat    %直径0.014英寸,转速为1797时的  外圈故障
load 209.mat   %直径0.021英寸,转速为1797时的  内圈故障
load 222.mat  %直径0.021英寸,转速为1797时的  滚动体故障
load 234.mat  %直径0.021英寸,转速为1797时的 外圈故障
% 一共是10个状态,每个状态有120组样本,每个样本的数据量大小为:1×2048
w=1000;                  % w是滑动窗口的大小1000
s=2048;                  % 每个故障表示有2048个故障点
m = 120;            %每种故障有120个样本
D0=[];
for i =1:m
    D0 = [D0,X097_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D0 = D0';
D1=[];
for i =1:m
    D1 = [D1,X105_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D1 = D1';

D2=[];
for i =1:m
    D2 = [D2,X118_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D2 = D2';
D3=[];
for i =1:m
    D3 = [D3,X130_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D3 = D3';
D4=[];
for i =1:m
    D4 = [D4,X169_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D4 = D4';
D5=[];
for i =1:m
    D5 = [D5,X185_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D5 = D5';
D6=[];
for i =1:m
    D6 = [D6,X197_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D6 = D6';
D7=[];
for i =1:m
    D7 = [D7,X209_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D7 = D7';
D8=[];
for i =1:m
    D8 = [D8,X222_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D8 = D8';
D9=[];
for i =1:m
    D9 = [D9,X234_DE_time(1+w*(i-1):w*(i-1)+s)];
end
D9 = D9';
data = [D0;D1;D2;D3;D4;D5;D6;D7;D8;D9];
ceshi_data = data;
save data data
folder='测试数据汇总/'; %%定义变量
if exist(folder)==0 %%判断文件夹是否存在
    mkdir(folder);  %%不存在时候,创建文件夹
end

xlswrite('/测试数据汇总/转速1797_测试数据汇总.xlsx',ceshi_data);

dd = [];
for i = 0:size(data,1)/m-1
    dd(1+m*i:m+m*i) = i+1;
end
zj = [dd;data'];
ceshi_data = zj';
xlswrite('/测试数据汇总/转速1797_测试数据汇总带标签.xlsx',ceshi_data);
rmpath(genpath(pwd))

 接下来是BWO-VMD优化和特征提取的主程序,大家运行的时候就运行这个文件即可!注意:这个代码中的注释大家一定要仔细观看!尤其是最后几行!

  • 这个主文件只是对一种故障类型的VMD参数寻优和特征提取,想要提取其他类型故障的特征,需要手动改代码,改代码的方式我也已经写到备注里边了。之所以没写一个整体的大循环,是因为考虑到:①程序会执行相当慢,且大家需要记录每种故障对应的K值和α值,如果写个大循环,那大家就看不清楚每次执行的最佳K值与α值了②:第二点也非常重要啊!那就是作者有点懒了,这篇文章的每个字,都是我一个个敲出来,艾玛也,敲了俩小时了……整理真不容易,底部小卡片点个关注昂!别无他求了……
%% 以最小包络熵为目标函数,采用BWO算法优化VMD,求取VMD最佳的两个参数
clear all
clc
addpath(genpath(pwd))
load data
%设置PSOCHOA算法的参数
D=2;             % 优化变量数目
lb=[100 3];      % 下限值,分别是a,k
ub=[2500 10];        % 上限值
T=50;       % 最大迭代数目
N=10;        % 种群规模
y=@Cost;
da = data(190,:);   %特别要注意,这里选择的时候要一类一类的选,比方说我要提取第种一类别的特征向量,那这里就从1-120行之间随便选一行,(为什么是120呢,是指我在数据处理阶段,每一类故障收集了120个样本的意思)
%然后计算最佳的两个VMD参数,计算完了之后,将最佳的k值和α值带入特征提取函数中,对这一类的数据进行近似熵的特征提取
%如果我提取第二类故障,那就在121-240之间随机选一行。
[bwoBest_pos,bwoBest_score,Bestidx,BWO_curve] = BWO(y,lb,ub,D,N,T,da);
%画适应度函数图
figure
plot(1:T,BWO_curve,'Color',[0.7 0.1 0.7],'Marker','>','LineStyle','--','linewidth',1);
% plot(1:T,BWO_curve,'Color','r')
title('Objective space')
xlabel('Iteration');
set(gca,'xtick',0:2:T);
ylabel('Best score obtained so far');
legend('BWO优化VMD')
display(['The best solution obtained by PSOCHOA is : ', num2str(round(bwoBest_pos))]);  %输出最佳位置
display(['The best optimal value of the objective funciton found by BWO is : ', num2str(bwoBest_score)]);  %输出最佳适应度值
%% 以下为将最佳的a,k,idx带入VMD中,并进行近似熵特征提取
bbh = round(bwoBest_pos);%最佳位置取整
new_data1 = tezhengtiqu(bbh(1),bbh(2),Bestidx,data(1:120,:));  %将优化得到的两个参数和最小包络熵的索引值带回VMD中
save new_data1.mat new_data1  %将提取的特征向量保存为mat文件,方便概率神经网络的处理
%% 删除路径,以免被其他函数混淆
rmpath(genpath(pwd))
%当想要寻优第其他故障类型的时候,就需要大家将da=data(111,:),改成da=data(125,:),(随机的从121-240之间挑一个数,因为这个区间是同一类的故障,我们默认优化同一类故障数据得到的最佳IMF分量索引是一致的!)
%其次还需要改new_data = tezhengtiqu(bbh(1),bbh(2),idx,data(1:120,:));将data(1:120,:),改成data(121:240,:)
%save new_data2.mat new_data2 这里也改成data2
%就这样,大家一种类型一种类型的提取,一遍一遍记录每次得到的最佳K和α的值,一遍一遍的把特征变量存储起来就ok啦

由最后四行注释可以看出,如果你选了10种类型的故障进行诊断,那么!你就要执行10次这个主程序,而且每次都要改几个地方。最后你就可以总结出来一个类似这样的表格咯:

 这可不是本文得到的表格啊,作者在这里只是告诉大家会得到这样一个最佳组合的表格,你写在论文里也更有说服力,是不是!

 特征提取完了之后,以本篇文章为例,在数据处理阶段,一共选了10种故障类型,每种类型是120个故障样本。每个故障样本将来会被均值,方差,峰值,峭度,有效值,峰值因子,脉冲因子,波形因子,裕度因子九个指标代替。所以最终得到一个1200*9的数据,这就是得到的特征提取完的数据啦!然后大家可以拿着这个数据,送入各机器学习模型进行训练预测啦!

由于上一篇文章大家的运行会出现各种各样的问题,所以本次考虑给大家直接整理完整不收费的整个压缩包!

下方卡片回复关键词:VMD优化

欢迎大家评论区留言哦!

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

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

相关文章

chatgpt赋能python:Python断言:如何断言等于两个值其中一个?

Python断言:如何断言等于两个值其中一个? Python是一种广泛使用的编程语言,而断言是它的一个重要功能。在编程中,我们可以使用断言来验证代码是否按照预期工作。但是,在某些情况下,我们可能想要断言两个值…

快速上手kettle(四)壶中可以倒出些啥?

快速上手kettle(四)壶中可以倒出些啥 前言一 、kettle 这壶里能倒出啥?二 、Access输出2.1 Access输出设置2.2 启动转换,查看输出 三 、Excel输出3.1 选择excel扩展名3.2 1 将表中数据分别写入到excel中 四、JSON output4.1 JSON …

常见骨干网络介绍

骨干网络 骨干网络(backbone network)顾名思义,是深度学习中最核心的网络组成。本文按时间顺序,简要介绍几种影响重大的backbone设计思路,我们或许可以从窥探前人的设计思路中获得启发和灵感。 1.1 AlexNet, 2012 这…

10倍|中科院再传好消息:比英伟达还快,“新技术”实现弯道超车

中科院再传好消息:在光芯片上有了重大突破,李明-祝宁华团队研制出了一款超高集成度光学卷积处理器。 这种方案具有高算力密度、超高的线性扩展性! 基于这种技术的,光芯片的性能将再次提升,光芯片是用于AI,如果能变成现…

每日算法(第二十四期)

先来回顾一下上期的问题及答案: 2023年6月15日 「电话号码的字母组合」(Letter Combinations of a Phone Number)。以下是题目的描述: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的…

记录--前端如何优雅导出多表头xlsx

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 xlsx导出是比较前后端开发过程中都比较常见的一个功能。但传统的二维表格可能很难能满足我们对业务的需求,因为当数据的维度和层次比较多时,二维表格很难以清晰和压缩的方式展现所有的…

macOS Ventura 13.5beta3(22G5048d)发布

系统介绍 黑果魏叔 6 月 16 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 3 更新(内部版本号:22G5048d),本次更新距离上次发布隔了 15 天。 macOS Ventura 带来了台前调度、连续互通相机、Fa…

【Axure 教程】中继器(进阶篇)

一、修改、删除指定行 首先我们还是在 Axure 页面中拖入一个【中继器】,并双击打开,在默认的【矩形】后面加上【修改】和【删除】按钮: 然后我们给修改按钮添加【中继器事件】,选择【更新行】: 可以看到,由…

Axure RP 9 基础教程 元件基础3

11、组合元件 Axure中可以将多个元件组合起来,组合可以被命名,也可以被当成一个元件来进行交互,调整位置和大小等。选中多个元件,在顶部菜单中点击组合图标即可。选中一个组合,点击取消组合,可以就地解散。…

多传感器融合分类及对比

1.多传感器融合的体系结构 在多传感器融合中,按照对原始数据处理方法的不同,多传感器融合系统的体系结构可以分为三种:集中式,分布式和混合式(混合式又分为有反馈结构和无反馈结构)。 集中式融合:将各传感器获得的原始…

软件设计的核心方法及实例解析

李连杰电影版《倚天屠龙记》里有个经典的名场面,祖师爷爷张三丰花了三分钟教张无忌太极拳,张无忌学成打败了对手。三丰爷爷的教学思路是这样的:爷爷演示太极拳让张无忌跟着练,边练边问张无忌记住了多少,等张无忌把所有…

网络系统安全——MS15_034漏洞利用与安全加固

Kali 192.168.124.162 Windows server 2008 192.168.124.169 检查2008服务器的IIS网站是否正常,进入2008服务器,使用ie浏览器访问本机地址 切换到kali,使用命令ping来测试他们的连通性 然后使用使用命令curl测试,测试&#x…

FTP协议,带你了解FTP协议

目录 一、FTP的概述 1.FTP的理念 2.FTP数据连接模式 3.连接模式分类 4.主动和被动模式的工作原理 二、配置FTP服务 1、配置匿名用户FTP服务 1. 1安装FTP服务器软件 1.2 配置FTP服务器 1.3 重启FTP服务器 1.4 测试FTP服务器 2.关闭防火墙安装vsftpd软件包 3.开启FTP…

单片机中移植lua解释器

一、基本开发环境 开发环境基于野火STM32开发板。 前测试的 Lua 解释器版本为 5.4.2。 官网下载lua资源包,下载地址如下: https://www.lua.org/ https://github.com/rjpcomputing/luaforwindows/releases lua: Lua 国内镜像 (gitee.com)‍ 二、移植Lua解…

AIGC数据库工具-阿里开源Chat2DB

前言 今天无意间发现了一个AIGC数据库工具,chat2DB,重点!!!阿里开源,其设计产品的思想给了我很多灵感,故记录一下,并分享给大家。 概述: Chat2DB 是一款有开源免费的多…

驱动开发:内核RIP劫持实现DLL注入

本章将探索内核级DLL模块注入实现原理,DLL模块注入在应用层中通常会使用CreateRemoteThread直接开启远程线程执行即可,驱动级别的注入有多种实现原理,而其中最简单的一种实现方式则是通过劫持EIP的方式实现,其实现原理可总结为&am…

【C++】入门基础知识详解(二)

目录 一、内联函数 1、概念 2、特性 3、内联函数与宏的优缺点 二、auto关键字(C11) 1、auto 简介 2、auto的使用细则 2.1 auto与指针和引用结合起来使用 2.2 在同一行定义多个变量 3、auto不能推导的场景 3.1 auto 不能作为函数的参数 3.2 auto 不能直接用来声明数组 三、…

英语中如何描述五颜六色

前言 如何用英语描述五颜六色,看完这篇文章,你就学会了 🏠个人主页:我是沐风晓月 🧑个人简介:大家好,我是沐风晓月,阿里云社区博客专家 😉😉 💕 …

Axure RP 9 基础教程 元件基础2

第一章:Axure RP 9的元件(2) 6、改变元件的位置 要改变元件的位置,只需要拖动对应的元件即可。另外也可以在顶部快捷样式菜单中设置坐标值,然后按回车键,让元件移动到指定位置。 X轴是横轴,改变可以调整左右的位置。 Y…

技术科普与解读:ChatGPT 大模型硬核解读!(一)家族历史从GPT-1到ChatGPT

多模态,指的是融合文本、图像、视频或音频等多种模态作为输入或输出。 GPT-4是严格意义上的多模态模型,可以支持图像和文字两类信息的同时输入,输出为文本。从学术界的分析来看,无论是知识/能力获取还是与现实物理世界的交互&…