c@409
|
1 #include <stdio.h>
|
c@409
|
2 #include <stdlib.h>
|
c@409
|
3 #include <fftw3.h>
|
c@409
|
4 #include <unistd.h>
|
c@409
|
5 #include "pstats.h"
|
c@409
|
6
|
c@409
|
7 #ifdef DATATYPEdouble
|
c@409
|
8
|
c@409
|
9 #define CPXTYPE fftw_complex
|
c@409
|
10 #define PLAN fftw_plan
|
c@409
|
11 #define FFTMALLOC fftw_malloc
|
c@409
|
12 #define MAKEPLAN fftw_plan_dft_1d
|
c@409
|
13 #define DOFFT fftw_execute
|
c@409
|
14 #define DESTROYPLAN fftw_destroy_plan
|
c@409
|
15 #define FFTFREE fftw_free
|
c@409
|
16
|
c@409
|
17 #elif defined(DATATYPEfloat)
|
c@409
|
18
|
c@409
|
19 #define CPXTYPE fftwf_complex
|
c@409
|
20 #define PLAN fftwf_plan
|
c@409
|
21 #define FFTMALLOC fftwf_malloc
|
c@409
|
22 #define MAKEPLAN fftwf_plan_dft_1d
|
c@409
|
23 #define DOFFT fftwf_execute
|
c@409
|
24 #define DESTROYPLAN fftwf_destroy_plan
|
c@409
|
25 #define FFTFREE fftwf_free
|
c@409
|
26
|
c@409
|
27 #endif
|
c@409
|
28
|
c@409
|
29 #ifndef CPXTYPE
|
c@409
|
30 int main(void)
|
c@409
|
31 {
|
c@409
|
32 fprintf(stderr,"Datatype not available in FFTW\n" );
|
c@409
|
33 return 0;
|
c@409
|
34 }
|
c@409
|
35 #else
|
c@409
|
36 int main(int argc,char ** argv)
|
c@409
|
37 {
|
c@409
|
38 int nfft=1024;
|
c@409
|
39 int isinverse=0;
|
c@409
|
40 int numffts=1000,i;
|
c@409
|
41
|
c@409
|
42 CPXTYPE * in=NULL;
|
c@409
|
43 CPXTYPE * out=NULL;
|
c@409
|
44 PLAN p;
|
c@409
|
45
|
c@409
|
46 pstats_init();
|
c@409
|
47
|
c@409
|
48 while (1) {
|
c@409
|
49 int c = getopt (argc, argv, "n:ix:h");
|
c@409
|
50 if (c == -1)
|
c@409
|
51 break;
|
c@409
|
52 switch (c) {
|
c@409
|
53 case 'n':
|
c@409
|
54 nfft = atoi (optarg);
|
c@409
|
55 break;
|
c@409
|
56 case 'x':
|
c@409
|
57 numffts = atoi (optarg);
|
c@409
|
58 break;
|
c@409
|
59 case 'i':
|
c@409
|
60 isinverse = 1;
|
c@409
|
61 break;
|
c@409
|
62 case 'h':
|
c@409
|
63 case '?':
|
c@409
|
64 default:
|
c@409
|
65 fprintf(stderr,"options:\n-n N: complex fft length\n-i: inverse\n-x N: number of ffts to compute\n"
|
c@409
|
66 "");
|
c@409
|
67 }
|
c@409
|
68 }
|
c@409
|
69
|
c@409
|
70 in=FFTMALLOC(sizeof(CPXTYPE) * nfft);
|
c@409
|
71 out=FFTMALLOC(sizeof(CPXTYPE) * nfft);
|
c@409
|
72 for (i=0;i<nfft;++i ) {
|
c@409
|
73 in[i][0] = rand() - RAND_MAX/2;
|
c@409
|
74 in[i][1] = rand() - RAND_MAX/2;
|
c@409
|
75 }
|
c@409
|
76
|
c@409
|
77 if ( isinverse )
|
c@409
|
78 p = MAKEPLAN(nfft, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
|
c@409
|
79 else
|
c@409
|
80 p = MAKEPLAN(nfft, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
|
c@409
|
81
|
c@409
|
82 for (i=0;i<numffts;++i)
|
c@409
|
83 DOFFT(p);
|
c@409
|
84
|
c@409
|
85 DESTROYPLAN(p);
|
c@409
|
86
|
c@409
|
87 FFTFREE(in); FFTFREE(out);
|
c@409
|
88
|
c@409
|
89 fprintf(stderr,"fftw\tnfft=%d\tnumffts=%d\n", nfft,numffts);
|
c@409
|
90 pstats_report();
|
c@409
|
91
|
c@409
|
92 return 0;
|
c@409
|
93 }
|
c@409
|
94 #endif
|