diff options
author | dcherednik <dcherednik@white> | 2018-10-31 01:36:50 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2018-11-02 01:54:36 +0300 |
commit | ea08660cc9e28a44a1512a5a56f85e7258d9832d (patch) | |
tree | afce45813f3d0816326a6e12fb2cb996c5bb2d82 /src/3rd/kissfft/test/benchfftw.c | |
download | libgha-ea08660cc9e28a44a1512a5a56f85e7258d9832d.tar.gz |
First commit
- Method to get parameters of one harmonic
Diffstat (limited to 'src/3rd/kissfft/test/benchfftw.c')
-rw-r--r-- | src/3rd/kissfft/test/benchfftw.c | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/3rd/kissfft/test/benchfftw.c b/src/3rd/kissfft/test/benchfftw.c new file mode 100644 index 0000000..0bb2ef1 --- /dev/null +++ b/src/3rd/kissfft/test/benchfftw.c @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2003-2010, Mark Borgerding. All rights reserved. + * This file is part of KISS FFT - https://github.com/mborgerding/kissfft + * + * SPDX-License-Identifier: BSD-3-Clause + * See COPYING file for more information. + */ +#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 |