mirror of
https://github.com/aicodix/modem.git
synced 2026-04-27 22:35:41 +00:00
use non-systematic polar codes
This commit is contained in:
parent
1076bb953b
commit
f92a24eb5a
4 changed files with 28 additions and 67 deletions
41
encode.cc
41
encode.cc
|
|
@ -6,7 +6,6 @@ Copyright 2021 Ahmet Inan <inan@aicodix.de>
|
|||
|
||||
#include <iostream>
|
||||
#include <cassert>
|
||||
#include <cstdint>
|
||||
#include <cmath>
|
||||
#include "xorshift.hh"
|
||||
#include "complex.hh"
|
||||
|
|
@ -22,7 +21,7 @@ Copyright 2021 Ahmet Inan <inan@aicodix.de>
|
|||
#include "psk.hh"
|
||||
#include "qam.hh"
|
||||
#include "polar_tables.hh"
|
||||
#include "polar_parity_aided.hh"
|
||||
#include "polar_encoder.hh"
|
||||
#include "bose_chaudhuri_hocquenghem_encoder.hh"
|
||||
|
||||
template <typename value, typename cmplx, int rate>
|
||||
|
|
@ -45,7 +44,7 @@ struct Encoder
|
|||
CODE::CRC<uint16_t> crc0;
|
||||
CODE::CRC<uint32_t> crc1;
|
||||
CODE::BoseChaudhuriHocquenghemEncoder<255, 71> bchenc;
|
||||
CODE::PolarParityEncoder<code_type> polarenc;
|
||||
CODE::PolarEncoder<code_type> polarenc;
|
||||
CODE::FisherYatesShuffle<4096> shuffle_4096;
|
||||
CODE::FisherYatesShuffle<8192> shuffle_8192;
|
||||
CODE::FisherYatesShuffle<16384> shuffle_16384;
|
||||
|
|
@ -252,8 +251,6 @@ struct Encoder
|
|||
oper_mode(oper_mode)
|
||||
{
|
||||
const uint32_t *frozen_bits = nullptr;
|
||||
int parity_stride = 0;
|
||||
int first_parity = 0;
|
||||
int code_cols = 0;
|
||||
int comb_cols = 0;
|
||||
int comb_dist = 1;
|
||||
|
|
@ -271,10 +268,8 @@ struct Encoder
|
|||
code_order = 12;
|
||||
code_cols = 256;
|
||||
data_bits = 2048;
|
||||
parity_stride = 31;
|
||||
first_parity = 3;
|
||||
frozen_bits = frozen_4096_2147;
|
||||
reserved_tones = 0;
|
||||
frozen_bits = frozen_4096_2080;
|
||||
break;
|
||||
case 24:
|
||||
mod_bits = 2;
|
||||
|
|
@ -283,10 +278,8 @@ struct Encoder
|
|||
code_order = 13;
|
||||
code_cols = 256;
|
||||
data_bits = 4096;
|
||||
parity_stride = 31;
|
||||
first_parity = 5;
|
||||
frozen_bits = frozen_8192_4261;
|
||||
reserved_tones = 0;
|
||||
frozen_bits = frozen_8192_4128;
|
||||
break;
|
||||
case 25:
|
||||
mod_bits = 2;
|
||||
|
|
@ -295,10 +288,8 @@ struct Encoder
|
|||
code_order = 14;
|
||||
code_cols = 256;
|
||||
data_bits = 8192;
|
||||
parity_stride = 31;
|
||||
first_parity = 9;
|
||||
frozen_bits = frozen_16384_8489;
|
||||
reserved_tones = 0;
|
||||
frozen_bits = frozen_16384_8224;
|
||||
break;
|
||||
case 26:
|
||||
mod_bits = 4;
|
||||
|
|
@ -307,10 +298,8 @@ struct Encoder
|
|||
code_order = 12;
|
||||
code_cols = 256;
|
||||
data_bits = 2048;
|
||||
parity_stride = 31;
|
||||
first_parity = 3;
|
||||
frozen_bits = frozen_4096_2147;
|
||||
reserved_tones = 8;
|
||||
frozen_bits = frozen_4096_2080;
|
||||
break;
|
||||
case 27:
|
||||
mod_bits = 4;
|
||||
|
|
@ -319,10 +308,8 @@ struct Encoder
|
|||
code_order = 13;
|
||||
code_cols = 256;
|
||||
data_bits = 4096;
|
||||
parity_stride = 31;
|
||||
first_parity = 5;
|
||||
frozen_bits = frozen_8192_4261;
|
||||
reserved_tones = 8;
|
||||
frozen_bits = frozen_8192_4128;
|
||||
break;
|
||||
case 28:
|
||||
mod_bits = 4;
|
||||
|
|
@ -331,10 +318,8 @@ struct Encoder
|
|||
code_order = 14;
|
||||
code_cols = 256;
|
||||
data_bits = 8192;
|
||||
parity_stride = 31;
|
||||
first_parity = 9;
|
||||
frozen_bits = frozen_16384_8489;
|
||||
reserved_tones = 8;
|
||||
frozen_bits = frozen_16384_8224;
|
||||
break;
|
||||
case 29:
|
||||
mod_bits = 6;
|
||||
|
|
@ -343,10 +328,8 @@ struct Encoder
|
|||
code_order = 13;
|
||||
code_cols = 273;
|
||||
data_bits = 4096;
|
||||
parity_stride = 31;
|
||||
first_parity = 5;
|
||||
frozen_bits = frozen_8192_4261;
|
||||
reserved_tones = 15;
|
||||
frozen_bits = frozen_8192_4128;
|
||||
break;
|
||||
case 30:
|
||||
mod_bits = 6;
|
||||
|
|
@ -355,10 +338,8 @@ struct Encoder
|
|||
code_order = 14;
|
||||
code_cols = 273;
|
||||
data_bits = 8192;
|
||||
parity_stride = 31;
|
||||
first_parity = 9;
|
||||
frozen_bits = frozen_16384_8489;
|
||||
reserved_tones = 15;
|
||||
frozen_bits = frozen_16384_8224;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
|
|
@ -411,7 +392,7 @@ struct Encoder
|
|||
crc1(input_data[i]);
|
||||
for (int i = 0; i < 32; ++i)
|
||||
mesg[i+data_bits] = nrz((crc1()>>i)&1);
|
||||
polarenc(code, mesg, frozen_bits, code_order, parity_stride, first_parity);
|
||||
polarenc(code, mesg, frozen_bits, code_order);
|
||||
shuffle(code);
|
||||
for (int i = 0; i < cons_cols; ++i)
|
||||
prev[i] = fdom[bin(i+code_off)];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue