CUFFT的缩放因子

Der*_*rek 6 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,产生的数据等于按元素数量缩放的输入.通过数据集的大小的倒数来缩放变换,留给用户按照看到的拟合执行.

提前致谢

Nat*_*ead 6

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


Der*_*rek 1

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