AcoustID.Audio.LomontFFTService.RealFFT C# (CSharp) Метод

RealFFT() публичный Метод

Computes the real FFT.
public RealFFT ( double data ) : void
data double The audio data (time domain).
Результат void
        public void RealFFT(double[] data)
        {
            FFT(data); // do packed FFT

            int n = data.Length; // number of real input points, which is 1/2 the complex length
            double temp;

            double theta = 2 * Math.PI / n;
            double wpr = Math.Cos(theta);
            double wpi = Math.Sin(theta);
            double wjr = wpr;
            double wji = wpi;
            for (int j = 1; j <= n / 4; ++j)
            {
                int k = n / 2 - j;
                double tnr = data[2 * k];
                double tni = data[2 * k + 1];
                double tjr = data[2 * j];
                double tji = data[2 * j + 1];

                double e = (tjr + tnr);
                double f = (tji - tni);
                double a = (tjr - tnr) * wji;
                double d = (tji + tni) * wji;
                double b = (tji + tni) * wjr;
                double c = (tjr - tnr) * wjr;

                // compute entry y[j]
                data[2 * j] = 0.5 * (e + (a + b));
                data[2 * j + 1] = 0.5 * (f - (c - d));

                // compute entry y[k]
                data[2 * k] = 0.5 * (e - (a + b));
                data[2 * k + 1] = 0.5 * ((-c + d) - f);

                temp = wjr;
                wjr = wjr * wpr - wji * wpi;
                wji = temp * wpi + wji * wpr;
            }

            // compute final y0 and y_{N/2} ones, place into data[0] and data[1]
            temp = data[0];
            data[0] += data[1];
            data[1] = temp - data[1];
        }