modulateur_création
Création d'un modulateur numérique.
Espace de nom : tsd::telecom
Prototype
sptr<Modulateur> modulateur_création(const ModConfig &config)
Description
Le bloc modulateur permet de convertir un train binaire en un signal bande de base (ou déjà transposé à une fréquence intermédiaire), mis en forme et sur-échantillonné (de manière à être prêt à être transmis à un CAN).
La structure de paramètrage (ModConfig) spécifie la forme d'onde (type de modulation, filtre de mise en forme), ainsi que les paramètres de fréquence, notamment :
- La fréquence symbole \(f_{symb}\) (
fsymb
), - La fréquence d'échantillonnage souhaitée en sortie \(f_e\) (
fe
), - La fréquence intermédiaire souhaitée en sortie \(f_i\) (
fi
).
Le facteur de sur-échantillonnage global vaut donc :
Afin de réduire la complexité de calcul, ce facteur global est décomposé en deux parties :
Le facteur \(R_1\) sera appliqué au moment de l'application du filtre de mise en forme, et le facteur \(R_2\) par un interpolateur final.
Les différentes étapes sont les suivantes :
- Génération des symboles : les bits d'entrées sont regroupés par groupes de \(k\) bits ( \(k\) étant le nombre de bits par symbole de la forme d'onde configurée), et chaque groupe de \(k\) bits est transformé en un symbole de la constellation.
- Filtre de mise en forme et sur-échantillonnage : le filtre est implémenté sous forme polyphase et permet de passer de 1 échantillon / symbole à \(R_1\) échantillons / symbole :
\[ x_n = \sum_k h_k \cdot u_{(n-k)/R_1} \] - Adaptation de rythme : cet étage d'interpolation permet de passer de \(R_1\) à \(R=R_1\cdot R_2\) échantillons / symbole.
- Transposition : cet étage (actif uniquement si le paramètre \(f_i\) est non nul) permet de transposer le signal bande de base vers la fréquence intermédiaire \(f_i\) :
\[ y_k = e^{2\pi\mathbf{i} k f_i / f_e} \cdot x_k \] Par ailleurs, si le paramètresortie_réelle
est actif, la partie imaginaire du résultat est mise à zéro :\[ z_k = \mathcal{R}(y_k) \]
- Avertissement
- Attention : L'étage d'adaptation de rythme est pour l'instant désactivé, si bien que le changement de rythme est entièrement à la charge du filtre de mise en forme (implémentation RIF polyphase), ce qui peut être assez coûteux en charge de calcul si \(R\) (facteur global de rééchantillonnage) est élevé.
Schéma-bloc

Exemple 1 : modulation BPSK (avec filtre NRZ)
ModConfig config;
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a7ab39be2bea9353c45ef8bc657fce175]forme_onde = forme_onde_bpsk();
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a27ee82b08ade399e2cb8cd05241e7c11]fe = 100e3; // Fréquence d'échantillonnage = 100 kHz
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a5c035b5f70ffd3113761c79da990b460]fi = 0; // Pas de fréquence intermédiaire
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a70eb9291612719b24f2ac92996cb9fa4]fsymb = 10e3; // Fréquence symbole = 10 kHz
soit mod = modulateur_création(config);
// 64 bits aléatoires
soit bs = randstream(64);
soit x = mod->step(bs);
Figures f;
f.subplot().plot(bs.array(), "hb" , "Train binaire" );
f.subplot().plot(real(x), "b-" , "Signal modulé BPSK (NRZ)" );

Exemples de modulation BPSK
Exemple 2 : modulation QPSK (avec filtre SRRC)
ModConfig config;
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a7ab39be2bea9353c45ef8bc657fce175]forme_onde = forme_onde_qpsk(lien non trouvé : [structtsd_1_1telecom_1_1_spec_filtre_mise_en_forme_1ade0567b3c8300e63cb0a477dba0a60a1]SpecFiltreMiseEnForme::rcs(0.4));
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a27ee82b08ade399e2cb8cd05241e7c11]fe = 100e3; // Fréquence d'échantillonnage = 100 kHz
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a5c035b5f70ffd3113761c79da990b460]fi = 0; // Pas de fréquence intermédiaire
config.lien non trouvé : [structtsd_1_1telecom_1_1_mod_config_1a70eb9291612719b24f2ac92996cb9fa4]fsymb = 10e3; // Fréquence symbole = 10 kHz
soit mod = modulateur_création(config);
// 64 bits aléatoires
soit bs = randstream(64);
soit x = mod->step(bs);
Figures f;
f.subplot().plot(bs.array(), "hb" , "Train binaire" );
f.subplot().plot(x, "" , "Signal modulé QPSK (SRRC)" );

Exemples de modulation QPSK