变分模态分解(VMD)运算步骤及源码解读

您所在的位置:网站首页 分解目标什么意思 变分模态分解(VMD)运算步骤及源码解读

变分模态分解(VMD)运算步骤及源码解读

2024-07-12 13:02| 来源: 网络整理| 查看: 265

1. 简述

VMD的目标是将实值输入信号 f f f分解为离散数量的子信号(模态) u k u_k uk​ 。我们先假设每个模态在一个中心频率 ω k \omega_k ωk​周围是紧密的,也就是说这个模态包含的频率分量都在 ω k \omega_k ωk​附近,而 ω k \omega_k ωk​是随着分解来确定。

为了评估一个模态的带宽,提出以下方案:1)对于每个模态,通过希尔伯特变换计算相关的分析信号,以便获得单向频谱。2)对于每种模态,通过与调谐到相应估计中心频率的指数混频,将模态的频谱移至“基带”。3)现在通过解调信号的高斯平滑度,即梯度的平方范数来估计带宽。

得到的约束变分问题如下:

在这里插入图片描述 在这里插入图片描述 求解上述方程,得到模态 u k u_k uk​的求解公式为: 在这里插入图片描述 中心频率 ω k \omega_k ωk​的求解公式为: 在这里插入图片描述

2. 运算步骤

在这里插入图片描述

3.VMD分解之后的模态和原信号的关系

经过VMD分解之后的k个模态直接相加可以得到一个原信号的近似信号,两信号相减会有一个残差,这是因为对于一个实际信号不管分解多少次都不可能完全用分解出来的模态完全代表原信号。 所以在对分解出来的模态操作时不能忘记残差。

4. 源码解读 # -*- coding: utf-8 -*- """ Created on Wed Feb 20 19:24:58 2019 @author: Vinícius Rezende Carvalho """ import numpy as np def VMD(f, alpha, tau, K, DC, init, tol): """ u,u_hat,omega = VMD(f, alpha, tau, K, DC, init, tol) Variational mode decomposition Python implementation by Vinícius Rezende Carvalho - [email protected] code based on Dominique Zosso's MATLAB code, available at: https://www.mathworks.com/matlabcentral/fileexchange/44765-variational-mode-decomposition Original paper: Dragomiretskiy, K. and Zosso, D. (2014) ‘Variational Mode Decomposition’, IEEE Transactions on Signal Processing, 62(3), pp. 531–544. doi: 10.1109/TSP.2013.2288675. Input and Parameters: --------------------- f - 即将被分解的一维时域信号 alpha - 数据保真度约束的平衡参数 tau - 双重上升的时间步长(为零噪声选择0) K - 要被恢复的模态数量 DC - 如果将第一种模态置于并保持为直流(0频率),则为true init - 0 = all omegas start at 0 1 = all omegas start uniformly distributed 2 = all omegas initialized randomly tol - tolerance of convergence criterion; typically around 1e-6 收敛准则的容忍度; 通常在1e-6左右 Output: ------- u - the collection of decomposed modes 分解模态的集合 u_hat - spectra of the modes 模态的频谱 omega - estimated mode center-frequencies 被估计的模态中心频率 omega 是一个矩阵,他储存了Niter-1组中心频率值, 形状为(Niter-1, K),Niter在vmdpy.py中定义,K为分解数量 omega矩阵储存了中心频率收敛过程中的数据,


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3