From 2d765a78fd9cd8073dbd69042ab9e828892691bc Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sun, 21 Jan 2024 11:01:18 +0100 Subject: [PATCH] start parity bits early, as we use a crc at the end --- decode.cc | 20 +++++++++++++++++++- encode.cc | 20 +++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/decode.cc b/decode.cc index d0b602d..5747b30 100644 --- a/decode.cc +++ b/decode.cc @@ -378,6 +378,8 @@ struct Decoder if (!okay || !oper_mode) return; + int parity_stride = 0; + int first_parity = 0; int data_bits = 0; int cons_rows = 0; int comb_cols = 0; @@ -390,6 +392,8 @@ struct Decoder code_order = 12; code_cols = 256; data_bits = 2048; + parity_stride = 31; + first_parity = 3; frozen_bits = frozen_4096_2147; break; case 24: @@ -399,6 +403,8 @@ struct Decoder code_order = 13; code_cols = 256; data_bits = 4096; + parity_stride = 31; + first_parity = 5; frozen_bits = frozen_8192_4261; break; case 25: @@ -408,6 +414,8 @@ struct Decoder code_order = 14; code_cols = 256; data_bits = 8192; + parity_stride = 31; + first_parity = 9; frozen_bits = frozen_16384_8489; break; case 26: @@ -417,6 +425,8 @@ struct Decoder code_order = 12; code_cols = 256; data_bits = 2048; + parity_stride = 31; + first_parity = 3; frozen_bits = frozen_4096_2147; break; case 27: @@ -426,6 +436,8 @@ struct Decoder code_order = 13; code_cols = 256; data_bits = 4096; + parity_stride = 31; + first_parity = 5; frozen_bits = frozen_8192_4261; break; case 28: @@ -435,6 +447,8 @@ struct Decoder code_order = 14; code_cols = 256; data_bits = 8192; + parity_stride = 31; + first_parity = 9; frozen_bits = frozen_16384_8489; break; case 29: @@ -444,6 +458,8 @@ struct Decoder code_order = 13; code_cols = 273; data_bits = 4096; + parity_stride = 31; + first_parity = 5; frozen_bits = frozen_8192_4261; break; case 30: @@ -453,6 +469,8 @@ struct Decoder code_order = 14; code_cols = 273; data_bits = 8192; + parity_stride = 31; + first_parity = 9; frozen_bits = frozen_16384_8489; break; default: @@ -566,7 +584,7 @@ struct Decoder for (int i = code_cols * cons_rows * mod_bits; i < bits_max; ++i) code[i] = 0; shuffle(code); - polardec(metric, mesg, code, frozen_bits, code_order, 31); + polardec(metric, mesg, code, frozen_bits, code_order, parity_stride, first_parity); int order[mesg_type::SIZE]; for (int k = 0; k < mesg_type::SIZE; ++k) order[k] = k; diff --git a/encode.cc b/encode.cc index 9a50169..28c66b7 100644 --- a/encode.cc +++ b/encode.cc @@ -249,6 +249,8 @@ 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; @@ -266,6 +268,8 @@ struct Encoder code_order = 12; code_cols = 256; data_bits = 2048; + parity_stride = 31; + first_parity = 3; reserved_tones = 0; frozen_bits = frozen_4096_2147; break; @@ -276,6 +280,8 @@ struct Encoder code_order = 13; code_cols = 256; data_bits = 4096; + parity_stride = 31; + first_parity = 5; reserved_tones = 0; frozen_bits = frozen_8192_4261; break; @@ -286,6 +292,8 @@ struct Encoder code_order = 14; code_cols = 256; data_bits = 8192; + parity_stride = 31; + first_parity = 9; reserved_tones = 0; frozen_bits = frozen_16384_8489; break; @@ -296,6 +304,8 @@ struct Encoder code_order = 12; code_cols = 256; data_bits = 2048; + parity_stride = 31; + first_parity = 3; reserved_tones = 8; frozen_bits = frozen_4096_2147; break; @@ -306,6 +316,8 @@ struct Encoder code_order = 13; code_cols = 256; data_bits = 4096; + parity_stride = 31; + first_parity = 5; reserved_tones = 8; frozen_bits = frozen_8192_4261; break; @@ -316,6 +328,8 @@ struct Encoder code_order = 14; code_cols = 256; data_bits = 8192; + parity_stride = 31; + first_parity = 9; reserved_tones = 8; frozen_bits = frozen_16384_8489; break; @@ -326,6 +340,8 @@ struct Encoder code_order = 13; code_cols = 273; data_bits = 4096; + parity_stride = 31; + first_parity = 5; reserved_tones = 15; frozen_bits = frozen_8192_4261; break; @@ -336,6 +352,8 @@ struct Encoder code_order = 14; code_cols = 273; data_bits = 8192; + parity_stride = 31; + first_parity = 9; reserved_tones = 15; frozen_bits = frozen_16384_8489; break; @@ -372,7 +390,7 @@ struct Encoder crc1(inp[i]); for (int i = 0; i < 32; ++i) mesg[i+data_bits] = nrz((crc1()>>i)&1); - polarenc(code, mesg, frozen_bits, code_order, 31); + polarenc(code, mesg, frozen_bits, code_order, parity_stride, first_parity); shuffle(code); for (int i = 0; i < cons_cols; ++i) prev[i] = fdom[bin(i+code_off)];