| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- #include <stdio.h>
- #include <stdlib.h>
- #include <fftw3.h>
- #include <unistd.h>
- #include "pstats.h"
- #ifdef DATATYPEdouble
- #define CPXTYPE fftw_complex
- #define PLAN fftw_plan
- #define FFTMALLOC fftw_malloc
- #define MAKEPLAN fftw_plan_dft_1d
- #define DOFFT fftw_execute
- #define DESTROYPLAN fftw_destroy_plan
- #define FFTFREE fftw_free
- #elif defined(DATATYPEfloat)
- #define CPXTYPE fftwf_complex
- #define PLAN fftwf_plan
- #define FFTMALLOC fftwf_malloc
- #define MAKEPLAN fftwf_plan_dft_1d
- #define DOFFT fftwf_execute
- #define DESTROYPLAN fftwf_destroy_plan
- #define FFTFREE fftwf_free
- #endif
- #ifndef CPXTYPE
- int main(void)
- {
- fprintf(stderr,"Datatype not available in FFTW\n" );
- return 0;
- }
- #else
- int main(int argc,char ** argv)
- {
- int nfft=1024;
- int isinverse=0;
- int numffts=1000,i;
- CPXTYPE * in=NULL;
- CPXTYPE * out=NULL;
- PLAN p;
- pstats_init();
- while (1) {
- int c = getopt (argc, argv, "n:ix:h");
- if (c == -1)
- break;
- switch (c) {
- case 'n':
- nfft = atoi (optarg);
- break;
- case 'x':
- numffts = atoi (optarg);
- break;
- case 'i':
- isinverse = 1;
- break;
- case 'h':
- case '?':
- default:
- fprintf(stderr,"options:\n-n N: complex fft length\n-i: inverse\n-x N: number of ffts to compute\n"
- "");
- }
- }
- in=FFTMALLOC(sizeof(CPXTYPE) * nfft);
- out=FFTMALLOC(sizeof(CPXTYPE) * nfft);
- for (i=0;i<nfft;++i ) {
- in[i][0] = rand() - RAND_MAX/2;
- in[i][1] = rand() - RAND_MAX/2;
- }
- if ( isinverse )
- p = MAKEPLAN(nfft, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
- else
- p = MAKEPLAN(nfft, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
- for (i=0;i<numffts;++i)
- DOFFT(p);
- DESTROYPLAN(p);
- FFTFREE(in); FFTFREE(out);
- fprintf(stderr,"fftw\tnfft=%d\tnumffts=%d\n", nfft,numffts);
- pstats_report();
- return 0;
- }
- #endif
|