isce3  0.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages
Public Member Functions | List of all members
isce3::signal::Signal< class > Class Template Reference

A class to handle 2D FFT or 1D FFT in range or azimuth directions. More...

#include <Signal.h>

Public Member Functions

 Signal ()
 Default constructor. More...
 
 Signal (int nthreads)
 Constructor with number of threads. More...
 
void fftPlanForward (std::valarray< std::complex< T >> &input, std::valarray< std::complex< T >> &output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist, int sign)
 initiate forward FFTW3 plan for a block of complex data input parameters follow FFTW3 interface for fftw_plan_many_dft More...
 
void fftPlanForward (std::complex< T > *input, std::complex< T > *output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist, int sign)
 initiate forward FFTW3 plan for a block of complex data input parameters follow FFTW3 interface for fftw_plan_many_dft More...
 
void fftPlanForward (std::valarray< T > &input, std::valarray< std::complex< T >> &output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
 initiate forward FFTW3 plan for a block of real data input parameters follow FFTW3 interface for fftw_plan_many_dft_r2c More...
 
void fftPlanForward (T *input, std::complex< T > *output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
 initiate forward FFTW3 plan for a block of real data input parameters follow FFTW3 interface for fftw_plan_many_dft_r2c More...
 
void fftPlanBackward (std::valarray< std::complex< T >> &input, std::valarray< std::complex< T >> &output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist, int sign)
 initiate iverse FFTW3 plan for a block of spectrum input parameters follow FFTW3 interface for fftw_plan_many_dft More...
 
void fftPlanBackward (std::complex< T > *input, std::complex< T > *output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist, int sign)
 initiate iverse FFTW3 plan for a block of spectrum input parameters follow FFTW3 interface for fftw_plan_many_dft More...
 
void fftPlanBackward (std::valarray< std::complex< T >> &input, std::valarray< T > &output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
 initiate iverse FFTW3 plan for a block of spectrum to be transformed to real data input parameters follow FFTW3 interface for fftw_plan_many_dft_c2r More...
 
void fftPlanBackward (std::complex< T > *input, T *output, int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
 initiate iverse FFTW3 plan for a block of spectrum to be transformed to real data input parameters follow FFTW3 interface for fftw_plan_many_dft_c2r More...
 
void forward (std::valarray< std::complex< T >> &input, std::valarray< std::complex< T >> &output)
 forward transform More...
 
void forward (std::complex< T > *input, std::complex< T > *output)
 forward transform More...
 
void forward (std::valarray< T > &input, std::valarray< std::complex< T >> &output)
 forward transform More...
 
void forward (T *input, std::complex< T > *output)
 forward transform More...
 
void inverse (std::valarray< std::complex< T >> &input, std::valarray< std::complex< T >> &output)
 inverse transform More...
 
void inverse (std::complex< T > *input, std::complex< T > *output)
 inverse transform More...
 
void inverse (std::valarray< std::complex< T >> &input, std::valarray< T > &output)
 inverse transform More...
 
void inverse (std::complex< T > *input, T *output)
 inverse transform More...
 
void forwardRangeFFT (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in range direction for a block of complex data. More...
 
void forwardRangeFFT (std::complex< T > *signal, std::complex< T > *spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in range direction for a block of complex data. More...
 
void forwardRangeFFT (std::valarray< T > &signal, std::valarray< std::complex< T >> &spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in range direction for a block of real data. More...
 
void forwardRangeFFT (T *signal, std::complex< T > *spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in range direction for a block of real data. More...
 
void forwardAzimuthFFT (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in azimuth direction for a block of complex data. More...
 
void forwardAzimuthFFT (std::complex< T > *signal, std::complex< T > *spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in azimuth direction for a block of complex data. More...
 
void forwardAzimuthFFT (std::valarray< T > &signal, std::valarray< std::complex< T >> &spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in azimuth direction for a block of real data. More...
 
void forwardAzimuthFFT (T *signal, std::complex< T > *spectrum, int ncolumns, int nrows)
 initiate plan for forward FFT in azimuth direction for a block of real data. More...
 
void forward2DFFT (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &spectrum, int ncolumns, int nrows)
 initiate plan for forward two imensional FFT for a block of complex data More...
 
void forward2DFFT (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &spectrum, int incolumns, int inrows, int oncolumns, int onrows)
 initiate plan for forward two imensional FFT for a block of complex data More...
 
void forward2DFFT (std::complex< T > *signal, std::complex< T > *spectrum, int ncolumns, int nrows)
 initiate plan for forward two imensional FFT for a block of complex data More...
 
void forward2DFFT (std::complex< T > *signal, std::complex< T > *spectrum, int incolumns, int inrows, int oncolumns, int onrows)
 initiate plan for forward two imensional FFT for a block of complex data More...
 
void forward2DFFT (std::valarray< T > &signal, std::valarray< std::complex< T >> &spectrum, int ncolumns, int nrows)
 initiate plan for forward two imensional FFT for a block of real data More...
 
void forward2DFFT (std::valarray< T > &signal, std::valarray< std::complex< T >> &spectrum, int incolumns, int inrows, int oncolumns, int onrows)
 initiate plan for forward two imensional FFT for a block of real data More...
 
void forward2DFFT (T *signal, std::complex< T > *spectrum, int ncolumns, int nrows)
 initiate plan for forward two imensional FFT for a block of real data More...
 
void forward2DFFT (T *signal, std::complex< T > *spectrum, int incolumns, int inrows, int oncolumns, int onrows)
 initiate plan for forward two imensional FFT for a block of real data More...
 
void inverseRangeFFT (std::valarray< std::complex< T >> &spectrum, std::valarray< std::complex< T >> &signal, int ncolumns, int nrows)
 initiate plan for backward FFT in range direction for a block of data More...
 
void inverseRangeFFT (std::complex< T > *spectrum, std::complex< T > *signal, int ncolumns, int nrows)
 initiate plan for backward FFT in range direction for a block of data More...
 
void inverseRangeFFT (std::valarray< std::complex< T >> &spectrum, std::valarray< T > &signal, int ncolumns, int nrows)
 initiate plan for backward FFT in range direction for a block of data More...
 
void inverseRangeFFT (std::complex< T > *spectrum, T *signal, int ncolumns, int nrows)
 initiate plan for backward FFT in range direction for a block of data More...
 
void inverseAzimuthFFT (std::valarray< std::complex< T >> &spectrum, std::valarray< std::complex< T >> &signal, int ncolumns, int nrows)
 initiate plan for inverse FFT in azimuth direction for a block of data More...
 
void inverseAzimuthFFT (std::complex< T > *spectrum, std::complex< T > *signal, int ncolumns, int nrows)
 initiate plan for inverse FFT in azimuth direction for a block of data More...
 
void inverseAzimuthFFT (std::valarray< std::complex< T >> &spectrum, std::valarray< T > &signal, int ncolumns, int nrows)
 initiate plan for inverse FFT in azimuth direction for a block of data More...
 
void inverseAzimuthFFT (std::complex< T > *spectrum, T *signal, int ncolumns, int nrows)
 initiate plan for inverse FFT in azimuth direction for a block of data More...
 
void inverse2DFFT (std::valarray< std::complex< T >> &spectrum, std::valarray< std::complex< T >> &signal, int ncolumns, int nrows)
 initiate plan for inverse two dimensional FFT for a block of data More...
 
void inverse2DFFT (std::complex< T > *spectrum, std::complex< T > *signal, int ncolumns, int nrows)
 initiate plan for inverse two dimensional FFT for a block of data More...
 
void inverse2DFFT (std::valarray< std::complex< T >> &spectrum, std::valarray< T > &signal, int ncolumns, int nrows)
 initiate plan for inverse two dimensional FFT for a block of data More...
 
void inverse2DFFT (std::complex< T > *spectrum, T *signal, int ncolumns, int nrows)
 initiate plan for inverse two dimensional FFT for a block of data More...
 
void upsample (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &signalOversampled, int rows, int fft_size, int oversampleFactor)
 upsampling a block of data in range direction More...
 
void upsample (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &signalOversampled, int rows, int fft_size, int oversampleFactor, std::valarray< std::complex< T >> shiftImpact)
 upsampling a block of data in range direction and shifting the upsampled signal by a constant. More...
 
void upsample2D (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &signalOversampled, int oversampleFactor)
 2D upsampling a block of 2D data More...
 
void upsample2D (std::valarray< std::complex< T >> &signal, std::valarray< std::complex< T >> &signalOversampled, int oversampleFactor, std::valarray< std::complex< T >> &shiftImpact)
 2D upsampling a block of 2D data and shifting the upsampled signal by a constant. More...
 
void upsample2D (std::complex< T > *signal, std::complex< T > *signalOversampled, int oversampleFactor)
 2D upsampling a block of 2D data More...
 
void upsample2D (std::complex< T > *signal, std::complex< T > *signalOversampled, int oversampleFactor, std::complex< T > *shiftImpact)
 2D upsampling a block of 2D data and shifting the upsampled signal by a constant. More...
 
void nextPowerOfTwo (size_t N, size_t &fftLength)
 next power of two More...
 
void _fwd_configure (int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
 save FFT plan parameters More...
 
void _rev_configure (int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
 save FFT plan parameters More...
 
void _fwd_configureRangeFFT (int ncolumns, int nrows)
 determine the required parameters for setting range FFT plans More...
 
void _fwd_configureAzimuthFFT (int ncolumns, int nrows)
 determine the required parameters for setting azimuth FFT plans More...
 
void _fwd_configure2DFFT (int incolumns, int inrows, int oncolumns, int onrows)
 determine the required parameters for setting 2D FFT plans More...
 
void _rev_configureRangeFFT (int ncolumns, int nrows)
 determine the required parameters for setting range FFT plans More...
 
void _rev_configureAzimuthFFT (int ncolumns, int nrows)
 determine the required parameters for setting azimuth FFT plans More...
 
void _rev_configure2DFFT (int ncolumns, int nrows)
 determine the required parameters for setting 2D FFT plans More...
 

Detailed Description

template<class>
class isce3::signal::Signal< class >

A class to handle 2D FFT or 1D FFT in range or azimuth directions.

Constructor & Destructor Documentation

template<class T >
isce3::signal::Signal< T >::Signal ( )

Default constructor.

template<class T >
isce3::signal::Signal< T >::Signal ( int  nthreads)

Constructor with number of threads.

This uses the Multi-threaded FFTW

Member Function Documentation

template<class T >
void isce3::signal::Signal< T >::_fwd_configure ( int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist 
)
inline

save FFT plan parameters

Parameters
[in]rankdataset number of dimensions
[in]nsize of each dimension (array)
[in]howmanynumber of forward FFT
[in]inembedlayout of the input container
[in]istridepacking of the input data
[in]idistnumber of elements between two input dataset
[in]onembedlayout of the output container
[in]ostridepacking of the output data
[in]odistnumber of elements between two output dataset
template<class T >
void isce3::signal::Signal< T >::_fwd_configure2DFFT ( int  incolumns,
int  inrows,
int  oncolumns,
int  onrows 
)
inline

determine the required parameters for setting 2D FFT plans

Parameters
[in]incolumnsnumber of columns
[in]inrowsnumber of rows
[in]oncolumnsnumber of columns in output container
[in]onrowsnumber of rows in output container
template<class T >
void isce3::signal::Signal< T >::_fwd_configureAzimuthFFT ( int  ncolumns,
int  nrows 
)
inline

determine the required parameters for setting azimuth FFT plans

Parameters
[in]ncolumnsnumber of columns
[in]nrowsnumber of rows
template<class T >
void isce3::signal::Signal< T >::_fwd_configureRangeFFT ( int  ncolumns,
int  nrows 
)
inline

determine the required parameters for setting range FFT plans

Parameters
[in]ncolumnsnumber of columns
[in]nrowsnumber of rows
template<class T >
void isce3::signal::Signal< T >::_rev_configure ( int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist 
)
inline

save FFT plan parameters

Parameters
[in]rankdataset number of dimensions
[in]nsize of each dimension (array)
[in]howmanynumber of forward FFT
[in]inembedlayout of the input container
[in]istridepacking of the input data
[in]idistnumber of elements between two input dataset
[in]onembedlayout of the output container
[in]ostridepacking of the output data
[in]odistnumber of elements between two output dataset
template<class T >
void isce3::signal::Signal< T >::_rev_configure2DFFT ( int  ncolumns,
int  nrows 
)
inline

determine the required parameters for setting 2D FFT plans

Parameters
[in]ncolumnsnumber of columns
[in]nrowsnumber of rows
template<class T >
void isce3::signal::Signal< T >::_rev_configureAzimuthFFT ( int  ncolumns,
int  nrows 
)
inline

determine the required parameters for setting azimuth FFT plans

Parameters
[in]ncolumnsnumber of columns
[in]nrowsnumber of rows
template<class T >
void isce3::signal::Signal< T >::_rev_configureRangeFFT ( int  ncolumns,
int  nrows 
)
inline

determine the required parameters for setting range FFT plans

Parameters
[in]ncolumnsnumber of columns
[in]nrowsnumber of rows
template<class T >
void isce3::signal::Signal< T >::fftPlanBackward ( std::valarray< std::complex< T >> &  input,
std::valarray< std::complex< T >> &  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist,
int  sign 
)

initiate iverse FFTW3 plan for a block of spectrum input parameters follow FFTW3 interface for fftw_plan_many_dft

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rank
[in]size
[in]howmany
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
[in]sign
template<class T >
void isce3::signal::Signal< T >::fftPlanBackward ( std::complex< T > *  input,
std::complex< T > *  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist,
int  sign 
)

initiate iverse FFTW3 plan for a block of spectrum input parameters follow FFTW3 interface for fftw_plan_many_dft

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rank
[in]size
[in]howmany
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
[in]sign
template<class T >
void isce3::signal::Signal< T >::fftPlanBackward ( std::valarray< std::complex< T >> &  input,
std::valarray< T > &  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist 
)

initiate iverse FFTW3 plan for a block of spectrum to be transformed to real data input parameters follow FFTW3 interface for fftw_plan_many_dft_c2r

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rank
[in]size
[in]howmany
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
template<class T >
void isce3::signal::Signal< T >::fftPlanBackward ( std::complex< T > *  input,
T *  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist 
)

initiate iverse FFTW3 plan for a block of spectrum to be transformed to real data input parameters follow FFTW3 interface for fftw_plan_many_dft_c2r

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rank
[in]size
[in]howmany
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
template<class T >
void isce3::signal::Signal< T >::fftPlanForward ( std::valarray< std::complex< T >> &  input,
std::valarray< std::complex< T >> &  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist,
int  sign 
)

initiate forward FFTW3 plan for a block of complex data input parameters follow FFTW3 interface for fftw_plan_many_dft

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rankrank of the transform (1: for one dimensional and 2: for two dimensional transform)
[in]sizesize of each transform (ncols: for range FFT, nrows: for azimuth FFT)
[in]howmanynumber of FFT transforms for a block of data (nrows: for range FFT, ncols: for azimuth FFT)
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
[in]sign
template<class T >
void isce3::signal::Signal< T >::fftPlanForward ( std::complex< T > *  input,
std::complex< T > *  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist,
int  sign 
)

initiate forward FFTW3 plan for a block of complex data input parameters follow FFTW3 interface for fftw_plan_many_dft

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rankrank of the transform (1: for one dimensional and 2: for two dimensional transform)
[in]sizesize of each transform (ncols: for range FFT, nrows: for azimuth FFT)
[in]howmanynumber of FFT transforms for a block of data (nrows: for range FFT, ncols: for azimuth FFT)
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
[in]sign
template<class T >
void isce3::signal::Signal< T >::fftPlanForward ( std::valarray< T > &  input,
std::valarray< std::complex< T >> &  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist 
)

initiate forward FFTW3 plan for a block of real data input parameters follow FFTW3 interface for fftw_plan_many_dft_r2c

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rankrank of the transform (1: for one dimensional and 2: for two dimensional transform)
[in]sizesize of each transform (ncols: for range FFT, nrows: for azimuth FFT)
[in]howmanynumber of FFT transforms for a block of data (nrows: for range FFT, ncols: for azimuth FFT)
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
template<class T >
void isce3::signal::Signal< T >::fftPlanForward ( T *  input,
std::complex< T > *  output,
int  rank,
int *  n,
int  howmany,
int *  inembed,
int  istride,
int  idist,
int *  onembed,
int  ostride,
int  odist 
)

initiate forward FFTW3 plan for a block of real data input parameters follow FFTW3 interface for fftw_plan_many_dft_r2c

Parameters
[in]inputblock of data
[out]outputblock of data
[in]rankrank of the transform (1: for one dimensional and 2: for two dimensional transform)
[in]sizesize of each transform (ncols: for range FFT, nrows: for azimuth FFT)
[in]howmanynumber of FFT transforms for a block of data (nrows: for range FFT, ncols: for azimuth FFT)
[in]inembed
[in]istride
[in]idist
[in]onembed
[in]ostride
[in]odist
template<class T >
void isce3::signal::Signal< T >::forward ( std::valarray< std::complex< T >> &  input,
std::valarray< std::complex< T >> &  output 
)

forward transform

unnormalized forward transform

Parameters
[in]inputblock of data
[out]outputblock of spectrum
template<class T >
void isce3::signal::Signal< T >::forward ( std::complex< T > *  input,
std::complex< T > *  output 
)

forward transform

unnormalized forward transform

Parameters
[in]inputblock of data
[out]outputblock of spectrum
template<class T >
void isce3::signal::Signal< T >::forward ( std::valarray< T > &  input,
std::valarray< std::complex< T >> &  output 
)

forward transform

unnormalized forward transform

Parameters
[in]inputblock of data
[out]outputblock of spectrum
template<class T >
void isce3::signal::Signal< T >::forward ( T *  input,
std::complex< T > *  output 
)

forward transform

unnormalized forward transform

Parameters
[in]inputblock of data
[out]outputblock of spectrum
template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward two imensional FFT for a block of complex data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  incolumns,
int  inrows,
int  oncolumns,
int  onrows 
)

initiate plan for forward two imensional FFT for a block of complex data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]incolumnsnumber of columns of the block of data
[in]inrowsnumber of rows of the block of data
[in]oncolumnsnumber of columns of the block of data in output container
[in]onrowsnumber of rows of the block of data in output container

If doing an out-of-place FFT, the output can be stored in a container whose number of columns and rows could be different than the input. This would be necessary for instance in the case of 2D upsampling

template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( std::complex< T > *  signal,
std::complex< T > *  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward two imensional FFT for a block of complex data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( std::complex< T > *  signal,
std::complex< T > *  spectrum,
int  incolumns,
int  inrows,
int  oncolumns,
int  onrows 
)

initiate plan for forward two imensional FFT for a block of complex data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]incolumnsnumber of columns of the block of data in input container
[in]inrowsnumber of rows of the block of data in input container
[in]oncolumnsnumber of columns of the block of data in output container
[in]oupnrowsnumber of rows of the block of data in output container

If doing an out-of-place FFT, the output can be stored in a container whose number of columns and rows could be different than the input. This would be necessary for instance in the case of 2D upsampling

template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( std::valarray< T > &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward two imensional FFT for a block of real data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( std::valarray< T > &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  incolumns,
int  inrows,
int  oncolumns,
int  onrows 
)

initiate plan for forward two imensional FFT for a block of real data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]incolumnsnumber of columns of the block of data in input container
[in]inrowsnumber of rows of the block of data in input container
[in]oncolumnsnumber of columns of the block of data in output container
[in]oupnrowsnumber of rows of the block of data in output container

If doing an out-of-place FFT, the output can be stored in a container whose number of columns and rows could be different than the input. This would be necessary for instance in the case of 2D upsampling

template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( T *  signal,
std::complex< T > *  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward two imensional FFT for a block of real data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forward2DFFT ( T *  signal,
std::complex< T > *  spectrum,
int  incolumns,
int  inrows,
int  oncolumns,
int  onrows 
)

initiate plan for forward two imensional FFT for a block of real data

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]incolumnsnumber of columns of the block of data in input container
[in]inrowsnumber of rows of the block of data in input container
[in]oncolumnsnumber of columns of the block of data in output container
[in]oupnrowsnumber of rows of the block of data in output container

If doing an out-of-place FFT, the output can be stored in a container whose number of columns and rows could be different than the input. This would be necessary for instance in the case of 2D upsampling.

template<class T >
void isce3::signal::Signal< T >::forwardAzimuthFFT ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in azimuth direction for a block of complex data.

azimuth direction is assumed to be in the direction of the rows of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forwardAzimuthFFT ( std::complex< T > *  signal,
std::complex< T > *  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in azimuth direction for a block of complex data.

azimuth direction is assumed to be in the direction of the rows of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forwardAzimuthFFT ( std::valarray< T > &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in azimuth direction for a block of real data.

azimuth direction is assumed to be in the direction of the rows of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forwardAzimuthFFT ( T *  signal,
std::complex< T > *  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in azimuth direction for a block of real data.

azimuth direction is assumed to be in the direction of the rows of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forwardRangeFFT ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in range direction for a block of complex data.

range direction is assumed to be in the direction of the columns of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forwardRangeFFT ( std::complex< T > *  signal,
std::complex< T > *  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in range direction for a block of complex data.

range direction is assumed to be in the direction of the columns of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forwardRangeFFT ( std::valarray< T > &  signal,
std::valarray< std::complex< T >> &  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in range direction for a block of real data.

range direction is assumed to be in the direction of the columns of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::forwardRangeFFT ( T *  signal,
std::complex< T > *  spectrum,
int  ncolumns,
int  nrows 
)

initiate plan for forward FFT in range direction for a block of real data.

range direction is assumed to be in the direction of the columns of the array.

Parameters
[in]signalinput block of data
[out]spectrumoutput block of spectrum
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverse ( std::valarray< std::complex< T >> &  input,
std::valarray< std::complex< T >> &  output 
)

inverse transform

unnormalized inverse transform.

Note that since the FFTW library does not normalize the DFT computations, computing a forward followed by a backward transform (or vice versa) results in the original array scaled by length of fft.

Parameters
[in]inputblock of spectrum
[out]outputblock of data
template<class T >
void isce3::signal::Signal< T >::inverse ( std::complex< T > *  input,
std::complex< T > *  output 
)

inverse transform

unnormalized inverse transform.

template<class T >
void isce3::signal::Signal< T >::inverse ( std::valarray< std::complex< T >> &  input,
std::valarray< T > &  output 
)

inverse transform

unnormalized inverse transform.

template<class T >
void isce3::signal::Signal< T >::inverse ( std::complex< T > *  input,
T *  output 
)

inverse transform

unnormalized inverse transform.

template<class T >
void isce3::signal::Signal< T >::inverse2DFFT ( std::valarray< std::complex< T >> &  spectrum,
std::valarray< std::complex< T >> &  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse two dimensional FFT for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverse2DFFT ( std::complex< T > *  spectrum,
std::complex< T > *  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse two dimensional FFT for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverse2DFFT ( std::valarray< std::complex< T >> &  spectrum,
std::valarray< T > &  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse two dimensional FFT for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverse2DFFT ( std::complex< T > *  spectrum,
T *  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse two dimensional FFT for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseAzimuthFFT ( std::valarray< std::complex< T >> &  spectrum,
std::valarray< std::complex< T >> &  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse FFT in azimuth direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseAzimuthFFT ( std::complex< T > *  spectrum,
std::complex< T > *  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse FFT in azimuth direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseAzimuthFFT ( std::valarray< std::complex< T >> &  spectrum,
std::valarray< T > &  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse FFT in azimuth direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseAzimuthFFT ( std::complex< T > *  spectrum,
T *  signal,
int  ncolumns,
int  nrows 
)

initiate plan for inverse FFT in azimuth direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseRangeFFT ( std::valarray< std::complex< T >> &  spectrum,
std::valarray< std::complex< T >> &  signal,
int  ncolumns,
int  nrows 
)

initiate plan for backward FFT in range direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseRangeFFT ( std::complex< T > *  spectrum,
std::complex< T > *  signal,
int  ncolumns,
int  nrows 
)

initiate plan for backward FFT in range direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseRangeFFT ( std::valarray< std::complex< T >> &  spectrum,
std::valarray< T > &  signal,
int  ncolumns,
int  nrows 
)

initiate plan for backward FFT in range direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::inverseRangeFFT ( std::complex< T > *  spectrum,
T *  signal,
int  ncolumns,
int  nrows 
)

initiate plan for backward FFT in range direction for a block of data

Parameters
[in]spectruminput block of spectrum
[out]signaloutput block of data
[in]ncolumnsnumber of columns of the block of data
[in]nrowsnumber of rows of the block of data
template<class T >
void isce3::signal::Signal< T >::nextPowerOfTwo ( size_t  N,
size_t &  fftLength 
)
inline

next power of two

Parameters
[in]Nthe actual length of a signal
[in]fftLengthnext power of two
template<class T >
void isce3::signal::Signal< T >::upsample ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  signalUpsampled,
int  rows,
int  fft_size,
int  upsampleFactor 
)

upsampling a block of data in range direction

Parameters
[in]signalinput block of data
[in]signalUpsampledoutput block of oversampled data
[in]rowsnumber of rows of the block of input and upsampled data
[in]fft_sizenumber of columns of the block of input data
[in]upsampleFactorupsampling factor
template<class T >
void isce3::signal::Signal< T >::upsample ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  signalUpsampled,
int  rows,
int  fft_size,
int  upsampleFactor,
std::valarray< std::complex< T >>  shiftImpact 
)

upsampling a block of data in range direction and shifting the upsampled signal by a constant.

The shift is applied by an inout linear phase term in frequency domain.

Parameters
[in]signalinput block of data
[out]signalUpsampledoutput block of oversampled data
[in]rowsnumber of rows of the block of input and upsampled data
[in]fft_sizenumber of columns of the block of input data
[in]upsampleFactorupsampling factor
[out]shiftImpacta linear phase term equivalent to a constant shift in time domain
template<class T >
void isce3::signal::Signal< T >::upsample2D ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  signalUpsampled,
int  oversampleFactor 
)

2D upsampling a block of 2D data

Parameters
[in]signalinput block of 2D data
[out]signalUpsampledoutput block of oversampled data
[in]upsampleFactorupsampling factor

When doing out-of-place upsampling, i.e., when the container of the input to upsample is different to the one that will contain the upsampled data, the FFT forward plan must be set to out-of-place (with the input and output containers) and the FFT reverse plan to in-place (with the output container). In both case (in-place or out-of-place 2D upsampling), it is the user responsability to provide an output container that is padded (for in-place) or filled (for out-of-place) with zeros.

template<class T >
void isce3::signal::Signal< T >::upsample2D ( std::valarray< std::complex< T >> &  signal,
std::valarray< std::complex< T >> &  signalUpsampled,
int  upsampleFactor,
std::valarray< std::complex< T >> &  shiftImpact 
)

2D upsampling a block of 2D data and shifting the upsampled signal by a constant.

The shift is applied by an inout linear phase term in frequency domain.

Parameters
[in]signalinput block of 2D data
[out]signalUpsampledoutput block of oversampled data
[in]upsampleFactorupsampling factor
[in]shiftImpacta linear phase term equivalent to a constant shift in time domain

When doing out-of-place upsampling, i.e., when the container of the input to upsample is different to the one that will contain the upsampled data, the FFT forward plan must be set to out-of-place (with the input and output containers) and the FFT reverse plan to in-place (with the output container). In both case (in-place or out-of-place 2D upsampling), it is the user responsability to provide an output container that is padded (for in-place) or filled (for out-of-place) with zeros.

template<class T >
void isce3::signal::Signal< T >::upsample2D ( std::complex< T > *  signal,
std::complex< T > *  signalUpsampled,
int  upsampleFactor 
)

2D upsampling a block of 2D data

Parameters
[in]signalinput block of 2D data
[out]signalUpsampledoutput block of oversampled data
[in]upsampleFactorupsampling factor

When doing out-of-place upsampling, i.e., when the container of the input to upsample is different to the one that will contain the upsampled data, the FFT forward plan must be set to out-of-place (with the input and output containers) and the FFT reverse plan to in-place (with the output container). In both case (in-place or out-of-place 2D upsampling), it is the user responsability to provide an output container that is padded (for in-place) or filled (for out-of-place) with zeros.

template<class T >
void isce3::signal::Signal< T >::upsample2D ( std::complex< T > *  signal,
std::complex< T > *  signalUpsampled,
int  upsampleFactor,
std::complex< T > *  shiftImpact 
)

2D upsampling a block of 2D data and shifting the upsampled signal by a constant.

The shift is applied by an inout linear phase term in frequency domain.

Parameters
[in]signalinput block of 2D data
[out]signalUpsampledoutput block of oversampled data
[in]upsampleFactorupsampling factor
[in]shiftImpacta linear phase term equivalent to a constant shift in time domain

When doing out-of-place upsampling, i.e., when the container of the input to upsample is different to the one that will contain the upsampled data, the FFT forward plan must be set to out-of-place (with the input and output containers) and the FFT reverse plan to in-place (with the output container). In both case (in-place or out-of-place 2D upsampling), it is the user responsability to provide an output container that is padded (for in-place) or filled (for out-of-place) with zeros.


The documentation for this class was generated from the following files:

Generated for ISCE3.0 by doxygen 1.8.5.