Accord.Math.FourierTransform.FFT2 C# (CSharp) Method

FFT2() public static method

Two dimensional Fast Fourier Transform.

The method accepts data array of 2n size only in each dimension, where n may vary in the [1, 14] range. For example, 16x16 array is valid, but 15x15 is not.

Incorrect data length.
public static FFT2 ( Complex data, Direction direction ) : void
data Complex Data to transform.
direction Direction Transformation direction.
return void
        public static void FFT2(Complex[,] data, Direction direction)
        {
            int k = data.GetLength(0);
            int n = data.GetLength(1);

            // check data size
            if (!Tools.IsPowerOf2(k) || !Tools.IsPowerOf2(n))
                throw new ArgumentException("The matrix rows and columns must be a power of 2.");

            if (k < minLength || k > maxLength || n < minLength || n > maxLength)
                throw new ArgumentException("Incorrect data length.");

            // process rows
            var row = new Complex[n];

            for (int i = 0; i < k; i++)
            {
                // copy row
                for (int j = 0; j < row.Length; j++)
                    row[j] = data[i, j];

                // transform it
                FourierTransform.FFT(row, direction);

                // copy back
                for (int j = 0; j < row.Length; j++)
                    data[i, j] = row[j];
            }

            // process columns
            var col = new Complex[k];

            for (int j = 0; j < n; j++)
            {
                // copy column
                for (int i = 0; i < k; i++)
                    col[i] = data[i, j];

                // transform it
                FourierTransform.FFT(col, direction);

                // copy back
                for (int i = 0; i < k; i++)
                    data[i, j] = col[i];
            }
        }