1

I'm implementing the "Empirical Mode Decomposition" in Java. The next step is Hilbert–Huang transform and I need to find how to get the "Instantaneous frequency". Does someone Know how to get it?

Using the EMD method, any complicated data set can be decomposed into a finite and often small number of components, which is a collection of intrinsic mode functions (IMF). Next step is Hilbert–Huang transform. From this I calculate the signal's phase and after I must calculate the instantaneous frequency, I search in Matlab code like in this link: http://read.pudn.com/downloads100/sourcecode/math/408870/emd/instfreq/archive/ifreq.m__.htm

but I don't understand it.

Thanks

user3582433
  • 469
  • 1
  • 8
  • 24

3 Answers3

1

The instance frequency can be calculated in Python by

def hilb(s, unwrap=False):
    from scipy.signal import hilbert
    H = hilbert(s)
    amp = np.abs(H)
    phase = np.arctan2(H.imag, H.real)
    if unwrap: phase = np.unwrap(phase)
    return amp, phase

inst_amp, phase = hilb(imf, unwrap=True)
inst_freq = np.diff(phase)
0

The Hilbert-Huang transform is the combination of empirical mode decomposition (EMD) and Hilbert transform.

First, EMD is an algorithm that gives you the intrinsic mode functions (IMFs).

The Hilbert transform is then applied to each of the IMFs.

From an IMF, the Hilbert transform gives a pi/2 phase delayed signal from which you can compute the phase, and the time-derivative of the phase, which is proportional to the instantaneous frequency.

You will find interesting tutorials and details about the algorithmic variations of EMD on that page: http://perso.ens-lyon.fr/patrick.flandrin/emd.html

astooooooo
  • 362
  • 2
  • 13
0

You can process your signal data using Hilbert-Huang Transform (HHT) which is the combination of Empirical Mode Decomposition (EMD) and Hilbert Spectrum Analysis (HSA) with Matlab or Python. In Matlab or Python, there is the HHT method that you can use directly and do not need to calculate the Instantaneous Frequency (IF) by yourself.

For example with Matlab:

First, you can get IMF and residual by implementing emd to signal data, the code is: [IMF,residual,info] = emd(signal,'Interpolation','pchip', 'Display', 0);

Then, the IF, that is IMFINSF, can be obtained by hht(IMF, fs) in which fs is the sample frequency [P,F,T,IMFINSF,IMFINSE]=hht(IMF,fs);

In addition, there are also some tools and methods in Python.