【发布时间】:2013-01-12 10:37:45
【问题描述】:
我正在使用 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 个数字是什么意思?换句话说,如何重新排序输出以获得二维矩阵?
我需要做些什么来创建这个“填充”?
【问题讨论】:
-
嗯。在我使用的其他一些 FFT 库中,奈奎斯特值只是打包到
X_0的虚部(直流偏移)中,因为这两个值都是实数。然后填充是不必要的。显然 FFTW 不这样做。 -
仅供参考,
such packing [..] does not generalize well to multi-dimensional transforms。详情见this FFTW doc倒数第二段。