Files
armod/modem_types.h
2022-10-24 19:41:38 +02:00

74 lines
2.6 KiB
C

/*
* File: modem_types.h
*/
/** @file */
#ifndef MODEM_TYPES_H
#define MODEM_TYPES_H
// Sampling Control
// il buffer rate deve essere > fmod_min/2
// il buffer rate deve > symbol rate
#define SAMPLING_RATE 16000UL ///< frequenza di campionamento
#define SAMPLES_PER_BUFFER 32U ///< dimensione del buffer dei campioni
#define BUFFER_RATE (SAMPLING_RATE / SAMPLES_PER_BUFFER) ///< frequenza di buffer: deve essere > di MAX_SYMBOL_RATE * 3
#define MAX_SYMBOL_RATE 500U
#define MIN_SYMBOL_RATE 20U //umm, se troppo piccolo da problemi nelle dimensioni dei buffer
#define MIN_BUFFERS_PER_SYMBOL (BUFFER_RATE / MAX_SYMBOL_RATE)
#define MAX_BUFFERS_PER_SYMBOL (BUFFER_RATE / MIN_SYMBOL_RATE)
#define MAX_MODULATION_ALPHABET_SIZE 16U ///< massimo numero di simboli nella costellazione
#define MAX_SYMBOL_BUFFER_SIZE 512U ///< MAX_FEC_OUTPUT_SIZE * MAX_FEC_PER_BLOCK
#define MODEM_STATE_PREDELAY_WAIT 0
#define MODEM_STATE_PREDELAY_PROCESS 1
#define MODEM_STATE_PREDELAY_DONE 2
#define MODEM_STATE_PREAMBLE_WAIT 3
#define MODEM_STATE_PREAMBLE_PROCESS 4
#define MODEM_STATE_PREAMBLE_DONE 5
#define MODEM_STATE_POST_PREAMBLE_WAIT 6
#define MODEM_STATE_POST_PREAMBLE_PROCESS 7
#define MODEM_STATE_POST_PREAMBLE_DONE 8
#define MODEM_STATE_PAYLOAD_WAIT 9
#define MODEM_STATE_PAYLOAD_PROCESS 10
#define MODEM_STATE_PAYLOAD_DONE 11
#define MODEM_STATE_IDLE 12
typedef struct {
uint16_t frequency; ///< frequenza del simbolo
uint16_t phase; ///< fase del simbolo
uint16_t amplitude; ///< ampiezza del simbolo
} symbol;
// parametri della modulazione
typedef struct {
uint16_t symbol_rate; ///< numero di simboli per secondo
uint8_t buffers_per_symbol; ///< numero di buffer di campioni in un simbolo
uint8_t bits_per_symbol; ///< bit di informazione espressi da un simbolo
uint8_t alphabet_size; ///< numero di possibili simboli che compongono la modulazione
uint8_t amplitude_keying; ///< manipolazione di ampiezza
uint8_t frequency_keying; ///< manipolazione di frequenza
uint8_t phase_keying; ///< manipolazione di fase
symbol constellation[MAX_MODULATION_ALPHABET_SIZE]; ///< descrizione della costellazione
} modulation;
extern modulation mod;
extern uint8_t modem_tx_state, modem_rx_state;
extern uint16_t modem_predelay_mstime, modem_predelay_buffer_size, modem_predelay_buffer_index;
extern uint8_t modem_avoid_overlap;
// payload
extern uint16_t modem_payload_max_symbols, modem_payload_symbols_index;
#endif /* MODEM_TYPES_H */