浅谈VMD(变分模态分解)

浅谈VMD(变分模态分解)

统一解释一下,我也是才学习这个,很多地方不懂。至于译文,也是自己根据原论文进行的一些翻译,很多地方不是很准确,研一的可以自己试着去读英文原文,而且大家学校应该都能下载这篇论文。研二的如果急着要用可以参考借鉴一下。
新的自适应信号处理方法,对非平稳、非线性信号具有良好处理效果。

文章说明

因为最近论文需要用到VMD,所以看了几篇关于VMD的论文,VMD在2014年提出,所以其论文比较新,而且知网上的论文都是基于VMD的应用,里面的原理都是从VMD原文摘抄,不太好理解,我也看了VMD这篇论文,我也进行了一定的翻译,译文在后面,但翻译总有差距,希望英语好的专业好的能提出建议,谢谢。

阅读说明

我知道好多人看着VMD看博客最想知道的就是这东西的应用和大概步骤原理,而具体原理算法不太感兴趣,而且也不太容易看懂。本文既然是浅谈,就从VMD的步骤和应用。

VMD工作原理步骤

步骤
VMD是通过迭代搜寻变分模型(具体怎么搜寻,请亲们自己看,我主要讲他的大概)最优解, 来确定我们所知的模态uk(t)及其对应的中心频率ωk和带宽。
每个模态都是具有中心频率的有限带宽(就是在频域中有在一定的宽度)。所有模态之和为源信号。

而对求最优解采用二次惩罚和拉格朗日乘数将上诉约束问题转换为非约束问题,并用交替方向乘子法求解这个非约束问题, 通过迭代更新最终得到信号分解的所有模态。分解的所有模态中有包含主要信号的模态和包含噪声的模态。将包含主要信号的模态进行重构,从而达到去噪的效果。

代码步骤思路(uk和ωk更新算法)

1、初始化uk、ωk、λ和n=0,k=0
2、n=n+1(迭代次数)
3、k=k+1,根据VMD算法公式更新uk、ωk
4、又根据相关的算法更新拉格朗日乘数λ
5、知直到满足一定条件,停止迭代,不然转到2步骤
以上只是求每一个模态的单步骤


我的理解总步骤:
1、初始化uk、ωk、λ和n=0,
2、n=n+1(迭代次数)
3、根据VMD算法公式更新uk、ωk
4、又根据相关的算法更新拉格朗日乘数λ
5、知直到满足一定条件根据(相似系数来判断),停止迭代,不然转到2步骤
6、k=k+1,将源信号减去分解出来的模态,并作为下次一循环的源信号,转到步骤1

如何判断相关模态

判断
用信号与模态的相似程度来判断信号与噪声 。推荐一篇论文,他对VMD进行了一些优化。例如:在VMD中一般采用局部重构,即将与原信号相似的模态就认为是信号,与原信号相差大的模态认为噪声,然而噪声模态中其实还含有一些信号,用一定方法提取信号,可增加信噪比和可信度。同理(我自己的看法),采用定的滤波器处理信号模态来去除其中的噪声会不会提高信噪比。这是一个方向。

推荐论文:基于VMD的激光雷达回波信号去噪方法研究

应用

其实看了上面的原理,其实大家都该有一个基本的想法,VMD将信号分解与重构,用的最多就是来去噪。
我准备用来进行心率提取
其他应用:谐波提取、用的最多的滚动轴承检测、故障检测等等

VMD原文

下面是原文链接,可以自行下载,也可以联系我,还有我自己的译文,翻译一班不是太准确,但能帮助你更好的理解。

缺点及解决方法

1、最大的局限性是边界效应和突发的信号。这与基于L2平滑阶段的使用密切相关,该阶段过度惩罚了域边界和内部的跳跃。

2、长期模态的光谱带会随着时间的推移而急剧变化,并且会在全局范围内重叠。在这里,直接的解决方案是将信号分解成较短的块,在这些块上信号足够稳定。

3、要求预先定义模态数K。这是我们与许多成功的聚类和分段算法(例如k-means)共享的缺点。

补充

在写论文,通常拿VMD与EMD(经验模态分解)、EWT(经验小波变换)进行性能对比。
对于预定义模态数K的解决方法,推荐一篇论文:基于反馈变分模式分解的单通道盲源分离算法,他采用反馈模式对K自动识别定义,解除了预定义的先验模式。

EMD以及VMD的matlab代码(求大家给个赞别)

VMD链接: https://pan.baidu.com/s/1tlPoq07HTsdhr1zEN7bzdw
提取码: wac3
EMD链接:https://pan.baidu.com/s/1sAvwEV8bOCannCjVBJNcpg
提取码:xww7

  • 352
    点赞
  • 491
    收藏
    觉得还不错? 一键收藏
  • 65
    评论
在Matlab,你可以使用VMD(Variational Mode Decomposition)算法对信号进行分解和重构。VMD是一种基于变分推断的信号分解方法,它可以将原始信号分解为多个本征模态函数(Intrinsic Mode Functions, IMF),每个IMF都代表了原始信号的不同尺度或频率成分。下面是一个示例代码,演示如何使用VMD进行信号分解和重构: 首先,你需要下载并添加VMD工具包到Matlab的工作路径。你可以从以下链接下载: https://www.mathworks.com/matlabcentral/fileexchange/59972-variational-mode-decomposition 将下载的文件解压缩,并将解压后的文件夹添加到Matlab的工作路径。 接下来,假设你有一个信号x,你可以按照以下步骤进行VMD分解和重构: ```matlab % 加载信号 load('signal.mat'); % 设置VMD参数 alpha = 2000; % 控制VMD的平滑度 tau = 0; % 控制VMD的正则化项 K = 3; % VMD分解的模态函数个数 % 调用VMD函数进行信号分解 [u, u_hat, omega] = VMD(signal, alpha, tau, K); % u是分解后的每个IMF % u_hat是每个IMF的希尔伯特变换 % omega是每个IMF的频率 % 将每个IMF重构为信号 reconstructed_signal = sum(u, 1); % 绘制原始信号和重构信号的对比图 figure; subplot(2,1,1); plot(signal); title('原始信号'); subplot(2,1,2); plot(reconstructed_signal); title('重构信号'); ``` 以上代码,`signal.mat`是一个包含你要分解的信号的.mat文件。你可以根据你的实际情况修改代码的参数,并根据需要进行进一步的处理和分析。 希望这能帮到你,如果有任何疑问,请随时向我提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 65
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值