packet_emitter_new

Création d'un générateur de trames.

Namespace: dsp::telecom

Prototype

sptr<PacketEmitter> packet_emitter_new(const PacketEmitterConfig &ec)

Description

La structure de configuration (ÉmetteurConfig) indique le format de la trame, c'est-à-dire :

  • L'en-tête de synchronisation,
  • Le nombre de bits utiles,
  • Les paramètres de modulation

Ce bloc va concaténer l'en-tête avec les bits utiles de manière à générer des échantillons I/Q à partir des bits utiles, en s'occupant des éventuels problème de padding (si plusieurs bits / symbole). Par exemple, avec une modulation QPSK (2 bits / symboles), si l'en-tête fait 127 bits, alors un zéro est inséré de manière à former un en-tête de 128 bits.

En fin de trame, le filtre de mise en forme est appliqué un peu plus loin que nécessaire, afin que le signal I/Q revienne proprement à zéro sans discontinuité (voir exemple ci-dessous, dernière courbe).

Notez que la forme d'onde n'est pas forcément identique pour l'en-tête et pour les données utiles, si le champs ÉmetteurConfig::format.fo_entete est renseigné.

Exemple


  // Configuration de l'émetteur
  ÉmetteurConfig ec;
  // En-tête de synchonisation (13 bits)
  ec.format.entete = code_Barker(13);
  // Nombre de bits utiles
  ec.format.nbits  = 16;
  // Facteur de sur-échantillonnage = 8
  ec.format.modulation.fsymb  = 1;
  ec.format.modulation.fe     = 8;
  // BPSK, avec filtre SRRC (60 % de dépassement)
  ec.format.modulation.forme_onde = forme_onde_bpsk(SpecFiltreMiseEnForme::rcs(0.6));

  // Instanciation de l'émetteur
  soit tx = émetteur_création(ec);

  // 16 bits alternés (101010...)
  soit data = BitStream::altern(16);

  // Emission d'une trame
  soit iq = tx->step(data);

  Figures f;
  f.subplot().plot(ec.format.entete.array(), "|bo", "En-tête de synchronisation");
  f.subplot().plot(data.array(), "|go", "Données");
  f.subplot().plot(iq, "-m");
  f.gcf().titre("Trame modulée (en-tête + données)");

See also

récepteur_création(), modulateur_création(), démodulateur_création()