我在C工作与开发 - C++2D复杂的FFT实现
我已经创建了复数的二维数组这样:
#include<complex.h>
double complex **x;
x = malloc(Nx * sizeof *X);
if (x)
{
for (i = 0; i < Nx; i++)
{
x[i] = malloc(Nx * sizeof *x[i]);
}
而且随着数据填充它,这我已经绘制了经过验证和正确的实部和虚部。我只想简单地对这个数据执行一次FFT(希望函数只考虑数组,它的大小和fft方向),这将会对数组进行变换,并且还能够执行反向操作。
我已经看过如FFTW这样的图书馆,但尽管我努力去理解,但实现仍然让我难以理解。
有人能解释一下我最好的办法吗?谢谢
实现一个高效的fft这真的是一个棘手的任务,这就是fftw存在的原因。对于复合大小,请查看[Cooley Tuckey算法](http://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm)。 – francis
一个很好的简单的FFT库是[KissFFT](http:// sourceforge。net/projects/kissfft /) - 比FFTW更容易掌握 - 试一试。 –
您可能想要减少到两个(甚至一个)内存分配。分配'x [0] =(X *)malloc(Nx * Nx * sizeof(X))'和循环'x [k + 1] = x [k] + Nx'。单点故障,您可以通过访问列x'[j] [k] = x [0] [k + j * Nx]','j = 0,...,Nx-1',即通过算术索引序列变成平面阵列。它也可能有助于垂直FFT。 – LutzL