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