From e5801a698e6b775a66c13ac34f97c5adbae57593 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Thu, 10 Jul 2025 19:06:02 +0200 Subject: [PATCH] try to improve papr of first symbol --- decode.cc | 2 +- encode.cc | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/decode.cc b/decode.cc index 6d2fec1..1636f6e 100644 --- a/decode.cc +++ b/decode.cc @@ -234,7 +234,7 @@ struct Decoder : Common auto clamp = [](int v){ return v < -127 ? -127 : v > 127 ? 127 : v; }; for (int i = 0; i < pilot_tones; ++i) meta[i] = clamp(std::nearbyint(127 * demod_or_erase(fdom[bin(i*block_length+first_pilot+tone_off)], chan[i*block_length+first_pilot]).real() * nrz(seq1()))); - int mode = hadamard_decoder(meta); + int mode = hadamard_decoder(meta) & 31; if (mode < 0 || mode > 27) { std::cerr << "operation mode " << mode << " unsupported." << std::endl; continue; diff --git a/encode.cc b/encode.cc index 24ee3d1..1fab8c1 100644 --- a/encode.cc +++ b/encode.cc @@ -73,11 +73,12 @@ struct Encoder : public Common { for (int i = 0; differential && symbol_number > 0 && i < tone_count; ++i) tone[i] *= temp[i]; - for (int trial = 63; trial >= 0; --trial) { + int trials = symbol_number ? 128 : 4; + for (int trial = trials - 1; trial >= 0; --trial) { for (int i = 0; i < tone_count; ++i) temp[i] = tone[i]; if (symbol_number >= 0) { - int meta_data = symbol_number ? trial : oper_mode; + int meta_data = symbol_number ? trial : (oper_mode | (trial << 5)); hadamard_encoder(meta, meta_data); CODE::MLS seq(0x163, meta_data); for (int i = 0, m = 0; i < tone_count; ++i) @@ -110,7 +111,7 @@ struct Encoder : public Common } mean /= symbol_len; value papr(peak / mean); - if (symbol_number == 0 || papr < 5 || trial == 0) { + if (papr < 5 || trial == 0) { std::cerr << " " << DSP::decibel(papr); break; }