我编写了一个简单的测试程序,在其中执行“复杂到复杂FT”操作,我只生成了1..50的数据,并将其粘贴到数组每个索引的实部和虚部。
当我执行这样的操作时IFFT(FFT(A))= A
为了测试它们,对于每个库我得到不同的结果。
FFTW,我必须将输出除以len(A)以取回原始A
但是,先执行此操作,然后使用CUFFT进行反向FFT,看来我必须除以(sqrt(2)* 50)才能返回到原始数据。
这个额外的平方根因子从何而来?
根据CUFFT文档:
CUFFT执行未归一化的FFT;也就是说,执行向前
对输入数据集进行FFT,然后对结果进行逆FFT
set产生的数据等于输入的数量,该数量按输入的数量缩放
元素。缩放任一变换,缩放的大小为倒数
数据集留给用户以看似合适的方式执行。
提前致谢
最佳答案
CUFFT与FFTW具有相同的行为,它计算未归一化的FFT。 IFFT(FFT(A))=n A
,其中n是 vector 的长度。长度n
以样本数(不是浮点数或字节)为单位。使用C2R和R2C在FFTW和CUFFT之间存在一些填充差异,可以使简单的比较搞清楚,但对于C2C则不能。我会仔细检查您的数据设置和长度计算,并在FFTW和CUFFT中验证您的计划。
关于c++ - CUFFT的比例因子,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5252672/