SigPack - the C++ signal processing library
 
Loading...
Searching...
No Matches
fftw_wisdom.cpp
Go to the documentation of this file.
1
13#include <sigpack.h>
14using namespace arma;
15using namespace sp;
16
17int main()
18{
19 int r = 480, c = 640;
20 mat x( r, c );
21 cx_mat X( r, c );
22 clock_t tic;
23 FFTW X_2d( r, c, FFTW_MEASURE );
24
25 x.randn();
26
27 tic = clock();
28 X = fft2( x );
29 cout << "Armadillo FFT Time = " << ( clock() - tic ) / double( CLOCKS_PER_SEC ) << endl;
30
31 tic = clock();
32 X = X_2d.fft2( x );
33 cout << "FFTW Time without Wisdom = " << ( clock() - tic ) / double( CLOCKS_PER_SEC ) << endl;
34
35 // X_2d.export_wisdom_fft( "wisd_fft.txt" );
36
37 // This string is generated by the export command above and is depending upon
38 // the FFTW version used, in this case fftw-3.3.10. Run the code once with the
39 // export command and the copy-paste the result into this string. It is also
40 // possible to generate a string from the shell using the program fftw-wisdom
41 // distributed with FFTW
42 std::string str_fft = "\
43 (fftw-3.3.10 fftw_wisdom #x458a31c8 #x92381c4c #x4f974889 #xcd46f97e\
44 (fftw_codelet_t3fv_20_avx 0 #x30bff #x30bff #x0 #xab49f289 #x355a403c #x22d8d107 #x666972bf)\
45 (fftw_codelet_t1fv_20_avx 0 #x10bdd #x10bdd #x0 #x9ed0817a #x2a9b041a #x8b39595c #x5efb73dd)\
46 (fftw_dft_r2hc_register 0 #x11bdd #x11bdd #x0 #x82eb7ec1 #xb05bce40 #x2b2c2489 #xbb8aa9ea)\
47 (fftw_dft_vrank_geq1_register 0 #x30bff #x30bff #x0 #x81040548 #xc3ac7f8a #x0deb7a98 #x866da54e)\
48 (fftw_dft_buffered_register 0 #x11bdd #x11bdd #x0 #x948fd3d8 #x921c261c #x3794c958 #x4261df23)\
49 (fftw_codelet_t3fv_20_avx 0 #x30bff #x30bff #x0 #xeef13212 #x4eed4932 #xe232d8f7 #x1ae91779)\
50 (fftw_codelet_n1fv_3_avx 0 #x30bff #x30bff #x0 #xbed769f9 #x726baac6 #x41ffb29f #x90ef6f9d)\
51 (fftw_rdft2_vrank_geq1_register 0 #x11048 #x11048 #x0 #x5fbfaf8d #xd7c71ef8 #xc763e411 #x2a1d804b)\
52 (fftw_dft_buffered_register 0 #x11048 #x11048 #x0 #x948fd3d8 #x921c261c #x3794c958 #x4261df23)\
53 (fftw_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x63650fa5 #x1642b783 #x69285c61 #x650a38e1)\
54 (fftw_rdft_rank0_register 2 #x11048 #x11048 #x0 #x5c2cc86a #x3d86b0c3 #xe3aeadc0 #xdc7e28da)\
55 (fftw_dft_vrank_geq1_register 0 #x10bdd #x10bdd #x0 #xd6be357e #x16cd9fad #x96ee4d3d #xcc841ff6)\
56 (fftw_codelet_hc2cfdftv_2_avx 0 #x11048 #x11048 #x0 #x273e2b42 #x6f57ae52 #xfd23a4a9 #x578e3fd1)\
57 (fftw_codelet_n2fv_32_avx 0 #x10048 #x10048 #x0 #xa20483f8 #x81643968 #x72efb6f5 #x309ef8ed)\
58 (fftw_codelet_r2cfII_2 2 #x11048 #x11048 #x0 #x7d87470c #x9a8fa84e #x594d1b19 #xe33421cd)\
59 (fftw_rdft2_vrank_geq1_register 0 #x11bdd #x11bdd #x0 #x5fbfaf8d #xd7c71ef8 #xc763e411 #x2a1d804b)\
60 (fftw_codelet_t1fv_20_avx 0 #x10048 #x10048 #x0 #xd6be357e #x16cd9fad #x96ee4d3d #xcc841ff6)\
61 (fftw_codelet_r2cfII_2 2 #x11bdd #x11bdd #x0 #x7d87470c #x9a8fa84e #x594d1b19 #xe33421cd)\
62 (fftw_codelet_r2cf_2 2 #x11bdd #x11bdd #x0 #x055f68ee #x109fc123 #x55f761d7 #xb3cf78c3)\
63 (fftw_rdft_rank0_register 3 #x11048 #x11048 #x0 #x02d4eca5 #x884a04c6 #x3f0ad214 #xda717200)\
64 (fftw_dft_nop_register 0 #x11bdd #x11bdd #x0 #x76bbd3bc #xcfeb9088 #x9e21b533 #x49182bb0)\
65 (fftw_codelet_r2cf_2 2 #x11048 #x11048 #x0 #x055f68ee #x109fc123 #x55f761d7 #xb3cf78c3)\
66 (fftw_rdft_rank0_register 3 #x11bdd #x11bdd #x0 #x02d4eca5 #x884a04c6 #x3f0ad214 #xda717200)\
67 (fftw_codelet_t2fv_20_avx 0 #x11bdd #x11bdd #x0 #x2fa8abef #x5e475335 #xecc229c3 #xd0ff9ce7)\
68 (fftw_rdft2_rank_geq2_register 0 #x11048 #x11048 #x0 #x02ea06f0 #x38d222a8 #xdd69f756 #xc618b279)\
69 (fftw_rdft2_rank_geq2_register 0 #x11bdd #x11bdd #x0 #x02ea06f0 #x38d222a8 #xdd69f756 #xc618b279)\
70 (fftw_codelet_n2fv_12_avx 0 #x11048 #x11048 #x0 #xe63b0d4a #x2d9149fa #xf85a1f1c #xc30b3a35)\
71 (fftw_dft_r2hc_register 0 #x11048 #x11048 #x0 #xa4f3d403 #xf68a2000 #x3aa7b324 #xf998040b)\
72 (fftw_codelet_n1fv_32_avx 0 #x10bdd #x10bdd #x0 #x245d0d37 #x50895ce3 #x4b9b75df #x8081fdbb)\
73 (fftw_codelet_t2fv_20_avx 0 #x11048 #x11048 #x0 #x2fa8abef #x5e475335 #xecc229c3 #xd0ff9ce7)\
74 (fftw_codelet_n2fv_12_avx 0 #x11bdd #x11bdd #x0 #xe63b0d4a #x2d9149fa #xf85a1f1c #xc30b3a35)\
75 (fftw_codelet_n1fv_32_avx 0 #x10048 #x10048 #x0 #x245d0d37 #x50895ce3 #x4b9b75df #x8081fdbb)\
76 (fftw_dft_buffered_register 0 #x11048 #x11048 #x0 #x1018de6d #x760edbc0 #xadb405fb #x3390a6e1)\
77 (fftw_dft_r2hc_register 0 #x11048 #x11048 #x0 #x82eb7ec1 #xb05bce40 #x2b2c2489 #xbb8aa9ea)\
78 (fftw_rdft_rank0_register 2 #x11bdd #x11bdd #x0 #x5c2cc86a #x3d86b0c3 #xe3aeadc0 #xdc7e28da)\
79 (fftw_codelet_t1fv_20_avx 0 #x10048 #x10048 #x0 #x9ed0817a #x2a9b041a #x8b39595c #x5efb73dd)\
80 (fftw_codelet_t1fuv_8_avx 0 #x30bff #x30bff #x0 #x9918998d #x0cb63fcb #x221c9b94 #xf7998e4e)\
81 (fftw_dft_r2hc_register 0 #x11bdd #x11bdd #x0 #xa4f3d403 #xf68a2000 #x3aa7b324 #xf998040b)\
82 (fftw_dft_nop_register 0 #x11048 #x11048 #x0 #x76bbd3bc #xcfeb9088 #x9e21b533 #x49182bb0)\
83 (fftw_codelet_n2fv_32_avx 0 #x30bff #x30bff #x0 #x32442c41 #xef6b1750 #x12dd6857 #xd3a2edc8)\
84 (fftw_dft_buffered_register 0 #x11bdd #x11bdd #x0 #x1018de6d #x760edbc0 #xadb405fb #x3390a6e1)\
85 (fftw_codelet_hc2cfdftv_2_avx 0 #x11bdd #x11bdd #x0 #x273e2b42 #x6f57ae52 #xfd23a4a9 #x578e3fd1))";
86
87 X_2d.import_wisdom_string( str_fft );
88 // X_2d.import_wisdom_file("wisd_fft.txt");
89
90 tic = clock();
91 X = X_2d.fft2( x );
92 cout << "FFTW Time using Wisdom = " << ( clock() - tic ) / double( CLOCKS_PER_SEC ) << endl;
93
94 return 0;
95}
FFTW class.
Definition fftw.h:26
void fft2(arma::mat &x, arma::cx_mat &Pxx)
FFT of real 2D input.
Definition fftw.h:233
void import_wisdom_string(const std::string wisd)
Import wisdom from string.
Definition fftw.h:331
int main()
Definition base.h:8