Les notions de traitement du signal du chapitre précédent ne vous ont, apparemment, pas effrayé. Nous allons ici intervenir sur les commandes essentielles de "GNU Radio", vitales pour la suite ; il s'agit donc d'une partie exclusivement « technique ». Après une présentation de l'interface du "Companion", nous nous intéresserons à la manipulation des blocs, qui sera illustré sur un premier exemple.
Installation.
"GNU Radio" a été conçu pour profiter des outils des systèmes d'exploitation à base GNU/Linux ; le projet n'entretient d'ailleurs pas de façon officielle les versions pour Windows et Mac. Bien qu'il soit possible de compiler directement les sources, nous suggérons aux utilisateurs de ces deux systèmes d'employer le CD autonome qui leur est dédié afin de profiter des dernières mises à jour. C'est cette solution que nous allons présenter.
Un CD autonome (ou "Live CD") permet de démarrer un ordinateur sur un système d'exploitation différent de celui installé, présent sur le CD, sans toucher au disque dur. Lorsque le CD autonome est retiré, l'ordinateur reprend sa configuration initiale. L'image ISO qui servira à la génération du CD peut être téléchargée "via" un client torrent ou depuis un site miroir.
Pour les utilisateurs de versions "Ubuntu", la méthode la plus simple est d'utiliser le gestionnaire de paquets et d'installer codice_1, codice_2 et codice_3 depuis le PPA codice_4 :
Les autres utilisateurs de systèmes "GNU/Linux" sont invités à se référer au manuel de compilation.
Premier démarrage.
L'installation de "GNU Radio" achevée, lancez le "gnuradio-companion" (GRC). Au premier démarrage s'ouvre une fenêtre blanche divisée en trois espaces principaux : le logigramme ("flowchart"), le terminal et la zone de sélection des blocs.
Les blocs sont groupés par catégories à droite de la fenêtre ; nous aurons l'occasion d'y revenir plus en détails. Pour en insérer un dans le logigramme, déroulez sa catégorie en cliquant sur le triangle gris , sélectionnez-le et cliquez sur le bouton « Ajouter ».
Le terminal, en bas, affiche les messages de sortie (erreurs, informations, etc). Nous ne nous en servirons presque pas, le "companion" étant capable de signaler les problèmes de différentes façons.
Barre de menus.
La barre de menus vous permet d'accéder :
Barre d'outils.
La barre d'outils, située juste au-dessus du logigramme, reprend des fonctions présentes dans les menus afin de faciliter leur accès. De gauche à droite, nous avons ainsi : nouveau projet ; ouvrir ; enregistrer ; fermer ; capture d'écran ; couper la sélection ; copier la sélection ; coller ; annuler/refaire ; afficher les messages d'erreur ; compiler ; exécuter ; stopper ; puis des fonctions de manipulation de blocs que nous décrirons plus tard.
Des raccourcis clavier existent et sont très utiles pour aller plus rapidement.
Deux blocs déjà présents.
Dès le démarrage, deux blocs sont déjà présents, par défaut, dans le logigramme : "Options" et "Variable". En double-cliquant sur l'un deux, on accède à ses propriétés ("Properties").
On donne ci-contre l'exemple sur le bloc "Options". Ce bloc particulier sert à renseigner les paramètres généraux du document, que l'on peut donner dans la fenêtre des propriétés. Les paramètres d'un bloc sont ses attributs ; ils correspondent à une valeur, choisie par défaut ou par l'utilisateur, stockée dans une variable.
Nous rencontrerons dans l'ouvrage un grand nombre de blocs différents. Tous seront décrits de la même manière, grâce à un encart similaire à celui ci-dessous.
Pour la plupart des projets, il ne sera pas nécessaire de compléter les attributs de ce bloc. Les valeurs par défaut seront en effet satisfaisantes.
Un utile code couleurs.
Il ne vous a sans doute pas échappé la coloration plutôt kitsch des champs de la fenêtre de réglage des attributs. Chaque champ est coloré d'après la nature de la valeur attendue, d'après un code couleurs que nous reproduisons partiellement ici. Nous respecterons ce code dans les documentations des blocs.
Notez également que certains paramètres sont soulignés. Ils correspondent à des paramètres pouvant être modifiés pendant l'exécution du logigramme.
Manipuler et relier des blocs.
Un bloc tout seul n'ayant qu'un intérêt très limité, nous devons maintenant apprendre à les arranger à notre guise.
La manœuvre permettant de relier deux blocs est très simple. Après s'être assuré que les deux blocs étaient bien compatibles (c'est-à-dire que l'un comporte une sortie "OUT" et l'autre une entrée "IN", représentées dans un rectangle bleu), sélectionner à l'aide d'un clic successivement les deux « jacks » bleus. Le lien apparaîtra, dirigé automatiquement de la sortie vers l'entrée. La supression est elle aussi très intuitive : après avoir cliqué sur un lien, supprimez-le grâce à l'outil "Delete" de la barre d'outils ou la touche du clavier.
Pour déplacer un bloc, sélectionnez-le à la souris et déplacez-le en maintenant enfoncé, puis relâchez à l'endroit voulu.
En cliquant une fois sur un bloc, celui-ci apparaît en surbrillance (contour bleu clair) : il est alors possible d'utiliser les outils du menu "Edit". En premier lieu, vous pouvez le faire tourner dans le sens antihoraire ou horaire grâce aux fonctions "Rotate Counterclockwise"/"Rotate Clockwise" ou le supprimer avec "Delete".
Votre premier logigramme.
Nous proposons de mettre en application les enseignements de ce chapitre afin de réaliser un premier logigramme élémentaire. Nous souhaitons ici générer un signal sinusoïdal formula_1 de fréquence formula_2 réglable, et afficher sa représentation graphique à la manière d'un oscilloscope numérique. Pour cela, il nous faut utiliser les blocs :
D'autre part, afin de pouvoir modifier la fréquence pendant l'exécution, nous stockerons sa valeur dans une variable à l'aide d'un bloc "WX GUI Slider" (de "GUI Widgets" » "WX"). Ce bloc affichera un curseur réglable au moment de l'exécution.
Commençons par placer sur le logigramme le bloc "Signal Source". Dans les paramètres, on indique que l'on souhaite une sortie sous forme de flottant ("Float") et on donne pour valeur de la fréquence la variable "f". Le logiciel indique que la variable "f" est inconnue, il faut donc la préciser.
On insère donc, n'importe où dans le logigramme, un bloc "WX GUI Slider" dont l'ID sera "f". À titre d'exercice, on propose de donner comme valeur par défaut 200 Hz, comme minimum 150 et maximum 400.
Puis, on insère le visualiseur "WX GUI Scope Sink", en précisant dans ses attributs que l'entrée est un flottant (attribut "Type"). Il ne reste alors qu'à relier les blocs "Signal Source" et "Scope Sink". Le bloc "Slider" n'a pas besoin d'être relié : la variable "f" qu'il renseigne est en effet définie pour tout le logigramme.
Voici une première proposition, consistant en la simple mise en application de ce que nous venons d'énoncer. Ne l'exécutez pas ! Lors de la compilation, il apparaît un message d'avertissement ("Warning") dans le terminal : en effet, le logigramme va être exécuté en boucle par l'ordinateur, à la vitesse maximale autorisée par le processeur (c'est-à-dire à la fréquence d'horloge), ce qui pourrait entraîner un plantage de la machine. Afin de limiter la vitesse d'exécution, il faut insérer entre les deux blocs un bloc de commande ("Throttle").
Une fois ce bloc inséré, vous pouvez compiler puis lancer l'exécution du programme. Apparaît alors une interface graphique correspondant au rendu demandé. On y trouve l'oscilloscope, mais également le "slider" de réglage de formula_2 que l'on déplace à la souris (ou au clavier). Une modification de la valeur de formula_2 est répercutée sur le visualiseur.
Pour l'instant, nous nous contentons de présenter la fonction de réglage des axes ("Axes Options") de l'oscilloscope. Il est possible d'augmenter la base de temps (boutons et ) afin de mieux observer le signal. Pour modifier l'offset ou l'échelle verticale, décochez l'option "Autorange" (qui correspond à un choix automatique).
Passons à l'écoute.
La première vocation de la radio était de transmettre des bits (avec le fameux code Morse) mais a rapidement évolué vers la transmission de la voix. Comment, avec "GNU Radio", utiliser les hauts-parleurs de l'ordinateur ? Il faut utiliser un objet "sink" — les objets de cette catégorie correspondent à des sorties vers le matériel.
Reprenons l'exemple précédent en nous plaçant aux alentours des fréquences du domaine audible, c'est-à-dire entre 20 et 20000 Hz (paramètres à modifier dans les attributs du bloc "Signal Source"). On remplace ensuite le visualiseur par un bloc "Audio Sink" (catégorie "Audio"). Après avoir baissé le son ou retiré vos écouteurs, vous pourrez profiter de la douce mélodie d'un signal sinusoïdal.
En toute rigueur, il n'est dans cet exemple plus nécessaire de placer un "Throttle" ; en effet, l'horloge interne de la carte son en jouera le rôle. Les "Throttle" ne devraient être utilisés que pour des simulations exclusivement numériques, sans périphériques.