Simulation de radio AM

Exemple de simulation: émetteur et récepteur AM

La première section de ce didacticiel explique comment créer un signal à modulation d’amplitude (AM). Plutôt que d’utiliser un véritable matériel pour la transmission, le signal est envoyé via une prise à la deuxième section du tutoriel qui explique comment démoduler le signal reçu. Le seul matériel réellement impliqué est l’entrée microphone et la sortie haut-parleur de l’ordinateur. Dans le cas d’un ordinateur Raspberry Pi, qui n’a pas d’entrée microphone, une alternative est présentée.

Ce tutoriel peut être effectué avec GNU Radio (GR) version 3.7 ou 3.8 (et versions ultérieures). L’interface utilisateur graphique gnuradio-compagnon (GRC) est utilisée pour créer un organigramme pour chaque section.

Contenu

  • Prérequis
  • Émetteur AM
    • Description des blocs
    • Note for Raspberry Pi
    • Section émetteur de test
  • Récepteur AM
    • Description des blocs
    • Essais
  • Que faire ensuite

Conditions préalables

Émetteur AM

À l’aide de gnuradio-compagnon (GRC) et des descriptions de bloc suivantes, créez ce diagramme de la section de l’émetteur:

AM transmettre fg.png

Descriptions des blocs

  • Le bloc Options identifie le nom de fichier du diagramme de flux, un titre, un auteur, etc.
    • id: AM_transmit
    • Cliquez sur Fichier -> Enregistrer sous Utilisez le nom de fichier «AM_transmit». l’extension «.grc» est ajoutée automatiquement
  • L’entrée microphone est définie par un bloc de source audio. Les paramètres sont:
    • Taux d’échantillonnage: réglé sur 48 kHz (utilisez le menu déroulant)
    • Nom du périphérique: pour la plupart des prises de microphone intégrées à l’ordinateur, le nom du périphérique peut être laissé vide; pour les autres cas, voir Audio_Source # Device_Name
  • Pour le reste de l’organigramme, un taux d’échantillonnage de 768 kHz est utilisé. Cette valeur a été choisie pour donner à la fréquence porteuse 48 kHz 16 échantillons par cycle (48000 x 16 = 768000).
    • Bloc variable
      • id: samp_rate
      • valeur: 768000
  • Pour augmenter la fréquence d’échantillonnage de 48 kHz de l’entrée audio à la fréquence d’échantillonnage de 768 kHz, un bloc de répétition avec une valeur d’interpolation de 16 est utilisé.
  • Le bloc QT GUI Range définit un contrôle de gain audio (volume)
    • id: volume
    • valeur par défaut: 1,2
    • début: 0
    • arrêt: 10,0
    • étape: 0,1
    • Widget: choisissez ce que vous voulez
  • La valeur de la commande de volume est utilisée comme multiplicateur dans le bloc Multiply Const.
    • Constant: volume
  • Pour créer un signal AM, le signal porteur est multiplié par le signal audio plus un. La constante 1 crée la porteuse quand aucun son n’est présent. Voir [1] .
    • Ajouter un bloc Const
      • Constante: 1,0
  • Le signal porteur (dans cet exemple est de 48 kHz) est généré par le bloc Source de signal.
    • Remarque: il n’y a pas de corrélation entre la fréquence d’échantillonnage audio et la fréquence du signal porteur.
    • Taux d’échantillonnage: samp_rate
    • Fréquence: 48000
    • Amplitude: 0.5
  • Le QT GUI Time Sink donne une représentation visuelle du signal transmis.
    • Nombre de points: 4096
    • Taux d’échantillonnage: samp_rate
    • Nombre d’entrées: 2
  • Pour un véritable émetteur radio, la sortie du bloc Multiply serait envoyée aux filtres passe-bande, puis au matériel radiofréquence (RF). Pour ce didacticiel, nous envoyons le signal de transmission à une prise de données ZMQ PUB Sink connectée à la section récepteur.
    • Adresse: tcp: //127.0.0.1: 50001

Note pour Raspberry Pi

Puisqu’un Raspberry Pi n’a pas de prise d’entrée audio, il existe deux alternatives:

  1. utilisez un dongle audio USB comme indiqué sur le diagramme.
  2. remplacer le bloc Audio Source par un bloc Signal Source (fréquence: 600) et un bloc Throttle.

Section émetteur de test

Pour tester l’émetteur, générez et exécutez le diagramme de flux. Le fait de parler dans le microphone devrait montrer un changement dans le schéma du récepteur temporel de l’interface graphique QT. Le niveau de modulation peut être ajusté avec la commande de volume.

Récepteur AM

En utilisant gnuradio-compagnon (GRC) et les descriptions de blocs suivantes, créez ce diagramme séparé de la section du récepteur:

Je reçois fg.png

