mirror of
https://github.com/aicodix/modem.git
synced 2026-04-27 14:30:34 +00:00
test multiple polynomials
This commit is contained in:
parent
800dfb9d78
commit
80b2cb4483
3 changed files with 32 additions and 14 deletions
|
|
@ -29,6 +29,9 @@ struct Common
|
|||
static const int block_skew = 3;
|
||||
static const int first_meta = 4;
|
||||
static const int first_seed = 9;
|
||||
static constexpr int slm_poly[16] = {
|
||||
0x11d, 0x12b, 0x12d, 0x14d, 0x15f, 0x163, 0x165, 0x169,
|
||||
0x171, 0x187, 0x18d, 0x1a9, 0x1c3, 0x1cf, 0x1e7, 0x1f5 };
|
||||
CODE::CRC<uint32_t> crc0;
|
||||
CODE::HadamardEncoder<6> hadamard_encoder;
|
||||
int8_t meta[32];
|
||||
|
|
|
|||
17
decode.cc
17
decode.cc
|
|
@ -278,6 +278,10 @@ struct Decoder : Common
|
|||
for (int i = 0; i < meta_tones; ++i)
|
||||
meta[i] = clamp(std::nearbyint(127 * demod[i*block_length+meta_off].real()));
|
||||
int meta_data = hadamard_decoder(meta);
|
||||
if (meta_data < 0) {
|
||||
std::cerr << "meta data damaged" << std::endl;
|
||||
meta_data = 0;
|
||||
}
|
||||
hadamard_encoder(meta, meta_data);
|
||||
for (int i = 0; i < meta_tones; ++i) {
|
||||
tone[block_length*i+meta_off] *= meta[i];
|
||||
|
|
@ -290,6 +294,10 @@ struct Decoder : Common
|
|||
for (int i = 0; i < seed_tones; ++i)
|
||||
seed[i] = clamp(std::nearbyint(127 * demod[i*block_length+seed_off].real()));
|
||||
int seed_data = hadamard_decoder(seed);
|
||||
if (seed_data < 0) {
|
||||
std::cerr << "seed data damaged" << std::endl;
|
||||
seed_data = 0;
|
||||
}
|
||||
hadamard_encoder(seed, seed_data);
|
||||
for (int i = 0; i < seed_tones; ++i) {
|
||||
tone[block_length*i+seed_off] *= seed[i];
|
||||
|
|
@ -315,10 +323,15 @@ struct Decoder : Common
|
|||
for (int i = seed_off; i < tone_count; i += block_length)
|
||||
chan[i] = DSP::lerp(chan[i], tone[i], value(0.5));
|
||||
}
|
||||
CODE::MLS seq2(mls2_poly, seed_data);
|
||||
int poly_index = j ? meta_data : 0;
|
||||
if (poly_index < 0 || poly_index > 15) {
|
||||
std::cerr << "poly index damaged" << std::endl;
|
||||
meta_data = 0;
|
||||
}
|
||||
CODE::MLS seq(slm_poly[poly_index], seed_data+1);
|
||||
for (int i = 0; i < tone_count; ++i)
|
||||
if (i % block_length != meta_off && i % block_length != seed_off)
|
||||
demod[i] *= nrz(seq2());
|
||||
demod[i] *= nrz(seq());
|
||||
value sp = 0, np = 0;
|
||||
for (int i = 0, l = k; i < tone_count; ++i) {
|
||||
cmplx hard(1, 0);
|
||||
|
|
|
|||
26
encode.cc
26
encode.cc
|
|
@ -79,23 +79,25 @@ struct Encoder : public Common
|
|||
value scale = value(0.5) / std::sqrt(value(tone_count));
|
||||
for (int i = 0; differential && symbol_number > 0 && i < tone_count; ++i)
|
||||
tone[i] *= prev[i];
|
||||
if (symbol_number >= 0) {
|
||||
hadamard_encoder(meta, symbol_number ? symbol_number : oper_mode);
|
||||
for (int i = 0; i < meta_tones; ++i)
|
||||
tone[block_length*i+meta_off] *= meta[i];
|
||||
}
|
||||
value best_papr = 1000;
|
||||
for (int trial = 0; trial < 64; ++trial) {
|
||||
int trials = symbol_number ? 16 * 64 : 64;
|
||||
for (int trial = 0; trial < trials; ++trial) {
|
||||
for (int i = 0; i < tone_count; ++i)
|
||||
temp[i] = tone[i];
|
||||
if (symbol_number >= 0) {
|
||||
hadamard_encoder(seed, trial);
|
||||
CODE::MLS seq2(mls2_poly, trial);
|
||||
for (int i = 0, s = 0; i < tone_count; ++i)
|
||||
if (i % block_length == seed_off)
|
||||
int poly_index = trial >> 6;
|
||||
int meta_data = symbol_number ? poly_index : oper_mode;
|
||||
hadamard_encoder(meta, meta_data);
|
||||
int seed_data = trial & 63;
|
||||
hadamard_encoder(seed, seed_data);
|
||||
CODE::MLS seq(slm_poly[poly_index], seed_data + 1);
|
||||
for (int i = 0, m = 0, s = 0; i < tone_count; ++i)
|
||||
if (i % block_length == meta_off)
|
||||
temp[i] *= meta[m++];
|
||||
else if (i % block_length == seed_off)
|
||||
temp[i] *= seed[s++];
|
||||
else if (i % block_length != meta_off)
|
||||
temp[i] *= nrz(seq2());
|
||||
else
|
||||
temp[i] *= nrz(seq());
|
||||
}
|
||||
for (int i = 0; i < symbol_len; ++i)
|
||||
fdom[i] = 0;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue