我需要计算这样的东西:
Aj,j' =1/N*sum(k=1,…,N;ei*2*pi/N*j*k * sum(k'=1,…,N;A'k,k' e-i*2*pi/N*j'*k'))(i =虚单位)
最有效的方法是沿列和沿行使用FFT。我在C工作,我使用FFTW包。我想知道是否有可能创建一个计划,在一次做这两个,作为2-D fft。另一种方法是逐列执行FFT,存储结果,然后逐行执行IFFT。如果有可能,我希望避免这种情况。
问候
乔治
据我所知没有。你一次只能做一个方向。最多只需要分配三个fftw_complex对象并创建两个计划。
我很晚才看到答案,但还是谢谢你。同时我找到了一种方法,但是我需要检查一下是否比仅仅在两个不同的维度上做FFT和IFFT更有效。对于感兴趣的,如下:
除了一个因子外,IFFT与数组逆的FFT相同。所以:
http://latex.codecogs.com/gif.latex?X_j= sum _k=1^Ne^i2 {}{pi/Njk
也等于:
http://latex.codecogs.com/gif.latex?X_j= }frac{e^{i2pi/Nj}}{N}sum _k'=1^Ne^-i2 {}{pi/Njk' x_n -k'+1
这可以通过索引k=N-k'+1的变化来表示(只需遵循方程的链接)。如果可以以相反的顺序存储行,那么二维FFT的一个计划对于原始问题是足够的,但是所有的行仍然应该乘以一个常数。