15 #include <thrust/complex.h>
17 #include <isce3/core/Common.h>
25 gpuSignal(cufftType _type);
40 void rangeFFT(
int ncolumns,
int nrows);
47 void FFT2D(
int ncolumns,
int nrows);
52 void fftPlan(
int rank,
int* n,
int howmany,
53 int* inembed,
int istride,
int idist,
54 int* onembed,
int ostride,
int odist);
67 void dataToDevice(std::valarray<std::complex<T>> &input);
68 void dataToHost(std::complex<T> *output);
69 void dataToHost(std::valarray<std::complex<T>> &output);
75 void forwardC2C(std::complex<T> *input, std::complex<T> *output);
76 void forwardC2C(std::valarray<std::complex<T>> &input,
77 std::valarray<std::complex<T>> &output);
78 void forwardZ2Z(std::complex<T> *input, std::complex<T> *output);
79 void forwardZ2Z(std::valarray<std::complex<T>> &input,
80 std::valarray<std::complex<T>> &output);
81 void forwardD2Z(T *input, std::complex<T> *output);
83 void forward(std::complex<T> *input, std::complex<T> *output);
84 void forward(std::valarray<std::complex<T>> &input,
85 std::valarray<std::complex<T>> &output);
87 void forwardDevMem(T *input, T *output);
88 void forwardDevMem(T *dataInPlace);
94 void inverseC2C(std::complex<T> *input, std::complex<T> *output);
95 void inverseC2C(std::valarray<std::complex<T>> &input,
96 std::valarray<std::complex<T>> &output);
97 void inverseZ2Z(std::complex<T> *input, std::complex<T> *output);
98 void inverseZ2Z(std::valarray<std::complex<T>> &input,
99 std::valarray<std::complex<T>> &output);
100 void inverseZ2D(std::complex<T> *input, T *output);
102 void inverse(std::complex<T> *input, std::complex<T> *output);
103 void inverse(std::valarray<std::complex<T>> &input,
104 std::valarray<std::complex<T>> &output);
106 void inverseDevMem(T *input, T *output);
107 void inverseDevMem(T *dataInPlace);
110 void upsample(std::valarray<std::complex<T>> &input,
111 std::valarray<std::complex<T>> &output,
115 void upsample(std::valarray<std::complex<T>> &input,
116 std::valarray<std::complex<T>> &output,
120 std::valarray<std::complex<T>> &shiftImpact);
122 int getRows() {
return _rows;};
123 int getColumns() {
return _columns;};
124 int getNumElements() {
return _n_elements;};
126 T* getDevicePtr() {
return _d_data;};
131 cufftType _cufft_type;
187 std::valarray<std::complex<T>> &input,
188 std::valarray<std::complex<T>> &output);
193 std::valarray<std::complex<T>> &input,
194 std::valarray<std::complex<T>> &output,
195 std::valarray<std::complex<T>> &shiftImpact);
void rangeFFT(int ncolumns, int nrows)
initiate plan for FFT in azimuth direction for a block of complex data.
void FFT2D(int ncolumns, int nrows)
initiate plan for FFT in azimuth direction for a block of complex data.
void dataToDevice(std::complex< T > *input)
moving data in between device and host
void forwardC2C(std::complex< T > *input, std::complex< T > *output)
forward transforms
void forward()
forward transforms without intermediate return
void _configureAzimuthFFT(int ncolumns, int nrows)
determine the required parameters for setting azimuth FFT plans
void _configureRangeFFT(int ncolumns, int nrows)
determine the required parameters for setting range FFT plans
void upsample(std::valarray< std::complex< T >> &input, std::valarray< std::complex< T >> &output, int row, int ncols, int upsampleFactor)
upsample
void fftPlan(int rank, int *n, int howmany, int *inembed, int istride, int idist, int *onembed, int ostride, int odist)
initiate cuFFT plan for a block of complex data input parameters cuFFT interface for fftw_plan_many_d...
void inverseC2C(std::complex< T > *input, std::complex< T > *output)
inverse transforms
void nextPowerOfTwo(size_t N, size_t &fftLength)
next power of two
void inverse()
inverse transforms using existing device memory
void azimuthFFT(int ncolumns, int nrows)
initiate plan for FFT in range direction for a block of complex data.