Mise en forme des symboles
Ce module contient quelques fonctions pour transformer une séquence binaire en un signal continu (ou pseudo-continu, puisque l'on travaille dans le domaine numérique, où les signaux sont discrétisés et échantillonnés avec une fréquence d'échantillonnage finie).
Les étapes classiques pour cette mise en forme sont les suivantes (voir figure ci-dessous) : création des symboles (constellation) à partir de la séquence binaire (chaque symbole permettant de coder un ou plusieurs bits), sur-échantillonnage (suivant le rapport de sur-échantillonnage souhaité), puis filtrage de mise en forme (Gaussien, RC, moyenne mobile, etc.).
Les fonctions suivantes sont proposées :
- Encodage (resp. décodage) des symboles : permet de passer d'une chaîne binaire à un ensemble de symboles (réels ou complexes), ou réciproquement. Les fonctions correspondantes sont symmap (codage symbole) et symdemap (décodage symbole).
- Changement de fréquence d'échantillonnage : permet de passer d'une fréquence d'échantillonnage de 1 échantillon / symbole, à n échantillons / symbole, ce qui est nécessaire avant l'étape suivante de filtrage (upsample et downsample pour l'opération inverse)
- Filtrage de mise en forme : différents gabarits de filtres sont possibles : SRRC, RC, Gaussien, NRZ, etc. (psfilter_init et psfilter_process).
Quelques autres fonctions pour réaliser ces trois étapes simultanément dans des cas spécifiques :
- Génération d'un signal NRZ (Non Return to Zero) à partir d'un train binaire (nrz),
- Génération d'un signal NRZ à plusieurs niveaux (PAM / Pulse Amplitude Modulation) à partir d'un train binaire (pam).
Structures
struct SpecFiltreMiseEnForme
Spécification d'un filtre de mise en forme.
Fonctions
std::ostream & tsd::telecom::operator<<(std::ostream &ss, const SpecFiltreMiseEnForme &t)
Vecteur<T> sah(const Vecteur<T> &x, entier R)
Sur-échantillonnage par répétition (sample and hold).
Veci symmap_binaire(const BitStream &x, entier k)
Conversion séquence binaire \(\to\) vers séquence d'index symbole.
void symdemap_binaire(BitStream &bs, const Veci &x, entier k)
Conversion index \(\to\) train binaire.
void diff_encode(BitStream &y, const BitStream &x)
Encodage différentiel (polynôme = \(1/(1+X)\)), MSB first.
void diff_decode(BitStream &y, const BitStream &x)
Décodeur différentiel (polynome = 1+X), MSB en premier.
void decode_hard(BitStream &y, const Vecf &llr)
Hard decoding of LLR data.