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