Chris@366: #include "kissfft.hh" Chris@366: #include Chris@366: #include Chris@366: #include Chris@366: Chris@366: #include Chris@366: static inline Chris@366: double curtime(void) Chris@366: { Chris@366: struct timeval tv; Chris@366: gettimeofday(&tv, NULL); Chris@366: return (double)tv.tv_sec + (double)tv.tv_usec*.000001; Chris@366: } Chris@366: Chris@366: using namespace std; Chris@366: Chris@366: template Chris@366: void dotest(int nfft) Chris@366: { Chris@366: typedef kissfft FFT; Chris@366: typedef std::complex cpx_type; Chris@366: Chris@366: cout << "type:" << typeid(T).name() << " nfft:" << nfft; Chris@366: Chris@366: FFT fft(nfft,false); Chris@366: Chris@366: vector inbuf(nfft); Chris@366: vector outbuf(nfft); Chris@366: for (int k=0;k acc = 0; Chris@366: long double phinc = 2*k0* M_PIl / nfft; Chris@366: for (int k1=0;k1 x(inbuf[k1].real(),inbuf[k1].imag()); Chris@366: acc += x * exp( complex(0,-k1*phinc) ); Chris@366: } Chris@366: totalpower += norm(acc); Chris@366: complex x(outbuf[k0].real(),outbuf[k0].imag()); Chris@366: complex dif = acc - x; Chris@366: difpower += norm(dif); Chris@366: } Chris@366: cout << " RMSE:" << sqrt(difpower/totalpower) << "\t"; Chris@366: Chris@366: double t0 = curtime(); Chris@366: int nits=20e6/nfft; Chris@366: for (int k=0;k1) { Chris@366: for (int k=1;k(nfft); dotest(nfft); dotest(nfft); Chris@366: } Chris@366: }else{ Chris@366: dotest(32); dotest(32); dotest(32); Chris@366: dotest(1024); dotest(1024); dotest(1024); Chris@366: dotest(840); dotest(840); dotest(840); Chris@366: } Chris@366: return 0; Chris@366: }