using namespace arma;
{
int r = 480, c = 640;
mat x( r, c );
cx_mat X( r, c );
clock_t tic;
FFTW X_2d( r, c, FFTW_MEASURE );
x.randn();
tic = clock();
X = fft2( x );
cout << "Armadillo FFT Time = " << ( clock() - tic ) / double( CLOCKS_PER_SEC ) << endl;
tic = clock();
cout << "FFTW Time without Wisdom = " << ( clock() - tic ) / double( CLOCKS_PER_SEC ) << endl;
std::string str_fft = "\
(fftw-3.3.10 fftw_wisdom #x458a31c8 #x92381c4c #x4f974889 #xcd46f97e\
(fftw_codelet_t3fv_20_avx 0 #x30bff #x30bff #x0 #xab49f289 #x355a403c #x22d8d107 #x666972bf)\
(fftw_codelet_t1fv_20_avx 0 #x10bdd #x10bdd #x0 #x9ed0817a #x2a9b041a #x8b39595c #x5efb73dd)\
(fftw_dft_r2hc_register 0 #x11bdd #x11bdd #x0 #x82eb7ec1 #xb05bce40 #x2b2c2489 #xbb8aa9ea)\
(fftw_dft_vrank_geq1_register 0 #x30bff #x30bff #x0 #x81040548 #xc3ac7f8a #x0deb7a98 #x866da54e)\
(fftw_dft_buffered_register 0 #x11bdd #x11bdd #x0 #x948fd3d8 #x921c261c #x3794c958 #x4261df23)\
(fftw_codelet_t3fv_20_avx 0 #x30bff #x30bff #x0 #xeef13212 #x4eed4932 #xe232d8f7 #x1ae91779)\
(fftw_codelet_n1fv_3_avx 0 #x30bff #x30bff #x0 #xbed769f9 #x726baac6 #x41ffb29f #x90ef6f9d)\
(fftw_rdft2_vrank_geq1_register 0 #x11048 #x11048 #x0 #x5fbfaf8d #xd7c71ef8 #xc763e411 #x2a1d804b)\
(fftw_dft_buffered_register 0 #x11048 #x11048 #x0 #x948fd3d8 #x921c261c #x3794c958 #x4261df23)\
(fftw_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x63650fa5 #x1642b783 #x69285c61 #x650a38e1)\
(fftw_rdft_rank0_register 2 #x11048 #x11048 #x0 #x5c2cc86a #x3d86b0c3 #xe3aeadc0 #xdc7e28da)\
(fftw_dft_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #xd6be357e #x16cd9fad #x96ee4d3d #xcc841ff6)\
(fftw_codelet_hc2cfdftv_2_avx 0 #x11048 #x11048 #x0 #x273e2b42 #x6f57ae52 #xfd23a4a9 #x578e3fd1)\
(fftw_codelet_n2fv_32_avx 0 #x10048 #x10048 #x0 #xa20483f8 #x81643968 #x72efb6f5 #x309ef8ed)\
(fftw_codelet_r2cfII_2 2 #x11048 #x11048 #x0 #x7d87470c #x9a8fa84e #x594d1b19 #xe33421cd)\
(fftw_rdft2_vrank_geq1_register 0 #x11bdd #x11bdd #x0 #x5fbfaf8d #xd7c71ef8 #xc763e411 #x2a1d804b)\
(fftw_codelet_t1fv_20_avx 0 #x10048 #x10048 #x0 #xd6be357e #x16cd9fad #x96ee4d3d #xcc841ff6)\
(fftw_codelet_r2cfII_2 2 #x11bdd #x11bdd #x0 #x7d87470c #x9a8fa84e #x594d1b19 #xe33421cd)\
(fftw_codelet_r2cf_2 2 #x11bdd #x11bdd #x0 #x055f68ee #x109fc123 #x55f761d7 #xb3cf78c3)\
(fftw_rdft_rank0_register 3 #x11048 #x11048 #x0 #x02d4eca5 #x884a04c6 #x3f0ad214 #xda717200)\
(fftw_dft_nop_register 0 #x11bdd #x11bdd #x0 #x76bbd3bc #xcfeb9088 #x9e21b533 #x49182bb0)\
(fftw_codelet_r2cf_2 2 #x11048 #x11048 #x0 #x055f68ee #x109fc123 #x55f761d7 #xb3cf78c3)\
(fftw_rdft_rank0_register 3 #x11bdd #x11bdd #x0 #x02d4eca5 #x884a04c6 #x3f0ad214 #xda717200)\
(fftw_codelet_t2fv_20_avx 0 #x11bdd #x11bdd #x0 #x2fa8abef #x5e475335 #xecc229c3 #xd0ff9ce7)\
(fftw_rdft2_rank_geq2_register 0 #x11048 #x11048 #x0 #x02ea06f0 #x38d222a8 #xdd69f756 #xc618b279)\
(fftw_rdft2_rank_geq2_register 0 #x11bdd #x11bdd #x0 #x02ea06f0 #x38d222a8 #xdd69f756 #xc618b279)\
(fftw_codelet_n2fv_12_avx 0 #x11048 #x11048 #x0 #xe63b0d4a #x2d9149fa #xf85a1f1c #xc30b3a35)\
(fftw_dft_r2hc_register 0 #x11048 #x11048 #x0 #xa4f3d403 #xf68a2000 #x3aa7b324 #xf998040b)\
(fftw_codelet_n1fv_32_avx 0 #x10bdd #x10bdd #x0 #x245d0d37 #x50895ce3 #x4b9b75df #x8081fdbb)\
(fftw_codelet_t2fv_20_avx 0 #x11048 #x11048 #x0 #x2fa8abef #x5e475335 #xecc229c3 #xd0ff9ce7)\
(fftw_codelet_n2fv_12_avx 0 #x11bdd #x11bdd #x0 #xe63b0d4a #x2d9149fa #xf85a1f1c #xc30b3a35)\
(fftw_codelet_n1fv_32_avx 0 #x10048 #x10048 #x0 #x245d0d37 #x50895ce3 #x4b9b75df #x8081fdbb)\
(fftw_dft_buffered_register 0 #x11048 #x11048 #x0 #x1018de6d #x760edbc0 #xadb405fb #x3390a6e1)\
(fftw_dft_r2hc_register 0 #x11048 #x11048 #x0 #x82eb7ec1 #xb05bce40 #x2b2c2489 #xbb8aa9ea)\
(fftw_rdft_rank0_register 2 #x11bdd #x11bdd #x0 #x5c2cc86a #x3d86b0c3 #xe3aeadc0 #xdc7e28da)\
(fftw_codelet_t1fv_20_avx 0 #x10048 #x10048 #x0 #x9ed0817a #x2a9b041a #x8b39595c #x5efb73dd)\
(fftw_codelet_t1fuv_8_avx 0 #x30bff #x30bff #x0 #x9918998d #x0cb63fcb #x221c9b94 #xf7998e4e)\
(fftw_dft_r2hc_register 0 #x11bdd #x11bdd #x0 #xa4f3d403 #xf68a2000 #x3aa7b324 #xf998040b)\
(fftw_dft_nop_register 0 #x11048 #x11048 #x0 #x76bbd3bc #xcfeb9088 #x9e21b533 #x49182bb0)\
(fftw_codelet_n2fv_32_avx 0 #x30bff #x30bff #x0 #x32442c41 #xef6b1750 #x12dd6857 #xd3a2edc8)\
(fftw_dft_buffered_register 0 #x11bdd #x11bdd #x0 #x1018de6d #x760edbc0 #xadb405fb #x3390a6e1)\
(fftw_codelet_hc2cfdftv_2_avx 0 #x11bdd #x11bdd #x0 #x273e2b42 #x6f57ae52 #xfd23a4a9 #x578e3fd1))";
tic = clock();
cout << "FFTW Time using Wisdom = " << ( clock() - tic ) / double( CLOCKS_PER_SEC ) << endl;
return 0;
}
void fft2(arma::mat &x, arma::cx_mat &Pxx)
FFT of real 2D input.
void import_wisdom_string(const std::string wisd)
Import wisdom from string.