cadencii.fft.ddct C# (CSharp) Method

ddct() public static method

public static ddct ( int n, int isgn, double a, int ip, double w ) : void
n int
isgn int
a double
ip int
w double
return void
        public static void ddct( int n, int isgn, double* a, int* ip, double* w ) {
            //void makewt(int nw, int *ip, double *w);
            //void makect(int nc, int *ip, double *c);
            //void cftfsub(int n, double *a, int *ip, int nw, double *w);
            //void cftbsub(int n, double *a, int *ip, int nw, double *w);
            //void rftfsub(int n, double *a, int nc, double *c);
            //void rftbsub(int n, double *a, int nc, double *c);
            //void dctsub(int n, double *a, int nc, double *c);
            int j, nw, nc;
            double xr;

            nw = ip[0];
            if ( n > (nw << 2) ) {
                nw = n >> 2;
                makewt( nw, ip, w );
            }
            nc = ip[1];
            if ( n > nc ) {
                nc = n;
                makect( nc, ip, w + nw );
            }
            if ( isgn < 0 ) {
                xr = a[n - 1];
                for ( j = n - 2; j >= 2; j -= 2 ) {
                    a[j + 1] = a[j] - a[j - 1];
                    a[j] += a[j - 1];
                }
                a[1] = a[0] - xr;
                a[0] += xr;
                if ( n > 4 ) {
                    rftbsub( n, a, nc, w + nw );
                    cftbsub( n, a, ip, nw, w );
                } else if ( n == 4 ) {
                    cftbsub( n, a, ip, nw, w );
                }
            }
            dctsub( n, a, nc, w + nw );
            if ( isgn >= 0 ) {
                if ( n > 4 ) {
                    cftfsub( n, a, ip, nw, w );
                    rftfsub( n, a, nc, w + nw );
                } else if ( n == 4 ) {
                    cftfsub( n, a, ip, nw, w );
                }
                xr = a[0] - a[1];
                a[0] += a[1];
                for ( j = 2; j < n; j += 2 ) {
                    a[j - 1] = a[j] - a[j + 1];
                    a[j] += a[j + 1];
                }
                a[n - 1] = xr;
            }
        }