Hello everybody this is my first post, I thank everyone in advance for any
help.
I am trying to calculate the SNR and THD of an MP3 player that is playing
a 1KHz tone.
I am using a digitizer card (A to D) to capture 70000 samples at 700,000
Hertz. I then use the FFTW C library to find the DFT. To calculate the THD
I am using the following formula:
THD = SQRT(FFT[200]^2 + FFT[300]^2 + FFT[400]^2 + FFT[500]^2)/FFT[100]
My bin spacing is 10 hertz (samplerate divided by samplenumber), so index
100 in the array corresponds to the 1000hertz signal and so on.
I then take the 20*Log10(THD) to get the value in dB.
For calculating the SNR I am finding the Root Sum Square of all the noise
bins by doing:
for(i=1; i<=2000; i++)
{
if(i!=100 && (i mod 100) != 0) //Find squared sum of all non
harmonics
Noise = Noise + FFT[i]^2;
y++;
}
Noise = SQRT(Noise);
Noise = Noise/y //Should I be dividing to average?
SNR = FFT[100]/Noise;
SNR = 20*log10(SNR);
This is the psuedo code of what I'm doing, does this seem right?
Are these the correct methods to find THD and SNR? For the SNR calculation
should I divide the summation by the total number of noise bins (variable
y) added together in the for loop?