bemd: Bivariate EMD decomposition In Rlibeemd: Ensemble Empirical Mode Decomposition (EEMD) and Its Complete Variant (CEEMDAN)

Description

Function bemd implements the Bivariate EMD (Scheme 2 in the cited article).

Usage

 1 bemd(input, directions = 64L, num_imfs = 0L, num_siftings = 50L)

Arguments

 input Complex vector of length N. The input signal to decompose. directions Vector of directional angles (in radians) to use for the decomposition, or an integer defining the number of equally spaced angles to use. num_imfs Number of Intrinsic Mode Functions (IMFs) to compute. If num_imfs is set to zero, a value of num_imfs = emd_num_imfs(N) will be used, which corresponds to a maximal number of IMFs. Note that the final residual is also counted as an IMF in this respect, so you most likely want at least num_imfs=2. num_siftings Use a maximum number of siftings as a stopping criterion. If num_siftings is zero, this stopping criterion is ignored. Default is 50.

Value

Time series object of class "mts" where series corresponds to IMFs of the input signal, with the last series being the final residual. @references

1. G. Rilling, P. Flandrin, P. Goncalves and J. M. Lilly, "Bivariate Empirical Mode Decomposition", IEEE Signal Processing Letters, Vol. 14 (2007) 936–939

Examples

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 N <- 512 t <- 2 * pi * (0:(N-1))/N input <- cos(0.3 * t) * exp(2i * t) + 0.3 * abs(sin(2.3 * t)) * exp(17i * t) # Use evenly spaced angles as directions num_directions <- 64 directions <- 2 * pi * 1:num_directions / num_directions imfs <- bemd(input, directions, num_imfs = 4, num_siftings = 10) # plot the data plot(Re(input), Im(input), xlim = c(-1, 2)) # plot signal and the imfs for(i in 1:4) points(Re(imfs[,i]), Im(imfs[,i]), col = 1 + i) legend("bottomright", col = 1:5, legend = c("signal", paste0("IMF ",1:4)), pch = 1) data("float") plot(float, type = "l") signal <- , 1] + , 2] * 1i imfs <- bemd(signal, num_siftings = 10, num_imfs = 4) # plot the data and the imfs oldpar <- par() par(mfrow = c(5, 1), mar = c(0.5, 4.5, 0.5, 0.5), oma = c(4, 0, 2, 0)) ts.plot(float, col = 1:2, lty = 1:2, ylab = "signal", gpars = list(xaxt = "n")) for(i in 1:4) { ts.plot(Re(imfs[, i]), Im(imfs[, i]), col = 1:2, lty = 1:2, ylab = if(i < 4) paste("IMF", i) else "residual", gpars = list(xaxt = "n")) } axis(1) title(xlab = "Time (days)", main = "Bivariate EMD decomposition", outer = TRUE) par(oldpar)

Example output   If you installed Rlibeemd from CRAN, consider installing again from GitHub if you wish to support for parallel computations: https://github.com/helske/Rlibeemd.
Warning messages:
1: In par(oldpar) : graphical parameter "cin" cannot be set
2: In par(oldpar) : graphical parameter "cra" cannot be set
3: In par(oldpar) : graphical parameter "csi" cannot be set
4: In par(oldpar) : graphical parameter "cxy" cannot be set
5: In par(oldpar) : graphical parameter "din" cannot be set
6: In par(oldpar) : graphical parameter "page" cannot be set

Rlibeemd documentation built on Oct. 7, 2021, 9:15 a.m.