NCL Home > Documentation > Functions > General applied math, Statistics


Complete Ensemble Empirical Mode Decomposition with Adaptive Noise.

Available in version 6.4.0 and later.


	function ceemdan (
		x         : numeric,                            
		nimf  [1] : integer,                            
		nrep  [1] : integer,                            
		noise [1] : numeric,        [ float, double ],  
		opt   [1] : logical,                            
		dims  [1] : integer                             

	return_val  :  numeric



A variable of numeric type and any dimensionality.


Number of Intrinsic Mode Functions (IMFs) to compute. If num_imfs is set to zero, an 'appropriate' value of num_imfs will be used. This 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.


Number of replications (ie, local ensemble) members to be used.


Standard deviation of the Gaussian random numbers used as additional noise. This value is relative to the standard deviation of the input signal.


Options parameter.

  • S_number - Use the (integer) S-number to specify stopping criterion for the EMD procedure Typical values are in the range 3-8. If S_number is zero, this stopping criterion is ignored. Default is 4
  • 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.
  • rng_seed - A seed for the random number generator. A value of zero (default) denotes an implementation-defined default value.


The dimension of x on which to perform the EMD.

Return value

A variable containing the Intrinsic Mode Functions (IMFs):

  • x(time) - returns IMF(nimf,time)
  • x(time,npts) - returns IMF(nimf,time,npts)
  • x(time,lat,lon) - IMF(nimf,time,nlat,mlon)
Double if x is double, float otherwise.


EMD (Empirical Mode Decomposition) is an adaptive time-space analysis method suitable for processing series that are non-stationary and non-linear. EMD performs operations that partition a series into 'modes' (IMFs; Intrinsic Mode Functions) without leaving the time domain. It can be compared to other time-space analysis methods like Fourier Transforms and wavelet decomposition. Like these methods, EMD is not based on physics. However, the modes may provide insight into various signals contained within the data. In particular, the method is useful for analyzing natural signals, which are most often non-linear and non-stationary. Some common examples would include the Southern Oscillation Index (SOI), NINO-3.4 Index, etc.

EEMD (Ensemble EMD) is a noise assisted data analysis method. EEMD consists of "sifting" an ensemble of white noise-added signal. EEMD can separate scales naturally without any a priori subjective criterion selection as in the intermittence test for the original EMD algorithm.

Wu and Huang (2005) state: "White noise is necessary to force the ensemble to exhaust all possible solutions in the sifting process, thus making the different scale signals to collate in the proper intrinsic mode functions (IMF) dictated by the dyadic filter banks. As the EMD is a time space analysis method, the white noise is averaged out with sufficient number of trials; the only persistent part that survives the averaging process is the signal, which is then treated as the true and more physical meaningful answer." Further, they state: "[EEMD] represents a substantial improvement over the original EMD and is a truly noise assisted data analysis (NADA) method."

CEEMDAN (Complete Ensemble Empirical Mode Decomposition with Adaptive Noise) is a variation of the EEMD algorithm that provides an exact reconstruction of the original signal and a better spectral separation of the Intrinsic Mode Functions (IMFs).

IMPORTANT NOTE: NCL interfaces to C code provided by Luukko et al. (2016). There have been reports that for some of the modes, this code suffers from the mode mixing problem due to the stoppage criterion that is used in P. Luukko's code. The NCL team is looking into another version of EEMD to see if this issue can be improved.


Colominas, M. A., Schlotthauer, G., and Torres, M. E. (2014).
         Improved complete ensemble EMD:
                  A suitable tool for biomedical signal processing.
         Biomedical Signal Processing and Control, 14, 19-29.
Hsuan, R.  (2014): 
         Ensemble Empirical Mode Decomposition Parameters Optimization for 
         Spectral Distance Measurement in Hyperspectral Remote Sensing Data
         Remote Sens. 2014, 6(3), 2069-2083; doi:10.3390/rs6032069 

Kim, D., and HS. Uh (2009):
         EMD: A Package for Empirical Mode Decomposition and Hilbert Spectrum

Lambert et al
         Empirical Mode Decomposition: A project website for the course ELEC 301 at Rice University.

Salisbury, J.I. and Wimbush, M. (2002): 
         Using modern time series analysis techniques to predict ENSO events from the SOI time series
         Nonlinear Processes in Geophysics (2002) 9: 341–345

Torres, M. E., Colominas, M. A., Schlotthauer, G., and Flandrin, P. (2011, May):
        A complete ensemble empirical mode decomposition with adaptive noise
        (ICASSP), 2011 (pp. 4144-4147). DOI: 10.1109/ICASSP.2011.594726

Wang, T., M. Zhang, Q. Yu, and H. Zhang, 2012:
        Comparing the applications of EMD and EEMD on time–frequency analysis of seismic signal.
        J. Appl. Geophys., 83, 29–34, doi:

Wu, Z. and Huang, N. (2009):
        Ensemble Empirical Mode Decomposition: A Noise-Assisted Data Analysis Method.
        Advances in Adaptive Data Analysis. Vol. 1, No. 1 (2009) 1–41.

Wu, Z, et al (2015):
         Fast multidimensional ensemble empirical mode decomposition for the analysis of big spatio-temporal datasets
         Philos Trans A Math Phys Eng Sci. 2016 Apr 13; 374(2065): 20150197.  doi:  10.1098/rsta.2015.0197

Wu, Y. and Shen, BW (2016):
         An Evaluation of the Parallel Ensemble Empirical Mode Decomposition Method
               in Revealing the Role of Downscaling Processes Associated with
               African Easterly Waves in Tropical Cyclone Genesis 
         [lots of references]

See Also



Please see the EEMD Applications page for more extensive examples.

Example 1: This example is based upon the simple sinusoid presented in Kim and Oh (2009).

   N   = 3000
   tt  = fspan(0, 9, N)           ; x-axis (float)
   rad = get_r2d(typeof(tt))
   pi  = get_pi (typeof(tt))
   xt  = sin(pi*tt) + sin(2*pi*tt) + sin(6*pi*tt) + 0.5*tt
  ;print(tt+"   "+xt)

; set 'ceemdan' arguments and options
   nrep  = 250
   nimf  = 10                     ; nimf=0 , function will calculate
   noise = 0.2
   dims  = 0
   opt   = False

   e     = ceemdan(xt,nimf,nrep,noise,opt,dims)     ; (nimf,N) 
   e@long_name = "EEMD"