Multivariate Variational Mode Decomposition
decomposeMVMD.RdDecomposes the channels of a sampled multichannel signal into modes whose channel coordinates share one center frequency.
Usage
decomposeMVMD(signal, samplingInterval, initialCenters, alpha, tau,
fixedZeroCenter, tolerance, maxIterations = 499)Arguments
- signal
Numeric matrix of finite values, samples by channels, with at least one row and one column, as composed by the caller and without standardization.
- samplingInterval
Sampling interval \(\Delta t\) in seconds, a finite number greater than zero.
- initialCenters
Numeric vector of initial center frequencies in Hz, each in \([0, 1/(2\Delta t)]\); its length is the number of modes \(K\). No default.
- alpha
Penalty \(\alpha > 0\) in \(s^2\), as in
decomposeVMD. No default; PySDKit takes it on cycles per sample without the factor 2.- tau
Dual ascent step \(\tau \ge 0\);
0solves the penalized problem with zero multipliers. No default.- fixedZeroCenter
TRUEkeeps the first center at 0, while its channel coordinates are still updated, and requiresinitialCenters[1] == 0. No default.- tolerance
Threshold \(\epsilon > 0\) of the relative change summed over modes and channels. No default; the
1e-7of PySDKit belongs to another measure.- maxIterations
Whole number \(\ge 1\) of sweeps; default
499, the limit of 500 states of the authors' MVMD.m 1.0.1.
Details
Each channel is extended and transformed as in decomposeVMD.
In each sweep the coordinate \(c\) of mode \(k\) is
$$\hat u_{k,c} = \frac{\hat x_c - \sum_{i \ne k} \hat u_{i,c} + \hat\lambda_c / 2}{1 + 2 \alpha (\omega - \omega_k)^2},$$
with a denominator common to the channels; the new center weights
\(|\omega|\) by the power summed over the channels, and the multiplier of
each channel is updated with step \(\tau\). The iteration stops with
"tolerance" when
\(\sum_k \sum_c \|\hat u_{k,c}^{(n+1)} - \hat u_{k,c}^{(n)}\|^2 / \|\hat u_{k,c}^{(n)}\|^2 < \epsilon\),
which cannot happen before the second sweep, or with
"iterationLimit" after maxIterations sweeps. A coordinate
without energy in the previous sweep leaves its ratio undefined, so the
test fails until maxIterations. The channels keep the order
received. The joint bandwidth formulation does not impose the geometrical
IMF conditions of EMD. A shared spectral center does not require identical
amplitudes or instantaneous frequencies across channels.
Value
A list with
- modes
Double array, samples by modes by channels.
- fitResidual
Numeric matrix, samples by channels, \(x_c - \sum_k u_{k,c}\).
- centers
Numeric vector of the \(K\) shared centers in Hz.
- iterations
Integer vector repeating, for every mode, the number of sweeps.
- converged
Logical vector repeating, for every mode, the result of the joint stopping test.
- stopReason
"tolerance"or"iterationLimit".
Conditions
A mode without energy over all its channels leaves its center undefined and
stops the function with an error of class xemdZeroEnergy.
References
ur Rehman, N. and Aftab, H. (2019). Multivariate Variational Mode Decomposition. arXiv:1907.04509.
Examples
SamplingInterval <- 1 / 1000
Time <- seq_len(1000) * SamplingInterval
Signal <- cbind(cos(2 * pi * 2 * Time) + 0.25 * cos(2 * pi * 24 * Time) +
0.0625 * cos(2 * pi * 288 * Time),
cos(2 * pi * 2 * Time),
0.25 * cos(2 * pi * 24 * Time))
OUT <- decomposeMVMD(Signal, samplingInterval = SamplingInterval,
initialCenters = (0:2) / (6 * SamplingInterval),
alpha = 2000 * SamplingInterval^2 / (8 * pi^2),
tau = 0.5, fixedZeroCenter = FALSE, tolerance = 1e-6,
maxIterations = 98)
dim(OUT$modes)
#> [1] 1000 3 3
OUT$centers
#> [1] 2.000017 23.999987 287.943889
OUT$stopReason
#> [1] "iterationLimit"