Can't get correct dB level with spectrum analyzer


In a project where I study sounds, I use the Audacity spectrum analyzer.
I am willing to match the 0 dB reference with a real measurement made with an SPL meter.
So far I only worked with Audacity:

  • I generate a white noise track with amplitude 0 dB.
  • I use the spectrum analyzer and export the data.
  • I import the data in Excel and compute the signal dB by “adding” all the bins dB level. (adding dB the correct way = 10*log(10^(L1/10) +…+ 10^(Ln/10))).

Result: I get something close to 0 (usually 1 - 3 dB off) but not zero. The result depends on the function (FFT window type).
I guess this is normal but I would like to know which function is the best to have accurate peak amplitude and total dB level.

Thanks for your help.

I think Fourier is successive quick guesses, so it’s never going to come out exact.

The dB level in Plot Spectrum is normalized to give (approximately) 0 dB for a full-scale sine wave. If the sine frequency lies in the middle of an FFT bin, the measurement should be exact, but otherwise the value is extrapolated from the values of adjacent bins.

Hanning (Hann) is a good general purpose window function, and often the default choice when there are no overriding considerations. Rectangle is best for accuracy when measuring frequencies of discrete sine tones. I’ve not used the other options much, but there is a lot of information in this Wikipedia article: