Files
arphy/arphy_interleaver.c
2022-10-24 19:13:54 +02:00

35 lines
1.0 KiB
C

#include <stdint.h>
#include "../../modem/modem.h"
#include "../phy.h"
#include "arphy.h"
interleaver_params interleaver;
void arphy_set_up_interleaver(interleaver_params* interleaver_parameters) {
interleaver_parameters->net_bit_size = PHY_MAX_BLOCK_SIZE * 8; // interlaccia sempre su una pdu
interleaver_parameters->fec_blocks_size = interleaver_parameters->net_bit_size / fec.in_bit_size;
interleaver_parameters->symbols_size = fec.out_symbols_size * interleaver_parameters->fec_blocks_size;
interleaver_parameters->size = (interleaver_parameters->fec_blocks_size * fec.out_bit_size); // dimensione del blocco di interleaving
}
// interleaving degli indici
// torna indice mappato
uint16_t arphy_index_interleave(uint16_t in, uint8_t x, uint16_t y) {
uint16_t out;
out = in * (x + 1);
out = out % (x * y);
return out;
}
// torna indice de-mappato
uint16_t arphy_index_deinterleave(uint16_t in, uint8_t x, uint16_t y) {
uint16_t out;
out = in + (in * x);
out = out % (x * y);
return out;
}