## Two-Dimensional Fast Fourier Transforms | Extreme Optimization Numerical Libraries for .NET Professional |

To compute multiple FFT's of the same length, it is more efficient to use an Fft2D

Use the static
CreateReal(Int32, Int32)
method of the
Fft2D

Similar to the 1-dimensional case, the
Fft2D

These properties can be changed up to the point where the Fft2D

The actual transform is computed by two methods: ForwardTransform and BackwardTransform. As the name implies, these methods perform the forward and backward (inverse) transform. They have seven overloads, four of which apply to real transforms.

The first overload for ForwardTransform
takes one argument: a Matrix

The second pair of overloads is similar to the first, but takes a second parameter that is used to store the result.
For the forward transform, the parameters are a Matrix

The third pair of overloads is similar to the second, but allows any matrix types for the parameters.
The forward transform takes any real and complex
Matrix

The final overload is similar to the third, but allows you to specify whether to return a one-sided or a two-sided transform. Because of symmetry, only the first N/2+1 terms of a real FFT are independent. The remaining terms are the complex conjugate of terms in the first half. A one-sided transform returns only the first N/2+1 terms of the transform, while a two-sided transform returns the full FFT matrix. This fourth overload of ForwardTransform and BackwardTransform takes a third parameter: a RealFftFormat value with possible values OneSided and TwoSided. The length of the complex matrix argument must equal N/2+1 for a one-sided transform.

var m = Matrix.Create(36, 56, (i, j) => Math.Exp(-0.1 * i) * Math.Sin(0.01 * (i * i + j * j - i * j))); var mFft = Matrix.Create<Complex<double>>(m.RowCount, m.ColumnCount); using (Fft2D<double> fft2 = Fft2D<double>.CreateReal(m.ColumnCount, m.ColumnCount)) { fft2.ForwardTransform(m, mFft); Console.WriteLine("First few terms of fft(m):"); Console.WriteLine(mFft.GetSubmatrix(0, 4, 0, 4).ToString("F4")); fft2.BackwardTransform(mFft, m); }

Use the static
CreateComplex(Int32, Int32)
method of the
Fft2D

Complex FFT's are simpler in that the Fourier transform of a complex signal is always complex also. This means that the transform can be done in place. To perform a transform in place, set the InPlace property to true.

The transformation methods,
ForwardTransform and
BackwardTransform,
have three overloads that apply to complex transforms. The first overload takes a single
complex Matrix

The second pair of overloads take two complex
Matrix

Copyright Â© 2004-2021,
Extreme Optimization. All rights reserved.

*Extreme Optimization,* *Complexity made simple*, *M#*, and *M
Sharp* are trademarks of ExoAnalytics Inc.

*Microsoft*, *Visual C#, Visual Basic, Visual Studio*, *Visual
Studio.NET*, and the *Optimized for Visual Studio* logo

are
registered trademarks of Microsoft Corporation.