Shaping filter

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 ShapingFilterSpec
Specification of a shaping filter.

Functions

std::ostream & dsp::telecom::operator<<(std::ostream &ss, const ShapingFilterSpec &t)

Vector<T> sah(const Vector<T> &x, int R)
Sample and hold oversampling.

Veci symmap_binary(const BitStream &x, int k)
Conversion from binary sequence \(\to\) symbol index sequence.

void symunmap_binary(BitStream &bs, const Veci &x, int k)
Conversion index \(\to\) train binaire.

void diff_encode(BitStream &y, const BitStream &x)
Differential encoder (polynomial = \(1/(1+X)\)), MSB first.

void diff_decode(BitStream &y, const BitStream &x)
Differential decoder (polynomial = 1+X), MSB first.

void decode_hard(BitStream &y, const Vecf &llr)
Hard decoding of LLR data.