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

本文介绍了变分模态分解(VMD)的基本概念,包括其运算步骤,VMD分解后模态与原信号的关系,以及源码解读。VMD目标是将信号分解为紧集中在特定中心频率的模态,通过希尔伯特变换和指数混频评估带宽。每个分解后的模态加总可近似原信号,但存在残差。源码解读和相关知识点进一步阐述了VMD的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 - vrcarva@gmail.com
    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矩阵储存了中心频率收敛过程中的数据,
    
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

comli_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值