Descriptions des blocs

  • Le bloc Options identifie le nom de fichier du diagramme de flux, un titre, un auteur, etc.
    • id: AM_receive
    • Cliquez sur Fichier -> Enregistrer sous Utilisez le nom de fichier «AM_receive». l’extension «.grc» est ajoutée automatiquement
  • Le signal de la section d’émetteur est reçu par la source SUB ZMQ. Il s’agit d’un transporteur de 48 kHz avec un taux d’échantillonnage de 768 kHz.
    • Adresse: tcp: //127.0.0.1: 50001
  • Un bloc variable définit la fréquence d’échantillonnage.
    • id: samp_rate
    • valeur: 768000
  • Un autre bloc variable définit le facteur de décimation. Étant donné que le récepteur audio (haut-parleur) utilise une fréquence d’échantillonnage de 48 kHz, nous réduirons (décimer) la fréquence d’échantillonnage entrante d’un facteur 16.
    • Ça, deeim
    • valeur: 16
  • Le filtre FIR Xlating de fréquence remplit trois fonctions: traduction de fréquence, filtrage et décimation. Voir Frequency_Xlating_FIR_Filter pour plus de détails.
    • Type: Flottant-> Complexe (Real Taps)
    • Heure: douze
    • Taps: firdes.low_pass (1, samp_rate, samp_rate / (2 * décim), 2000)
    • Fréquence centrale: 48000
    • Taux d’échantillonnage: samp_rate
  • Le bloc Automatic Gain Control (AGC) ajuste le signal d’entrée au niveau de référence donné (1.0).
    • Les paramètres par défaut doivent être utilisés.
  • Le bloc Complex to Mag calcule la magnitude des échantillons complexes qui produisent le signal de modulation d’origine.
  • Le filtre passe-bande filtre le signal entre les fréquences de coupure basses et hautes.
    • Type de FIR: Float-> Float (Real Taps) (Decim)
    • Décimation: 1
    • Gain: 1
    • Taux d’échantillonnage: int (samp_rate / decim)
    • Fréquence de coupure basse: 500
    • Fréquence de coupure élevée: 6000
    • Largeur de transition: 400
  • Le bloc QT GUI Range définit un contrôle de gain audio (volume)
    • id: volume
    • valeur par défaut: 0,3
    • début: 0
    • arrêt: 1.0
    • étape: 0,05
    • Widget: choisissez ce que vous voulez
  • La valeur de la commande de volume est utilisée comme multiplicateur dans le bloc Multiply Const.
    • Constant: volume
  • Le récepteur temporel de l’interface graphique QT donne une représentation visuelle du signal reçu.
    • Nombre de points: 256
    • Taux d’échantillonnage: int (samp_rate / decim)
    • Nombre d’entrées: 1
  • La sortie haut-parleur est définie par un bloc Audio Sink. Les paramètres sont:
    • Taux d’échantillonnage: réglé sur 48 kHz (utilisez le menu déroulant)
    • Nom de l’appareil: pour la plupart des haut-parleurs (ou prises casque) intégrés à l’ordinateur, le nom de l’appareil peut être laissé vide; pour les autres cas, voir Audio_Sink # Device_Name

Essai

Lorsque vous utilisez GRC, faire une génération et / ou exécuter crée un fichier Python avec le même nom que le fichier .grc. Vous pouvez exécuter le fichier Python sans réexécuter GRC.

Pour tester ce système, nous utiliserons deux processus, nous aurons donc besoin de deux fenêtres de terminal.

Terminal 1:

  • puisque vous venez de terminer la construction du diagramme de flux AM_receive, vous pouvez simplement faire un Run. Après quelques secondes, une fenêtre GUI s’ouvrira avec le contrôle du volume et le puits de temps GUI.

Terminal 2: ouvrez une autre fenêtre de terminal.

  • changer dans le répertoire que vous avez utilisé pour générer le diagramme de flux pour AM_transmit
  • exécutez la commande suivante:
   python3 -u AM_transmit.py
  • Après quelques secondes, une fenêtre GUI s’ouvrira avec le contrôle du volume et le puits de temps GUI.

Parler dans le microphone devrait montrer un changement dans le schéma des deux puits de temps de l’interface graphique QT. Vous devriez entendre votre voix des haut-parleurs. Le volume du haut-parleur peut être réglé avec la commande de volume de réception. Le niveau de modulation peut être ajusté avec la commande de volume de transmission. Notez que l’augmentation du volume de transmission au-delà de 100% provoque une distorsion.

Pour terminer proprement chacun des processus, cliquez sur le «X» dans le coin supérieur de l’interface graphique plutôt que d’utiliser Control-C.

Que faire ensuite

Maintenant que vous avez un système qui fonctionne, vous pouvez expérimenter:

  • changer les paramètres du filtre
  • remplacez le bloc Audio Source par un bloc Signal Source (fréquence: 600) et un bloc Throttle (si vous ne l’avez pas déjà fait)
  • changez la fréquence porteuse – n’oubliez pas que vous devez également changer les facteurs d’interpolation et de décimation!
  • utilisez un bloc AM Demod au lieu d’un bloc Complex to Mag. Voir AM_Demod pour les détails.

Remarque: Chaque fois que vous apportez une modification à un organigramme, vous devez effectuer une génération pour reconstruire le fichier Python.