Main Content

Instantaneous Frequency of Complex Chirp

This example shows how to compute the instantaneous frequency of a signal using the Fourier synchrosqueezed transform.

Generate a chirp with sinusoidally varying frequency content. The signal is embedded in white Gaussian noise and sampled at 3 kHz for 1 second.

fs = 3000;
t = 0:1/fs:1-1/fs;

x = exp(2j*pi*100*cos(2*pi*2*t)) + randn(size(t))/100;

Compute and plot the Fourier synchrosqueezed transform of the signal. Display the time on the x-axis and the frequency on the y-axis.

fsst(x,fs,'yaxis')

Figure contains an axes object. The axes object with title Fourier Synchrosqueezed Transform, xlabel Time (ms), ylabel Frequency (kHz) contains an object of type image.

Find the instantaneous frequency of the signal by extracting the maximum-energy time-frequency ridge of the Fourier Synchrosqueezed transform.

[sst,f,tfs] = fsst(x,fs);

fridge = tfridge(sst,f);

Overlay the ridge on the transform plot. Convert time to milliseconds and frequency to kHz.

hold on
plot(t*1000,fridge/1000,'r')
hold off

Figure contains an axes object. The axes object with title Fourier Synchrosqueezed Transform, xlabel Time (ms), ylabel Frequency (kHz) contains 2 objects of type image, line.

For a real signal, you can find the instantaneous frequency more easily using the instfreq function. For example, display the instantaneous frequency of the real part of the complex chirp by computing the analytic signal and differentiating its phase.

ax = real(x);

instfreq(ax,fs,'Method','hilbert')

Figure contains an axes object. The axes object with title Instantaneous Frequency Estimate, xlabel Time (ms), ylabel Frequency (kHz) contains an object of type line.

See Also

| | | | |

Related Topics