如何在c ++中执行2D快速傅里叶变换

时间:2011-11-25 05:52:11

标签: c++ fft

我看到有关于此主题的post,但没有任何回复 如何为给定图像编写执行 2D快速傅立叶变换的函数f?
对于某些整数m和n,可以假设width = 2 ^ m,height = 2 ^ n,并且输入图像已经正确填充。
输入: f - 以复数表示的2D图像
输出: F - 变换后的系数,也以复数表示

void FFT2D(Complex<double> *f, Complex<double> *F, int width, int height)
{

}

对于那些认为我希望你为我编程的人:
我不。只是想要一些关于如何运作的理论解释

2 个答案:

答案 0 :(得分:4)

您可以使用FFTW library执行此操作:

#include <fftw.h>

void FFT2D(Complex<double> *f, Complex<double> *F, int width, int height){   
  fftw_plan p = fftw_plan_dft_2d(width, height, f, F, FFTW_FORWARD, FFTW_ESTIMATE);            
  fftw_execute(p); 
  fftw_destroy_plan(p);
}

答案 1 :(得分:3)

我怀疑有人会为你编写FFT实现。这是非常重要和耗时的(你也没有付出努力)。

你了解背后的数学吗?如果你理解它背后的数学,你需要看看各种FFT算法(想到Cooley Tukey)并简单地实现它们。而且,这有点像家庭作业问题。

但是既然你问过,这是由谷歌提供的DFT和FFT的C实现:http://paulbourke.net/miscellaneous/dft/

PS:你想为 me 编写A *实现吗?