Tutoriel: GNU Radio Companion
Objectifs
- Créer des organigrammes à l’aide des bibliothèques de blocs standard
- Apprenez à déboguer les organigrammes avec les blocs d’instrumentation
- Comprendre le fonctionnement de l’échantillonnage et de l’accélération dans GNU Radio
- Apprenez à utiliser la documentation pour comprendre les fonctionnalités du bloc
Conditions préalables
- Connaissance de base de git
- Téléchargez GNU Radio 3.8.0.0 (ne pas utiliser 3.8.9 jusqu’à nouvel ordre)
- ou bien téléchargez la version de GNU Radio 3.8 pour windows
- Une brève introduction à GNU Radio, SDR et DSP
Configuration des didacticiels
Avant de commencer, nous devons mentionner que les solutions (y compris les images, les fichiers grc et les fichiers de module) sont disponibles par téléchargement. Nous référencerons les fichiers, mais pour la plupart, nous créerons nos propres fichiers afin que nous puissions nous entraîner et créer par intuition. Dans les différents chapitres certains fichiers donneront des erreurs au téléchargement lors des clics sur les liens. Il est donc souhaitable de les télécharger dès maintenant en bloc. Pour obtenir des instructions sur l’installation de ces modules, voir Installation des modules des didacticiels.
Apprendre à connaître le GRC
Nous avons vu dans le Tutoriel 1 que GNU Radio est une collection d’outils qui peuvent être utilisés pour développer des systèmes radio en logiciel plutôt qu’en matériel. Dans ce tutoriel, nous commençons simplement et explorons comment utiliser le GNU Radio Companion (GRC), l’outil graphique de GNU Radio, pour créer différents sons. Nous devons garder à l’esprit que GRC a été créé pour simplifier l’utilisation de GNU Radio en nous permettant de créer des fichiers python graphiquement au lieu de les créer uniquement en code (nous en discuterons plus tard).
La première chose à couvrir est l’interface. Il se compose de cinq parties: bibliothèque, barre d’outils, terminal, espace de travail et variables.

Le didacticiel est censé être pratique, alors veuillez prendre quelques pauses de lecture ici et là pour expérimenter. Nous réitérerons que ces didacticiels ne sont que des guides et que la meilleure façon d’apprendre quelque chose est de l’essayer: proposer une question, réfléchir à une solution possible et l’essayer. Commençons par démarrer le GRC ! Cela se fait généralement en ouvrant une fenêtre de terminal (ctrl + alt + t dans Ubuntu) et en tapant :
$ gnuradio-compagnon
Si vous ne parvenez pas à ouvrir GRC, vous devez revenir à l’ Installation de GR et dépanner l’installation.
Recherche de blocs
La bibliothèque contient les différents blocs installés dans les chemins de bloc GRC. Ici, nous trouvons des blocs préinstallés dans GNU Radio et des blocs installés sur le système. Au début, il semble intimidant de rechercher des blocs. Par exemple, si nous voulons générer une forme d’onde, dans quelle catégorie devons-nous chercher ? Nous voyons qu’il y a une catégorie générateur de forme d’onde, ok pas mal. Mais que se passe-t-il si nous voulions trouver un moyen d’afficher nos données mais que nous ne sommes pas encore sûrs de la meilleure façon de les afficher ? Nous savons par le tutoriel 1 que ceci est connu comme un afficheur (sink); cependant, en parcourant la liste, il n’y a pas de catégorie Sink. La solution consiste à utiliser la fonction de recherche en cliquant sur l’icône de la loupe ou en tapant Ctrl + f, puis en commençant à taper un mot-clé pour identifier le bloc. Nous voyons une boîte blanche apparaître en haut de la bibliothèque avec un curseur. Si nous tapons «sink», nous pouvons trouver tous les blocs qui contiennent les mots «sink» et les catégories dans lesquelles nous trouverons chaque bloc.

