刚才重新用fftw3写了个helloword,经测试结果正确。代码如下:
fftw_test.c
#include <fftw3.h>
#include <stdio.h>

#define N 3
#define ELEM(r,c) (r*N+c)

int showresult(fftw_complex* in, fftw_complex* out)


{
int i, j;
printf("In:\n");

for (i=0; i<N; i++)
{

for (j=0; j<N; j++)
{
printf("%lf\t", in[ELEM(i, j)][0]);
}
printf("\n");
}
printf("Out:\n");

for (i=0; i<N; i++)
{

for (j=0; j<N; j++)
{
printf("%lf\t", out[ELEM(i, j)][0]);
}
printf("\n");
}
return 1;
}

int main()


{
fftw_complex *in, *out;
fftw_plan p;
int i, j;

// 分配存储空间
in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N * N);

// 设置变换计划
p = fftw_plan_dft_2d(N, N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

// 设置测试数据

for (i=0; i<N; i++)
{

for (j=0; j<N; j++)
{
in[ELEM(i, j)][0] = 1;
in[ELEM(i, j)][1] = 0;
}
}
in[ELEM(1, 2)][0] = 5;
in[ELEM(2, 2)][0] = 3;

// 执行变换

fftw_execute(p); /**//* repeat as needed */

// 显示测试结果
showresult(in, out);

// 释放内存
fftw_destroy_plan(p);
fftw_free(in);
fftw_free(out);

return 1;
}
makefile文件:
all: fft_test

fft_test: fft_test.c
gcc -o fft_test fft_test.c -lfftw3

clean:
rm -f fft_test
输出结果:
In:
1.000000 1.000000 1.000000
1.000000 1.000000 5.000000
1.000000 1.000000 3.000000
Out:
15.000000 -3.000000 -3.000000
-3.000000 3.000000 0.000000
-3.000000 0.000000 3.000000
