I’m doing the 1D Fourier transform and then doing the inverse transform of a matrix in column dimension . I wrote a test program where the matrix is 8(height)*4(width). My problem is when doing the inverse transform, the input data should be half of the previous FFT result, and I also need to pad 0 for each column.
It is to realize this matlab instruction :
ifft(rawarray (1: row/2,: ),2* row,1)
I used cufftplanmany(), and I found it can pad 0 automatically by setting N. The result is the same as Matlab.(CUDA ifft needs to divide the constant coefficient). But then when I changed the parameters to set the input data as the half result of previous fft, the outcome of ifft is just same as before.
My parameter is set as:
cufftHandle ifft_plan;
int rank = 2;
int i_n[2] = {frameHeight*2,1}; // padding 0
int i_inembed[2] = { frameHeight/2,1}; // get the half of the raw row
int istride = frameWidth;
int idist = 1;
int i_onembed[2] = { frameHeight*2,1 };
int ostride = frameWidth;
int odist = 1;
The outcome above is same as
cufftHandle ifft_plan;
const int rank = 1;
int i_n[rank] = {frameHeight*2}; //padding 0
int i_inembed[] = {0};
int istride = frameWidth;
int idist = 1;
int i_onembed[] = {0};
int ostride = frameWidth;
int odist = 1;
I want to know if I am making mistakes for misunderstanding the parameters and can I get the result I want by setting the parameters? Appreciate any help and advice. Thank you.
This is my raw post on stackoverflow with my whole code.