template<typename T>
DFT class
An object that encapsulates the Discrete Fourier Transform (DFT).
Contents
Usage:
DFT dft( size, inverse ); // creates the object with all the data ready to start running DFTs. dft.Apply( in, out ); // computes a DFT, repeat as necessary dft.Initialize( size2, inverse ); // changes the options for the new size / direction dft.Apply( in, out ); // computes a different DFT, repeat as necessary
The template can be instantiated for T = float or T = double. Linker errors will result for other types.
The DFT is computed using either PocketFFT or FFTW, depending on compile-time configuration (see the
DIP_ENABLE_FFTW CMake configuration option).
When using FFTW, dip::maximumDFTSize is the largest length of the transform. PocketFFT does not have this limit.
Constructors, destructors, assignment and conversion operators
- DFT() defaulted
- A default-initialized
DFTobject is useless. CallInitializeto make it useful. - DFT(dip::uint size, bool inverse, dip::Option::DFTOptions options = {})
- Construct a
DFTobject, seedip::DFT::Initializefor the meaning of the parameters. Note that this is not a trivial operation. Not thread safe.
Functions
- void Apply(std::complex<T>* source, std::complex<T>* destination, T scale) const
- Apply the transform that the
DFTobject is configured for. more... - auto BufferSize() const -> dip::uint deprecated
- Returns the size of the buffer expected by
Apply. - void Destroy() private
- Frees memory
- void Initialize(dip::uint size, bool inverse, dip::Option::DFTOptions options = {})
- Re-configure a
DFTobject to the given transform size and direction. more... - auto IsAligned() const -> bool
- Returns whether the transform is configured to work on aligned buffers or not. Not meaningful when using PocketFFT.
- auto IsInplace() const -> bool
- Returns whether the transform is configured to work in place or not. Not meaningful when using PocketFFT.
- auto IsInverse() const -> bool
- Returns
trueif this represents an inverse transform,falsefor a forward transform. - auto TransformSize() const -> dip::uint
- Returns the size that the transform is configured for.
Function documentation
template<typename T>
DFT(
) defaulted
A default-initialized DFT object is useless. Call Initialize to make it useful.
template<typename T>
DFT(
dip::uint size, bool inverse, dip::Option::DFTOptions options = {})
Construct a DFT object, see dip::DFT::Initialize for the meaning of the parameters.
Note that this is not a trivial operation. Not thread safe.
template<typename T>
void
Initialize(
dip::uint size, bool inverse, dip::Option::DFTOptions options = {})
Re-configure a DFT object to the given transform size and direction.
size is the size of the transform. The two pointers passed to dip::DFT::Apply are expected to point at
buffers with this length. If inverse is true, an inverse transform will be computed.
options determines some properties for the algorithm that will compute the DFT.
dip::Option::DFTOption::InPlacemeans the input and output pointers passed todip::DFT::Applymust be the same.dip::Option::DFTOption::TrashInputmeans that the algorithm is free to overwrite the input array. Ignored when working in place.dip::Option::DFTOption::Alignedmeans that the input and output buffers are aligned to 16-bit boundaries, which can significantly improve the speed of the algorithm.
When using PocketFFT, all these options are ignored.
Note that this is not a trivial operation, planning an FFT costs time.
This operation is not thread safe.
template<typename T>
void
Apply(
std::complex<T>* source, std::complex<T>* destination, T scale) const
Apply the transform that the DFT object is configured for.
source and destination are pointers to contiguous buffers with dip::DFT::TransformSize elements.
This is the value of the size parameter of the constructor or dip::DFT::Initialize. These two pointers
can point to the same address for in-place operation; otherwise they must point to non-overlapping
regions of memory. When using FFTW, the inplace parameter to the constructor or dip::DFT::Initialize
must be true if the two pointers here are the same, or false if they are different.
The input array is not marked const. If dip::Option::DFTOption::TrashInput is given when planning,
the input array can be overwritten with intermediate data, but otherwise will be left intact.
scale is a real scalar that the output values are multiplied by. It is typically set to 1/size for
the inverse transform, and 1 for the forward transform.
template<typename T>
bool
IsInverse(
) const
Returns true if this represents an inverse transform, false for a forward transform.
template<typename T>
bool
IsInplace(
) const
Returns whether the transform is configured to work in place or not. Not meaningful when using PocketFFT.
template<typename T>
bool
IsAligned(
) const
Returns whether the transform is configured to work on aligned buffers or not. Not meaningful when using PocketFFT.
template<typename T>
dip::uint
TransformSize(
) const
Returns the size that the transform is configured for.
template<typename T>
dip::uint
BufferSize(
) const deprecated
Returns the size of the buffer expected by Apply.
template<typename T>
void
Destroy(
) private
Frees memory