35 lines
1.0 KiB
C
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;
|
|
} |