Skip to content

jiafuei/vmdrs-py

vmdrs-py

Drop in replacement for vmdpy with fixes and improvements using the vmd-rs Rust crate.

VMD, aka Variational Mode Decomposition, is a signal processing tool that decompse the input signal into different band-limited IMFs.

Installation

Available on PyPI

pip install --upgrade vmdrs-py

Requirements

numpy>=1.20

Examples

#%% Simple example: generate signal with 3 components + noise  
import numpy as np  
import matplotlib.pyplot as plt  
from vmdrs_py import VMD  

#. Time Domain 0 to T  
T = 1000  
fs = 1/T  
t = 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 VMD 
u, u_hat, omega = VMD(f, alpha, tau, K, DC, init, tol)  

#. Visualize decomposed modes
plt.figure()
plt.subplot(2,1,1)
plt.plot(f)
plt.title('Original signal')
plt.xlabel('time (s)')
plt.subplot(2,1,2)
plt.plot(u.T)
plt.title('Decomposed modes')
plt.xlabel('time (s)')
plt.legend(['Mode %d'%m_i for m_i in range(u.shape[0])])
plt.tight_layout()

Compiling from source

Requirements

  1. Python >= 3.7
  2. Rustc

Instructions

Rust compiler is needed since this project is compiled using Maturin.

pip install maturin
git clone https://github.com/jiafuei/vmdrs-py.git && cd vmdrs-py
maturin build --release

Customizing BLAS providers

BLAS is used by ndarray, follow the instructions there and edit Cargo.toml.

About

Variational Mode Decomposition in Python using the Rust vmd-rs crate

Topics

Resources

License

Unknown and 3 other licenses found

Licenses found

Unknown
LICENSE.md
Apache-2.0
LICENSE-APACHE-2.0
Unknown
LICENSE-ISS
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages