Mercurial > hg > qm-dsp
view ext/kissfft/test/benchfftw.c @ 409:1f1999b0f577
Bring in kissfft into this repo (formerly a subrepo, but the remote is not responding)
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 21 Jul 2015 07:34:15 +0100 |
parents | |
children |
line wrap: on
line source
#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