decomposeCEEMDAN: Complete Ensemble Empirical Mode Decomposition with Adaptive...

View source: R/decomposeCEEMDAN.R

decomposeCEEMDANR Documentation

Complete Ensemble Empirical Mode Decomposition with Adaptive Noise

Description

Extracts each mode as the average first mode of the common residue perturbed by the modes of supplied noise realizations, with a constant ratio of the noise to the residue at each stage.

Usage

decomposeCEEMDAN(signal, noise, amplitudeRatio = 0.2, sifting)

Arguments

signal

Numeric vector of at least two finite values without dim, in the units of the quantity.

noise

Finite numeric matrix with one row per sample of signal and one column per realization, M \ge 1; column m is a realization w^{(m)} of unit variance, used as supplied. The function draws no random numbers.

amplitudeRatio

Dimensionless ratio \varepsilon \ge 0 of the perturbation to the standard deviation of the residue at each stage (divisor N - 1). Default 0.2, as in decomposeEEMD.

sifting

Named list of sifting controls, as in decomposeEMD; the rule "consecutive" is rejected. The same list decomposes the noise realizations.

Details

Each column of noise is decomposed once with sifting, \eta_k^{(m)} = E_k(w^{(m)}), and \eta_0^{(m)} = w^{(m)}. From r_0 = x, before stage k the common residue r_{k-1} ends the decomposition, in this order, with "terminalResidue" when it has at most one extremum, with "modeLimit" when k - 1 equals sifting$maxModes and with "insufficientExtrema" when its envelopes cannot be built. Stage k perturbs r_{k-1} with p^{(m)} = \beta_{k-1}^{(m)} \eta_{k-1}^{(m)}, \beta_{k-1}^{(m)} = \varepsilon \, \mathrm{sd}(r_{k-1}) / \mathrm{sd}(\eta_{k-1}^{(m)}), and computes

d_k = \frac{1}{M} \sum_{m=1}^{M} E_1\left(r_{k-1} + p^{(m)}\right), \qquad r_k = r_{k-1} - d_k.

A realization without \eta_{k-1} contributes a null perturbation, and a perturbed residue without a first mode contributes zero; both stay in the divisor M.

Value

A list with

modes

Double matrix, samples by modes.

residue

Numeric vector, the final common residue.

iterations

Integer vector by mode, the sum of the subtractions of the M extractions of the stage.

converged

Logical vector by mode: TRUE when the M extractions accepted, FALSE when one ended without accepting or could not begin, NA when all completed fixed sifting.

stopReason

"terminalResidue", "modeLimit" or "insufficientExtrema".

Conditions

A noise mode of zero standard deviation leaves its scale undefined and stops the function with an error of class xemdZeroEnergy.

References

Torres, M. E., Colominas, M. A., Schlotthauer, G. and Flandrin, P. (2011). A complete ensemble empirical mode decomposition with adaptive noise. In 2011 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), 4144–4147. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1109/ICASSP.2011.5947265")}

The selection of the reflected extrema and the spline interpolation of the envelope nodes are adapted from emd.m (G. Rilling, March 2007), distributed with CEEMDAN revision af9a0f83, copyright (c) 2020 Marcelo A. Colominas, MIT License; see the NOTICE file of the installed package.

See Also

decomposeICEEMDAN, decomposeEEMD, decomposeCEEMD

Examples

Time <- seq(0, 9, length.out = 1000)
Signal <- sin(pi * Time) + sin(2 * pi * Time) + sin(6 * pi * Time) +
    0.5 * Time
set.seed(628)
Noise <- t(matrix(stats::rnorm(10L * length(Signal)), nrow = 10L,
                  byrow = TRUE))
# Two of the ten realizations and three modes keep the example short.
Sifting <- list(stopRule = "doubleThreshold", thresholds = c(0.05, 0.5),
                fraction = 0.05, maxSift = 2000, boundary = "reflection",
                maxModes = 3)
OUT <- decomposeCEEMDAN(Signal, noise = Noise[, 1:2], amplitudeRatio = 0.2,
                        sifting = Sifting)
dim(OUT$modes)
OUT$stopReason
max(abs(rowSums(OUT$modes) + OUT$residue - Signal))

xemd documentation built on Nov. 9, 2026, 1:09 a.m.