特征模态分解Feature Mode Decomposition,FMD的参数优化:15种适应度函数,以HHO/GW算法为例-matlab代码

 引言

本期推出一款小众、最新、性能强大信号分解方法,特征模态分解Feature Mode Decomposition,FMD)2023年发表在中科院1区top sci期刊IEEE Transactions on Industrial Electronics (简称IEEE TIE),已有100次引用,已经是ESI高被引、热点论文,这口饭赶紧趁热吃呀

图片

图片

图片

针对机械故障的特征提取,提出了一种新的分解理论——特征模态分解(FMD)。所提出的FMD主要目的是通过设计的自适应有限脉冲响应(FIR)滤波器来分解不同的模式。然而,FMD的性能受到其参数:滤波器尺寸filtersize和分解数 的影响。手动调参是繁琐的、不经济的。可选择群智能优化算法(【关注|收藏】超360种群智能优化算法-Matlab代码免费获取(截至2024.07.15))对其参数进行自适应的选择

参照其他模态分解方法的参数优化方式,FMD参数优化的创新方式可以有两种:1,改进优化算法用于FMD;2,提出新的适应度函数。第一种很常见,第二种却不多。本期整理并复现了一些高水平EI、SCI期刊中的适应度函数,加上一些常规的适应度函数,目前一共15种用以参数优化的适应度函数

如有其他的适应度函数,可以告知我们文章链接进行复现,持续更新

您仅需要做的工作是:

  1. 导入一维数据。比如振动、声音、脑电、肌电、地震波、电能质量、径流、风速、交通流等一维数据。根据数据的格式,txt,csv,mat,dat,xlsx等,选择对应的导入方式(请灵活使用百度)。

  2. 选择适应度函数。15种适应度函数繁琐、复杂的的编码工作已经帮各位小侠客们集成好了,方便调用和管理,自由切换,只需要输入1-15其中一个整数,就可以选择对应的适应度函数。非常方便,代码改动的工作量只有一个数字的量

  3. 选择喜爱的优化算法。示例代码中选择了利用灰狼优化算法GWO优化FMD参数。公众号也发布了很多2024年最新的优化算法,它们大多都是以函数的形式编写,调用仅需一行代码。替换GWO即可,非常方便,代码工作量也仅一行。比如使用哈里斯鹰优化算法HHO,下载HHO的代码,放在和GWO同一个文件下,然后在主程序相应位置里按HHO的输入、输出形式调用即可,即插即用。如果你想使用的算法不是函数的形式,请把它修改成函数形式,方便调用。

    图片

  4. 点击运行。你只管点运行,剩下的交给算法。imf分解结果自动保存为mat和excel中,还有丰富的结果图

我们以一段长度为1024的信号数据作为待分解数据,利用灰狼优化算法GWO优化FMD参数。为了快速验证算法,这里GWO的迭代次数为10次,种群个数为20。

图片

基于 包络熵最小 的分解结果

2D,3D分解结果

图片

各imf的幅值谱,频谱结果

图片

希尔伯特谱结果

图片

参考文献

图片

Matlab代码下载

微信搜索并关注-优化算法侠(英文名:Swarm-Opti),或扫描下方二维码关注,以算法名字搜索历史文章即可下载。

信号分解新突破!特征模态分解FMD拿下一区IEEE Trans,参数优化这口饭得趁热吃:15种适应度函数-matlab代码

点击链接跳转:

360种群优化算法免费下载-matlab

https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247487159&idx=1&sn=c157edd2a2642164256baf199835b669&chksm=c12be2b2f65c6ba4f249118777603d4936acb3333694d0ee4ce10c81b7150d357a6eba9fc235&scene=21#wechat_redirect

求解cec测试函数-matlab 

cec2017测试函数使用教程及matlab代码免费下载

cec2018测试函使用教程及matlab代码免费下载

cec2019测试函使用教程及matlab代码免费下载

cec2020测试函使用教程及matlab代码免费下载

cec2021测试函使用教程及matlab代码免费下载

cec2022测试函使用教程及matlab代码免费下载
绘制cec2017/018/2019/2020/2021/2022函数的三维图像教程,SO EASY!

215种群智能优化算法python库

Amazing!Python版215种群智能优化算法icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486669&idx=1&sn=6b439e55b37b6482b8d3831ca85f1d55&chksm=c12be0c8f65c69de71ad51d3b736b871ff52f8646e90624f95dd32b024dfaad369d654aaf8fc#rd

解决12工程设计优化问题-matlab

