【VMD优化】基于matlab遗传算法优化VMD参数【含Matlab 1980期】

举报
海神之光 发表于 2022/07/14 22:59:09 2022/07/14
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【VMD优化】基于matlab遗传算法优化VMD参数【含Matlab 1980期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2:...

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【VMD优化】基于matlab遗传算法优化VMD参数【含Matlab 1980期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏优化求解(Matlab)

备注:
点击上面蓝色字体付费专栏优化求解(Matlab),扫描上面二维码,付费299.9元订阅海神之光博客付费专栏,凭支付凭证,私信博主,可免费获得5份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:5份本博客上传CSDN资源代码

二、遗传算法优化VMD参数简介

1 变分模态分解
VMD分解算法实际上是一个变分问题的求解过程, 它是将原信号分解为K个模态函数uk (t) , 使得每个模态函数的估计带宽之和最小, 则相应的约束变分模型可表达为
在这里插入图片描述
式中:{uk}={u1, …, uk}表示的是分解得到的K个子模态;{wk}={w1, …, wk}表示的是各分量的频率中心。

为了将上述约束性变分问题转变为非约束性变分问题, 引入二次惩罚项因子α和拉格朗日乘子λ (t) , 则扩展的拉格朗日表达式为
在这里插入图片描述
式中:α为惩罚参数;λ为拉格朗日乘子。采用乘法算子交替方向法 (Alternate direction method of multipliers, ADMM) [10]解决变分问题, 通过迭代更新ukn+1、wkn+1以及λn+1得到上述函数的最优解。

ukn+1的取值问题可表达为
在这里插入图片描述
利用Parseval傅立叶等距变换, 上式可变为
在这里插入图片描述
2) 根据式 (4) 、式 (5) 在频域内更新uk、wk;

  1. 更新λ, 其中
    在这里插入图片描述
    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);
end

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 刘嘉敏,彭玲,刘军委,袁佳成.遗传算法VMD参数优化与小波阈值轴承振动信号去噪分析[J].机械科学与技术. 2017,36(11)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/125770194

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。