clFFT:计算重叠FFT



我想为clFFT创建一个批次,以计算长度为256的3个FFT,其中FFT输入值重叠(FFT重叠处理(

  • 输入:276个复数的1D数组
  • 任务:计算[0.255]、[10.265]、[20..275]的FFT
  • 输出:3x 256 FFT=768个值

如果我在哪里写一个循环,它看起来像这样:

std::complex<float> *input;
for (int i=0; i<3; ++i) {
calcFFT(input, input+256);
input += 10;
}

IOW:fft计算256个输入值,然后推进10个值并计算接下来的256个值。

如何设置clFFT计划,以便在一次调用中发生这种情况?

clfftStPlanIn/OutStride指定了各个值之间的距离,因此这是错误的参数。

看起来clfftStPlanDistance可能正是我所需要的。医生说:

CLFFTAPI clfftStatus clfftStPlanDistance(clfftPlanHandleplHandle,size_t iDist,size_t oDist(;

间距是FFT阵列中每个离散阵列对象之间的距离。这只是使用*对于clfftDim中的"array"维度;参见clfftStPlanDimension(单位为clfftPrecision(

我觉得这很令人困惑。

是的,clfftSetPlanDistance是正确的API。在这个例子中,我必须使用

cllSetPlanDistance(plan, 10, 256);

以10为步长来计算FFT。

这将生成OpenCL代码,其中第一个FFT索引的全局偏移量计算如下:

// Inside the generated   fft_fwd   OpenCL function
iOffset = (batch/32)*10 + (batch%32)*8;

其中CCD_ 2是要计算的FFT的批号。

最新更新