// GSL fft test with either std::vector or ublas::vector // // Compile for std::vector : // g++ gsl_fft_boost_vector_main.cpp -lgsl -L/usr/lib64/atlas -latlas -lcblas // Compile for boost::numeric::ublas::vector : // g++ -DBOOST gsl_fft_boost_vector_main.cpp -lgsl -L/usr/lib64/atlas -latlas -lcblas // #include #include #include #include #include #include "gsl_fft.hpp" #include using namespace std; typedef complex dtype ; #ifdef BOOST #include #include #include typedef boost::numeric::ublas::vector vec; #else #include typedef vector vec; #endif void vector_out(ostream& stream, vec v){ vec::iterator vpos; stream<(),1.0)); transform(v.end()-nones,v.end(),v.end()-nones,bind2nd(plus(),1.0)); // } void normalize_fft(vec& v){ // alternatively: //double norm = sqrt(v.size()); //for(unsigned i=0;i(),sqrt(v.size()))); } int main (void){ const int n=128; vec data(n,0.0); ofstream myfile("result"); create_pulse(data); cout<<"before fft :\n"; vector_out(cout,data); vector_out(myfile,data); // ---------------------- // forward FFT int status = fft(data,1); // ---------------------- if(status!=0){ cout << "fft fails\n"; return 1; } cout<<"after forward fft (divided by sqrt(n)) :\n"; normalize_fft(data); vector_out(cout,data); vector_out(myfile,data); // ---------------------- // backward FFT status = fft(data,-1); // ---------------------- if(status!=0){ cout << "fft fails\n"; return 1; } normalize_fft(data); cout<<"after backward fft (divided by sqrt(n)) :\n"; vector_out(cout,data); myfile.close(); return 0; }