109 static void Transform(
int,
int,
fcomplex*,
const fcomplex*,
int, StatusMonitor*,
bool,
int );
110 static void Transform(
int,
int,
dcomplex*,
const dcomplex*,
int, StatusMonitor*,
bool,
int );
111 static void Transform(
int,
int,
fcomplex*,
const float*, StatusMonitor*,
bool,
int );
112 static void Transform(
int,
int,
dcomplex*,
const double*, StatusMonitor*,
bool,
int );
113 static void Transform(
int,
int,
float*,
const fcomplex*, StatusMonitor*,
bool,
int );
114 static void Transform(
int,
int,
double*,
const dcomplex*, StatusMonitor*,
bool,
int );
128 template <
typename T>
188 , m_monitor( &monitor )
228 return m_rows*m_cols;
286 #define m_dft this->m_dft
287 #define m_rows this->Rows()
288 #define m_cols this->Cols()
289 #define m_monitor this->m_monitor
290 #define m_parallel this->m_parallel
291 #define m_maxProcessors this->m_maxProcessors
307 template <
typename T>
382 :
base( rows, cols, status )
406 if ( m_dft.IsEmpty() )
408 this->Transform( m_rows, m_cols, *m_dft, x,
PCL_FFT_FORWARD, m_monitor, m_parallel, m_maxProcessors );
428 if ( m_dft.IsEmpty() )
429 throw Error(
"Invalid out-of-place inverse FFT: No FFT has been performed." );
430 this->Transform( m_rows, m_cols, y, *m_dft,
PCL_FFT_BACKWARD, m_monitor, m_parallel, m_maxProcessors );
445 PCL_PRECONDITION( x.
Rows() == m_rows )
446 PCL_PRECONDITION( x.
Cols() == m_cols )
447 if ( x.
Rows() != m_rows || x.
Cols() != m_cols )
448 throw Error(
"Invalid FFT input matrix dimensions." );
466 PCL_PRECONDITION( y.
Rows() == m_rows )
467 PCL_PRECONDITION( y.
Cols() == m_cols )
468 if ( y.
Rows() != m_rows || y.
Cols() != m_cols )
469 throw Error(
"Invalid FFT output matrix dimensions." );
507 this->Transform( m_rows, m_cols, y, x, dir, m_monitor, m_parallel, m_maxProcessors );
540 template <
typename T>
619 :
base( rows, cols, status )
643 if ( m_dft.IsEmpty() )
644 m_dft =
transform( m_rows, m_cols/2 + 1 );
645 this->Transform( m_rows, m_cols, *m_dft, x, m_monitor, m_parallel, m_maxProcessors );
665 if ( m_dft.IsEmpty() )
666 throw Error(
"Invalid out-of-place inverse FFT: No FFT has been performed." );
667 this->Transform( m_rows, m_cols, y, *m_dft, m_monitor, m_parallel, m_maxProcessors );
682 PCL_PRECONDITION( x.
Rows() == m_rows )
683 PCL_PRECONDITION( x.
Cols() == m_cols )
684 if ( x.
Rows() != m_rows || x.
Cols() != m_cols )
685 throw Error(
"Invalid FFT input matrix dimensions." );
703 PCL_PRECONDITION( y.
Rows() == m_rows )
704 PCL_PRECONDITION( y.
Cols() == m_cols )
705 if ( y.
Rows() != m_rows || y.
Cols() != m_cols )
706 throw Error(
"Invalid FFT output matrix dimensions." );
737 this->Transform( m_rows, m_cols, y, x, m_monitor, m_parallel, m_maxProcessors );
768 this->Transform( m_rows, m_cols, y, x, m_monitor, m_parallel, m_maxProcessors );
792 #undef m_maxProcessors
800 #ifndef __PCL_NO_FFT2D_INSTANTIATE
809 using FFFT2D = GenericFFT2D<float>;
818 using DFFT2D = GenericFFT2D<double>;
Abstract base class of all two-dimensional fast Fourier transform classes.
int NumberOfElements() const
AbstractFFT2D(int rows, int cols, StatusMonitor &monitor)
~AbstractFFT2D() override
AbstractFFT2D(int rows, int cols)
Fast Fourier transform of 64-bit floating point complex data.
Fast Fourier transform of 64-bit floating point real data.
A simple exception with an associated error message.
Fast Fourier transform of 32-bit floating point complex data.
Fast Fourier transform of 32-bit floating point complex data.
Fast Fourier transform of 32-bit floating point real data.
Generic two-dimensional fast Fourier transform of complex data.
GenericFFT2D(int rows, int cols, StatusMonitor &status)
GenericFFT2D(int rows, int cols)
static int OptimizedLength(int n)
static int OptimizedLength(int n)
Generic dynamic matrix of arbitrary dimensions.
int Cols() const noexcept
int Rows() const noexcept
Generic two-dimensional fast Fourier transform of real data.
GenericRealFFT2D & operator()(complex *y, const scalar *x) const
~GenericRealFFT2D() override
GenericRealFFT2D(int rows, int cols)
static int OptimizedLength(int n)
GenericRealFFT2D(int rows, int cols, StatusMonitor &status)
GenericRealFFT2D & operator()(scalar *y, const complex *x) const
A process using multiple concurrent execution threads.
Fast Fourier transform of 32-bit floating point real data.
An asynchronous status monitoring system.
A complex number whose components are 64-bit floating point real numbers.
A complex number whose components are 32-bit floating point real numbers.
Array< T, A > & operator<<(Array< T, A > &x, const V &v)
Console & operator>>(Console &o, char &c)
#define PCL_FFT_BACKWARD
Indicates an inverse Fourier transform.
#define PCL_FFT_FORWARD
Indicates a Fourier transform.