引言
引言
大家多多少少听过,看过或使用过一种信号处理方法:变分模态分解方法(Variational mode decomposition,VMD)。该方法于2014年发表在信号处理顶级SCI期刊IEEE transactions on signal processing,至今已有4840多次引用,深受各领域研究者的欢迎。
VMD在一定程度上解决了EMD的模态混叠问题,然而,VMD的性能受到其参数的影响,尤其是惩罚因子alpha和模态分解数k。手动调参是繁琐的、不经济的。研究者们通过设置合理的优化目标函数,利用群智能优化算法对其参数进行自适应的选择。
本期介绍一种VMD参数优化的方式,即利用包络熵最小
实操
对于一个优化问题,需要先明确这个问题的四项基本元素:变量个数,变量下界,变量上界,目标函数。VMD参数优化问题也不例外。主要有以下步骤:
1.确定变量个数。我们目标是为VMD选择合适的alpha和k,因此,变量个数,即dim=2;
2.确定这两个变量各自的优化范围。为了快速教学,这里我们随机设置了alpha和k的范围,即1000≤alpha≤3000;3≤k≤10。那么就获得了变量的上下界,依次写入lb和ub中:
lb=[1000, 3];% 变量下限(请自行按文献修改)
ub=[3000, 10];% 变量上限(请自行按文献修改)
3.定义目标函数。这里以包络熵最小作为目标值。计算每个imf的包络熵,熵值最小是对应的alpha和k,即为最优的VMD参数组合。我们已将该部分封装成了function,方便调用。
%% 计算最小包络熵
for i = 1:K
amp= abs(hilbert(imf(i,:))); % 对分解得到的IMF分量进行希尔伯特变换,得到幅值
amp_n = amp/sum(amp);
fit=0;
for ii = 1:size(amp_n,2)
env_e = -amp_n(1,ii)*log(amp_n(1,ii)); % 计算包络熵
fit=fit+env_e;
end
feature(i,:) = fit; % 包络熵特征
end
fitness = min(feature); % 适应度函数值,目的就是使该值最小
我们以一段长度为1024的信号数据作为待分解数据,利用灰狼优化算法GWO优化VMD参数。为了快速验证算法,这里GWO的迭代次数为10次,种群个数为20。
优化后,VMD的分解结果:
GWO算法的迭代曲线:
Matlab代码下载
微信搜索并关注-优化算法侠,或扫描下方二维码关注,以算法名字搜索历史文章即可下载。
320多种基础的群智能优化算法-matlab
175种群智能优化算法python库
求解cec测试函数-matlab
解决12工程设计优化问题-matlab
求解11种cec测试函数-python
解决12种工程设计优化问题-python