From 92a4213b5f5d12485efd45fea36615a756b1b2fd Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Thu, 17 Jul 2025 10:31:26 +0200 Subject: [PATCH] added shuffles for the new code --- decode.cc | 17 +++++++++++------ encode.cc | 17 +++++++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/decode.cc b/decode.cc index 4a441f2..254137f 100644 --- a/decode.cc +++ b/decode.cc @@ -140,24 +140,29 @@ struct Decoder : Common return QuadratureAmplitudeModulation<256, cmplx, code_type>::hard(b, c); } } - void shuffle(code_type *dest, const code_type *src) + void shuffle(code_type *dest, const code_type *src, int order) { - if (code_order == 12) { + if (order == 8) { + CODE::XorShiftMask seq; + dest[0] = src[0]; + for (int i = 1; i < 256; ++i) + dest[seq()] = src[i]; + } else if (order == 12) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 4096; ++i) dest[seq()] = src[i]; - } else if (code_order == 13) { + } else if (order == 13) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 8192; ++i) dest[seq()] = src[i]; - } else if (code_order == 14) { + } else if (order == 14) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 16384; ++i) dest[seq()] = src[i]; - } else if (code_order == 15) { + } else if (order == 15) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 32768; ++i) @@ -363,7 +368,7 @@ struct Decoder : Common DSP::quick_sort(snr, symbol_count); std::cerr << "Es/N0 (dB): " << DSP::decibel(snr[0]) << " .. " << DSP::decibel(snr[symbol_count/2]) << " .. " << DSP::decibel(snr[symbol_count-1]) << std::endl; crc_bits = data_bits + 32; - shuffle(code, perm); + shuffle(code, perm, code_order); polar_decoder(nullptr, mesg, code, frozen_bits, code_order); int best = -1; for (int k = 0; k < mesg_type::SIZE; ++k) { diff --git a/encode.cc b/encode.cc index 77af814..db23f37 100644 --- a/encode.cc +++ b/encode.cc @@ -209,24 +209,29 @@ struct Encoder : public Common } return 2; } - void shuffle(code_type *dest, const code_type *src) + void shuffle(code_type *dest, const code_type *src, int order) { - if (code_order == 12) { + if (order == 8) { + CODE::XorShiftMask seq; + dest[0] = src[0]; + for (int i = 1; i < 256; ++i) + dest[i] = src[seq()]; + } else if (order == 12) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 4096; ++i) dest[i] = src[seq()]; - } else if (code_order == 13) { + } else if (order == 13) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 8192; ++i) dest[i] = src[seq()]; - } else if (code_order == 14) { + } else if (order == 14) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 16384; ++i) dest[i] = src[seq()]; - } else if (code_order == 15) { + } else if (order == 15) { CODE::XorShiftMask seq; dest[0] = src[0]; for (int i = 1; i < 32768; ++i) @@ -274,7 +279,7 @@ struct Encoder : public Common for (int i = 0; i < 32; ++i) mesg[i+data_bits] = nrz((crc0()>>i)&1); polar_encoder(code, mesg, frozen_bits, code_order); - shuffle(perm, code); + shuffle(perm, code, code_order); CODE::MLS seq1(mls1_poly); for (int j = 0, k = 0; j < symbol_count; ++j) { meta_off = (block_skew * j + first_meta) % block_length;