最近调用FFTW来做reconstruction,遇到一个问题,先贴code:
1 #define N 10
2 fftw_complex in[N], out[N];
3 fftw_plan p;
4
5 p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
6
7 // 初始化in
8 for (int i = 0; i < N; i++)
9 {
10 in[i][0] = i; // 实数部分
11 in[i][1] = 0; // 虚数部分
12 }
13
14
15 // 执行fftw
16 fftw_execute(p);
17
18 fftw_complex out1[N];
19
20 fftw_plan p1;
21
22 p1 = fftw_plan_dft_1d(N, out, out1, FFTW_BACKWARD, FFTW_ESTIMATE);
23
24 fftw_execute(p1);
25
26 fftw_destroy_plan(p);
27 fftw_destroy_plan(p1);
28
29 double residual = 0;
30
31 for(int i = 0; i < N; i++)
32 {
33 out1[i][0] /= N;
34 out1[i][1] /= N;
35
36 residual += (out1[i][0] - in[i][0])*(out1[i][0] - in[i][0])
37 + (out1[i][1] - in[i][1])*(out1[i][1] - in[i][1]);
38 }
39
40
41 if (residual < 1e-6)
42 cout << "1D FFT passed successful!" << " --- " << "residual : " << residual << endl;
43 else
44 cout << "1D FFT failed!" << " --- " << "residual : " << residual << endl;
2 fftw_complex in[N], out[N];
3 fftw_plan p;
4
5 p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
6
7 // 初始化in
8 for (int i = 0; i < N; i++)
9 {
10 in[i][0] = i; // 实数部分
11 in[i][1] = 0; // 虚数部分
12 }
13
14
15 // 执行fftw
16 fftw_execute(p);
17
18 fftw_complex out1[N];
19
20 fftw_plan p1;
21
22 p1 = fftw_plan_dft_1d(N, out, out1, FFTW_BACKWARD, FFTW_ESTIMATE);
23
24 fftw_execute(p1);
25
26 fftw_destroy_plan(p);
27 fftw_destroy_plan(p1);
28
29 double residual = 0;
30
31 for(int i = 0; i < N; i++)
32 {
33 out1[i][0] /= N;
34 out1[i][1] /= N;
35
36 residual += (out1[i][0] - in[i][0])*(out1[i][0] - in[i][0])
37 + (out1[i][1] - in[i][1])*(out1[i][1] - in[i][1]);
38 }
39
40
41 if (residual < 1e-6)
42 cout << "1D FFT passed successful!" << " --- " << "residual : " << residual << endl;
43 else
44 cout << "1D FFT failed!" << " --- " << "residual : " << residual << endl;