I have 100,000 samples of a signal $x[n]$ that was sampled at 20kHz. The data is vibration data from a rotating machine, and contains a significant spectral component related to the speed of the machine's rotation.

Because the speed of the machine varies over the duration of the sample, using the peak of the FFT does not yield the result I am looking for.

So I want to use estimators such as Kay's estimator that allow short-term estimates, but assume a signal model of:

$x[n] = A \exp(j \omega n + \theta) + z[n]$

where $n$ = 0... 99,999, $A$ is the amplitude, $\omega$ is the frequency to be estimated, $\theta$ is the initial offset, and $z[n]$ is the complex noise.

However, my signal is real-valued and looks more like:

$x[n] = A \cos(\omega n + \theta) + z_r[n]$

where $z_r$ and $A$ are now real-valued.

How do I transform my real-valued signal into a complex-valued signal, so that I can use Kay's estimator?


The tool for converting real signals into their analytic representation is the Hilbert transform.

Suppose your signal were a projection of some helical rotation with variable amplitude onto the real-time plane, like in the image below.

enter image description here


The Hilbert transform produces such complex signal given its real part. It is a linear transform and it's very easy to do in frequency domain. Without going into its mathematics and derivations too much in depth, the Fourier Transform imaginary part of your signal is the same as the one of your real signal multiplied by $-j$ (rotated by 90 degrees). By symmetrical properties of real signal, you get the following relationship:

All your negative ferquency components become 0.

Your DC component stays the same.

All your positive frequency components double

In Matlab, for example, you would do the following:

a = rand(1,201);

hilbert_a = ifft( [ 1, 2*ones(1,100), zeros(1,100)] .* fft(a) );

or simply use built-in the hilbert function.

  • $\begingroup$ Sorry, I should have cited the source. It's from here $\endgroup$ – Phonon Aug 18 '11 at 12:56

If you would like to use Kay's estimator, you need to convert the signal of interest to its "analytic signal" representation. This essentially eliminates the redundant (e.g. the negative) frequencies from the original real-valued signal. Since the conjugate symmetry of the signal's frequency-domain representation is destroyed in this process, the result is complex. Then, you should be able to apply the technique you want.

Other approaches are also available to the frequency-tracking problem. It is possible to apply the LMS algorithm to perform instantaneous frequency estimation (Haykin, "Adaptive Filter Theory," pp. 244-246). Alternatively, you could use a phase-locked loop to track the discrete spectral component over time. The right solution is a function of what your ultimate goal is and what the specific characteristics of your signal are.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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