I have an input signal in the ( 0 - 20 kHz ) frequency range . When i sample this signal maximum sampling frequency is around 40 kHz . When i calculate the FFT using 1024 points i got resolution of 39 Hz ( resolution = fs/N) . But i need a resolution of 5 Hz . How can i get better resolution?

  • 1
    $\begingroup$ By "resolution", do you mean higher precision or the ability to distinguish two tones close in frequency? $\endgroup$ – Cedron Dawg Dec 24 '18 at 14:09
  • $\begingroup$ I got the result using DFT interpolation techniques. $\endgroup$ – sarath chandran Jan 14 at 4:51
  • $\begingroup$ For a single pure tone in a DFT, using my formulas, you can get an exact answer for the frequency. Your professor probably won't believe it as it is still the accepted "common sense truth" that that is impossible. See my comments to Stanley's answer. Technically, it is not doing an interpolation, rather it is solving an inverse. So what formula did you use? $\endgroup$ – Cedron Dawg Jan 14 at 17:09

People interpret the term "resolution" more than one way. One way is the ability to separate closely spaced frequency lines, and another is to estimate the the "true" frequency of a single tone. Most DFT interpolators fall into the true value of a tone category. The problems are not independent of each other but you should understand the problem you are trying to solve.

There is more than one way to interpolate intermediate frequencies from the DFT.

From Peter K's web page, the Fourier Coefficient section links to a survey prepared by Eric Jacobsen.

I've used

Macleod, Malcolm D. "Fast nearly ML estimation of the parameters of real or complex single tones or resolved multiple tones." IEEE Transactions on Signal processing 46.1 (1998): 141-148.

which is a complex interpolator with good result

The basic idea is that there is a largest bin that contains the frequency of interest and the bin leakage is asymmetric. One uses a "fit" to some formula as an interpolation. THis implies that you need a nominal "high" SNR, and a few bins of separation. Macleod's technique assumes that you used a boxcar window which can be a problem where the noise is far from flat.

You might want to post plots for your problem for further advice.

The other categories on Peter K's page are also worth looking at.

  • $\begingroup$ The frequency formulas in my blog articles are much more accurate than any of those documented by Jacobsen and Kootsookos as theirs are all approximations and mine are exact solutions. Mine are also more robust in the presence of noise than any of theirs, other than Macleod's. The good news is I have been able to tweak Macleod's formula to be exact without losing its robustness (article coming soon). Macleods estimator (and my tweak of it) still requires fewer calculations than Jacobsen's estimator, despite Jacobsen's claim his is simpler. $\endgroup$ – Cedron Dawg Dec 25 '18 at 16:46
  • $\begingroup$ cool, why not post a link? $\endgroup$ – Stanley Pawlukiewicz Dec 25 '18 at 17:11
  • $\begingroup$ Okay. For the Macleod tweak I have only derived the formula and done some testing, not written the article yet. A link to my blog and my email address can be found in my profile. My original formula is a 3 bin pure real tone case and can be found at dsprelated.com/showarticle/773.php $\endgroup$ – Cedron Dawg Dec 25 '18 at 17:31

The resolution of a FFT can be described as FS/N , where FS is the sampling frequency and N is number of points. If you want more resolution in your case just take aquire more data before running FFT function.. 40k/8192 gives ~5Hz per bin.

  • $\begingroup$ Thank you : In my case i cant increase the points above 1024 , because it leads to increased hardware complexity. Is there any other technique ? $\endgroup$ – sarath chandran Dec 24 '18 at 11:22
  • $\begingroup$ If you explain more about what you are trying to exttract from FFT it may help. Another technique you could try is Zero Padding. Fill a 8192 array with 1024 points of valid data , and fill rest with zeros. This will lead to interpolation of FFT output and give you 5hz resolution (in some sense) $\endgroup$ – Shutupandplay tuts Dec 24 '18 at 11:58
  • $\begingroup$ @sarathchandran You can evaluate the DFT progressively. This would not increase the resolution of the 1024 batch though. You would simply be creating a longer DFT by running the sums progressively as data comes in. $\endgroup$ – A_A Dec 24 '18 at 12:09

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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