6

我编写了一个简单的测试程序,在其中我正在执行复杂到复杂的 FT,我刚刚生成了一些数据 1..50 并将其插入到数组的每个索引的实部和虚部。

当我做这样的操作时 IFFT(FFT(A)) = A

为了测试它们,我对每个库都得到了不同的结果。

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

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

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

根据 CUFFT 文档: CUFFT 执行未归一化的 FFT;也就是说,对输入数据集执行正向 FFT,然后对结果集执行反向 FFT,产生的数据等于按元素数量缩放的输入。通过数据集大小的倒数缩放任一变换,留给用户执行。

提前致谢

4

2 回答 2

6

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

于 2011-06-23T21:28:17.740 回答
1

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

于 2011-07-12T23:22:20.213 回答