benchfftw.c
上传用户:ozl2332
上传日期:2009-12-28
资源大小:38k
文件大小:2k
源码类别:

语音压缩

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fftw3.h>
  4. #include <unistd.h>
  5. #include "pstats.h"
  6. #ifdef DATATYPEdouble
  7. #define CPXTYPE fftw_complex
  8. #define PLAN fftw_plan
  9. #define FFTMALLOC fftw_malloc
  10. #define MAKEPLAN fftw_plan_dft_1d
  11. #define DOFFT fftw_execute
  12. #define DESTROYPLAN fftw_destroy_plan
  13. #define FFTFREE fftw_free
  14. #elif defined(DATATYPEfloat)
  15. #define CPXTYPE fftwf_complex
  16. #define PLAN fftwf_plan
  17. #define FFTMALLOC fftwf_malloc
  18. #define MAKEPLAN fftwf_plan_dft_1d
  19. #define DOFFT fftwf_execute
  20. #define DESTROYPLAN fftwf_destroy_plan
  21. #define FFTFREE fftwf_free
  22. #endif
  23. #ifndef CPXTYPE
  24. int main(void)
  25. {
  26.     fprintf(stderr,"Datatype not available in FFTWn" );
  27.     return 0;
  28. }
  29. #else
  30. int main(int argc,char ** argv)
  31. {
  32.     int nfft=1024;
  33.     int isinverse=0;
  34.     int numffts=1000,i;
  35.     CPXTYPE * in=NULL;
  36.     CPXTYPE * out=NULL;
  37.     PLAN p;
  38.     pstats_init();
  39.     while (1) {
  40.       int c = getopt (argc, argv, "n:ix:");
  41.       if (c == -1)
  42.         break;
  43.       switch (c) {
  44.       case 'n':
  45.         nfft = atoi (optarg);
  46.         break;
  47.       case 'x':
  48.         numffts = atoi (optarg);
  49.         break;
  50.       case 'i':
  51.         isinverse = 1;
  52.         break;
  53.       }
  54.     }
  55.     in=FFTMALLOC(sizeof(CPXTYPE) * nfft);
  56.     out=FFTMALLOC(sizeof(CPXTYPE) * nfft);
  57.     for (i=0;i<nfft;++i ) {
  58.         in[i][0] = rand() - RAND_MAX/2;
  59.         in[i][1] = rand() - RAND_MAX/2;
  60.     }
  61.     if ( isinverse )
  62.         p = MAKEPLAN(nfft, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
  63.     else    
  64.         p = MAKEPLAN(nfft, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
  65.     for (i=0;i<numffts;++i)
  66.         DOFFT(p);
  67.     DESTROYPLAN(p);
  68.     FFTFREE(in); FFTFREE(out);
  69.     fprintf(stderr,"fftwtnfft=%dtnumffts=%dn", nfft,numffts);
  70.     pstats_report();
  71.     return 0;
  72. }
  73. #endif