刚才重新用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;
}
#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
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
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