Mercurial > hg > qm-dsp
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ext/kissfft/test/benchfftw.c Tue Jul 21 07:34:15 2015 +0100 @@ -0,0 +1,94 @@ +#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