Your audio measurement software probably introduces more noise into your measurements than you realize. Today's hardware usually doesn't have a high enough effective number of bits to make these software limitations noticeable. But it's getting close. It's time for software developers to embrace the efficient double precision hardware we all have sitting on our desks. Just say no to single precision accuracy. In the 1980's we said 'real programmers don't use floating point'. Those days are gone, except for some doing embedded system work.
Do you use software to generate PCM sine waves? It's all but certain to be less than perfect. Test software often uses a compiler supplied library function to calculate sine values. These library functions must balance speed against accuracy. Fortunately, today's library sine functions are pretty good. A decade or two ago, compiler libraries often used the x86 sine function, which is pretty flawed. But even so, using a modern library sine function for DFT calculation leads to easily noticeable inaccuracy. The popular FFTW library appears to avoid the problem of compiler sine function inaccuracy. FFTW is limited to double precision math, though double precision is more than enough for usual audio work. But going beyond double precision can be useful for learning and experiments.
One possible spectrum software noise test is to process a wav file of silence. REW crashes with such input, and Multitone Analyzer reports 'silence detected'.
A better test is to use a wave file that encodes a sine wave in a way that is free of noise harmonics. This is done by choosing a sample rate to sine ratio of 3:1, 4:1 or 6:1, as described here. If math isn't your thing, then just do a high precision FFT or DFT on such a file and see for yourself that they are free of harmonic noise.
So far I have found no free, well-known software that can graph a spectrum from a wav file with double precision accuracy. Spectrum Viewer for Windows can do it, but it's a simple manual spectrum viewer not suitable for the automated testing popular here.
REW is popular here, so I tested it, first using wav file sine4to1_0dB_100s.wav that reconstructs free of noise harmonics, and with a fundamental harmonic at exactly the maximum level of -3.01... dB = 10 * log (1/2). The wave file contains 4 samples, (1, 0, -1, 0) repeated over and over. REW has trouble with short files, so I expanded it to the 100 seconds. If I am interpreting the result correctly, REW is adding noise at levels -175 dB and below. That's unlikely to interfere with measurements of real hardware, but it falls short of the expected noise threshold of 53 * 6.02 = 319 dB for double precision floating point arithmetic:
Next, I tested using wav file sine5to1_0dB_100s.wav that contains a single noise harmonic. With this file, the noise harmonic is 106.37138686... dB below the fundamental, according to the FFTW double precision DFT. REW shows excellent accuracy for second harmonic value. But look at the noise it has introduced. It looks like there is false noise up to the -154 dB level:
What's going on with that? Here is SpectrumViewer for Windows showing how double precision processing reduces the introduced noise to less than -300 dB:
Next up, Multitone Analyzer using the same file sine5to1_0dB_100s.wav. Like REW, Multitone Analyzer measures the second harmonic correctly. For the introduced noise, Multitone Analyzer added noise is limited to -185 dB and below. That's better than the REW noise of -154 dB. But why can't it match the FFTW level of -300 dB? SpectrumViewer also limits noise to the expected double precision level of < -300 dB. It doesn't use FFT or any other kind of DFT. It used digital filters instead.
Do you use software to generate PCM sine waves? It's all but certain to be less than perfect. Test software often uses a compiler supplied library function to calculate sine values. These library functions must balance speed against accuracy. Fortunately, today's library sine functions are pretty good. A decade or two ago, compiler libraries often used the x86 sine function, which is pretty flawed. But even so, using a modern library sine function for DFT calculation leads to easily noticeable inaccuracy. The popular FFTW library appears to avoid the problem of compiler sine function inaccuracy. FFTW is limited to double precision math, though double precision is more than enough for usual audio work. But going beyond double precision can be useful for learning and experiments.
One possible spectrum software noise test is to process a wav file of silence. REW crashes with such input, and Multitone Analyzer reports 'silence detected'.
A better test is to use a wave file that encodes a sine wave in a way that is free of noise harmonics. This is done by choosing a sample rate to sine ratio of 3:1, 4:1 or 6:1, as described here. If math isn't your thing, then just do a high precision FFT or DFT on such a file and see for yourself that they are free of harmonic noise.
So far I have found no free, well-known software that can graph a spectrum from a wav file with double precision accuracy. Spectrum Viewer for Windows can do it, but it's a simple manual spectrum viewer not suitable for the automated testing popular here.
REW is popular here, so I tested it, first using wav file sine4to1_0dB_100s.wav that reconstructs free of noise harmonics, and with a fundamental harmonic at exactly the maximum level of -3.01... dB = 10 * log (1/2). The wave file contains 4 samples, (1, 0, -1, 0) repeated over and over. REW has trouble with short files, so I expanded it to the 100 seconds. If I am interpreting the result correctly, REW is adding noise at levels -175 dB and below. That's unlikely to interfere with measurements of real hardware, but it falls short of the expected noise threshold of 53 * 6.02 = 319 dB for double precision floating point arithmetic:
Next, I tested using wav file sine5to1_0dB_100s.wav that contains a single noise harmonic. With this file, the noise harmonic is 106.37138686... dB below the fundamental, according to the FFTW double precision DFT. REW shows excellent accuracy for second harmonic value. But look at the noise it has introduced. It looks like there is false noise up to the -154 dB level:
What's going on with that? Here is SpectrumViewer for Windows showing how double precision processing reduces the introduced noise to less than -300 dB:
Next up, Multitone Analyzer using the same file sine5to1_0dB_100s.wav. Like REW, Multitone Analyzer measures the second harmonic correctly. For the introduced noise, Multitone Analyzer added noise is limited to -185 dB and below. That's better than the REW noise of -154 dB. But why can't it match the FFTW level of -300 dB? SpectrumViewer also limits noise to the expected double precision level of < -300 dB. It doesn't use FFT or any other kind of DFT. It used digital filters instead.