73 static void Transform(
int,
int,
fcomplex*,
const fcomplex*,
int, StatusMonitor*,
bool,
int );
74 static void Transform(
int,
int,
dcomplex*,
const dcomplex*,
int, StatusMonitor*,
bool,
int );
75 static void Transform(
int,
int,
fcomplex*,
const float*, StatusMonitor*,
bool,
int );
76 static void Transform(
int,
int,
dcomplex*,
const double*, StatusMonitor*,
bool,
int );
77 static void InverseTransform(
int,
int,
float*,
const fcomplex*, StatusMonitor*,
bool,
int );
78 static void InverseTransform(
int,
int,
double*,
const dcomplex*, StatusMonitor*,
bool,
int );
152 , m_monitor( &monitor )
192 return m_rows*m_cols;
250 #define m_dft this->m_dft
251 #define m_rows this->Rows()
252 #define m_cols this->Cols()
253 #define m_monitor this->m_monitor
254 #define m_parallel this->m_parallel
255 #define m_maxProcessors this->m_maxProcessors
271 template <
typename T>
346 :
base( rows, cols, status )
370 if ( m_dft.IsEmpty() )
372 this->Transform( m_rows, m_cols, *m_dft, x,
PCL_FFT_FORWARD, m_monitor, m_parallel, m_maxProcessors );
392 if ( m_dft.IsEmpty() )
393 throw Error(
"Invalid out-of-place inverse FFT: No FFT has been performed." );
394 this->Transform( m_rows, m_cols, y, *m_dft,
PCL_FFT_BACKWARD, m_monitor, m_parallel, m_maxProcessors );
409 PCL_PRECONDITION( x.
Rows() == m_rows )
410 PCL_PRECONDITION( x.
Cols() == m_cols )
411 if ( x.
Rows() != m_rows || x.
Cols() != m_cols )
412 throw Error(
"Invalid FFT input matrix dimensions." );
430 PCL_PRECONDITION( y.
Rows() == m_rows )
431 PCL_PRECONDITION( y.
Cols() == m_cols )
432 if ( y.
Rows() != m_rows || y.
Cols() != m_cols )
433 throw Error(
"Invalid FFT output matrix dimensions." );
471 this->Transform( m_rows, m_cols, y, x, dir, m_monitor, m_parallel, m_maxProcessors );
504 template <
typename T>
583 :
base( rows, cols, status )
607 if ( m_dft.IsEmpty() )
608 m_dft =
transform( m_rows, m_cols/2 + 1 );
609 this->Transform( m_rows, m_cols, *m_dft, x, m_monitor, m_parallel, m_maxProcessors );
629 if ( m_dft.IsEmpty() )
630 throw Error(
"Invalid out-of-place inverse FFT: No FFT has been performed." );
631 this->InverseTransform( m_rows, m_cols, y, *m_dft, m_monitor, m_parallel, m_maxProcessors );
646 PCL_PRECONDITION( x.
Rows() == m_rows )
647 PCL_PRECONDITION( x.
Cols() == m_cols )
648 if ( x.
Rows() != m_rows || x.
Cols() != m_cols )
649 throw Error(
"Invalid FFT input matrix dimensions." );
667 PCL_PRECONDITION( y.
Rows() == m_rows )
668 PCL_PRECONDITION( y.
Cols() == m_cols )
669 if ( y.
Rows() != m_rows || y.
Cols() != m_cols )
670 throw Error(
"Invalid FFT output matrix dimensions." );
701 this->Transform( m_rows, m_cols, y, x, m_monitor, m_parallel, m_maxProcessors );
732 this->InverseTransform( m_rows, m_cols, y, x, m_monitor, m_parallel, m_maxProcessors );
756 #undef m_maxProcessors
764 #ifndef __PCL_NO_FFT2D_INSTANTIATE
773 using FFFT2D = GenericFFT2D<float>;
782 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.