Chris@184: #include "kiss_fftr.h" Chris@184: #include "_kiss_fft_guts.h" Chris@184: #include Chris@184: #include Chris@184: #include Chris@184: Chris@184: static double cputime(void) Chris@184: { Chris@184: struct tms t; Chris@184: times(&t); Chris@184: return (double)(t.tms_utime + t.tms_stime)/ sysconf(_SC_CLK_TCK) ; Chris@184: } Chris@184: Chris@184: static Chris@184: kiss_fft_scalar rand_scalar(void) Chris@184: { Chris@184: #ifdef USE_SIMD Chris@184: return _mm_set1_ps(rand()-RAND_MAX/2); Chris@184: #else Chris@184: kiss_fft_scalar s = (kiss_fft_scalar)(rand() -RAND_MAX/2); Chris@184: return s/2; Chris@184: #endif Chris@184: } Chris@184: Chris@184: static Chris@184: double snr_compare( kiss_fft_cpx * vec1,kiss_fft_cpx * vec2, int n) Chris@184: { Chris@184: int k; Chris@184: double sigpow=1e-10,noisepow=1e-10,err,snr,scale=0; Chris@184: Chris@184: #ifdef USE_SIMD Chris@184: float *fv1 = (float*)vec1; Chris@184: float *fv2 = (float*)vec2; Chris@184: for (k=0;k<8*n;++k) { Chris@184: sigpow += *fv1 * *fv1; Chris@184: err = *fv1 - *fv2; Chris@184: noisepow += err*err; Chris@184: ++fv1; Chris@184: ++fv2; Chris@184: } Chris@184: #else Chris@184: for (k=0;k1) Chris@184: nfft = atoi(argv[1]); Chris@184: kiss_fft_cpx cin[nfft]; Chris@184: kiss_fft_cpx cout[nfft]; Chris@184: kiss_fft_cpx sout[nfft]; Chris@184: kiss_fft_cfg kiss_fft_state; Chris@184: kiss_fftr_cfg kiss_fftr_state; Chris@184: Chris@184: kiss_fft_scalar rin[nfft+2]; Chris@184: kiss_fft_scalar rout[nfft+2]; Chris@184: kiss_fft_scalar zero; Chris@184: memset(&zero,0,sizeof(zero) ); // ugly way of setting short,int,float,double, or __m128 to zero Chris@184: Chris@184: srand(time(0)); Chris@184: Chris@184: for (i=0;i