bemd: Bivariate EMD decomposition

Description Usage Arguments Value Examples

View source: R/bemd.R

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 <- float[, 1] + float[, 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.

Related to bemd in Rlibeemd...