Since a couple of months I started working on the extraction (estimation) of signal frequency and amplitude components by means of two different time-frequency approaches, namely the Hilbert transform and the Teager-Kaiser energy operator.

I tested both methods on standard signals, such as chirps, sine, cosine, etc. This preliminary analysis seemed to highlight Teager-Kaiser has better resolution in both frequency and amplitude estimation.

Afterwards I applied the two methods on some acceleration signal derived from a tool simulating the dynamic behavior of a given system. Surprisingly enough, Hilbert transform provided more reliable results in terms of frequency estimation. Teager-Kaiser operator shows some high-frequency content estimation, which is hardly expectable.

I developed the two techniques in Simulink, as visible here: enter image description here

The results on a synthetic acceleration signal are here: enter image description here

What did I miss in the design of the Teager-Kaiser operator? Is it any possible to avoid those "false" frequency estimates (those with the arrows)?

  • $\begingroup$ It looks like the Teager-Kaiser amplitude estimator is going to zero, which would imply "unknown" frequency at those time instants. The Hilbert Transformer has a hard time letting its amplitude estimate go to zero, which is why it doesn't suffer the same effect (for this signal example). Perhaps you can "bias" the amplitude estimate away from zero? $\endgroup$
    – Peter K.
    Feb 21, 2015 at 22:28

2 Answers 2


This paper may be of interest:

David Vakman, "On the Analytic Signal, the Teager-Kaiser Energy Algorithm, and Other Methods for Defining Amplitude and Frequency." IEEE Trans. Signal Processing. (1996)

Summarising from the paper:

$$\Psi(u) = a^2w^2 = [u'(t)]^2 - u(t)u''(t)$$ $$\Psi'(u') = a^2w^4 = [u''(t)]^2 - u'(t)u'''(t)$$

where $u(t)$ is the signal, and $a$ and $w$ iare the amplitude and frequency estimates to solve for.

$$a(t) = \frac{\Psi(u)}{\sqrt{\Psi(u')}}$$ $$w(t) = \sqrt{\frac{\Psi(u')}{\Psi(u)}}$$

But this means if at some point in the signal $u'(t)=1$ and $u''(t)=u''''(t)=0$, for example, then $\Psi(u) = 1$ and $\Psi'(u) = 0$ and thus $a(t) = \infty$ and $w(t) = 0$.

The paper thus explains this causes spikes in amplitude and zero frequencies with the Teager-Kaiser algorithm.

For your signal, the reverse must be true. If $\Psi(u) = 0$ and $\Psi'(u) = 1$ then you would get spikes in frequency when amplitude is zero. This would occur when $[u'(t)]^2 = u(t)u''(t)$

The Hilbert transform uses the entire signal to compute. It is implemented by doubling the positive frequencies and setting the negative frequencies to zero. Therefore the energy of the signal does not change (Parseval's theorem). Thus, intuitively, there can be no infinite spikes, as this would require infinite energy.

  • $\begingroup$ it'd be nice understanding whether there is a method which could "artificially" bypass this problem. $\endgroup$
    – fpe
    Feb 22, 2015 at 19:52

You might try applying a median filter to avoid the extreme glitches? In Matlab, medfilt1.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.