略微出手,工程设计问题(12)(附Matlab代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247485052&idx=1&sn=80e5573c1c005ee5640e44935044ee35&chksm=c12bea79f65c636fc73758b4f4893502bd89cbd1c5d15d7db15e8b5c94eeae40450439d44944&token=681266555&lang=zh_CN#rd

求解11种cec测试函数-python

【选择自由,免费下载】215种优化算法求解11种cec测试函数-python代码icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486669&idx=2&sn=eea8fb04dc507ab9119e2c97c03ca2f6&chksm=c12be0c8f65c69decd6c8109f6b997986bf58725fdbbd7ab03752cb6f61aacdb5a2dc7fec762#rd

解决30种工程设计优化问题-python

【一码解决】215种优化算法求解30个现实世界的工程设计优化问题,让你的论文增色10倍(附Python代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486669&idx=3&sn=ea6d26ae7cb651e5c368f4c73ade228e&chksm=c12be0c8f65c69de739af72d9793838f59ab77bfee36bc2c204f96e2a9e5c6d87dfbbbae698e#rd

仅需一行,可改进所有优化算法:21种混沌映射方法-混沌初始化(附matlab代码)

用于改进所有优化算法:21种混沌映射方法-混沌初始化(附matlab代码)21种混沌映射方法-混沌初始化,适用于所有优化算法icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486215&idx=2&sn=58f1a69175b0d6431a4c7cdfa114b84d&chksm=c12be702f65c6e14e6bd1ddc33b9cec74991d93303c325853049b7e4afd09039b13083fa79c5&token=25423484&lang=zh_CN#rd

【有经典,有最新】24种信号分解方法(附matlab代码) 

沙场大点兵:24种信号分解方法(附matlab代码)icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486001&idx=1&sn=a87c24cb401017a78a90bd1b1439fcb0&chksm=c12be634f65c6f22368b7229a59ac5ef330b89d710c826dbfd1a1c34a02b1dd7e909c7f40d79&token=25423484&lang=zh_CN#rd

 【分类新范式】27种一维数据转换成二维图像的方法-matlab代码

沙场大点兵:27种一维数据转换成二维图像的方法-matlab代码icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=MzkxMDQ5MDk4Ng==&mid=2247486260&idx=1&sn=81b1970cb89364c0289ccdfb403e5388&chksm=c12be731f65c6e273a85456326b503b7f35d9f035405050932ff1926e0b1bfa8076b1bc2d1f2&token=25423484&lang=zh_CN#rd

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
变分分解算法(VMD)可以通过使用粒子群算法(PSO)来调整其参数,以优化其性能。以下是一个使用MATLAB实现的示代码: 首先,我们需要定义一个适应函数,用于评估每个粒子的性能。在这个子中,我们使用VMD算法分解原始信号并计算能量。 ```matlab function fitness = VMD_PSO_fitness(particle, X) % particle: 粒子位置 % X: 原始信号 % fitness: 粒子适应度 alpha = particle(1); % 参数alpha tau = particle(2); % 参数tau K = round(particle(3)); % 参数K % 使用VMD分解原始信号 [u, ~] = VMD(X, alpha, tau, K); % 计算分解信号的能量 E = sum(u.^2); % 适应函数为能量的倒数(目标是最小化能量) fitness = 1/E; end ``` 接下来,我们需要定义一个PSO优化函数,用于优化VMD算法参数。 ```matlab function [best_particle, best_fitness] = VMD_PSO(X, max_iter, swarm_size) % X: 原始信号 % max_iter: 最大迭代次数 % swarm_size: 粒子群大小 % best_particle: 最佳粒子位置 % best_fitness: 最佳适应度 % 粒子位置的边界 lb = [0.1, 0.1, 2]; ub = [1, 1, 10]; % 初始化粒子群 particle = repmat(lb, swarm_size, 1) + rand(swarm_size, 3) .* (repmat(ub, swarm_size, 1) - repmat(lb, swarm_size, 1)); velocity = zeros(swarm_size, 3); pbest = particle; pbest_fitness = zeros(swarm_size, 1); % 计算初始适应度 for i = 1:swarm_size pbest_fitness(i) = VMD_PSO_fitness(pbest(i,:), X); end % 找到全局最佳位置 [best_fitness, gbest_index] = min(pbest_fitness); gbest = pbest(gbest_index,:); % 开始迭代 for iter = 1:max_iter % 更新粒子位置和速度 for i = 1:swarm_size % 更新速度 velocity(i,:) = velocity(i,:) + rand(1,3) .* (pbest(i,:) - particle(i,:)) + rand(1,3) .* (gbest - particle(i,:)); % 限制速度范围 velocity(i,:) = min(velocity(i,:), ub - particle(i,:)); velocity(i,:) = max(velocity(i,:), lb - particle(i,:)); % 更新位置 particle(i,:) = particle(i,:) + velocity(i,:); % 限制位置范围 particle(i,:) = min(particle(i,:), ub); particle(i,:) = max(particle(i,:), lb); end % 计算适应度 for i = 1:swarm_size fitness = VMD_PSO_fitness(particle(i,:), X); % 更新个体最佳位置 if fitness > pbest_fitness(i) pbest(i,:) = particle(i,:); pbest_fitness(i) = fitness; end % 更新全局最佳位置 if fitness > best_fitness gbest = particle(i,:); best_fitness = fitness; end end end % 返回最佳粒子位置和最佳适应度 best_particle = gbest; best_fitness = 1/best_fitness; end ``` 最后,我们可以使用以下代码来测试VMD算法的性能: ```matlab % 生成测试信号 N = 500; t = linspace(0,1,N); X = sin(2*pi*5*t) + sin(2*pi*10*t) + sin(2*pi*15*t); % 使用PSO优化VMD算法参数 max_iter = 50; swarm_size = 20; [best_particle, best_fitness] = VMD_PSO(X, max_iter, swarm_size); % 使用优化后的参数进行VMD分解 alpha = best_particle(1); tau = best_particle(2); K = round(best_particle(3)); [u, ~] = VMD(X, alpha, tau, K); % 绘制分解后的信号 figure; subplot(2,1,1); plot(t,X); title('Original Signal'); subplot(2,1,2); plot(t,u); title('VMD Decomposition'); ``` 这段代码将生成一个包含三个正弦波的测试信号,并使用PSO算法找到最佳的VMD参数进行分解。最后,它将绘制原始信号和分解后的信号。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值