CUFFT的缩放因子

时间:2011-03-09 21:56:13

标签: c++ cuda fft fftw

我写了一个简单的测试程序,在那里我做了复杂到FT的复杂,我只生成了一些数据1..50并将其粘贴在数组的每个索引的实部和虚部中。

当我进行这样的操作时,IFFT(FFT(A))= A

对它们进行测试,每个库都会得到不同的结果。

FFTW,我必须将输出除以len(A)以取回原始A

然而,执行此操作然后使用CUFFT反转FFT,看起来我必须除以(sqrt(2)* 50)以返回原始数据。

这个额外的平方根因子来自哪里?

根据CUFFT文件: CUFFT执行未归一化的FFT;也就是说,进行前进 对输入数据集进行FFT,然后对结果进行逆FFT 设置产生的数据等于按数量缩放的输入 元素。缩放或者通过大小的倒数进行变换 数据集留给用户按照适合的方式执行。

先谢谢

2 个答案:

答案 0 :(得分:6)

CUFFT与FFTW具有相同的行为,它计算非标准化的FFT。 IFFT(FFT(A))=n A其中n是向量的长度。长度n是样本数(不是浮点数或字节数)。 FFTW和CUFFT之间存在一些填充差异,C2R和R2C可以搞砸一个简单的比较,但不能用于C2C。我会仔细检查您的数据设置和长度计算,并在FFTW和CUFFT中验证您的计划。

答案 1 :(得分:1)

这最终成为计算复数的绝对值的方式的问题。在std :: complex库中,它计算了向量的距离。