=Norig) twidx-=Norig;
- C_MUL(t,scratch[q] , twiddles[twidx] );
- C_ADDTO( Fout[ k ] ,t);
- }
- k += m;
- }
- }
- KISS_FFT_TMP_FREE(scratch);
-}
-
-static
-void kf_work(
- kiss_fft_cpx * Fout,
- const kiss_fft_cpx * f,
- const size_t fstride,
- int in_stride,
- int * factors,
- const kiss_fft_cfg st
- )
-{
- kiss_fft_cpx * Fout_beg=Fout;
- const int p=*factors++; /* the radix */
- const int m=*factors++; /* stage's fft length/p */
- const kiss_fft_cpx * Fout_end = Fout + p*m;
-
-#ifdef _OPENMP
- // use openmp extensions at the
- // top-level (not recursive)
- if (fstride==1 && p<=5)
- {
- int k;
-
- // execute the p different work units in different threads
-# pragma omp parallel for
- for (k=0;k floor_sqrt)
- p = n; /* no more factors, skip to end */
- }
- n /= p;
- *facbuf++ = p;
- *facbuf++ = n;
- } while (n > 1);
-}
-
-/*
- *
- * User-callable function to allocate all necessary storage space for the fft.
- *
- * The return value is a contiguous block of memory, allocated with malloc. As such,
- * It can be freed with free(), rather than a kiss_fft-specific function.
- * */
-kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem )
-{
- kiss_fft_cfg st=NULL;
- size_t memneeded = sizeof(struct kiss_fft_state)
- + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/
-
- if ( lenmem==NULL ) {
- st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded );
- }else{
- if (mem != NULL && *lenmem >= memneeded)
- st = (kiss_fft_cfg)mem;
- *lenmem = memneeded;
- }
- if (st) {
- int i;
- st->nfft=nfft;
- st->inverse = inverse_fft;
-
- for (i=0;iinverse)
- phase *= -1;
- kf_cexp(st->twiddles+i, phase );
- }
-
- kf_factor(nfft,st->factors);
- }
- return st;
-}
-
-
-void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride)
-{
- if (fin == fout) {
- //NOTE: this is not really an in-place FFT algorithm.
- //It just performs an out-of-place FFT into a temp buffer
- kiss_fft_cpx * tmpbuf = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC( sizeof(kiss_fft_cpx)*st->nfft);
- kf_work(tmpbuf,fin,1,in_stride, st->factors,st);
- memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft);
- KISS_FFT_TMP_FREE(tmpbuf);
- }else{
- kf_work( fout, fin, 1,in_stride, st->factors,st );
- }
-}
-
-void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout)
-{
- kiss_fft_stride(cfg,fin,fout,1);
-}
-
-
-void kiss_fft_cleanup(void)
-{
- // nothing needed any more
-}
-
-int kiss_fft_next_fast_size(int n)
-{
- while(1) {
- int m=n;
- while ( (m%2) == 0 ) m/=2;
- while ( (m%3) == 0 ) m/=3;
- while ( (m%5) == 0 ) m/=5;
- if (m<=1)
- break; /* n is completely factorable by twos, threes, and fives */
- n++;
- }
- return n;
-}
diff --git a/examples/bare-metal/micro_speech/kissfft/kiss_fft.h b/examples/bare-metal/micro_speech/kissfft/kiss_fft.h
deleted file mode 100644
index 5a7617745..000000000
--- a/examples/bare-metal/micro_speech/kissfft/kiss_fft.h
+++ /dev/null
@@ -1,131 +0,0 @@
-#ifndef KISS_FFT_H
-#define KISS_FFT_H
-
-#include
-#include
-#include
-#include
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- ATTENTION!
- If you would like a :
- -- a utility that will handle the caching of fft objects
- -- real-only (no imaginary time component ) FFT
- -- a multi-dimensional FFT
- -- a command-line utility to perform ffts
- -- a command-line utility to perform fast-convolution filtering
-
- Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c
- in the tools/ directory.
-*/
-
-#ifdef USE_SIMD
-# include
-# define kiss_fft_scalar __m128
-#define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes,16)
-#define KISS_FFT_FREE _mm_free
-#else
-#define KISS_FFT_MALLOC(X) (void*)(0) /* Patched. */
-#define KISS_FFT_FREE(X) /* Patched. */
-#endif
-
-
-// Patched automatically by download_dependencies.sh so default is 16 bit.
-#ifndef FIXED_POINT
-#define FIXED_POINT (16)
-#endif
-// End patch.
-
-#ifdef FIXED_POINT
-#include /* Patched. */
-#include
-# if (FIXED_POINT == 32)
-# define kiss_fft_scalar int32_t
-# else
-# define kiss_fft_scalar int16_t
-# endif
-#else
-# ifndef kiss_fft_scalar
-/* default is float */
-# define kiss_fft_scalar float
-# endif
-#endif
-
-typedef struct {
- kiss_fft_scalar r;
- kiss_fft_scalar i;
-}kiss_fft_cpx;
-
-typedef struct kiss_fft_state* kiss_fft_cfg;
-
-/*
- * kiss_fft_alloc
- *
- * Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
- *
- * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL);
- *
- * The return value from fft_alloc is a cfg buffer used internally
- * by the fft routine or NULL.
- *
- * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc.
- * The returned value should be free()d when done to avoid memory leaks.
- *
- * The state can be placed in a user supplied buffer 'mem':
- * If lenmem is not NULL and mem is not NULL and *lenmem is large enough,
- * then the function places the cfg in mem and the size used in *lenmem
- * and returns mem.
- *
- * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough),
- * then the function returns NULL and places the minimum cfg
- * buffer size in *lenmem.
- * */
-
-kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem);
-
-/*
- * kiss_fft(cfg,in_out_buf)
- *
- * Perform an FFT on a complex input buffer.
- * for a forward FFT,
- * fin should be f[0] , f[1] , ... ,f[nfft-1]
- * fout will be F[0] , F[1] , ... ,F[nfft-1]
- * Note that each element is complex and can be accessed like
- f[k].r and f[k].i
- * */
-void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
-
-/*
- A more generic version of the above function. It reads its input from every Nth sample.
- * */
-void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
-
-/* If kiss_fft_alloc allocated a buffer, it is one contiguous
- buffer and can be simply free()d when no longer needed*/
-#define kiss_fft_free free
-
-/*
- Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up
- your compiler output to call this before you exit.
-*/
-void kiss_fft_cleanup(void);
-
-
-/*
- * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5)
- */
-int kiss_fft_next_fast_size(int n);
-
-/* for real ffts, we need an even size */
-#define kiss_fftr_next_fast_size_real(n) \
- (kiss_fft_next_fast_size( ((n)+1)>>1)<<1)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
\ No newline at end of file
diff --git a/examples/bare-metal/micro_speech/kissfft/kissfft.hh b/examples/bare-metal/micro_speech/kissfft/kissfft.hh
deleted file mode 100644
index a586cb115..000000000
--- a/examples/bare-metal/micro_speech/kissfft/kissfft.hh
+++ /dev/null
@@ -1,299 +0,0 @@
-#ifndef KISSFFT_CLASS_HH
-#include
-#include
-
-namespace kissfft_utils {
-
-template
-struct traits
-{
- typedef T_scalar scalar_type;
- typedef std::complex cpx_type;
- void fill_twiddles( std::complex * dst ,int nfft,bool inverse)
- {
- T_scalar phinc = (inverse?2:-2)* acos( (T_scalar) -1) / nfft;
- for (int i=0;i(0,i*phinc) );
- }
-
- void prepare(
- std::vector< std::complex > & dst,
- int nfft,bool inverse,
- std::vector & stageRadix,
- std::vector & stageRemainder )
- {
- _twiddles.resize(nfft);
- fill_twiddles( &_twiddles[0],nfft,inverse);
- dst = _twiddles;
-
- //factorize
- //start factoring out 4's, then 2's, then 3,5,7,9,...
- int n= nfft;
- int p=4;
- do {
- while (n % p) {
- switch (p) {
- case 4: p = 2; break;
- case 2: p = 3; break;
- default: p += 2; break;
- }
- if (p*p>n)
- p=n;// no more factors
- }
- n /= p;
- stageRadix.push_back(p);
- stageRemainder.push_back(n);
- }while(n>1);
- }
- std::vector _twiddles;
-
-
- const cpx_type twiddle(int i) { return _twiddles[i]; }
-};
-
-}
-
-template
- >
-class kissfft
-{
- public:
- typedef T_traits traits_type;
- typedef typename traits_type::scalar_type scalar_type;
- typedef typename traits_type::cpx_type cpx_type;
-
- kissfft(int nfft,bool inverse,const traits_type & traits=traits_type() )
- :_nfft(nfft),_inverse(inverse),_traits(traits)
- {
- _traits.prepare(_twiddles, _nfft,_inverse ,_stageRadix, _stageRemainder);
- }
-
- void transform(const cpx_type * src , cpx_type * dst)
- {
- kf_work(0, dst, src, 1,1);
- }
-
- private:
- void kf_work( int stage,cpx_type * Fout, const cpx_type * f, size_t fstride,size_t in_stride)
- {
- int p = _stageRadix[stage];
- int m = _stageRemainder[stage];
- cpx_type * Fout_beg = Fout;
- cpx_type * Fout_end = Fout + p*m;
-
- if (m==1) {
- do{
- *Fout = *f;
- f += fstride*in_stride;
- }while(++Fout != Fout_end );
- }else{
- do{
- // recursive call:
- // DFT of size m*p performed by doing
- // p instances of smaller DFTs of size m,
- // each one takes a decimated version of the input
- kf_work(stage+1, Fout , f, fstride*p,in_stride);
- f += fstride*in_stride;
- }while( (Fout += m) != Fout_end );
- }
-
- Fout=Fout_beg;
-
- // recombine the p smaller DFTs
- switch (p) {
- case 2: kf_bfly2(Fout,fstride,m); break;
- case 3: kf_bfly3(Fout,fstride,m); break;
- case 4: kf_bfly4(Fout,fstride,m); break;
- case 5: kf_bfly5(Fout,fstride,m); break;
- default: kf_bfly_generic(Fout,fstride,m,p); break;
- }
- }
-
- // these were #define macros in the original kiss_fft
- void C_ADD( cpx_type & c,const cpx_type & a,const cpx_type & b) { c=a+b;}
- void C_MUL( cpx_type & c,const cpx_type & a,const cpx_type & b) { c=a*b;}
- void C_SUB( cpx_type & c,const cpx_type & a,const cpx_type & b) { c=a-b;}
- void C_ADDTO( cpx_type & c,const cpx_type & a) { c+=a;}
- void C_FIXDIV( cpx_type & ,int ) {} // NO-OP for float types
- scalar_type S_MUL( const scalar_type & a,const scalar_type & b) { return a*b;}
- scalar_type HALF_OF( const scalar_type & a) { return a*.5;}
- void C_MULBYSCALAR(cpx_type & c,const scalar_type & a) {c*=a;}
-
- void kf_bfly2( cpx_type * Fout, const size_t fstride, int m)
- {
- for (int k=0;kreal() - HALF_OF(scratch[3].real() ) , Fout->imag() - HALF_OF(scratch[3].imag() ) );
-
- C_MULBYSCALAR( scratch[0] , epi3.imag() );
-
- C_ADDTO(*Fout,scratch[3]);
-
- Fout[m2] = cpx_type( Fout[m].real() + scratch[0].imag() , Fout[m].imag() - scratch[0].real() );
-
- C_ADDTO( Fout[m] , cpx_type( -scratch[0].imag(),scratch[0].real() ) );
- ++Fout;
- }while(--k);
- }
-
- void kf_bfly5( cpx_type * Fout, const size_t fstride, const size_t m)
- {
- cpx_type *Fout0,*Fout1,*Fout2,*Fout3,*Fout4;
- size_t u;
- cpx_type scratch[13];
- cpx_type * twiddles = &_twiddles[0];
- cpx_type *tw;
- cpx_type ya,yb;
- ya = twiddles[fstride*m];
- yb = twiddles[fstride*2*m];
-
- Fout0=Fout;
- Fout1=Fout0+m;
- Fout2=Fout0+2*m;
- Fout3=Fout0+3*m;
- Fout4=Fout0+4*m;
-
- tw=twiddles;
- for ( u=0; u=Norig) twidx-=Norig;
- C_MUL(t,scratchbuf[q] , twiddles[twidx] );
- C_ADDTO( Fout[ k ] ,t);
- }
- k += m;
- }
- }
- }
-
- int _nfft;
- bool _inverse;
- std::vector _twiddles;
- std::vector _stageRadix;
- std::vector _stageRemainder;
- traits_type _traits;
-};
-#endif
diff --git a/examples/bare-metal/micro_speech/kissfft/test/Makefile b/examples/bare-metal/micro_speech/kissfft/test/Makefile
deleted file mode 100644
index c204511ea..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/Makefile
+++ /dev/null
@@ -1,108 +0,0 @@
-
-WARNINGS=-W -Wall -Wstrict-prototypes -Wmissing-prototypes -Waggregate-return \
- -Wcast-align -Wcast-qual -Wnested-externs -Wshadow -Wbad-function-cast \
- -Wwrite-strings
-
-CFLAGS=-O3 -I.. -I../tools $(WARNINGS)
-CFLAGS+=-ffast-math -fomit-frame-pointer
-#CFLAGS+=-funroll-loops
-#CFLAGS+=-march=prescott
-#CFLAGS+= -mtune=native
-# TIP: try adding -openmp or -fopenmp to enable OPENMP directives and use of multiple cores
-#CFLAGS+=-fopenmp
-CFLAGS+= $(CFLAGADD)
-
-
-ifeq "$(NFFT)" ""
- NFFT=1800
-endif
-ifeq "$(NUMFFTS)" ""
- NUMFFTS=10000
-endif
-
-ifeq "$(DATATYPE)" ""
- DATATYPE=float
-endif
-
-BENCHKISS=bm_kiss_$(DATATYPE)
-BENCHFFTW=bm_fftw_$(DATATYPE)
-SELFTEST=st_$(DATATYPE)
-TESTREAL=tr_$(DATATYPE)
-TESTKFC=tkfc_$(DATATYPE)
-FASTFILTREAL=ffr_$(DATATYPE)
-SELFTESTSRC=twotonetest.c
-
-
-TYPEFLAGS=-Dkiss_fft_scalar=$(DATATYPE)
-
-ifeq "$(DATATYPE)" "int16_t"
- TYPEFLAGS=-DFIXED_POINT=16
-endif
-
-ifeq "$(DATATYPE)" "int32_t"
- TYPEFLAGS=-DFIXED_POINT=32
-endif
-
-ifeq "$(DATATYPE)" "simd"
- TYPEFLAGS=-DUSE_SIMD=1 -msse
-endif
-
-
-ifeq "$(DATATYPE)" "float"
- # fftw needs to be built with --enable-float to build this lib
- FFTWLIB=-lfftw3f
-else
- FFTWLIB=-lfftw3
-endif
-
-FFTWLIBDIR=-L/usr/local/lib/
-
-SRCFILES=../kiss_fft.c ../tools/kiss_fftnd.c ../tools/kiss_fftr.c pstats.c ../tools/kfc.c ../tools/kiss_fftndr.c
-
-all: tools $(BENCHKISS) $(SELFTEST) $(BENCHFFTW) $(TESTREAL) $(TESTKFC)
-
-tools:
- cd ../tools && make all
-
-
-$(SELFTEST): $(SELFTESTSRC) $(SRCFILES)
- $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm
-
-$(TESTKFC): $(SRCFILES)
- $(CC) -o $@ $(CFLAGS) -DKFC_TEST $(TYPEFLAGS) $+ -lm
-
-$(TESTREAL): test_real.c $(SRCFILES)
- $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm
-
-$(BENCHKISS): benchkiss.c $(SRCFILES)
- $(CC) -o $@ $(CFLAGS) $(TYPEFLAGS) $+ -lm
-
-$(BENCHFFTW): benchfftw.c pstats.c
- @echo "======attempting to build FFTW benchmark"
- @$(CC) -o $@ $(CFLAGS) -DDATATYPE$(DATATYPE) $+ $(FFTWLIB) $(FFTWLIBDIR) -lm || echo "FFTW not available for comparison"
-
-test: all
- @./$(TESTKFC)
- @echo "======1d & 2-d complex fft self test (type= $(DATATYPE) )"
- @./$(SELFTEST)
- @echo "======real FFT (type= $(DATATYPE) )"
- @./$(TESTREAL)
- @echo "======timing test (type=$(DATATYPE))"
- @./$(BENCHKISS) -x $(NUMFFTS) -n $(NFFT)
- @[ -x ./$(BENCHFFTW) ] && ./$(BENCHFFTW) -x $(NUMFFTS) -n $(NFFT) ||true
- @echo "======higher dimensions type=$(DATATYPE))"
- @./testkiss.py
-
-selftest.c:
- ./mk_test.py 10 12 14 > selftest.c
-selftest_short.c:
- ./mk_test.py -s 10 12 14 > selftest_short.c
-
-
-CXXFLAGS=-O3 -ffast-math -fomit-frame-pointer -I.. -I../tools -W -Wall
-testcpp: testcpp.cc ../kissfft.hh
- $(CXX) -o $@ $(CXXFLAGS) testcpp.cc -lm
-
-
-clean:
- rm -f *~ bm_* st_* tr_* kf_* tkfc_* ff_* ffr_* *.pyc *.pyo *.dat testcpp
diff --git a/examples/bare-metal/micro_speech/kissfft/test/benchfftw.c b/examples/bare-metal/micro_speech/kissfft/test/benchfftw.c
deleted file mode 100644
index 8824d1952..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/benchfftw.c
+++ /dev/null
@@ -1,94 +0,0 @@
-#include
-#include
-#include
-#include
-#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
-#include
-#include
-#include
-#include "kiss_fft.h"
-#include "kiss_fftr.h"
-#include "kiss_fftnd.h"
-#include "kiss_fftndr.h"
-
-#include "pstats.h"
-
-static
-int getdims(int * dims, char * arg)
-{
- char *s;
- int ndims=0;
- while ( (s=strtok( arg , ",") ) ) {
- dims[ndims++] = atoi(s);
- //printf("%s=%d\n",s,dims[ndims-1]);
- arg=NULL;
- }
- return ndims;
-}
-
-int main(int argc,char ** argv)
-{
- int k;
- int nfft[32];
- int ndims = 1;
- int isinverse=0;
- int numffts=1000,i;
- kiss_fft_cpx * buf;
- kiss_fft_cpx * bufout;
- int real = 0;
-
- nfft[0] = 1024;// default
-
- while (1) {
- int c = getopt (argc, argv, "n:ix:r");
- if (c == -1)
- break;
- switch (c) {
- case 'r':
- real = 1;
- break;
- case 'n':
- ndims = getdims(nfft, optarg );
- if (nfft[0] != kiss_fft_next_fast_size(nfft[0]) ) {
- int ng = kiss_fft_next_fast_size(nfft[0]);
- fprintf(stderr,"warning: %d might be a better choice for speed than %d\n",ng,nfft[0]);
- }
- break;
- case 'x':
- numffts = atoi (optarg);
- break;
- case 'i':
- isinverse = 1;
- break;
- }
- }
- int nbytes = sizeof(kiss_fft_cpx);
- for (k=0;k
-
-#include "kiss_fft.h"
-#include "kiss_fftnd.h"
-#include "kiss_fftr.h"
-
-BEGIN_BENCH_DOC
-BENCH_DOC("name", "kissfft")
-BENCH_DOC("version", "1.0.1")
-BENCH_DOC("year", "2004")
-BENCH_DOC("author", "Mark Borgerding")
-BENCH_DOC("language", "C")
-BENCH_DOC("url", "http://sourceforge.net/projects/kissfft/")
-BENCH_DOC("copyright",
-"Copyright (c) 2003,4 Mark Borgerding\n"
-"\n"
-"All rights reserved.\n"
-"\n"
-"Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n"
-"\n"
-" * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n"
-" * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n"
-" * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n"
-"\n"
- "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n")
-END_BENCH_DOC
-
-int can_do(struct problem *p)
-{
- if (p->rank == 1) {
- if (p->kind == PROBLEM_REAL) {
- return (p->n[0] & 1) == 0; /* only even real is okay */
- } else {
- return 1;
- }
- } else {
- return p->kind == PROBLEM_COMPLEX;
- }
-}
-
-static kiss_fft_cfg cfg=NULL;
-static kiss_fftr_cfg cfgr=NULL;
-static kiss_fftnd_cfg cfgnd=NULL;
-
-#define FAILIF( c ) \
- if ( c ) do {\
- fprintf(stderr,\
- "kissfft: " #c " (file=%s:%d errno=%d %s)\n",\
- __FILE__,__LINE__ , errno,strerror( errno ) ) ;\
- exit(1);\
- }while(0)
-
-
-
-void setup(struct problem *p)
-{
- size_t i;
-
- /*
- fprintf(stderr,"%s %s %d-d ",
- (p->sign == 1)?"Inverse":"Forward",
- p->kind == PROBLEM_COMPLEX?"Complex":"Real",
- p->rank);
- */
- if (p->rank == 1) {
- if (p->kind == PROBLEM_COMPLEX) {
- cfg = kiss_fft_alloc (p->n[0], (p->sign == 1), 0, 0);
- FAILIF(cfg==NULL);
- }else{
- cfgr = kiss_fftr_alloc (p->n[0], (p->sign == 1), 0, 0);
- FAILIF(cfgr==NULL);
- }
- }else{
- int dims[5];
- for (i=0;irank;++i){
- dims[i] = p->n[i];
- }
- /* multi-dimensional */
- if (p->kind == PROBLEM_COMPLEX) {
- cfgnd = kiss_fftnd_alloc( dims , p->rank, (p->sign == 1), 0, 0 );
- FAILIF(cfgnd==NULL);
- }
- }
-}
-
-void doit(int iter, struct problem *p)
-{
- int i;
- void *in = p->in;
- void *out = p->out;
-
- if (p->in_place)
- out = p->in;
-
- if (p->rank == 1) {
- if (p->kind == PROBLEM_COMPLEX){
- for (i = 0; i < iter; ++i)
- kiss_fft (cfg, in, out);
- } else {
- /* PROBLEM_REAL */
- if (p->sign == -1) /* FORWARD */
- for (i = 0; i < iter; ++i)
- kiss_fftr (cfgr, in, out);
- else
- for (i = 0; i < iter; ++i)
- kiss_fftri (cfgr, in, out);
- }
- }else{
- /* multi-dimensional */
- for (i = 0; i < iter; ++i)
- kiss_fftnd(cfgnd,in,out);
- }
-}
-
-void done(struct problem *p)
-{
- free(cfg);
- cfg=NULL;
- free(cfgr);
- cfgr=NULL;
- free(cfgnd);
- cfgnd=NULL;
- UNUSED(p);
-}
diff --git a/examples/bare-metal/micro_speech/kissfft/test/fastfir.py b/examples/bare-metal/micro_speech/kissfft/test/fastfir.py
deleted file mode 100755
index 5ff432a36..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/fastfir.py
+++ /dev/null
@@ -1,102 +0,0 @@
-#!/usr/bin/env python
-
-from Numeric import *
-from FFT import *
-
-def make_random(len):
- import random
- res=[]
- for i in range(int(len)):
- r=random.uniform(-1,1)
- i=random.uniform(-1,1)
- res.append( complex(r,i) )
- return res
-
-def slowfilter(sig,h):
- translen = len(h)-1
- return convolve(sig,h)[translen:-translen]
-
-def nextpow2(x):
- return 2 ** math.ceil(math.log(x)/math.log(2))
-
-def fastfilter(sig,h,nfft=None):
- if nfft is None:
- nfft = int( nextpow2( 2*len(h) ) )
- H = fft( h , nfft )
- scraplen = len(h)-1
- keeplen = nfft-scraplen
- res=[]
- isdone = 0
- lastidx = nfft
- idx0 = 0
- while not isdone:
- idx1 = idx0 + nfft
- if idx1 >= len(sig):
- idx1 = len(sig)
- lastidx = idx1-idx0
- if lastidx <= scraplen:
- break
- isdone = 1
- Fss = fft(sig[idx0:idx1],nfft)
- fm = Fss * H
- m = inverse_fft(fm)
- res.append( m[scraplen:lastidx] )
- idx0 += keeplen
- return concatenate( res )
-
-def main():
- import sys
- from getopt import getopt
- opts,args = getopt(sys.argv[1:],'rn:l:')
- opts=dict(opts)
-
- siglen = int(opts.get('-l',1e4 ) )
- hlen =50
-
- nfft = int(opts.get('-n',128) )
- usereal = opts.has_key('-r')
-
- print 'nfft=%d'%nfft
- # make a signal
- sig = make_random( siglen )
- # make an impulse response
- h = make_random( hlen )
- #h=[1]*2+[0]*3
- if usereal:
- sig=[c.real for c in sig]
- h=[c.real for c in h]
-
- # perform MAC filtering
- yslow = slowfilter(sig,h)
- #print '',yslow,''
- #yfast = fastfilter(sig,h,nfft)
- yfast = utilfastfilter(sig,h,nfft,usereal)
- #print yfast
- print 'len(yslow)=%d'%len(yslow)
- print 'len(yfast)=%d'%len(yfast)
- diff = yslow-yfast
- snr = 10*log10( abs( vdot(yslow,yslow) / vdot(diff,diff) ) )
- print 'snr=%s' % snr
- if snr < 10.0:
- print 'h=',h
- print 'sig=',sig[:5],'...'
- print 'yslow=',yslow[:5],'...'
- print 'yfast=',yfast[:5],'...'
-
-def utilfastfilter(sig,h,nfft,usereal):
- import compfft
- import os
- open( 'sig.dat','w').write( compfft.dopack(sig,'f',not usereal) )
- open( 'h.dat','w').write( compfft.dopack(h,'f',not usereal) )
- if usereal:
- util = './fastconvr'
- else:
- util = './fastconv'
- cmd = 'time %s -n %d -i sig.dat -h h.dat -o out.dat' % (util, nfft)
- print cmd
- ec = os.system(cmd)
- print 'exited->',ec
- return compfft.dounpack(open('out.dat').read(),'f',not usereal)
-
-if __name__ == "__main__":
- main()
diff --git a/examples/bare-metal/micro_speech/kissfft/test/fft.py b/examples/bare-metal/micro_speech/kissfft/test/fft.py
deleted file mode 100755
index 2705f71ff..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/fft.py
+++ /dev/null
@@ -1,196 +0,0 @@
-#!/usr/bin/env python
-
-import math
-import sys
-import random
-
-pi=math.pi
-e=math.e
-j=complex(0,1)
-
-def fft(f,inv):
- n=len(f)
- if n==1:
- return f
-
- for p in 2,3,5:
- if n%p==0:
- break
- else:
- raise Exception('%s not factorable ' % n)
-
- m = n/p
- Fout=[]
- for q in range(p): # 0,1
- fp = f[q::p] # every p'th time sample
- Fp = fft( fp ,inv)
- Fout.extend( Fp )
-
- for u in range(m):
- scratch = Fout[u::m] # u to end in strides of m
- for q1 in range(p):
- k = q1*m + u # indices to Fout above that became scratch
- Fout[ k ] = scratch[0] # cuz e**0==1 in loop below
- for q in range(1,p):
- if inv:
- t = e ** ( j*2*pi*k*q/n )
- else:
- t = e ** ( -j*2*pi*k*q/n )
- Fout[ k ] += scratch[q] * t
-
- return Fout
-
-def rifft(F):
- N = len(F) - 1
- Z = [0] * (N)
- for k in range(N):
- Fek = ( F[k] + F[-k-1].conjugate() )
- Fok = ( F[k] - F[-k-1].conjugate() ) * e ** (j*pi*k/N)
- Z[k] = Fek + j*Fok
-
- fp = fft(Z , 1)
-
- f = []
- for c in fp:
- f.append(c.real)
- f.append(c.imag)
- return f
-
-def real_fft( f,inv ):
- if inv:
- return rifft(f)
-
- N = len(f) / 2
-
- res = f[::2]
- ims = f[1::2]
-
- fp = [ complex(r,i) for r,i in zip(res,ims) ]
- print 'fft input ', fp
- Fp = fft( fp ,0 )
- print 'fft output ', Fp
-
- F = [ complex(0,0) ] * ( N+1 )
-
- F[0] = complex( Fp[0].real + Fp[0].imag , 0 )
-
- for k in range(1,N/2+1):
- tw = e ** ( -j*pi*(.5+float(k)/N ) )
-
- F1k = Fp[k] + Fp[N-k].conjugate()
- F2k = Fp[k] - Fp[N-k].conjugate()
- F2k *= tw
- F[k] = ( F1k + F2k ) * .5
- F[N-k] = ( F1k - F2k ).conjugate() * .5
- #F[N-k] = ( F1kp + e ** ( -j*pi*(.5+float(N-k)/N ) ) * F2kp ) * .5
- #F[N-k] = ( F1k.conjugate() - tw.conjugate() * F2k.conjugate() ) * .5
-
- F[N] = complex( Fp[0].real - Fp[0].imag , 0 )
- return F
-
-def main():
- #fft_func = fft
- fft_func = real_fft
-
- tvec = [0.309655,0.815653,0.768570,0.591841,0.404767,0.637617,0.007803,0.012665]
- Ftvec = [ complex(r,i) for r,i in zip(
- [3.548571,-0.378761,-0.061950,0.188537,-0.566981,0.188537,-0.061950,-0.378761],
- [0.000000,-1.296198,-0.848764,0.225337,0.000000,-0.225337,0.848764,1.296198] ) ]
-
- F = fft_func( tvec,0 )
-
- nerrs= 0
- for i in range(len(Ftvec)/2 + 1):
- if abs( F[i] - Ftvec[i] )> 1e-5:
- print 'F[%d]: %s != %s' % (i,F[i],Ftvec[i])
- nerrs += 1
-
- print '%d errors in forward fft' % nerrs
- if nerrs:
- return
-
- trec = fft_func( F , 1 )
-
- for i in range(len(trec) ):
- trec[i] /= len(trec)
-
- for i in range(len(tvec) ):
- if abs( trec[i] - tvec[i] )> 1e-5:
- print 't[%d]: %s != %s' % (i,tvec[i],trec[i])
- nerrs += 1
-
- print '%d errors in reverse fft' % nerrs
-
-
-def make_random(dims=[1]):
- import Numeric
- res = []
- for i in range(dims[0]):
- if len(dims)==1:
- r=random.uniform(-1,1)
- i=random.uniform(-1,1)
- res.append( complex(r,i) )
- else:
- res.append( make_random( dims[1:] ) )
- return Numeric.array(res)
-
-def flatten(x):
- import Numeric
- ntotal = Numeric.product(Numeric.shape(x))
- return Numeric.reshape(x,(ntotal,))
-
-def randmat( ndims ):
- dims=[]
- for i in range( ndims ):
- curdim = int( random.uniform(2,4) )
- dims.append( curdim )
- return make_random(dims )
-
-def test_fftnd(ndims=3):
- import FFT
- import Numeric
-
- x=randmat( ndims )
- print 'dimensions=%s' % str( Numeric.shape(x) )
- #print 'x=%s' %str(x)
- xver = FFT.fftnd(x)
- x2=myfftnd(x)
- err = xver - x2
- errf = flatten(err)
- xverf = flatten(xver)
- errpow = Numeric.vdot(errf,errf)+1e-10
- sigpow = Numeric.vdot(xverf,xverf)+1e-10
- snr = 10*math.log10(abs(sigpow/errpow) )
- if snr<80:
- print xver
- print x2
- print 'SNR=%sdB' % str( snr )
-
-def myfftnd(x):
- import Numeric
- xf = flatten(x)
- Xf = fftndwork( xf , Numeric.shape(x) )
- return Numeric.reshape(Xf,Numeric.shape(x) )
-
-def fftndwork(x,dims):
- import Numeric
- dimprod=Numeric.product( dims )
-
- for k in range( len(dims) ):
- cur_dim=dims[ k ]
- stride=dimprod/cur_dim
- next_x = [complex(0,0)]*len(x)
- for i in range(stride):
- next_x[i*cur_dim:(i+1)*cur_dim] = fft(x[i:(i+cur_dim)*stride:stride],0)
- x = next_x
- return x
-
-if __name__ == "__main__":
- try:
- nd = int(sys.argv[1])
- except:
- nd=None
- if nd:
- test_fftnd( nd )
- else:
- sys.exit(0)
diff --git a/examples/bare-metal/micro_speech/kissfft/test/mk_test.py b/examples/bare-metal/micro_speech/kissfft/test/mk_test.py
deleted file mode 100755
index 998b730f5..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/mk_test.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#!/usr/bin/env python
-
-import FFT
-import sys
-import random
-import re
-j=complex(0,1)
-
-def randvec(n,iscomplex):
- if iscomplex:
- return [
- int(random.uniform(-32768,32767) ) + j*int(random.uniform(-32768,32767) )
- for i in range(n) ]
- else:
- return [ int(random.uniform(-32768,32767) ) for i in range(n) ]
-
-def c_format(v,round=0):
- if round:
- return ','.join( [ '{%d,%d}' %(int(c.real),int(c.imag) ) for c in v ] )
- else:
- s= ','.join( [ '{%.60f ,%.60f }' %(c.real,c.imag) for c in v ] )
- return re.sub(r'\.?0+ ',' ',s)
-
-def test_cpx( n,inverse ,short):
- v = randvec(n,1)
- scale = 1
- if short:
- minsnr=30
- else:
- minsnr=100
-
- if inverse:
- tvecout = FFT.inverse_fft(v)
- if short:
- scale = 1
- else:
- scale = len(v)
- else:
- tvecout = FFT.fft(v)
- if short:
- scale = 1.0/len(v)
-
- tvecout = [ c * scale for c in tvecout ]
-
-
- s="""#define NFFT %d""" % len(v) + """
- {
- double snr;
- kiss_fft_cpx test_vec_in[NFFT] = { """ + c_format(v) + """};
- kiss_fft_cpx test_vec_out[NFFT] = {""" + c_format( tvecout ) + """};
- kiss_fft_cpx testbuf[NFFT];
- void * cfg = kiss_fft_alloc(NFFT,%d,0,0);""" % inverse + """
-
- kiss_fft(cfg,test_vec_in,testbuf);
- snr = snr_compare(test_vec_out,testbuf,NFFT);
- printf("DATATYPE=" xstr(kiss_fft_scalar) ", FFT n=%d, inverse=%d, snr = %g dB\\n",NFFT,""" + str(inverse) + """,snr);
- if (snr<""" + str(minsnr) + """)
- exit_code++;
- free(cfg);
- }
-#undef NFFT
-"""
- return s
-
-def compare_func():
- s="""
-#define xstr(s) str(s)
-#define str(s) #s
-double snr_compare( kiss_fft_cpx * test_vec_out,kiss_fft_cpx * testbuf, int n)
-{
- int k;
- double sigpow,noisepow,err,snr,scale=0;
- kiss_fft_cpx err;
- sigpow = noisepow = .000000000000000000000000000001;
-
- for (k=0;k
-#include
-#include
-#include
-#include
-
-#include "pstats.h"
-
-static struct tms tms_beg;
-static struct tms tms_end;
-static int has_times = 0;
-
-
-void pstats_init(void)
-{
- has_times = times(&tms_beg) != -1;
-}
-
-static void tms_report(void)
-{
- double cputime;
- if (! has_times )
- return;
- times(&tms_end);
- cputime = ( ((float)tms_end.tms_utime + tms_end.tms_stime + tms_end.tms_cutime + tms_end.tms_cstime ) -
- ((float)tms_beg.tms_utime + tms_beg.tms_stime + tms_beg.tms_cutime + tms_beg.tms_cstime ) )
- / sysconf(_SC_CLK_TCK);
- fprintf(stderr,"\tcputime=%.3f\n" , cputime);
-}
-
-static void ps_report(void)
-{
- char buf[1024];
-#ifdef __APPLE__ /* MAC OS X */
- sprintf(buf,"ps -o command,majflt,minflt,rss,pagein,vsz -p %d 1>&2",getpid() );
-#else /* GNU/Linux */
- sprintf(buf,"ps -o comm,majflt,minflt,rss,drs,pagein,sz,trs,vsz %d 1>&2",getpid() );
-#endif
- if (system( buf )==-1) {
- perror("system call to ps failed");
- }
-}
-
-void pstats_report()
-{
- ps_report();
- tms_report();
-}
-
diff --git a/examples/bare-metal/micro_speech/kissfft/test/pstats.h b/examples/bare-metal/micro_speech/kissfft/test/pstats.h
deleted file mode 100644
index 71ff02a46..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/pstats.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef PSTATS_H
-#define PSTATS_H
-
-void pstats_init(void);
-void pstats_report(void);
-
-#endif
diff --git a/examples/bare-metal/micro_speech/kissfft/test/tailscrap.m b/examples/bare-metal/micro_speech/kissfft/test/tailscrap.m
deleted file mode 100644
index abf904691..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/tailscrap.m
+++ /dev/null
@@ -1,26 +0,0 @@
-function maxabsdiff=tailscrap()
-% test code for circular convolution with the scrapped portion
-% at the tail of the buffer, rather than the front
-%
-% The idea is to rotate the zero-padded h (impulse response) buffer
-% to the left nh-1 samples, rotating the junk samples as well.
-% This could be very handy in avoiding buffer copies during fast filtering.
-nh=10;
-nfft=256;
-
-h=rand(1,nh);
-x=rand(1,nfft);
-
-hpad=[ h(nh) zeros(1,nfft-nh) h(1:nh-1) ];
-
-% baseline comparison
-y1 = filter(h,1,x);
-y1_notrans = y1(nh:nfft);
-
-% fast convolution
-y2 = ifft( fft(hpad) .* fft(x) );
-y2_notrans=y2(1:nfft-nh+1);
-
-maxabsdiff = max(abs(y2_notrans - y1_notrans))
-
-end
diff --git a/examples/bare-metal/micro_speech/kissfft/test/test_real.c b/examples/bare-metal/micro_speech/kissfft/test/test_real.c
deleted file mode 100644
index 36a0b086c..000000000
--- a/examples/bare-metal/micro_speech/kissfft/test/test_real.c
+++ /dev/null
@@ -1,172 +0,0 @@
-#include "kiss_fftr.h"
-#include "_kiss_fft_guts.h"
-#include
-#include
-#include
-
-static double cputime(void)
-{
- struct tms t;
- times(&t);
- return (double)(t.tms_utime + t.tms_stime)/ sysconf(_SC_CLK_TCK) ;
-}
-
-static
-kiss_fft_scalar rand_scalar(void)
-{
-#ifdef USE_SIMD
- return _mm_set1_ps(rand()-RAND_MAX/2);
-#else
- kiss_fft_scalar s = (kiss_fft_scalar)(rand() -RAND_MAX/2);
- return s/2;
-#endif
-}
-
-static
-double snr_compare( kiss_fft_cpx * vec1,kiss_fft_cpx * vec2, int n)
-{
- int k;
- double sigpow=1e-10,noisepow=1e-10,err,snr,scale=0;
-
-#ifdef USE_SIMD
- float *fv1 = (float*)vec1;
- float *fv2 = (float*)vec2;
- for (k=0;k<8*n;++k) {
- sigpow += *fv1 * *fv1;
- err = *fv1 - *fv2;
- noisepow += err*err;
- ++fv1;
- ++fv2;
- }
-#else
- for (k=0;k1)
- nfft = atoi(argv[1]);
- kiss_fft_cpx cin[nfft];
- kiss_fft_cpx cout[nfft];
- kiss_fft_cpx sout[nfft];
- kiss_fft_cfg kiss_fft_state;
- kiss_fftr_cfg kiss_fftr_state;
-
- kiss_fft_scalar rin[nfft+2];
- kiss_fft_scalar rout[nfft+2];
- kiss_fft_scalar zero;
- memset(&zero,0,sizeof(zero) ); // ugly way of setting short,int,float,double, or __m128 to zero
-
- srand(time(0));
-
- for (i=0;i1) {
- int k;
- for (k=1;k
-#include
-#include
-
-#include