fftw3:fftw_plan_many_dft_r2c 同时处理多组fft

fftw3:fftw_plan_many_dft_r2c

fftw_plan fftw_plan_many_dft_r2c(int rank,               // rank=m,指m维fft
                                 const int *n,           // 每组fft的数组大小。
                                 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,             
                                 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

例子

// 同时处理100组一维fft,每组一维fft的大小为1024

// 申请两块内存,一块用于存放进行fft的数据,一块用于保存fft结果
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; // 一维fft
int n[] = { col}; // 一次fft的长度
int howmany = row; // 同时进行fft的次数
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);

你可能感兴趣的:(fft)