Pour l’instant, ajoutons le bloc appelé QT GUI Time Sink en cliquant sur son nom et en le faisant glisser vers l’espace de travail ou en double-cliquant sur son nom pour qu’il soit placé automatiquement dans l’espace de travail.
Modification des propriétés des blocs
L’espace de travail (zone principale de l’écran) contient tous nos blocs qui composent notre organigramme, et à l’intérieur de chaque bloc, nous pouvons voir tous les différents paramètres de bloc. Il existe cependant un bloc spécial avec lequel chaque nouveau diagramme commence et doit avoir, appelé le bloc Options . Double-cliquez sur le bloc Options pour examiner ses propriétés. Nous voyons une fenêtre comme ci-dessous:

Ces propriétés de bloc peuvent être modifiées par rapport aux valeurs par défaut pour accomplir différentes tâches. Supprimons une partie du nom actuel et notons que l’ID devient bleu. Cette couleur signifie que les informations ont été modifiées, mais n’ont pas été enregistrées. Si nous revenons aux propriétés du bloc d’options , nous pouvons voir qu’il existe différents onglets et l’un est intitulé documentation.

Si nous lisons quelques lignes, nous pouvons voir que l’ ID de propriété est réellement utilisé pour le nom du fichier python généré par le diagramme.

Supprimons maintenant la chaîne d’ID complète. Notez maintenant qu’en bas apparaît un message d’erreur. Notez également que l’ ID de paramètre est maintenant rouge pour nous montrer exactement où l’erreur s’est produite.
Pour garder les choses organisées, changeons l’ ID en «tutorial_two_1». Assurons-nous également que la propriété Generate Options est définie sur «QT GUI» puisque nous utilisons un afficheur graphique. Le champ ID nous permet de gérer plus facilement notre espace fichier. Alors que nous enregistrons le diagramme GRC sous la forme d’un <nom de fichier> .grc, la génération et l’exécution de ce diagramme produit une autre sortie. GRC est une interface graphique qui se trouve au-dessus de l’environnement de programmation GNU Radio normal qui est en Python. GRC traduit le diagramme de flux que nous créons ici dans le canevas de l’interface graphique en script Python, donc lorsque nous exécutons un diagramme de flux, nous exécutons vraiment un programme Python. L’ ID est utilisé pour nommer ce fichier Python, enregistré dans le même répertoire que le fichier .grc. Par défaut, ID par défaut et crée donc un fichier appelé default.py. Changer l’ ID nous permet de changer le nom du fichier enregistré pour une meilleure gestion des fichiers. Dans GNUradio 3.8, vous obtiendrez une erreur si vous ne changez pas l’ID par défaut, vous devez donc changer cet identifiant pour exécuter le diagramme de flux.
Un autre résultat de cette connexion GRC-Python est que GRC est en fait entièrement Python. En fait, toutes les zones de saisie des propriétés de bloc ou des variables que nous utilisons sont interprétées comme Python. Cela signifie que nous pouvons définir des propriétés à l’aide d’appels Python, comme appeler un numpy ou d’autres fonctions GNU Radio. Une utilisation courante de cela est d’appeler l’ outil de conception de filtres filter.firdes de GNU Radio pour construire nos afficheurs de filtrage.
Une autre clé à noter correspond aux différentes couleurs présentes dans les champs dans lesquels nous pouvons saisir des informations. Celles-ci correspondent en fait à différents types de données que nous aborderons plus loin dans ce tutoriel.
Mon premier organigramme
Maintenant que nous comprenons mieux comment trouver des blocs, comment les ajouter à l’espace de travail et comment modifier les propriétés du bloc, procédons à la construction du diagramme suivant d’une source de signal envoyée à un bloc de limitation (Throttle) puis à notre Time Sink en cliquant successivement sur les ports / onglets colorés du type de données pour établir les connexions:

Avec un organigramme utilisable, nous pouvons maintenant discuter de la barre d’outils.
Remarque sur le bloc Throttle : ce que cela fait exactement est expliqué plus en détail plus loin dans ce didacticiel. Pour l’instant, il suffira de savoir que ce bloc jugule le graphique de flux pour s’assurer qu’il ne consomme pas 100% de vos cycles CPU et que votre ordinateur ne répond pas.

