/* LDPC interleavers handler Copyright 2018 Ahmet Inan */ #include #include #include "testbench.h" #include "interleaver.h" namespace ldpctool { Interleaver *create_interleaver(char *modulation, char *standard, char prefix, int number) { if (!strcmp(standard, "S2")) { if (!strcmp(modulation, "8PSK")) { typedef MUX3 _012; typedef MUX3 _210; if (prefix == 'B') { switch (number) { case 5: return new BITL, _210>(); default: return new BITL, _012>(); } } if (prefix == 'C') { switch (number) { case 5: return new BITL, _210>(); default: return new BITL, _012>(); } } } } if (!strcmp(standard, "S2X")) { if (!strcmp(modulation, "8PSK")) { typedef MUX3 _012; typedef MUX3 _102; if (prefix == 'B') { switch (number) { case 7: case 8: case 9: return new BITL, _102>(); default: return new BITL, _012>(); } } if (prefix == 'C') { switch (number) { case 4: case 5: case 6: case 7: return new BITL, _102>(); default: return new BITL, _012>(); } } } } if (!strcmp(standard, "T2")) { if (!strcmp(modulation, "QPSK")) { if (prefix == 'B') { switch (number) { case 8: return new BITL, MUX0>(); case 9: return new BITL, MUX0>(); } } } if (!strcmp(modulation, "QAM16")) { typedef MUX8 _71425360; if (prefix == 'A') { typedef MUX8 _05124736; typedef CT8 CT; switch (number) { case 1: return new BITL, _71425360>(); case 2: return new BITL, _05124736>(); case 3: return new BITL, _71425360>(); case 4: return new BITL, _71425360>(); case 5: return new BITL, _71425360>(); case 6: return new BITL, _71425360>(); } } if (prefix == 'B') { typedef MUX8 _60345217; typedef MUX8 _75403126; typedef CT8 CT; switch (number) { case 1: return new BITL, _71425360>(); case 2: return new BITL, _71425360>(); case 3: return new BITL, _71425360>(); case 4: return new BITL, _71425360>(); case 5: return new BITL, _71425360>(); case 6: return new BITL, _71425360>(); case 7: return new BITL, _71425360>(); case 8: return new BITL, _60345217>(); case 9: return new BITL, _75403126>(); } } } if (!strcmp(modulation, "QAM64")) { typedef MUX12 _11731062951840; if (prefix == 'A') { typedef MUX12 _27690318411510; typedef CT12 CT; switch (number) { case 1: return new BITL, _11731062951840>(); case 2: return new BITL, _27690318411510>(); case 3: return new BITL, _11731062951840>(); case 4: return new BITL, _11731062951840>(); case 5: return new BITL, _11731062951840>(); case 6: return new BITL, _11731062951840>(); } } if (prefix == 'B') { typedef MUX12 _42056137891011; typedef MUX12 _40162358710911; typedef CT12 CT; switch (number) { case 1: return new BITL, _11731062951840>(); case 2: return new BITL, _11731062951840>(); case 3: return new BITL, _11731062951840>(); case 4: return new BITL, _11731062951840>(); case 5: return new BITL, _11731062951840>(); case 6: return new BITL, _11731062951840>(); case 7: return new BITL, _11731062951840>(); case 8: return new BITL, _42056137891011>(); case 9: return new BITL, _40162358710911>(); } } } if (!strcmp(modulation, "QAM256")) { if (prefix == 'A') { typedef MUX16 _1511338119510647122140; typedef MUX16 _2113409181013714615512; typedef MUX16 _7290461331410155812111; typedef CT16 CT; switch (number) { case 1: return new BITL, _1511338119510647122140>(); case 2: return new BITL, _2113409181013714615512>(); case 3: return new BITL, _7290461331410155812111>(); case 4: return new BITL, _1511338119510647122140>(); case 5: return new BITL, _1511338119510647122140>(); case 6: return new BITL, _1511338119510647122140>(); } } if (prefix == 'B') { typedef MUX8 _73152640; typedef MUX8 _40125367; typedef MUX8 _40512367; typedef CT8 CT; switch (number) { case 1: return new BITL, _73152640>(); case 2: return new BITL, _73152640>(); case 3: return new BITL, _73152640>(); case 4: return new BITL, _73152640>(); case 5: return new BITL, _73152640>(); case 6: return new BITL, _73152640>(); case 7: return new BITL, _73152640>(); case 8: return new BITL, _40125367>(); case 9: return new BITL, _40512367>(); } } } } std::cerr << "using noop interleaver." << std::endl; return new ITL0(); } } // namespace ldpctool