天天看點

【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】

一、擷取代碼方式

擷取代碼方式1:

完整代碼已上傳我的資源:​​​【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】​​ 點選上面藍色字型,直接付費下載下傳,即可。

擷取代碼方式2:

​​​付費專欄優化求解(Matlab)​​

備注:

點選上面藍色字型付費專欄優化求解(Matlab),掃描上面二維碼,付費299.9元訂閱海神之光部落格付費專欄,憑支付憑證,私信部落客,可免費獲得5份本部落格上傳CSDN資源代碼(有效期為訂閱日起,三天内有效);

點選CSDN資源下載下傳連結:​​​5份本部落格上傳CSDN資源代碼​​

二、遺傳算法優化VMD參數簡介

1 變分模态分解

VMD分解算法實際上是一個變分問題的求解過程, 它是将原信号分解為K個模态函數uk (t) , 使得每個模态函數的估計帶寬之和最小, 則相應的限制變分模型可表達為

【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】

式中:{uk}={u1, …, uk}表示的是分解得到的K個子模态;{wk}={w1, …, wk}表示的是各分量的頻率中心。為了将上述限制性變分問題轉變為非限制性變分問題, 引入二次懲罰項因子α和拉格朗日乘子λ (t) , 則擴充的拉格朗日表達式為

【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】

式中:α為懲罰參數;λ為拉格朗日乘子。采用乘法算子交替方向法 (Alternate direction method of multipliers, ADMM) [10]解決變分問題, 通過疊代更新ukn+1、wkn+1以及λn+1得到上述函數的最優解。ukn+1的取值問題可表達為

【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】

利用Parseval傅立葉等距變換, 上式可變為

【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】

2) 根據式 (4) 、式 (5) 在頻域内更新uk、wk;

  1. 更新λ, 其中
  2. 【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】
  3. 2 遺傳算法VMD參數優化

    利用VMD算法進行信号分解時需要設定參數, 研究發現在進行分解時, 模态數K和懲罰參數α對分解的結果影響較大。實際擷取的信号是複雜多變的, 模态數K和懲罰參數α難以确定, 是以選擇合适的參數組合是利用VMD算法進行信号分解的關鍵。

如果設定一個參數不變, 優化另一個參數, 通過這種方式讨論對去噪效果的影響, 就忽略了兩個參數互相作用的結果, 陷入局部優化的僵局。遺傳算法 (GA) 是一種智能優化算法, 具有較強的全局非線性優化能力[12], 是以引入遺傳算法, 借助于适應度函數對目标函數在解空間進行全局并行随機搜尋, 快速準确地擷取優化參數。

利用遺傳算法求解優化問題時, 主要需要經過6個步驟, 編碼、初始群體生成、适應度值評價檢測、選擇、交叉、變異, 使得種群進化為新一代更好适應性的種群。圖1是建立适應度函數的優化結果。

三、部分源代碼

%% 基于遺傳算法(Genetic Algorithm,GA)優化變分模态分解(variational mode decomposition,VMD)參數
clc
clear all
close all
% 讀取資料
data=load('齒輪折斷狀态測試組).txt');
%采樣頻率
fs=12800;
% 信号長度
len=1000;
s=data(1:len);
% 采樣時間
t = (0:len-1)/fs;       
%% 設定遺傳算法參數
maxgen=10;  % 進化代數,即疊代次數
sizepop=10; % 種群規模
pcross=0.8;  % 交叉機率選擇(Pc:0-1)
pmutation=0.1; % 變異機率選擇(Pm:0-1)
nvar=2; % 優化參數個數為2,分别為VMD的alpha和K
lenchrom=ones(1,nvar); % 個體長度 
% 參數範圍(VMD的alpha和K)
bound=[500 2000;
       3 10];
% 種群初始化
individuals=struct('fitness',zeros(1,sizepop), 'chrom',[]);  %将種群資訊定義為一個結構體
avgfitness=[]; %存儲每一代種群的平均适應度
bestfitness=[]; %存儲每一代種群的最佳适應度
bestchrom=[]; % 存儲适應度最好的染色體
%初始化種群
for i=1:sizepop
    %随機産生一個種群
    individuals.chrom(i,:)=Code(lenchrom,bound);    %編碼(binary和grey的編碼結果為一個實數,float的編碼結果為一個實數向量)
    x=individuals.chrom(i,:);
    %計算适應度
    individuals.fitness(i)=objfun(x,s);
end
%找最好的染色體
[bestfitness bestindex]=min(individuals.fitness);  %[m n]=min(b) m最小值 n列号
bestchrom=individuals.chrom(bestindex,:);  %最好的染色體
avgfitness=sum(individuals.fitness)/sizepop; %染色體的平均适應度
% 記錄每一代進化中最好的适應度和平均适應度
trace=[avgfitness bestfitness]; 
%% 疊代尋優
start_time_train=cputime;
for i=2:maxgen
disp(['疊代次數:',num2str(i)])
% 選擇
individuals=Select(individuals,sizepop); %選擇後的新種群
avgfitness=sum(individuals.fitness)/sizepop;
% 交叉
individuals.chrom=Cross(pcross,lenchrom,individuals.chrom,sizepop,bound);
% 變異
individuals.chrom=Mutation(pmutation,lenchrom,individuals.chrom,sizepop,i,maxgen,bound);
% 計算适應度 
for j=1:sizepop
    x=individuals.chrom(j,:); %解碼
    individuals.fitness(j)=objfun(x,s);      

四、運作結果

【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】
【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】
【VMD優化】基于matlab遺傳算法優化VMD參數【含Matlab 1980期】

五、matlab版本及參考文獻

1 matlab版本

2014a

繼續閱讀