The Extreme Optimization Numerical Libraries for .NET
provide a set of classes for computing
the Discrete Fourier Transform of real and complex signals.
When only very few Fourier transforms of a given length need to be computed,
the VectorT
class provides methods that can perform this computation in one line of code.
To compute the Fourier transform of a real sequence, use
FourierTransform.
This method takes as its only argument a
VectorT
that specifies the signal that is to be transformed.
It returns a VectorT
of ComplexT
that contains the transform.
The inverse transform is computed using the
InverseFourierTransformT method.
This method takes a complex
VectorT
and returns a VectorT.
Only the first n/2+1 elements are used in the computation.
The following example computes the Fourier transform of a short vector, and then computes the inverse transform. The result
is a vector identical to the first one:
var v = Vector.Create(1024, i => Math.Sin(0.05 * i));
var w = Vector.FourierTransform(v);
Dim v = Vector.Create(1024, Function(i) Math.Sin(0.05 * i))
Dim w = Vector.FourierTransform(v)
No code example is currently available or this language may not be supported.
let v = Vector.Create(1024, fun i -> Math.Sin(0.05 * float i))
let w = Vector.FourierTransform(v)
For complex signals, the VectorT of ComplexT
class has a FourierTransform
and a InverseFourierTransformT
method. Each method takes one argument: a VectorT of ComplexT,
and also returns a VectorT of ComplexT.
Multiple FFT's of the same size
In many applications, many Fourier transforms of the same length need to be calculated. To make this process more efficient,
you can use FftT objects, that represent the implementation of an
FFT of a given length. FftT objects are created through an
FftOperationsT.
The FftOperationsT is the base class for accessing
a specific set of FFT algorithms. Two FFT providers are shipped with the library: a managed provider that uses 100% managed code,
and a 'native' provider that uses hand-optimized unmanaged code and is an order of magnitude faster for longer transforms.
In order to use the native provider, the assembly containing the native FFT code for the current processor architecture must be
present. This assembly is called Extreme.NativeFft.x86.20.dll on 32 bit systems and Extreme.NativeFft.x64.20.dll
on 64 bit systems. If this assembly cannot be found, the managed provider is used instead.
You can access the two providers through the
ManagedImplementation
and NativeImplementation properties.
The managed provider has two additional properties that indicate when to switch to the native provider (if it is present).
The RealManagedThresholdLength
property specifies the shortest length of a real FFT for which the native FFT provider will be used. The default is 64.
The ComplexManagedThresholdLength
property specifies the shortest length of a complex FFT for which the native FFT provider will be used. The default is 32.
Using FFT providers, you can obtain FftT objects for
one-dimensional transforms and Fft2DT objects for
two-dimensional transforms.
The FftT
and Fft2DT
classes implement SystemIDisposable,
so you should always use a using statement
or call Dispose
once you are done using the object.