8-bit FFTNow we are going to explore what really can be expected from the FFT in an 8-bit DSO. For all the following examples, full scale is ±2V, which is equivalent to +16dBm with 50 ohms termination at the scope input. All measurements use a ~1.95MHz FFT bandwidth with 2Mpoints, so we have 1M bins each of them being 1.863Hz wide. Blackman Harris window is used throughout and the actual -60dB bandwidth is about 7 times the bin width, resulting in a frequency resolution of some 13Hz.
Let’s start with a 990kHz signal at +10dBm without averaging (FFT8_2M_+10dBm)
This looks impressive at a first glance. Even without averaging, the noise level appears quite low, but there are lots of spurs and for the reasons already discussed, we cannot know which of them result from the imperfections in the signal itself and which are just due to the shortcomings of the ADC. Even though it would be tempting to relate the more prominent spectral lines to the signal, we just don’t know for sure at levels below -50dBfs.
The strongest spur is -48.62dBm and since full scale would be +16dBm it looks like we have a SFDR (spurious free dynamic range) of 64.62dB – some 15dB better than what we’d normally expect from 8 bits.
The automatic measurement of the SFDR already hints something different though. The average value reads only 50.76dBc, which would still be 56.76dB total, hence 7dB better than the 8 bit dynamic. But the min/max readings show that the spurious signals change a lot and if we take the minimum of 41.76dBc we get a total SFDR of 47.76dB. But we still don’t know if this SFDR is related to the signal or the measurement system.
Now let’s lower the signal level to -10dBm and use averaging to get a clearer picture. The signal related spurs should drop accordingly, whereas the ADC noise should remain largely unaffected (FFT8_2M_-10dBm_avg)
The spurs from the signal generator have clearly decreased together with the signal level and are now all the more indistinguishable from the ADC noise. If we look at the SFDR measurement, the uncertainty has decreased to less than 3dB thanks to averaging and the total SFDR is now some impressive 69dB.
Now let’s find out the lowest level we can get decently accurate results by lowering the signal level step by step. With a signal level of -30dBm we are at -46dBfs what is close to the limit of the 8 bit dynamic range. No averaging this time, but the screenshot has been taken at a moment where the most prominent spurs were close to a maximum (FFT8_2M_-30dBm_max)
The signal level can still be measured quite accurately, whereas the spurious signals have decreased a lot. This could lead to the false impression that they were related to the signal, but in fact they are just part of the intermodulation ‘interference fog’ caused by the ADC nonlinearity. Since every possible ADC output has its own individual INL error, this creates a multitude of distortion and intermodulation products. Now that pretty much only the LSB of the ADC is used, the number of spurs decreases accordingly and even the SFDR reading of the automatic measurement is quite stable at some 12dBc. The total SFDR is therefore some 58.3dB, which is not consistent with the last measurement at a signal level of -10dBm. Let’s investigate that a bit further…
What does it look like with a signal level of -40dBm? (FFT8_2M_-40dBm_max)
Now there are only a couple of spurs left, but at the same time the signal level has become quite inaccurate. Automatic measurement shows an average of -36.16dBm, which is about 4dB high. Only the minimum reading is close to the true value and there is 6.7dB difference between minimum and maximum.
Let’s see if we can get better results by adding some white noise as dither. Due to the INL error of the LSB discussed earlier, a peak to peak noise level of 1 LSB isn’t enough to get accurate readings, hence a much higher level of noise of some 120mVpp had to be applied (FFT8_2M_-40dBm_Noise-18dBm)
Now the level display is almost spot-on, but we also start seeing a lot of spurious signals, as was to be expected. After all, we are now able to accurately measure a signal at -56dBfs and the signal is still almost 14dB above noise/spurs, resulting in a total SFDR of nearly 70dB.
The dither needs not be white noise, we could try a triangle wave as well. For optimum accuracy, a peak to peak level of 58mV was required and the frequency was chosen at 30Hz (FFT8_2M_-40dBm_Triangle_58mVpp)
This throws off the peak level detection of course – the automatic measurement now sees the dither instead of the weak test signal. Other than that, the signal displays correctly and the SFDR is just a little bit worse than it was with the white noise dithering.
Now let’s lower the signal level by another 10dB, thus applying -50dBm while still using the 30Hz triangle dither level of 58mVpp (FFT8_2M_-50dBm_Triangle_58mVpp)
We still get an fairly accurate level display and there’s only one spurious signal left. So we can actually quite accurately measure a signal at -66dBfs and the signal is still more than 18dB above the spur, resulting in a total SFDR of healthy 84dB. The noise floor is down at <-80dBm, so we could claim a first order dynamic range of more than 96dB – that’s crazy performance from an 8 bit system, is there no difference between textbook theory and practice after all?
Well, hopefully it could be demonstrated that the ‘process gain’ – while it has a real effect – isn’t something we can use to make an 8 bit system perform like a higher resolution one. The high number of FFT sample points reduces the bandwidth of the individual bins and lowers the quantization noise, but it cannot prevent the nonlinearity of the ADC from generating lots of unwanted mixing products that immediately rise as soon as the signal level increases and will get particularly bad as soon as the real dynamic range of the 8 bits is entered. Just a look at the screenshots for higher signal levels show that very clearly and the confusing number of spurious signals isn’t exactly my idea of accurate and reliable measurement.
Here’s a demonstration of the results for the -50dBm signal without dither (FFT8_2M_-50dBm)
The noise level is down to -88dBm and there are only two spurs left, so the picture doesn’t look too bad at first glance, but then the signal level is 6dB low and not stable – the signal variation is more than 8dB.
Finally, if averaging is used for the very same situation as above, we get the following picture(FFT8_2M_-50dBm_avg)
While the noise level is even lower at <-90dBm and the signals appear much more stable on the screen, the situation hasn’t significantly changed otherwise.