Cette section de l’interface contient des commandes présentes dans la plupart des logiciels telles que nouveau, ouvrir, enregistrer, copier, coller. Commençons par enregistrer notre travail présent et intitulons notre graphique de flux tutorial_two . Les outils importants ici sont Generate flowgraph, Execute flowgraph et Kill flowgraph, tous accessibles via F5, F6 et F7 respectivement. Une bonne référence est disponible dans Aide -> Types qui montre le mappage des couleurs des types que nous examinerons plus tard.
Examen de la sortie
Allons de l’avant et lançons Execute flowgraph (triangle vert du menu) pour voir notre onde sinusoïdale.

Nous devrions obtenir ce qui précède qui est une sinusoïde complexe de la forme e jwt . Gardons les choses simples en évitant les signaux complexes pour l’instant. Tout d’abord, nous voulons tuer le diagramme de flux avec le bouton Kill flowgraph (icone sens interdit) ou en fermant simplement l’ interface graphique Time Sink . Le moment est venu de passer en revue les types de données dans GNU Radio en ouvrant la fenêtre Aide -> Types .

Nous pouvons voir les types de données communs vus dans de nombreux langages de programmation. Nous pouvons voir que nos blocs (ports bleus) sont actuellement de type Complex Float 32, ce qui signifie qu’ils contiennent à la fois une partie réelle et imaginaire, chacun étant de type Float 32 . Nous pouvons penser que lorsque l’afficheur temporel QT GUI Time sink prend un type de données complexe, il sort à la fois la partie réelle et la partie imaginaire sur des canaux séparés. Modifions maintenant la source du signal en flottant en entrant dans ses propriétés de bloc et en modifiant le paramètre Output Type . On voit que son port devient orange, il y a maintenant une flèche rouge pointant vers le Throttle Block, et dans la barre d’outils il y a un bouton rouge «-» (rouge) qui dit «Voir les erreurs du graphique de flux». Allons de l’avant et cliquez dessus.

Nous voyons que dans la connexion spécifiée, il y a un décalage de taille. Cela est dû à notre non-concordance de taille de type de données. GNU Radio ne nous permettra pas de chaîner des blocs de différentes tailles de données, alors changeons le type de données de tous nos blocs suivants. Nous pouvons maintenant générer et exécuter comme auparavant.

Nous voyons maintenant notre onde sinusoïdale sur un canal. Nous pouvons cliquer sur l’écran et déplacer la souris pour zoomer et redimensionner.
Un organigramme plus complexe
Maintenant que nous pouvons créer des organigrammes par nous-mêmes, essayons de créer un organigramme plus compliqué avec de nombreux paramètres spécifiques. Cet exemple d’organigramme illustre de nombreux nouveaux concepts dans GNU Radio comme l’utilisation de fenêtres à onglets et de plages d’interface graphique QT. Notez que tous les paramètres de bloc ne sont pas affichés dans la fenêtre principale, utilisez donc le texte ci-dessous (pas seulement la capture d’écran) pour définir les paramètres de chaque bloc.

Modifications détaillées:
– Nous commençons un nouveau diagramme avec l’ ID «tutorial_two_3»
– Dans la plage d’interface graphique QT , l’ ID à «samp_rate», la valeur par défaut à «5 * freq», le début à «0,5 * freq», l’ arrêt à «20 * freq », Pas à« 200 »
– En variable , ID à« freq », Valeur à« 2e3 »
– En source de signal , Fréquence à« freq », Forme d’ onde à« Sinus »
– En accélération , Taux d’échantillonnage à 32e3 (plus sûr, explication pourquoi plus tard)
Une fois que nous avons vérifié nos modifications, générons et exécutons. Il devrait produire une fenêtre qui comporte deux onglets, l’un indiquant le domaine temporel et l’autre le domaine fréquentiel. Il devrait également y avoir un curseur en bas pour contrôler la fréquence d’échantillonnage (de la source du signal) en temps réel. La modification de ce curseur devrait modifier la fréquence observée dans l’afficheur temps et l’afficheur fréquence.
Le taux d’échantillonnage est un sujet intéressant dans GNU Radio – et, en fait, dans n’importe quelle plateforme radio logicielle. Veuillez consulter le didacticiel sur le taux d’échantillonnage.