使用FFTW库在不同维度上同时进行FFT和IFFT

时间:2013-05-24 12:26:54

标签: multidimensional-array fftw

我需要计算某种东西:

j,j' = 1 / N * sum(k = 1,...,N; e i * 2 * pi / N * j * k * sum(k'= 1,...,N; A' k,k' e -i * 2 * pi / N * j'* k' )) (i =想象单位)

最有效的方法是沿列使用FFT,沿行使用IFFT。我在C工作,我使用FFTW包。我想知道是否有可能创建一次计划同时进行二维FFT。另一种方法是逐列进行FFT,存储结果,然后逐行执行IFFT。如果有可能,我想避免这种情况。

问候

Giorgos

2 个答案:

答案 0 :(得分:0)

不是我知道的。你一次只能做一个方向。最好你需要分配三个fftw_complex对象并创建两个计划。

答案 1 :(得分:0)

我很晚才看到答案,但无论如何,谢谢。我找到了一种方法,但我应该检查它是否比在两个不同维度上进行FFT和IFFT更有效。感兴趣的是以下内容:

除了因子之外,IFFT与数组逆的FFT相同。所以:

http://latex.codecogs.com/gif.latex?X_j= \ {sum_ K = 1} ^氖^ {I2 \ PI / NJK}

也等于:

http://latex.codecogs.com/gif.latex?X_j= \压裂{E 1 {I2 \ PI / NJ}} {N} \ sum_ {K '= 1} ^氖^ { - I 2 \ PI / NJK'} X_ {N-K” 1}

这可以通过索引k = N-k'+ 1的变化来显示(只需遵循等式的链接)。 如果可以以相反的顺序存储行,那么对于原始问题,一个2-D FFT计划就足够了,但是所有行仍然应该乘以常数。