Introduction
Time series analysis is especially useful in applications involving sound, such as speech data analysis and processing using Norden E. Huang’s empirical mode decomposition (EMD), combined with the Hilbert transform—commonly referred to as the Hilbert–Huang transform (HHT)has become an emerging trend.
Automatic Speech Signal Processing - Dr. Lijiang Chen
But working with real-world time series might be hard. Financial curves, ECG traces, and neural signals often look like chaotic spikes with no structure at all.
What exactly is a signal?
A signal is simply any quantity that varies over time (what we usually call a time series in data science).
Introduction to empirical mode decomposition (EMD)
Empirical mode decomposition (EMD) is a data-adaptive multiresolution technique used to decompose a signal into physically meaningful components. The EMD method was developed so that data can be examined in an adaptive time–frequency–amplitude space for nonlinear and non-stationary signals.
The EMD method decomposes the input signal into several intrinsic mode functions (IMFs) and aresidue.
Some common applications of empirical mode decomposition are in the fields of bearing fault detection, biomedical data analysis, power signal analysis, and seismic signals.
Empirical Mode Decomposition in Python
Python tools exist for the extraction and analysis of non-linear and non-stationary oscillatory signals. A famous library is EMD. Simple example: how to use EMD to analyze a synthetic signal. Running an EMD and frequency transform. We then define a simulated waveform containing a non-linear wave at 5 Hz and a sinusoid at 1 Hz.
import matplotlib.pyplot as plt import numpy as np
import emd
sample_rate = 1000
seconds = 10
num_samples = sample_rate*seconds
time_vect = np.linspace(0, seconds, num_samples)
freq = 5
# Change extent of deformation from sinusoidal shape [-1 to 1]
nonlinearity_deg = 0.25
# Change left-right skew of deformation [-pi to pi]
nonlinearity_phi = -np.pi/4
x= emd.simulate.abreu2010(freq, nonlinearity_deg, nonlinearity_phi, sample_rate, seconds)
x+= np.cos(2 * np.pi * 1 * time_vect) # Add a simple 1Hz sinusoid
x-= np.sin(2 * np.pi * 2.2e-1 * time_vect)
# Add part of a very slow cycle as a trend
# Visualise the time-series for analysis
plt.figsize=(12, 4))
plt.plot(x)
To create different non-sinusoidal waveform shapes change the values of nonlinearity_deg and nonlinearity_phi . Next, we can then estimate the IMFs for the signal:
imf = emd.sift.sift(x)
print(imf.shape)
I borrowed this example from a tutorial emd
EMD Limitations
- Mode mixing: different frequencies can end up in the same IMF.
- Oversplitting: EMD decides the number of IMFs on its own and can extract too many.
- Noise sensitivity: small noise changes can completely alter the IMFs.
Helpfull resources
Empirical Mode Decomposition in Python
Top comments (0)