벨루가 최적화 알고리즘은 VMD 파라미터를 최적화하고, 최소 포락선 엔트로피는 적합도 함수로, 최소 포락선 엔트로피에 해당하는 IMF 성분을 추출하고, 최적의 IMF 성분의 시간 영역 지표 9개를 수집하여 특징 벡터를 추출한다. MATLAB 코드가 첨부된 Western Reserve University의 데이터를 예로 들어 보겠습니다.

이 글을 읽으시면 분명 의문이 생기실 겁니다 이 글은 이전 글과 같은 글이 아닌가요 이전 글은 많이 다르고 이 글도 제가 항상 그 근거로 보완하고 싶었던 글입니다 이전 기사. 내 마지막 기사를 읽지 않았다면 여기로 이동할 수 있습니다.

(4개 메시지) Sparrow 알고리즘 SSA, VMD 최적화, 적합성 기능은 MATLAB 소스 코드를 포함한 최소 봉투 엔트로피, 직접 복사 및 붙여넣기! _오늘 만두 먹는 블로그-CSDN 블로그 https://blog.csdn.net/woaipythonmeme/article/details/128785256?spm=1001.2014.3001.5501 먼저 이 글이 하는 일에 대해 말씀드리겠습니다!

제목에서 알 수 있듯이 Beluga 최적화 알고리즘은 VMD 파라미터를 최적화하고, 최소 포락선 엔트로피는 적합도 함수로 최소 포락선 엔트로피에 해당하는 IMF 성분을 추출하고, 최적의 IMF 성분의 시간 영역 지표 9개를 수집하여 특징 벡터를 추출한다. . 명확하지 않은 경우 이 문서를 참조할 수 있습니다.

[1] Yang Sen, Wang Hengdi, Cui Yongcun, Li Chang, Tang Yuanchao. 개선된 AFSA 매개변수 최적화 VMD 및 ELM에 기반한 베어링 결함 진단 [J]. 결합 공작 기계 및 자동 처리 기술, 2023(04):67-70 .

 여기 또한 그의 주요 아이디어를 모두에게 보여주기 위한 얕은 스크린샷이 있습니다 .

여기서는 이 기사와 이전에 작성한 기사의 차이점에 대해 간략하게 설명하겠습니다. 읽기 싫으면 이 단락을 무시해도 됩니다. 직접 읽으십시오 (여기를 클릭하십시오 ).

  1. 이 글은 VMD 파라미터를 최적화하기 위해 벨루가 최적화 알고리즘을 사용합니다. 알고리즘은 많은 버그를 만났고, 이 방법은 가능한 한 버그를 피하는 것입니다.
  2. 먼저 이전 기사의 아이디어에 대해 이야기하겠습니다. 먼저 참새 최적화 알고리즘을 사용하여 VMD 매개 변수를 최적화하여 최상의 K 값과 α 값을 얻습니다. 기본은 최소 엔벨로프 엔트로피입니다. 자, 여기 있는 여러분은 명확하고 이해하기 쉽지만 이 K 값과 α 값을 더 아래로 사용하는 방법은 무엇입니까?
  3. 저자가 현재 알고 있는 두 가지 방법은 ①각 IMF 성분의 대략적인 엔트로피를 찾기 위해 K 값과 α 값을 다시 가져와서 이 대략적인 엔트로피 값을 사용하여 특징 벡터를 구성하는 것 ②최소 엔벨로프 엔트로피를 계산할 때 인덱스를 넣는 것입니다. 최소 포락선 엔트로피의 값 idx(즉, 분해한 K IMF 성분 중 포락선 엔트로피가 가장 작은 성분은?)을 함수로 출력하고 K 값, α 값 그리고 이 인덱스 값 idx를 다시 가져온다. , 지수 값에 해당하는 IMF 구성 요소의 첨도 값, 피크 값, 평균값, 마진 계수 및 기타 지표를 계산하여 특징 벡터를 구성합니다.
  4. 두 가지 방법은 각각 장단점이 있으며 마지막으로 기계 학습 모델의 진단 결과가 매우 좋습니다. 두 방법 모두 참조를 찾을 수 있습니다. 첫 번째 방법의 단점은 포락선 엔트로피를 충분히 사용하지 않고 VMD 파라미터를 최적화하기 위해 포락선 엔트로피를 최소 목적 함수로 사용한 다음 최소 포락선뿐만 아니라 각 IMF 구성 요소에 대한 대략적인 엔트로피를 계산하는 것입니다. .네트워크 엔트로피에 해당하는 IMF 구성 요소는 대략적인 엔트로피를 계산합니다. 물론 특성 벡터를 형성하는 것은 불가능합니다! 두 번째 방법은 가장 작은 엔벨로프 엔트로피에 해당하는 IMF 성분만을 현재 데이터의 주요 특징으로 한 다음 피크 값, 마진 계수, 평균 값 및 분산과 같은 몇 가지 지표를 찾아 특징 벡터를 구성하는 것입니다.

