Estimating the frequency of a signal is a classical problem, and finds applications in the processing of signals from, inter alia, radars, sonars, NMR (Nuclear Magnetic Resonance) spectrometers, seismographs. The textbook approach for solving this problem involves the calculation of the Fourier transform of the signal considered.
Infinite frequency resolution is apparently out of reach, though, owing to Heisenberg's uncertainty, and this is somewhat confirmed by the intrinsic sampling step, 2π/N, of the Discrete Fourier Transform (DFT). Or is it really so?
In fact, infinite accuracy can be achieved by using as few as two DFT coefficients; i.e., the Discrete-Time Fourier Transform evaluated at two frequencies ω1, ω2, that are separated by 2π/N (or a multiple of it). More surprisingly, the phase of these two coefficients does not even matter. The simple formula that makes this feat possible is displayed in the figure below (X(ω) is the DTFT of the signal)
By identifying the most significant local maxima of the DFT (e.g., using the findpeaks function in MatLab), this formula can easily be used to deal with multiple frequencies. Typical result (5 frequencies, 30 samples):
[1] Guo, R. & Blu, T.,"Super-Resolving a Frequency Band", IEEE Signal Processing Magazine (2023). To appear. |