变分模态分解(VMD)
变分模态分解(VMD)前言一、VMD [^1]是什么?基本概念求解步骤二、python实现引入vmdpy库变分模态分解(VMD)-Python代码三、补充EMD库--pyemdEMD与VMD区别尝试后继续补充前言在信号处理中,变分模态分解是一种信号分解估计方法。该方法在获取分解分量的过程中通过迭代搜寻变分模型最优解来确定每个分量的频率中心和带宽,从而能够自适应地实现信号的频域剖分及各分量的有效分离
·
变分模态分解(VMD)
前言
在信号处理中,变分模态分解是一种信号分解估计方法。该方法在获取分解分量的过程中通过迭代搜寻变分模型最优解来确定每个分量的频率中心和带宽,从而能够自适应地实现信号的频域剖分及各分量的有效分离。
一、VMD 1是什么?
基本概念
- VMD(Variational mode decomposition)是一种自适应、完全非递归的模态变分和信号处理的方法;
- 优点:a自确定模态分解个数的优点;b降低复杂度高和非线性强的时间序列非平稳性;
- 自适应性:在根据实际情况确定所给序列的模态分解个数,随后的搜索和求解过程中可以自适应地匹配每种模态的最佳中心频率和有限带宽,并且可以实现固有模态分量(IMF)2的有效分离、信号的频域划分;
- 目标:得到给定信号的有效分解成分,最终获得变分问题的最优解;
- 适用:适用于非平稳性的序列,分解获得包含多个不同频率尺度且相对平稳的子序列;
- 核心思想:构建和求解变分问题。
求解步骤
首先,构造变分问题
假设原始信号 S 被分解为 K 个分量 μ ,保证分解序列为具有中心频率的有限带宽的模态分量,同时各模态的估计带宽之和最小,约束条件为所有模态之和与原始信号相等,则相应约束变分表达式为
然后,求解约束变分表达式
引入惩罚参数 α 、Lagrange乘法算子 λ ,将约束变分问题转变为非约束变分问题,得到增广Lagrange表达式为
求解式(2)鞍点
- 初始化参数 μ1 、ω2 、λ1 和 n,n 初值设为0;
- 设置循环过程,令n = n + 1,μk 、ωk、λt 依据下式更新值;
- 当分量满足式(6)时,求解完毕。
二、python实现
引入vmdpy库
变分模式分解python包
- https://github.com/vrcarva/vmdpy下载项目,然后从项目文件夹运行“python setup.py install”
- pip安装vmdpy
vmdpy中示例代码
import numpy as np
import matplotlib.pyplot as plt
from vmdpy import VMD
#. Time Domain 0 to T
T=1000fs=1/Tt=np.arange(1,T+1)/T
freqs=2*np.pi*(t-0.5-fs)/(fs)
#. center frequencies of components
f_1=2
f_2=24
f_3=288
#. modes
v_1=(np.cos(2*np.pi*f_1*t))
v_2=1/4*(np.cos(2*np.pi*f_2*t))
v_3=1/16*(np.cos(2*np.pi*f_3*t))
f=v_1+v_2+v_3+0.1*np.random.randn(v_1.size)
#. some sample parameters for VMD
alpha=2000
# moderate bandwidth constraint
tau=0.
# noise-tolerance (no strict fidelity enforcement)
K=3
# 3 modes
DC=0
# no DC part imposed
init=1
# initialize omegas uniformly
tol=1e-7
#. Run actual VMD code
u,u_hat,omega=VMD(f,alpha,tau,K,DC,init,tol)
变分模态分解(VMD)-Python代码
三、补充
EMD库–pyemd
1.直接在settings中搜索pyemd添加,但速度十分慢
2.下载python模块pyhht,可实现经验模态分解功能,但是pyhht不适合python3版本
3.先下载emd包:emd
EMD与VMD区别
(1)分解 3
- EMD分解的IMF分量个数不能人为设定,而VMD(Variational Mode Decomposition)则可以;
- 但VMD也有弊端:分解过多,则信号断断续续,没有多少规律可言。
尝试后继续补充
更多推荐
已为社区贡献1条内容
所有评论(0)