我写了一个简单的测试程序,在那里我对复杂的FT做了复杂的处理,我只是生成了一些数据1..50,并将其插入到数组的每个索引的实部和虚部。
当我执行这样的操作时,IFFT(FFT(A)) =A
为了测试它们,我为每个库得到了不同的结果。
FFTW,我必须将输出除以len(A)以得到原始的A
但是,使用CUFFT进行正向FFT和反向FFT,看起来我必须除以(sqrt(2)*50)才能返回原始数据。
额外的平方根因子是从哪里来的?
根据CUFFT文档: CUFFT执行未归一化的FFT;即,对输入数据集执行正向FFT,然后对结果集执行反向FFT,产生的数据等于按元素数量缩放的输入。通过数据集大小的倒数来缩放任一变换都留给用户按照看起来合适的方式执行。
提前感谢
发布于 2011-07-13 07:22:20
这最终导致计算复数的绝对值的方式出现问题。在std::complex库中,它计算向量的距离。
发布于 2011-06-24 05:28:18
CUFFT具有与FFTW相同的行为,它计算非标准化FFT。IFFT(FFT(A))=n A,其中n是向量的长度。长度n的单位是样本数(不是浮点数或字节数)。在使用C2R和R2C的FFTW和CUFFT之间存在一些填充差异,这可能会搞砸简单的比较,但对于C2C则不是。我会仔细检查你的数据设置和长度计算,并在FFTW和CUFFT中验证你的计划。
https://stackoverflow.com/questions/5252672
复制相似问题