0
$\begingroup$

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?

$\endgroup$
3
  • 1
    $\begingroup$ By "resolution", do you mean higher precision or the ability to distinguish two tones close in frequency? $\endgroup$ Commented Dec 24, 2018 at 14:09
  • $\begingroup$ I got the result using DFT interpolation techniques. $\endgroup$ Commented Jan 14, 2019 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$ Commented Jan 14, 2019 at 17:09

2 Answers 2

3
$\begingroup$

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.

$\endgroup$
3
  • $\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$ Commented Dec 25, 2018 at 16:46
  • $\begingroup$ cool, why not post a link? $\endgroup$
    – user28715
    Commented Dec 25, 2018 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$ Commented Dec 25, 2018 at 17:31
2
$\begingroup$

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.

$\endgroup$
4
  • $\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$ Commented Dec 24, 2018 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$ Commented Dec 24, 2018 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
    Commented Dec 24, 2018 at 12:09
  • $\begingroup$ this answer seems to be highly informative and comprehensive electronics.stackexchange.com/a/12412/300567 $\endgroup$
    – cestpasmoi
    Commented Aug 19, 2023 at 11:12

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.