이 글을 읽으시면 분명 의문이 생기실 겁니다 이 글은 이전 글과 같은 글이 아닌가요 이전 글은 많이 다르고 이 글도 제가 항상 그 근거로 보완하고 싶었던 글입니다 이전 기사. 내 마지막 기사를 읽지 않았다면 여기로 이동할 수 있습니다.
(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 .
여기 또한 그의 주요 아이디어를 모두에게 보여주기 위한 얕은 스크린샷이 있습니다 .
여기서는 이 기사와 이전에 작성한 기사의 차이점에 대해 간략하게 설명하겠습니다. 읽기 싫으면 이 단락을 무시해도 됩니다. 직접 읽으십시오 (여기를 클릭하십시오 ).
- 이 글은 VMD 파라미터를 최적화하기 위해 벨루가 최적화 알고리즘을 사용합니다. 알고리즘은 많은 버그를 만났고, 이 방법은 가능한 한 버그를 피하는 것입니다.
- 먼저 이전 기사의 아이디어에 대해 이야기하겠습니다. 먼저 참새 최적화 알고리즘을 사용하여 VMD 매개 변수를 최적화하여 최상의 K 값과 α 값을 얻습니다. 기본은 최소 엔벨로프 엔트로피입니다. 자, 여기 있는 여러분은 명확하고 이해하기 쉽지만 이 K 값과 α 값을 더 아래로 사용하는 방법은 무엇입니까?
- 저자가 현재 알고 있는 두 가지 방법은 ①각 IMF 성분의 대략적인 엔트로피를 찾기 위해 K 값과 α 값을 다시 가져와서 이 대략적인 엔트로피 값을 사용하여 특징 벡터를 구성하는 것 ②최소 엔벨로프 엔트로피를 계산할 때 인덱스를 넣는 것입니다. 최소 포락선 엔트로피의 값 idx(즉, 분해한 K IMF 성분 중 포락선 엔트로피가 가장 작은 성분은?)을 함수로 출력하고 K 값, α 값 그리고 이 인덱스 값 idx를 다시 가져온다. , 지수 값에 해당하는 IMF 구성 요소의 첨도 값, 피크 값, 평균값, 마진 계수 및 기타 지표를 계산하여 특징 벡터를 구성합니다.
- 두 가지 방법은 각각 장단점이 있으며 마지막으로 기계 학습 모델의 진단 결과가 매우 좋습니다. 두 방법 모두 참조를 찾을 수 있습니다. 첫 번째 방법의 단점은 포락선 엔트로피를 충분히 사용하지 않고 VMD 파라미터를 최적화하기 위해 포락선 엔트로피를 최소 목적 함수로 사용한 다음 최소 포락선뿐만 아니라 각 IMF 구성 요소에 대한 대략적인 엔트로피를 계산하는 것입니다. .네트워크 엔트로피에 해당하는 IMF 구성 요소는 대략적인 엔트로피를 계산합니다. 물론 특성 벡터를 형성하는 것은 불가능합니다! 두 번째 방법은 가장 작은 엔벨로프 엔트로피에 해당하는 IMF 성분만을 현재 데이터의 주요 특징으로 한 다음 피크 값, 마진 계수, 평균 값 및 분산과 같은 몇 가지 지표를 찾아 특징 벡터를 구성하는 것입니다.
여기서 이야기하면 다들 속으실지 모르겠습니다. 헷갈려도 상관없으니 일단 결과만 보고 코드는 괜찮으니 코드를 읽어본 후 다시 위의 설명으로 돌아와 보자.
다음은 여전히 첫 번째 결과입니다.
BWO-VMD 반복 곡선:
흰 고래 최적화 알고리즘을 사용하여 VMD 매개변수를 최적화하고 매개변수를 다음과 같이 설정합니다. 프로그램의 모집단 수는 10이고 반복 횟수는 50입니다. 위의 두 그림은 일반 데이터 97을 기반으로 합니다. 두 VMD 매개변수의 값은 다음과 같습니다: 2500, 10
- 저번 글에서 왜 이 값이 경계에 있는지, 왜 일부 레퍼런스와 일치하지 않는지에 대해 모두가 매우 혼란스러워했습니다.저자는 여기서 일관되게 말할 것입니다. 모집단 수는 20개로 선택하여 검색 범위를 늘릴 수 있으며 여전히 경계라면 데이터 샘플링 포인트의 수를 늘린다(데이터 포인트 샘플링의 수는 아래 프로그램에서 언급 , 표시하겠습니다)). 요컨대, 그것이 경계값이든 아니든 내 최종 기계 모델은 진단 효과가 좋고 결함을 정확하게 식별할 수 있습니다.이 목표를 달성하기에 충분합니까?독자 여러분, 일부에서 언급한 값 다른 문서는 반드시 확실하지 않습니다.정확합니다(여기서는 많이 말하지 않겠습니다. 이해하는 모든 사람이 이해합니다).
- 아래에 첨부한 것은 데이터를 변경한 반복 다이어그램입니다.이 데이터는 105.mat이며 보시다시피 경계에 있지 않습니다!
다음 단계는 코드를 업로드하는 것입니다.첫 번째는 데이터 처리 코드입니다.위에서 언급한 수정된 샘플링 포인트의 수가 이 코드에 있습니다.
- Western Reserve University의 데이터 및 데이터 처리 스크립트 파일을 다운로드하는 방법이 있는 내 다른 기사도 읽을 수 있습니다. 데이터가 있는 경우 코드를 직접 복사하여 베어링 데이터와 동일한 폴더에 넣을 수도 있습니다. (현명한 여자는 밥 없이는 요리를 못한다는 말이 있듯이, 먼저 데이터를 처리해야 합니다! 물론 다른 데이터가 더 필요하면 나중에 기사를 정리하겠습니다)
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
의견 영역에 메시지를 남기는 모든 사람을 환영합니다!