赞
踩
大家看到这篇文章,肯定会有疑问,难道本篇文章和上一篇文章不是一个意思嘛,这是来凑数的嘛……其实不然,如果各位读者仔细看,就会发现本篇文章和上一篇文章大有不同,这篇文章也是我一直以来想在上一篇文章基础上补充的文章。如果没看过我上一篇文章的,可以跳转这里:
正如标题所讲,白鲸优化算法优化VMD参数,最小包络熵为适应度函数,提取最小包络熵对应的IMF分量,采集最佳IMF分量的9种时域指标,提取特征向量。如果我说的不清楚,大家可以参考这篇文献。
[1]杨森,王恒迪,崔永存,李畅,唐元超.基于改进AFSA的参数优化VMD和ELM的轴承故障诊断[J].组合机床与自动化加工技术,2023(04):67-70.
这里也浅浅的截个图,给大家看看他的主要思路,红线部分即是本篇文章做的事情。
这里我先简单说一下本篇文章与我写的上一篇文章的不同之处。这一段大家不想看的可以忽略哈,直接往下看就行(点这里)
不知道讲到这里大家会不会蒙了哈。如果蒙了也不要紧,咱们直接看结果,看代码就ok啦,等看完代码再回来看以上解释。
BWO-VMD迭代曲线图:
采用白鲸优化算法对VMD参数进行优化,设置参数如下:程序中种群个数是10个,迭代次数为50次,以上两幅图是以97.mat正常数据为例,最后得到了最佳的两个VMD参数值为:2500,10(这里多一句嘴哈,如果大家没有这个边界值的疑问,那下一段就直接忽略。
接下来就是上代码啦,首先是数据处理代码,上文提到的修改采样点个数就是在这个代码中。
- 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优化和特征提取的主程序,大家运行的时候就运行这个文件即可!注意:这个代码中的注释大家一定要仔细观看!尤其是最后几行!
- %% 以最小包络熵为目标函数,采用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的数据,这就是得到的特征提取完的数据啦!然后大家可以拿着这个数据,送入各机器学习模型进行训练预测啦!
由于上一篇文章大家的运行会出现各种各样的问题,所以本次考虑给大家直接整理完整的整个压缩包!
下方卡片回复关键词:BWOVMD
欢迎大家评论区留言哦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。