Un récepteur de bande FM avec GNURadio

Cet article est réalisé en utilisant le PlutoSDR, mais en remplaçant le bloc source par le bloc adapté aux clés SDR « classiques » le programme fonctionnera avec les clés SDR comme les R820T.

Avant de suivre cet article, il est nécessaire d »avoir GNU radio installé sur son ordinateur (voir article dédié à l »installation sous Linux ici). Si vous souhaitez utiliser le PlutoSDR il faut également l »avoir configuré (voir ici).

Configurations générales

Lorsqu »un nouveau programme est créé sous GNU Radio, 2 blocs sont déjà présents : un bloc options et un bloc Variable.

GNU Radio lors de la création d »un nouveau programme.

Commençons par le bloc Options. C »est le bloc qui va définir plusieurs paramètres comme le nom de la fenêtre qui va s »ouvrir au lancement de l »application, son titre, son auteur, sa description, le type d »interface…

Vous pouvez la laisse telle quelle, de mon côté j »ai choisi de la personnaliser un peu :

Mon paramétrage du bloc Options

Le bloc variable est un bloc qui permet tout simplement de déclarer une variable. Dans le bloc présent à la création du programme il s »agit de la variable sample_rate. Elles est initialisée à 32k mais nous nous allons la passer à 2M (2 000 000 ou 2e6).

Fenêtre de configuration de la variable sample_rate

Le bloc Source

Maintenant que les 2 blocs présents par défaut sont configurés, on peut commencer à ajouter des blocs pour construire le récepteur. Le premier de ces blocs est le bloc de « source », en l »occurence ici le bloc PlutoSDR Source dans lequel nous allons paramétrer le PlutoSDR. Ce bloc se trouve en tapant « PlutoSDR Source » dans la zone de recherche de bloc.

Le bloc PlutoSDR Source ajouté au programme mais pas encore configuré.

Il n »y a pas grand chose à modifier dans le bloc : il faut juste lui indiquer l »emplacement du Pluto et utiliser une variable frequence comme fréquence d »écoute.

La configuration du bloc PlutoSDR Source

Après avoir saisi la variable frequence dans le champ LO Frequency, ce dernier devient rouge. C »est tout à fait normal que nous n »avons pas définit cette variable. Pour la définir, vous avez 2 options : soit vous utilisez un bloc Variable, soit vous utiliser le bloc QT GUI Range.

Dans le cas du bloc Variable, vous définirez la fréquence à la création du programme et vous ne pourrez pas la changer pendant son exécution, alors qu »avec le QT GUI Range la fenêtre d »exécution du programme affichera un curseur qui permettra de changer la valeur de la fréquence. C »est ce bloc que nous allons utiliser dans cet article.

Le bloc QT GUI Range inséré mais non configuré

Une fois le bloc inséré, nous pouvons l »utiliser pour définir la variable frequence. Cette variable sera comprise entre 88MHz et 108MHz (la bande FM), on se déplacera sur cette bande avec un pas de 100KHz et on utilisera 90.2MHz (France Bleu de mon département) comme fréquence écoutée au lancement, comme fréquence « par défaut ». Le champ Label permet également de donner un nom « d »affichage » à la variable, comme le contenu de ce champ ne sert uniquement qu »à l »affichage il est donc possible d »utiliser des accents et autres caractères spéciaux.

Le bloc QT GUI Range configuré pour la fréquence

IMPORTANT : il faut penser à changer le Type en int, car les fréquences doivent être des entiers et non des flottants.

Le filtre passe-bas

Maintenant que la source est correctement configurée, il faut définir la large de bande écoutée. Pour cela, nous utiliserons un filtre passe-bas ayant une fréquence de coupure de 100kHZ. Ce bloc se trouve en tapant « Low Pass Filter » dans la liste des blocs.

Le filtre passe bas configuré

Le champ Decimation vaut 4 pour passer d »un taux d »échantillonnage en entrée de 2e6 à un taux d »échantillonnage en sortie à 500k.

Un affichage du spectre de fréquences

Afin de voir la force du signal de la fréquence écoutée, nous allons mettre sur la fenêtre du programme un affichage du spectre de fréquences. Pour cela, ajoutez le bloc QT GUI Frequency Sink. Pour le configurer c »est très simple : il suffit de lui donner comme fréquence centrale (Center Frequency) la variable frequence. Le spectre se centrera alors automatiquement sur la fréquence écoutée.

Le bloc QT GUI Frequency Sink configuré

On peut commencer à relier le bloc de source avec le filtre passe-bas et le bloc d »affichage de la fréquence.

Le bloc source, le filtre passe-bas et l »affichage de la fréquence reliés entre eux

Le bloc démodulateur

