I inherited the following FFT code to get the magnitude frequency response of a sample window. I understand what fft() does. What I don't understand are the lines marked with a "???". What do they do? In particular the "real[i]/real.length/2" portion and the multiplication and division by 1000 portion.
double[] real = new double[_FFTSize];
double[] imaginary = new double[_FFTSize];
loadDataIntoReal(real);
fft(real, imaginary); // in-place FFT
for (int i = 0; i < spectrum.length; i++)
{
double reValue =((int)((real[i]/(real.length/2))*1000)/1000.0); // ???
double imValue =((int)((imaginary[i]/(real.length/2))*1000)/1000.0); // ???
double value = Math.sqrt(reValue * reValue + imValue * imValue);
spectrum[i] = value;
}
Each line seems to have a redundant multiplication and division by 1000. However, if I change the code to be the following, then I get slightly different floating-point results, so I guess they must provide some sort of precision.
double reValue =(real[i]/(real.length/2));
double imValue =(imaginary[i]/(real.length/2));