Open ashley-b opened 4 years ago
If you send in a DC tone at 1.0 amplitude and set the window to rectangular you should see exactly 0 dBfs (if the full scale is 0). One you change the frequency or window, you start to spread out that power among multiple fft bins. The total cumulative power of those bins should add up to 0 dBfs. In the example above, you have two powerful bins which are down about 3dB, so the cumulative power is correct.
Two things to note here:
0.1
and FFT size 1024
, you're seeing spectral leakage since your tone is not perfectly centered on an FFT bin (0.1*1024=102.4
, a non-integer). This leads to scalloping loss, which is a function of the window used. For your chosen Hann window, the maximum scalloping loss is -1.42 dB if the tone is exactly halfway between bins, but it will be slightly less for your case. Choosing a normalized frequency of 1/1024*102=0.099609375
would put you on the nearest FFT bin center, and you should see the scalloping loss go away.Edit: an earlier version of this comment incorrectly stated that WaveformSource
sets Re{z}=1
and Im{z}=1
, which has a magnitude of SQRT(1^2+1^2) ~ 1.414
. In fact, WaveformSource
populates a wave table using std::polar
, which handles normalizing the real and imaginary parts by 1/SQRT(2)
, thus the magnitude is 1, and therefore dBFS=0.
When display a single test tone of amplitude 1.0 in the Periodogram or Spectrogram display the amplitude seams down from were it should be. 3dB down for complex and 9dB down for real signals. It does not seam to be significantly affected by the windowing mode. But adjusting the "Full Scale" parm fixes the the issue. eg 1.0 *sqrt(1/2) for complex bring the displayed amplitude to were i would expect.
Complex normal Complex adjusted
Real normal Real adjusted
I see this bug under the Pothos v0.7.0-g42d23cb1