遗传算法优化变分模态分解VMD包络熵和参数及MATLAB代码

遗传算法优化变分模态分解VMD包络熵和参数及MATLAB代码_第1张图片

目录

1 简介

2 变分模态分解VMD原理

3 GA优化VMD效果

3.1 遗传算法优化VMD各分量信号图像

3.2 全部图像

4 主要代码

main.m

GA_VMD.m


1 简介

针对从滚动轴承振动信号中所提取的故障信息精度低的问题,利用遗传算法对变分模态分解模态个数K和惩罚参数α 寻优,目标函数为多尺度排列熵参数,再根据VMD处理信号得到若干模态分量,筛选后进一步提取能量熵作为特征向量。使用特征提取向量,可进行后续轴承故障诊断等工作。

2 变分模态分解VMD原理

VMD能够自适应匹配每种模态的最佳中心频率和有限带宽,实现固有模态分量(IMF)有效分离,
其核心思想是构建和求解变分问题。

VMD实现步骤为:

由VMD分解步骤可知,分解信号前需要设置合适的模态个数K和惩罚参数α,K取值过大会导致过分解,反之,则会欠分解,α 取值过大,会造成频带信息丢失,反之,会信息冗余,所以需要确定最佳参数组合[K,α]。目前多用中心频率观察法,通过观察不同K值下的中心频率确定K值,但该法具有偶然性,且只能确定模态个数K,无法确定惩罚参数α。

使用遗传算法(GA)对VMD变分模态分解的惩罚参数alpha与分解模态层数K进行寻优,以局部包络熵极小值作为适应度函数。[alpha, K] 为进化个体的位置,局部包络熵极小值为个体的适应度值。

3 GA优化VMD效果

3.1 遗传算法优化VMD各分量信号图像

1.时域图像

遗传算法优化变分模态分解VMD包络熵和参数及MATLAB代码_第2张图片

2.频谱图像

遗传算法优化变分模态分解VMD包络熵和参数及MATLAB代码_第3张图片

3.2 全部图像

遗传算法优化变分模态分解VMD包络熵和参数及MATLAB代码_第4张图片

4 主要代码

main.m

%% 基于遗传算法(genetic algorithm, GA))优化变分模态分解(variational mode decomposition,VMD)参数

clc
clear
close all
% 读取数据
[file,path,indx]  = uigetfile({'*.xlsx';'*.xls';'*.txt';'*.*'},'File Selector');
if indx == 1||indx==2
    data=xlsread(strcat(path, file));
elseif indx == 3
    data=load(strcat(path, file));
else
    warning('请选择数据集进行实验');
    return;
end

%采样频率
fs=12800;
% 读取前1000长度的信号
len=1000;
s=data(1:len);
% 采样时间
t = (0:len-1)/fs;

%% 设定遗传算法参数
popsize =6;   % 种群大小
iter =30;   % 最大迭代次数
dim = 2;   % 变量个数
lb = [100 3];   % alpha范围 K范围   下限
ub = [2000 7];  % 上限
pc=0.8;                       %交叉概率,0和1之间
pm=0.2;                    %变异概率,0和1之间

%% 遗传算法GA优化VMD参数

tic ,  % 开始计时

GA_VMD(popsize,iter,dim,lb,ub,pc,pm,0);  % 0表示不保存IMF,1,导出IMF并保存

toc,  % 结束计时

GA_VMD.m

% 初始化GA的参数信息
lenchrom=ones(1,dim);       %每个变量的字串长度,如果是浮点变量,则长度都为1
lb=lb.*ones(1,dim);
ub=ub.*ones(1,dim);
bound=[lb;ub]';
% 初始化个体数组
individuals=struct('fitness',zeros(1,SearchAgents_no), 'chrom',[]);  %将种群信息定义为一个结构体
avgfitness=[];                      %每一代种群的平均适应度

%% 初始化种群计算适应度值
% 初始化种群
for i=1:SearchAgents_no
    %随机产生一个种群
    individuals.chrom(i,:)=Code(lenchrom,bound);
    x=individuals.chrom(i,:);
    %计算适应度
    individuals.fitness(i)=fun(x,s);   %染色体的适应度
end

%找最好的染色体
[bestfitness, bestindex]=min(individuals.fitness);
bestchrom=individuals.chrom(bestindex,:);  %最好的染色体
avgfitness=sum(individuals.fitness)/SearchAgents_no; %染色体的平均适应度
% 记录每一代进化中最好的适应度
Convergence_curve=zeros(Max_iteration,1);
gbest_array=zeros(Max_iteration,2);
%% 迭代寻优
for i=1:Max_iteration
    disp(['current iteration is: ',num2str(i), ', best fitness is: ', num2str(bestfitness)])
    % 选择
    individuals=select(individuals,SearchAgents_no);
    avgfitness=sum(individuals.fitness)/SearchAgents_no;
    %交叉
    individuals.chrom=Cross(pc,lenchrom,individuals.chrom,SearchAgents_no,bound);
    % 变异
    individuals.chrom=Mutation(pm,lenchrom,individuals.chrom,SearchAgents_no,[i Max_iteration],bound);
    
    % 计算适应度
    for j=1:SearchAgents_no
        x=individuals.chrom(j,:); %解码
        individuals.fitness(j)=fun(x,s);
    end
    
    %找到最小和最大适应度的染色体及它们在种群中的位置
    [newbestfitness,newbestindex]=min(individuals.fitness);
    [~,worestindex]=max(individuals.fitness);
    % 代替上一次进化中最好的染色体
    if bestfitness>newbestfitness
        bestfitness=newbestfitness;
        bestchrom=individuals.chrom(newbestindex,:);
    end
    individuals.chrom(worestindex,:)=bestchrom;
    individuals.fitness(worestindex)=bestfitness;
    
    avgfitness=sum(individuals.fitness)/SearchAgents_no;
    
    Convergence_curve(i,1)=bestfitness; %记录每一代进化中最好的适应度和平均适应度
    gbest_array(i,:)=bestchrom;
end
%进化结束

代码地址为:

MATLAB代码地址https://mianbaoduo.com/o/bread/YZ2ck5xqicon-default.png?t=L892https://mianbaoduo.com/o/bread/YZ2ck5xq

你可能感兴趣的:(智能优化算法多方面的应用,matlab,算法)