VMD 的源代码,写得还挺清爽的,逻辑也比较清晰,适合搞信号的朋友参考一下。VMD,全称叫变分模态分解,说白了就是个用来分解信号的算法,像是用在故障诊断、语音识别、或者医学信号里,都蛮实用的。
Python 版的实现,用起来挺方便。函数接口不复杂,比如你要做一维信号分解,直接丢个numpy
数组进去就行,输出的模态分量也比较规整,后续做顺手。
哦对了,它跟老牌的EMD、EEMD也有点区别,主要是 VMD 收敛更快、稳定性更好,分出来的模态也没那么飘,适合那种对频率稳定性要求高的场景。
如果你习惯用MATLAB,那也有对应的版本,风格偏工程一点,但做演示或者教学用也还不错。你可以顺便看看 VMD 技术实现与应用 这篇文章,讲得挺细。
对比一下不同的分解方法?这里有个EMD/EEMD/VMD 比较,还挺有参考价值的。还有不少源码合集可以下载,比如Matlab 信号源码,建议收藏。
如果你平时的是生物信号、SAR 雷达、MTI之类的,那这些 VMD 代码也能派上用场。自己改一改,也能融进自己的算法里头。
建议你看完代码之后,自己动手跑一遍,再换个信号试试效果。有时候调一下参数,比如K
模态数、alpha
惩罚因子,效果会不一样。