vmd {VMDecomp} | R Documentation |
Variational Mode Decomposition (1- or 2-dimensional)
Description
Variational Mode Decomposition (1- or 2-dimensional)
Usage
vmd(data, alpha, tau, K, DC, init, tol, verbose = FALSE)
Arguments
data |
either a vector or a matrix (of type numeric or integer) |
alpha |
a numeric value specifying the balancing parameter of the data-fidelity constraint |
tau |
a numeric value specifying the time-step of the dual ascent ( pick 0 for noise-slack ) |
K |
a numeric value specifying the number of modes to be recovered |
DC |
a boolean. If true the first mode is put and kept at DC (0-freq) |
init |
a numeric value. This parameter differs depending on the input 'data' parameter (1-dimensional and 2-dimensional). See the details section for more information |
tol |
a numeric value specifying the tolerance of convergence criterion (typically this parameter is around 1e-6 for the 1-dimensional and 1e-7 for the 2-dimensional data) |
verbose |
a boolean. If TRUE then information will be printed in the console |
Details
The 'init' parameter takes the following values for,
1-dimensional data:
0 = all omegas start at 0
1 = all omegas start uniformly distributed
2 = all omegas initialized randomly
2-dimensional data:
0 = all omegas start at 0
1 = all omegas start initialized randomly
Value
a list object of length three which includes the
'u' (collection of decomposed modes)
'u_hat' (spectra of the modes)
'omega' (estimated mode center-frequencies) objects
References
https://math.montana.edu/dzosso/code/
Examples
require(VMDecomp)
#..............
# 1-dimensional
#..............
N = 250
set.seed(1)
rand_unif = runif(n = N, min = 0, max = 1.0)
f_sig1 = 6 * rand_unif
f_sig2 = cos(x = 8 * pi * rand_unif)
f_sig3 = 0.5 * cos(x = 40 * pi * rand_unif)
f_sig = f_sig1 + f_sig2 + f_sig3
alpha = 2000
tau = 0
K = 3
DC = FALSE
init = 1
tol = 1e-6
set.seed(2)
res_1d = vmd(data = f_sig,
alpha = alpha,
tau = tau,
K = K,
DC = DC,
init = init,
tol = tol,
verbose = FALSE)
#..............
# 2-dimensional
#..............
rows_cols = 10
set.seed(3)
data = matrix(runif(rows_cols^2), rows_cols, rows_cols)
alpha = 5000
tau = 0.25
K = 2
DC = TRUE
init = 1
tol = 1e-7
set.seed(4)
res_2d = vmd(data = data,
alpha = alpha,
tau = tau,
K = K,
DC = DC,
init = init,
tol = tol,
verbose = FALSE)