여기서 이야기하면 다들 속으실지 모르겠습니다. 헷갈려도 상관없으니 일단 결과만 보고 코드는 괜찮으니 코드를 읽어본 후 다시 위의 설명으로 돌아와 보자.

 다음은 여전히 ​​첫 번째 결과입니다.

 BWO-VMD 반복 곡선:

흰 고래 최적화 알고리즘을 사용하여 VMD 매개변수를 최적화하고 매개변수를 다음과 같이 설정합니다. 프로그램의 모집단 수는 10이고 반복 횟수는 50입니다. 위의 두 그림은 일반 데이터 97을 기반으로 합니다. 두 VMD 매개변수의 값은 다음과 같습니다: 2500, 10

  • 저번 글에서 왜 이 값이 경계에 있는지, 왜 일부 레퍼런스와 일치하지 않는지에 대해 모두가 매우 혼란스러워했습니다.저자는 여기서 일관되게 말할 것입니다. 모집단 수는 20개로 선택하여 검색 범위를 늘릴 수 있으며 여전히 경계라면 데이터 샘플링 포인트의 수를 늘린다(데이터 포인트 샘플링의 수는 아래 프로그램에서 언급 , 표시하겠습니다)). 요컨대, 그것이 경계값이든 아니든 내 최종 기계 모델은 진단 효과가 좋고 결함을 정확하게 식별할 수 있습니다.이 목표를 달성하기에 충분합니까?독자 여러분, 일부에서 언급한 값 다른 문서는 반드시 확실하지 않습니다.정확합니다(여기서는 많이 말하지 않겠습니다. 이해하는 모든 사람이 이해합니다).
  • 아래에 첨부한 것은 데이터를 변경한 반복 다이어그램입니다.이 데이터는 105.mat이며 보시다시피 경계에 있지 않습니다!
  •  

다음 단계는 코드를 업로드하는 것입니다.첫 번째는 데이터 처리 코드입니다.위에서 언급한 수정된 샘플링 포인트의 수가 이 코드에 있습니다.

  • Western Reserve University의 데이터 및 데이터 처리 스크립트 파일을 다운로드하는 방법이 있는 내 다른 기사도 읽을 수 있습니다. 데이터가 있는 경우 코드를 직접 복사하여 베어링 데이터와 동일한 폴더에 넣을 수도 있습니다. (현명한 여자는 밥 없이는 요리를 못한다는 말이 있듯이, 먼저 데이터를 처리해야 합니다! 물론 다른 데이터가 더 필요하면 나중에 기사를 정리하겠습니다)

(Western Reserve University 베어링 데이터 처리--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 값과 α 값을 각각 볼 수 있습니다. ②: 두 번째 포인트도 매우 중요합니다! 글쓴이가 좀 게으르다는 뜻이네 이 글의 단어를 하나하나 타이핑했는데 엠마도 2시간동안 타이핑을 했네요... 정리가 쉽지 않네요 하단 작은 카드 클릭해서 결제 주목! 더 이상 아무것도 요구하지 마십시오 ...
%% 以最小包络熵为目标函数,采用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啦

마지막 4줄의 댓글에서 알 수 있듯이 10가지 유형의 결함을 진단하기 위해 선택하면! 이 메인 프로그램을 10번 실행해야 하고 매번 여러 군데를 바꿔야 합니다. 마지막으로 다음과 같이 표를 요약할 수 있습니다.

 이것은 이 글에서 얻은 표가 아니라 최고의 조합으로 그런 표를 얻게 될 것이라고 저자가 모두에게 말하고 있는 것입니다.

 특징 추출 후 이 글을 예로 들면 데이터 처리 단계에서 총 10개의 결함 유형이 선택되었으며 각 유형은 120개의 결함 샘플입니다. 각 결함 샘플은 평균값, 분산, 피크 값, 첨도, 유효 값, 파고율, 펄스 계수, 형상 계수 및 마진 계수를 포함하는 9개의 인덱스로 대체됩니다. 그래서 마침내 1200*9 데이터를 얻습니다. 이것은 특징 추출 후 얻은 데이터입니다! 그런 다음 이 데이터를 가져와 교육 및 예측을 위해 각 기계 학습 모델로 보낼 수 있습니다!

이전 기사에서 모두의 운영에 다양한 문제가 있을 것이므로 이번에는 전체 압축 패키지를 직접 구성하는 것을 고려합니다!

아래 카드의 핵심 단어에 답하십시오: BWOVMD

의견 영역에 메시지를 남기는 모든 사람을 환영합니다!

추천

출처blog.csdn.net/woaipythonmeme/article/details/131226447