我正在使用FFTW3在C++中计算2D实数FFT。我已经阅读了手册,但还有一些问题。从手册上看:http://www.fftw.org/fftw3_doc/One_002dDimensional-DFTs-of-Real-Data.html#One_002dDimensional-DFTs-of-Real-Data
作为交换,用户牺牲了FFTW的复杂变换的一部分简单性,以获得速度和空间优势。首先,输入和输出数组的大小和类型不同:输入是n个实数,而输出是n/2+1个复数(非冗余输出);这也需要对输入数组进行轻微的“填充”以进行原位变换。其次,逆变换(复数到实数)默认情况下会覆盖其输入数组。这些不便之处都不应该对用户构成严重问题,但重要的是要意识到它们。
我知道我需要将输入的2D矩阵转换为行顺序的1D向量。但输出长什么样?n/2 + 1个数字代表什么?换句话说,如何重新排序输出以获取2D矩阵?
具体来说,我需要做什么才能创建这个“填充”?
这种打包方式[..]在多维转换中不具有普适性
。请参阅此FFTW文档的倒数第二段了解详情。 - Sveltely