diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2017-04-10 08:39:55 -0700 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2017-04-10 08:39:55 -0700 |
commit | acf6849268eb445bbc9e28648eeba5fa5d4a8ccb (patch) | |
tree | 8d93a0758d74cf8c2802a4abe893a4cf2ac2584a /gr-dtv | |
parent | 45e7bacbd5f1be64323dfc02e8902bed7b0b5811 (diff) | |
parent | 7a2ed103e04aa19c7358579805449466f2818017 (diff) |
Merge branch 'next' into python3
Diffstat (limited to 'gr-dtv')
-rw-r--r-- | gr-dtv/examples/README.dvbt2 | 33 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc | 95 | ||||
-rw-r--r-- | gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc | 12 |
3 files changed, 43 insertions, 97 deletions
diff --git a/gr-dtv/examples/README.dvbt2 b/gr-dtv/examples/README.dvbt2 index 488569189f..98cb400857 100644 --- a/gr-dtv/examples/README.dvbt2 +++ b/gr-dtv/examples/README.dvbt2 @@ -15,21 +15,21 @@ http://www.w6rz.net/vv014-64qam34.ts 430,739,584 bytes md5sum = 481cb73003703867 http://www.w6rz.net/vv015-8kfft.ts 463,359,088 bytes md5sum = d10c005a4bbf794da1bd01d26f024949 http://www.w6rz.net/vv016-256qam34.ts 593,489,680 bytes md5sum = 3a054cfdcc04b85ad5459a330937ea11 http://www.w6rz.net/vv017-paprtr.ts 592,947,676 bytes md5sum = 10cebd26cd55695be08d294fadcbf1f3 -http://www.w6rz.net/vv018-miso.ts 571898256 bytes md5sum = b432c64e40a2724eba2051a820733c76 -http://www.w6rz.net/vv019-norot.ts 478864952 bytes md5sum = 34db2abd4f9745b7d241745d81604016 -http://www.w6rz.net/vv034-dtg016.ts 397372592 bytes md5sum = 4550dffe45a5d31d8b91508aed1a9c35 -http://www.w6rz.net/vv035-dtg052.ts 373828224 bytes md5sum = 8f31539a752fff44efcabedf5903b333 -http://www.w6rz.net/vv036-dtg091.ts 334481140 bytes md5sum = 4d16c6fd3d929bb85e60eed76a7226a5 -http://www.w6rz.net/germany-g1.ts 242683936 bytes md5sum = f6fc96bd2abed49f375285d45af31e3f -http://www.w6rz.net/germany-g2.ts 291631616 bytes md5sum = defa11f02511254e96fc8fbf59d47ff2 -http://www.w6rz.net/germany-g3.ts 316245704 bytes md5sum = 2494f7b77eb1f11dad2e1c903ba6b389 -http://www.w6rz.net/germany-g4.ts 345044672 bytes md5sum = da256d6828d97c458ffef27931c626ff -http://www.w6rz.net/germany-g5.ts 347665204 bytes md5sum = 48f72cef940f294b26247da91abb9f25 -http://www.w6rz.net/germany-g6.ts 444296264 bytes md5sum = 605a76d12cce7d7009a08c87e97c70bc -http://www.w6rz.net/germany-g7.ts 351893888 bytes md5sum = 3ca71e2a35ab7be27ebd13ad97f00e85 -http://www.w6rz.net/germany-g8.ts 365656052 bytes md5sum = 8cbd41ea1a6f6405f6662300f17a9104 -http://www.w6rz.net/germany-g9.ts 260004376 bytes md5sum = a83d60366bca873cf30d18db1d9e9f9f -http://www.w6rz.net/germany-g10.ts 229421288 bytes md5sum = 641a7e4c8a9db92f3020e19ec8d0b8a7 +http://www.w6rz.net/vv018-miso.ts 571,898,256 bytes md5sum = b432c64e40a2724eba2051a820733c76 +http://www.w6rz.net/vv019-norot.ts 478,864,952 bytes md5sum = 34db2abd4f9745b7d241745d81604016 +http://www.w6rz.net/vv034-dtg016.ts 397,372,592 bytes md5sum = 4550dffe45a5d31d8b91508aed1a9c35 +http://www.w6rz.net/vv035-dtg052.ts 373,828,224 bytes md5sum = 8f31539a752fff44efcabedf5903b333 +http://www.w6rz.net/vv036-dtg091.ts 334,481,140 bytes md5sum = 4d16c6fd3d929bb85e60eed76a7226a5 +http://www.w6rz.net/germany-g1.ts 242,683,936 bytes md5sum = f6fc96bd2abed49f375285d45af31e3f +http://www.w6rz.net/germany-g2.ts 291,631,616 bytes md5sum = defa11f02511254e96fc8fbf59d47ff2 +http://www.w6rz.net/germany-g3.ts 316,245,704 bytes md5sum = 2494f7b77eb1f11dad2e1c903ba6b389 +http://www.w6rz.net/germany-g4.ts 345,044,672 bytes md5sum = da256d6828d97c458ffef27931c626ff +http://www.w6rz.net/germany-g5.ts 347,665,204 bytes md5sum = 48f72cef940f294b26247da91abb9f25 +http://www.w6rz.net/germany-g6.ts 444,296,264 bytes md5sum = 605a76d12cce7d7009a08c87e97c70bc +http://www.w6rz.net/germany-g7.ts 351,893,888 bytes md5sum = 3ca71e2a35ab7be27ebd13ad97f00e85 +http://www.w6rz.net/germany-g8.ts 365,656,052 bytes md5sum = 8cbd41ea1a6f6405f6662300f17a9104 +http://www.w6rz.net/germany-g9.ts 260,004,376 bytes md5sum = a83d60366bca873cf30d18db1d9e9f9f +http://www.w6rz.net/germany-g10.ts 229,421,288 bytes md5sum = 641a7e4c8a9db92f3020e19ec8d0b8a7 Note: The vv012-64qam45 profile may not run in real-time due to the large number of PAPR iterations. @@ -41,4 +41,7 @@ can be increased with the following shell command: sudo sysctl kernel.shmmax=1073741824 +or: + +sudo echo $(( 1024 * 1024 * 1024 )) > /proc/sys/kernel/shmmax diff --git a/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc index f4dc7cdf2b..9ab5f73cc2 100644 --- a/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc +++ b/gr-dtv/lib/dvbt2/dvbt2_framemapper_cc_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2015,2016 Free Software Foundation, Inc. + * Copyright 2015-2017 Free Software Foundation, Inc. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -46,6 +46,9 @@ namespace gr { L1Pre *l1preinit = &L1_Signalling[0].l1pre_data; L1Post *l1postinit = &L1_Signalling[0].l1post_data; double normalization; + double m_16qam_lookup[4] = {3.0, 1.0, -3.0, -1.0}; + double m_64qam_lookup[8] = {7.0, 5.0, 1.0, 3.0, -7.0, -5.0, -1.0, -3.0}; + int real_index, imag_index; int N_punc_temp, N_post_temp; if (framesize == FECFRAME_NORMAL) { switch (constellation) { @@ -244,90 +247,20 @@ namespace gr { break; case L1_MOD_16QAM: normalization = sqrt(10); - m_16qam[0] = gr_complex( 3.0 / normalization, 3.0 / normalization); - m_16qam[1] = gr_complex( 3.0 / normalization, 1.0 / normalization); - m_16qam[2] = gr_complex( 1.0 / normalization, 3.0 / normalization); - m_16qam[3] = gr_complex( 1.0 / normalization, 1.0 / normalization); - m_16qam[4] = gr_complex( 3.0 / normalization, -3.0 / normalization); - m_16qam[5] = gr_complex( 3.0 / normalization, -1.0 / normalization); - m_16qam[6] = gr_complex( 1.0 / normalization, -3.0 / normalization); - m_16qam[7] = gr_complex( 1.0 / normalization, -1.0 / normalization); - m_16qam[8] = gr_complex(-3.0 / normalization, 3.0 / normalization); - m_16qam[9] = gr_complex(-3.0 / normalization, 1.0 / normalization); - m_16qam[10] = gr_complex(-1.0 / normalization, 3.0 / normalization); - m_16qam[11] = gr_complex(-1.0 / normalization, 1.0 / normalization); - m_16qam[12] = gr_complex(-3.0 / normalization, -3.0 / normalization); - m_16qam[13] = gr_complex(-3.0 / normalization, -1.0 / normalization); - m_16qam[14] = gr_complex(-1.0 / normalization, -3.0 / normalization); - m_16qam[15] = gr_complex(-1.0 / normalization, -1.0 / normalization); + for (int i = 0; i < 16; i++) { + real_index = ((i & 0x8) >> 2) | ((i & 0x2) >> 1); + imag_index = ((i & 0x4) >> 1) | ((i & 0x1) >> 0); + m_16qam[i] = gr_complex(m_16qam_lookup[real_index] / normalization, m_16qam_lookup[imag_index] / normalization); + } eta_mod = 4; break; case L1_MOD_64QAM: normalization = sqrt(42); - m_64qam[0] = gr_complex( 7.0 / normalization, 7.0 / normalization); - m_64qam[1] = gr_complex( 7.0 / normalization, 5.0 / normalization); - m_64qam[2] = gr_complex( 5.0 / normalization, 7.0 / normalization); - m_64qam[3] = gr_complex( 5.0 / normalization, 5.0 / normalization); - m_64qam[4] = gr_complex( 7.0 / normalization, 1.0 / normalization); - m_64qam[5] = gr_complex( 7.0 / normalization, 3.0 / normalization); - m_64qam[6] = gr_complex( 5.0 / normalization, 1.0 / normalization); - m_64qam[7] = gr_complex( 5.0 / normalization, 3.0 / normalization); - m_64qam[8] = gr_complex( 1.0 / normalization, 7.0 / normalization); - m_64qam[9] = gr_complex( 1.0 / normalization, 5.0 / normalization); - m_64qam[10] = gr_complex( 3.0 / normalization, 7.0 / normalization); - m_64qam[11] = gr_complex( 3.0 / normalization, 5.0 / normalization); - m_64qam[12] = gr_complex( 1.0 / normalization, 1.0 / normalization); - m_64qam[13] = gr_complex( 1.0 / normalization, 3.0 / normalization); - m_64qam[14] = gr_complex( 3.0 / normalization, 1.0 / normalization); - m_64qam[15] = gr_complex( 3.0 / normalization, 3.0 / normalization); - m_64qam[16] = gr_complex( 7.0 / normalization, -7.0 / normalization); - m_64qam[17] = gr_complex( 7.0 / normalization, -5.0 / normalization); - m_64qam[18] = gr_complex( 5.0 / normalization, -7.0 / normalization); - m_64qam[19] = gr_complex( 5.0 / normalization, -5.0 / normalization); - m_64qam[20] = gr_complex( 7.0 / normalization, -1.0 / normalization); - m_64qam[21] = gr_complex( 7.0 / normalization, -3.0 / normalization); - m_64qam[22] = gr_complex( 5.0 / normalization, -1.0 / normalization); - m_64qam[23] = gr_complex( 5.0 / normalization, -3.0 / normalization); - m_64qam[24] = gr_complex( 1.0 / normalization, -7.0 / normalization); - m_64qam[25] = gr_complex( 1.0 / normalization, -5.0 / normalization); - m_64qam[26] = gr_complex( 3.0 / normalization, -7.0 / normalization); - m_64qam[27] = gr_complex( 3.0 / normalization, -5.0 / normalization); - m_64qam[28] = gr_complex( 1.0 / normalization, -1.0 / normalization); - m_64qam[29] = gr_complex( 1.0 / normalization, -3.0 / normalization); - m_64qam[30] = gr_complex( 3.0 / normalization, -1.0 / normalization); - m_64qam[31] = gr_complex( 3.0 / normalization, -3.0 / normalization); - m_64qam[32] = gr_complex(-7.0 / normalization, 7.0 / normalization); - m_64qam[33] = gr_complex(-7.0 / normalization, 5.0 / normalization); - m_64qam[34] = gr_complex(-5.0 / normalization, 7.0 / normalization); - m_64qam[35] = gr_complex(-5.0 / normalization, 5.0 / normalization); - m_64qam[36] = gr_complex(-7.0 / normalization, 1.0 / normalization); - m_64qam[37] = gr_complex(-7.0 / normalization, 3.0 / normalization); - m_64qam[38] = gr_complex(-5.0 / normalization, 1.0 / normalization); - m_64qam[39] = gr_complex(-5.0 / normalization, 3.0 / normalization); - m_64qam[40] = gr_complex(-1.0 / normalization, 7.0 / normalization); - m_64qam[41] = gr_complex(-1.0 / normalization, 5.0 / normalization); - m_64qam[42] = gr_complex(-3.0 / normalization, 7.0 / normalization); - m_64qam[43] = gr_complex(-3.0 / normalization, 5.0 / normalization); - m_64qam[44] = gr_complex(-1.0 / normalization, 1.0 / normalization); - m_64qam[45] = gr_complex(-1.0 / normalization, 3.0 / normalization); - m_64qam[46] = gr_complex(-3.0 / normalization, 1.0 / normalization); - m_64qam[47] = gr_complex(-3.0 / normalization, 3.0 / normalization); - m_64qam[48] = gr_complex(-7.0 / normalization, -7.0 / normalization); - m_64qam[49] = gr_complex(-7.0 / normalization, -5.0 / normalization); - m_64qam[50] = gr_complex(-5.0 / normalization, -7.0 / normalization); - m_64qam[51] = gr_complex(-5.0 / normalization, -5.0 / normalization); - m_64qam[52] = gr_complex(-7.0 / normalization, -1.0 / normalization); - m_64qam[53] = gr_complex(-7.0 / normalization, -3.0 / normalization); - m_64qam[54] = gr_complex(-5.0 / normalization, -1.0 / normalization); - m_64qam[55] = gr_complex(-5.0 / normalization, -3.0 / normalization); - m_64qam[56] = gr_complex(-1.0 / normalization, -7.0 / normalization); - m_64qam[57] = gr_complex(-1.0 / normalization, -5.0 / normalization); - m_64qam[58] = gr_complex(-3.0 / normalization, -7.0 / normalization); - m_64qam[59] = gr_complex(-3.0 / normalization, -5.0 / normalization); - m_64qam[60] = gr_complex(-1.0 / normalization, -1.0 / normalization); - m_64qam[61] = gr_complex(-1.0 / normalization, -3.0 / normalization); - m_64qam[62] = gr_complex(-3.0 / normalization, -1.0 / normalization); - m_64qam[63] = gr_complex(-3.0 / normalization, -3.0 / normalization); + for (int i = 0; i < 64; i++) { + real_index = ((i & 0x20) >> 3) | ((i & 0x8) >> 2) | ((i & 0x2) >> 1); + imag_index = ((i & 0x10) >> 2) | ((i & 0x4) >> 1) | ((i & 0x1) >> 0); + m_64qam[i] = gr_complex(m_64qam_lookup[real_index] / normalization, m_64qam_lookup[imag_index] / normalization); + } eta_mod = 6; break; } diff --git a/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc b/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc index cec39a7041..a83c56182e 100644 --- a/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc +++ b/gr-dtv/lib/dvbt2/dvbt2_paprtr_cc_impl.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2015,2016 Free Software Foundation, Inc. + * Copyright 2015-2017 Free Software Foundation, Inc. * * This is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -26,6 +26,10 @@ #include "dvbt2_paprtr_cc_impl.h" #include <volk/volk.h> +/* An early exit from the iteration loop is a very effective optimization */ +/* Change this line to #undef for validation testing with BBC V&V streams */ +#define EARLY_EXIT + namespace gr { namespace dtv { @@ -758,9 +762,15 @@ namespace gr { m = n; } } +#ifdef EARLY_EXIT if (y < v_clip + 0.01) { break; } +#else + if (y < v_clip) { + break; + } +#endif u = (in[m] + c[m]) / y; alpha = y - v_clip; for (int n = 0; n < N_TR; n++) { |