Skip to contents

Decomposes 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\); 0 solves the penalized problem with zero multipliers. No default.

fixedZeroCenter

TRUE keeps the first center at 0, while its channel coordinates are still updated, and requires initialCenters[1] == 0. No default.

tolerance

Threshold \(\epsilon > 0\) of the relative change summed over modes and channels. No default; the 1e-7 of 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"