Qu

vmd

Builtin index · Signal processing

result = vmd(x, k, [alpha=2000])

Input: x, k, alpha · Output: result

What it is

x: a length-N real vector; k (number, integer): the exact number of modes to extract; alpha (optional number): bandwidth-penalty strength. Variational Mode Decomposition: decomposes x into exactly k band-limited modes by minimizing each mode's bandwidth around its own center frequency, solved by ADMM (not sifting, unlike emd).

Overloads

One call shape — this function is not overloaded.

CodeInputOutputDescription
result = vmd(x, k, [alpha=2000])
x vectorx: a length-N real vector.
k numberk (number, integer): the exact number of modes to extract.
alpha number, optional (default 2000)alpha (optional number): bandwidth-penalty strength.
Model —kind "vmd"
modes matrixa k×N matrix, one mode per row
center_freqs vectora length-k vector, normalized to cycles/sample — 0.5 is Nyquist
Returns a Model (kind "vmd") with fields modes (a k×N matrix, one mode per row) and center_freqs (a length-k vector, normalized to cycles/sample — 0.5 is Nyquist).

Examples

From the documentation, and run by the build -- the output and the figure below are what the engine actually produced. Simplest first.

  v = vmd(signal, 2)                 # exactly 2 modes

  freqs_hz = v.center_freqs .* fs    # convert to Hz

from numerics-dsp

How it works

vmd(x, k, [alpha=2000]) — Variational Mode Decomposition: decomposes x into exactly k band-limited modes by minimizing each mode's bandwidth around its own center frequency, solved by ADMM (not sifting, unlike emd). Model kind "vmd", fields modes (a matrix, one mode per row) and center_freqs (each mode's converged center frequency, normalized to cycles/sample — 0.5 is Nyquist).

From the note above this builtin in the interpreter, where the reasoning was written down as it was built.