L »étape suivante consiste à démoduler le signal, pour passer d »un signal complexe fournit par le PlutoSDR à un signal de type float qui sera notre signal audio. Pour cela, il existe un bloc tout fait sur GNU Radio : WBFM Receive (il faut bien prendre le WBFM qui correspond à une large bande et le non le NBFM qui lui correspond à une bande étroite).

Là encore la configuration est assez simple : il suffit de lui indiquer qu »en entrée on lui injecte un signal échantillonné à 500k et que l »on ne veut pas modifier le signal.

Le bloc WBFM Receive configuré

Ce bloc vient se connecter à la suite du filtre passe-bas.

Adaptation du taux d’échantillonnage

En sortie du démodulateur le signal a un taux d’échantillonnage à 500k, ce qui est élevé pour de l »audio. Nous allons le ramener à 48k avec le bloc Rational Resampler qui va diviser le taux par 500 et le multiplier par 48.

Le bloc Rational Resampler configuré

Il faut bien penser à changer le Type en float car en sortie du démodulateur nous travaillons avec des nombres flottants. Ce bloc vient donc se connecter à la suite du bloc WBFM Receive.

Le volume

Pour gérer le volume, il suffit de multiplier le signal par une constante entre 0 et 1, 0 correspondant à pas de volume et 1 correspondant à la totalité de l »amplitude du signal. La multiplication se fait avec le bloc Multiply Const. Ce bloc vient multiplier le signal par la variable volume que nous pourrons faire varier avec un curseur sur le même principe que la fréquence.

Le bloc Multiply Const configuré
Le bloc de définition du volume configuré

Ecouter le signal audio

Maintenant il ne reste plus qu »un bloc à ajouter : le bloc Audio Sink qui va nous permettre d »écouter le signal audio. Pour le configurer il suffit de choisir un taux d »échantillonnage de 48k.

Le bloc Audio Sink configuré

Place à l »écoute…

Une fois le programme terminé, il ne reste plus qu »à cliquer sur la flèche d »exécution du programme. La fenêtre de réception doit alors s »ouvrir et vous devriez entendre la fréquence choisie.

Le programme terminé
Le fenêtre de réception

10 réflexions au sujet de « Un récepteur de bande FM avec GNURadio »

  1. Bonsoir,
    Merci pour ce tuto que j’ai suivi à la lettre !
    J’utilise un PlutoSDR « ouvert » de 70 Mhz à 6Ghz avec GNURadio sous Ubuntu sur une machine virtuelle VirtualBox .
    Le script se lance bien, le graphique est OK , mais pas de son … Enfin si du bruit ( HI ) du genre « tictoctitoc » etc…
    J’ai beau revérifier je ne vois pas mon erreur ? Si vous avez une idée ?
    73 Alain

  2. Merci , je viens d’essayer votre fichier c’est pareil !
    La cause probable serait la machine virtuelle elle-même qui doit communiquer avec deux composants matériels physiques (radio + carte son).
    A Suivre ….

  3. Bonjour Enzo,
    Merci pour ton site qui est très bien fait .
    Il y a cependant je pense une « petite coquille » sur le low Past Filter , Transition Width à 1000000 Hz avec 100000 Hz de Cut Freq ! Dans ce cas le filtre aura une telle progressivité qu’il ne coupera que très loin des 100000 Hz , normalement vers 600 000 Hz !
    Ai-je raison , ou y a t il quelque chose que je n’ai pas compris ?
    73
    Alain

    1. Bonjour, en effet il y a une erreur, la transition est de 10 000 Hz. C’est corrigé dans l’article ainsi que le fichier grc sur mon GitHub. Merci pour votre retour !
      73

  4. Bonjour, j’ai essayé de réaliser cette manipulation sur mon pc avec ma carte Adalm Pulto malheureusement quand je lance la simulation je ne vois aucun canal.
    J’ai essayé de modifier le montage de bloc sur GNU Radio pour me centrer sur un canal de wifi à 2.4GHz mais même soucis le canal aparait et disparait en boucle.
    Une solution ??
    merci Romain Souchon etudiant en deuxième année de DUT Réseaux et Télécommunications

      1. Merci de votre réponse j’ai le log suivant quand je lance le programme:
        Generating: ‘C:\Users\Sacha\Desktop\top_block.py’

        Executing: C:\Program Files\GNURadio-3.7\gr-python27\python.exe -u C:\Users\Sacha\Desktop\top_block.py

        Unable to write attribute out_altvoltage0_RX_LO_frequency: -22
        INFO: Audio sink arch: windows
        gr::pagesize: no info; setting pagesize = 4096

      2. bonjour je me permet de vous recontacter car j’essaye toujours de résoudre mon problème.
        Auriez vous une idée d’où peut venir mon problème ?
        Merci a vous .

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *