cadencii.fft.cftmdl1 C# (CSharp) Method

cftmdl1() static private method

static private cftmdl1 ( int n, double a, double w ) : void
n int
a double
w double
return void
        static void cftmdl1( int n, double* a, double* w ) {
            int j, j0, j1, j2, j3, k, m, mh;
            double wn4r, wk1r, wk1i, wk3r, wk3i;
            double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;

            mh = n >> 3;
            m = 2 * mh;
            j1 = m;
            j2 = j1 + m;
            j3 = j2 + m;
            x0r = a[0] + a[j2];
            x0i = a[1] + a[j2 + 1];
            x1r = a[0] - a[j2];
            x1i = a[1] - a[j2 + 1];
            x2r = a[j1] + a[j3];
            x2i = a[j1 + 1] + a[j3 + 1];
            x3r = a[j1] - a[j3];
            x3i = a[j1 + 1] - a[j3 + 1];
            a[0] = x0r + x2r;
            a[1] = x0i + x2i;
            a[j1] = x0r - x2r;
            a[j1 + 1] = x0i - x2i;
            a[j2] = x1r - x3i;
            a[j2 + 1] = x1i + x3r;
            a[j3] = x1r + x3i;
            a[j3 + 1] = x1i - x3r;
            wn4r = w[1];
            k = 0;
            for ( j = 2; j < mh; j += 2 ) {
                k += 4;
                wk1r = w[k];
                wk1i = w[k + 1];
                wk3r = w[k + 2];
                wk3i = w[k + 3];
                j1 = j + m;
                j2 = j1 + m;
                j3 = j2 + m;
                x0r = a[j] + a[j2];
                x0i = a[j + 1] + a[j2 + 1];
                x1r = a[j] - a[j2];
                x1i = a[j + 1] - a[j2 + 1];
                x2r = a[j1] + a[j3];
                x2i = a[j1 + 1] + a[j3 + 1];
                x3r = a[j1] - a[j3];
                x3i = a[j1 + 1] - a[j3 + 1];
                a[j] = x0r + x2r;
                a[j + 1] = x0i + x2i;
                a[j1] = x0r - x2r;
                a[j1 + 1] = x0i - x2i;
                x0r = x1r - x3i;
                x0i = x1i + x3r;
                a[j2] = wk1r * x0r - wk1i * x0i;
                a[j2 + 1] = wk1r * x0i + wk1i * x0r;
                x0r = x1r + x3i;
                x0i = x1i - x3r;
                a[j3] = wk3r * x0r + wk3i * x0i;
                a[j3 + 1] = wk3r * x0i - wk3i * x0r;
                j0 = m - j;
                j1 = j0 + m;
                j2 = j1 + m;
                j3 = j2 + m;
                x0r = a[j0] + a[j2];
                x0i = a[j0 + 1] + a[j2 + 1];
                x1r = a[j0] - a[j2];
                x1i = a[j0 + 1] - a[j2 + 1];
                x2r = a[j1] + a[j3];
                x2i = a[j1 + 1] + a[j3 + 1];
                x3r = a[j1] - a[j3];
                x3i = a[j1 + 1] - a[j3 + 1];
                a[j0] = x0r + x2r;
                a[j0 + 1] = x0i + x2i;
                a[j1] = x0r - x2r;
                a[j1 + 1] = x0i - x2i;
                x0r = x1r - x3i;
                x0i = x1i + x3r;
                a[j2] = wk1i * x0r - wk1r * x0i;
                a[j2 + 1] = wk1i * x0i + wk1r * x0r;
                x0r = x1r + x3i;
                x0i = x1i - x3r;
                a[j3] = wk3i * x0r + wk3r * x0i;
                a[j3 + 1] = wk3i * x0i - wk3r * x0r;
            }
            j0 = mh;
            j1 = j0 + m;
            j2 = j1 + m;
            j3 = j2 + m;
            x0r = a[j0] + a[j2];
            x0i = a[j0 + 1] + a[j2 + 1];
            x1r = a[j0] - a[j2];
            x1i = a[j0 + 1] - a[j2 + 1];
            x2r = a[j1] + a[j3];
            x2i = a[j1 + 1] + a[j3 + 1];
            x3r = a[j1] - a[j3];
            x3i = a[j1 + 1] - a[j3 + 1];
            a[j0] = x0r + x2r;
            a[j0 + 1] = x0i + x2i;
            a[j1] = x0r - x2r;
            a[j1 + 1] = x0i - x2i;
            x0r = x1r - x3i;
            x0i = x1i + x3r;
            a[j2] = wn4r * (x0r - x0i);
            a[j2 + 1] = wn4r * (x0i + x0r);
            x0r = x1r + x3i;
            x0i = x1i - x3r;
            a[j3] = -wn4r * (x0r + x0i);
            a[j3 + 1] = -wn4r * (x0i - x0r);
        }