Name

emd — computes Empirical Mode Decomposition

Calling Sequence

   [IMF,ORT,NB_ITERATIONS] = emd(X)
   [IMF,ORT,NB_ITERATIONS] = emd(X,...,'Option_name',Option_value,...)
   [IMF,ORT,NB_ITERATIONS] = emd(X,OPTS)
   

Parameters

stopping criterion options:

STOP:

vector of stopping parameters [THRESHOLD,THRESHOLD2,TOLERANCE] if the input vector's length is less than 3, only the first parameters are set, the remaining ones taking default values. default: [0.05,0.5,0.05]

FIX (int):

disable the default stopping criterion and do exactly <FIX> number of sifting iterations for each mode

FIX_H (int):

disable the default stopping criterion and do <FIX_H> sifting iterations with |#zeros-#extrema|<=1 to stop [4]

bivariate/complex EMD options:

COMPLEX_VERSION:

selects the algorithm used for complex EMD ([3])

COMPLEX_VERSION = 1:

"algorithm 1"

COMPLEX_VERSION = 2:

"algorithm 2" (default)

NDIRS:

number of directions in which envelopes are computed (default 4) rem: the actual number of directions (according to [3]) is 2*NDIRS

other options:

T:

sampling times (line vector) (default: 1:length(x))

MAXITERATIONS:

maximum number of sifting iterations for the computation of each mode (default: 2000)

MAXMODES:

maximum number of imfs extracted (default: Inf)

DISPLAY:

if equals to 1 shows sifting steps with pause if equals to 2 shows sifting steps without pause (movie style) rem: display is disabled when the input is complex

INTERP:

interpolation scheme: 'linear', 'cubic', 'pchip' or 'spline' (default) see interp1 documentation for details

MASK:

masking signal used to improve the decomposition according to [5]

Description

IMF = EMD(X) where X is a real vector computes the Empirical Mode Decomposition [1] of X, resulting in a matrix IMF containing 1 IMF per row, the/ last one being the residue. The default stopping criterion is the one proposed in [2]:

at each point, mean_amplitude < THRESHOLD2*envelope_amplitude & mean of boolean array {(mean_amplitude)/(envelope_amplitude) > THRESHOLD} < TOLERANCE & |#zeros-#extrema|<=1

where mean_amplitude = abs(envelope_max+envelope_min)/2 and envelope_amplitude = abs(envelope_max-envelope_min)/2

IMF = EMD(X) where X is a complex vector computes Bivariate Empirical Mode Decomposition [3] of X, resulting in a matrix IMF containing 1 IMF per row, the last one being the residue. The default stopping criterion is similar to the one proposed in [2]:

at each point, mean_amplitude < THRESHOLD2*envelope_amplitude & mean of boolean array {(mean_amplitude)/(envelope_amplitude) > THRESHOLD} < TOLERANCE

where mean_amplitude and envelope_amplitude have definitions similar to the real case

IMF = EMD(X,...,'Option_name',Option_value,...) sets options Option_name to the specified Option_value (see Options)

IMF = EMD(X,OPTS) is equivalent to the above syntax provided OPTS is a struct object with field names corresponding to option names and field values being the associated values

[IMF,ORT,NB_ITERATIONS] = EMD(...) returns an index of orthogonality

and the number of iterations to extract each mode in NB_ITERATIONS References

[1] N. E. Huang et al., "The empirical mode decomposition and the Hilbert spectrum for non-linear and non stationary time series analysis", Proc. Royal Soc. London A, Vol. 454, pp. 903-995, 1998

[2] G. Rilling, P. Flandrin and P. Gon�alves "On Empirical Mode Decomposition and its algorithms", IEEE-EURASIP Workshop on Nonlinear Signal and Image Processing NSIP-03, Grado (I), June 2003

[3] G. Rilling, P. Flandrin, P. Gon�alves and J. M. Lilly., "Bivariate Empirical Mode Decomposition", Signal Processing Letters (submitted)

[4] N. E. Huang et al., "A confidence limit for the Empirical Mode Decomposition and Hilbert spectral analysis", Proc. Royal Soc. London A, Vol. 459, pp. 2317-2345, 2003

[5] R. Deering and J. F. Kaiser, "The use of a masking signal to improve empirical mode decomposition", ICASSP 2005

Examples

X = rand(1,512);

IMF = emd(X);

IMF = emd(X,'STOP',[0.1,0.5,0.05],'MAXITERATIONS',100);

T=linspace(0,20,1e3);
X = 2*exp(%i*T)+exp(3*%i*T)+.5*T;
IMF = emd(X,'T',T);

OPTIONS.DISLPAY = 1;
OPTIONS.FIX = 10;
OPTIONS.MAXMODES = 3;
[IMF,ORT,NBITS] = emd(X,OPTIONS);


   

See also

emd_visu, hhspectrum, emdc, emdc_fix, cemdc, cemdc_fix, cemdc2, cemdc2_fix

Authors

Holger Nahrstaedt - Aug 2010
G. Rilling, last modification: 3.2007
gabriel.rilling@ens-lyon.fr