fftw3:fftw_plan_many_dft_r2c
fftw_plan fftw_plan_many_dft_r2c(int rank,
const int *n,
int howmany,
double* in,
const int *inembed,
int istride,
int idist,
fftw_complex *out,
const int *onembed,
int ostride,
int odist,
unsigned flags);
参数 | 注释 |
---|
int rank | rank=m,指m维fft |
const int*n | 单次fft的数组大小。例如:n[]={100},表示单次fft为一维fft,数组大小为100;n[]={5,6},表示单次fft为二维fft,数组大小为5×6。 |
int howmany | 同时进行几组fft |
double*in | 数组,保存所有需要进行fft的数据 |
const int*inembed | |
int istride | 同组fft中两个元素之间的距离。如果istride=1,则这组fft的数组的内存是连续的 |
int idist | 相邻两组fft之间的距离 |
fftw_complex*out | 保存fft结果的数组 |
const int*onembed | |
int ostride | 保存fft结果的数组中,同组fft中两个元素之间的距离。 |
int odist | 保存fft结果的数组中,相邻两组fft之间的距离 |
unsigned flags | |
例子
unsigned int row= 100;
unsigned int col = 1024;
unsigned int col_radius = col*0.5+1;
double* multi_line = fftw_malloc(sizeof(float) * row*col));
fftw_complex* fft_out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * row*col_radius);
int rank = 1;
int n[] = { col};
int howmany = row;
int istride = 1, ostride = 1;
int idist = col, odist = col_radius;
int *inembed = n, *onembed = n;
fftw_plan planner = fftw_plan_many_dft_r2c(rank, n, howmany, multi_line , inembed, istride, idist, fft_out, onembed, ostride, odist, FFTW_MEASURE);
for(unsigned int i=0; i<row*col; ++i){
multi_line=i;
}
fftw_execute_dft_r2c(planner, multi_line, fft_out);