Dans un système radio classique, l’émission/réception est assurée par des composants matériels qui sont dédiés à un système. Par exemple un récepteur radio FM, un décodeur télé TNT, un récepteur radio numérique DAB, sont généralement dédiés à un système. Il est nécessaire de changer de matériel lorsque l’on souhaite passer d’une technologie à une autre (passer de la FM vers le DAB par exemple).
Une radio logicielle (appelée Software Defined Radio ou SDR en anglais) est principalement gérée par du logiciel, s’affranchissant de la contrainte matérielle et permettant ainsi de passer facilement d’un système à une autre.
Une radio logicielle est généralement composé d’un matériel relativement simple permettant de numériser le signal radio et d’un logiciel qui va se charger de tous les traitements (démodulation, filtrage, analyse spectrale, suppression de bruit…).
Dans cet article, nous allons utiliser le logiciel SDR open source gqrx (basé sur GNU radio) avec un dongle USB basé sur le composant RTL2832U.
Installation de gqrx
Sur Linux, l’installation du logiciel gqrx est très simple :
sudo apt update
sudo apt install gqrx-sdr
Une fois le dongle relié au port USB du PC, lançons le logiciel gqrx pour partir à la découverte de la radio logicielle.
Lors du premier lancement de gqrx, il faut configurer votre récepteur (I/O device). Sélectionnez votre équipement (par exemple le mien est un dongle Generic RTL2832U OEM :: 0000001) dans le champ Device, et laissez les autres paramètres par défaut.
Utilisation de gqrx
L’interface de gqrx est relativement simple, elle est composée de 4 zones principales :
- 1 : Sélection de la fréquence
- 2 : Affichage du spectre en temps réel
- 3 : Historique du spectre sous forme “waterfall“
- 4 : Réglages
Une fois que vous avez configuré la fréquence souhaitée (dans la zone 1 ou dans la zone 4), lancez le traitement du signal (Start DSP processing) en cliquant sur la flèche dans le menu principal.
Le spectre en temps réel s’affiche alors dans la partie haute (en noir). Il s’agit d’une représentation graphique des signaux reçus sur une bande de fréquences donnée. Cette section permet d’analyser l’intensité des signaux à différentes fréquences.
Dans la partie basse (en bleu avec bandes jaunes), s’affiche l’historique du spectre sous forme “waterfall“. L’axe horizontal (X) représente la fréquence, l’axe vertical (Y) représente le temps et la couleur représente l’intensité du signal. Le waterfall permet de visualiser des signaux qui pourraient être difficiles à entendre ou à détecter dans le spectre instantané et permet de voir comment les signaux changent au fil du temps, ce qui est utile pour observer des transmissions intermittentes ou des signaux modulés.
Écouter une radio de la bande FM
La premier exemple d’utilisation accessible à tous est l’écoute d’une radio de la bande FM (fréquence 87,5 – 108 MHz). Nous pouvons par exemple entrer la fréquence de France Inter en région parisienne 87,8 MHz. Vous pouvez régler la fréquence sur 87.800.000 Hz dans la zone 1 (fréquence) ou bien 87800,000 kHz dans dans le champ Receiver option de la zone 4 (réglages).
Dans la zone réglage, il faut sélectionner le mode WFM (mono), et laisser les autres réglages par défaut.
Vous devriez entendre France Inter dans les hauts parleurs de votre PC, magique non ? 😉
Analyser le signal envoyé par le capteur de température d’une station météo
Pour aller un peu plus loin, nous allons analyser le signal radio envoyé par un capteur de température d’une station météo. Il s’agit en général de dispositifs relativement simples à analyser car ils transmettent les mesures sans chiffrement.
J’utilise pour cet exemple un capteur de ma station météo, dont la référence est TFA Dostmann 30.3120.90.
Ce type de dispositif radio émet généralement sur la bande de fréquences 433 MHz. Cette bande de fréquences est en effet très populaire pour de nombreuses applications à courte portée, principalement en raison de sa disponibilité dans de nombreux pays sans nécessiter de licence. Elle fait partie des bandes ISM (Industrial, Scientific, and Medical), souvent utilisée pour des communications domestiques (télécommandes, capteurs, babyphones, variateurs de lumière…) et industrielles.
Il suffit donc de régler la fréquence 433.000.000 Hz dans gqrx et d’attendre qu’un signal soit émit par ce capteur (mon capteur émet un signal toutes les minutes).
Vous devez ensuite configurer précisément la fréquence du filtre en déplaçant le curseur de la souris sur la zone centrale du spectre du signal reçu (zone rouge centrale dans l’historique du spectre). On voit par exemple dans la capture ci-dessous que mon capteur émet sur la fréquence 432,55 MHz.
Notez qu’une deuxième fréquence est affichée dans l’onglet Receiver Options. Il affiche le décalage de la fréquence du filtre par rapport au centre du spectre de fréquence (la fréquence matérielle du récepteur).
Le plus simple est de laisser ce décalage à zéro (0.000 kHz), mais lorsque vous sélectionnez une fréquence en déplaçant le curseur de la souris dans la zone d’affichage du spectre ou de l’historique du spectre, gqrx ne modifie pas la fréquence matérielle mais applique un décalage sur la fréquence du filtre.
Par exemple dans les deux images ci-dessous, la fréquence analysée est 432550,000 kHz, mais dans un cas le décalage est nul (fréquence matérielle = 432.550000 MHz ; décalage = 0.000 kHz) et dans l’autre un décalage est configuré (fréquence matérielle = 433.006200 MHz ; décalage = -456.200 kHz) .
Note : vous remarquerez la fâcheuse confusion dans l’utilisation des “.” et “,” sur les affichages du logiciel, liée à la traduction partielle de certains champs… 🙁
Le décodage du signal radio du capteur de température
Pour être en mesure de décoder ce signal, il existe plusieurs méthodes. Nous allons utiliser la plus simple, puisqu’il s’agit d’enregistrer le signal en mode Raw IQ sous forme de fichier son (.wav) dans gqrx et de le visualiser ensuite avec l’outil Audacity.
Il faut ouvrir le fichier son enregistré dans le logiciel Audacity et zoomer sur la partie correspondant au signal reçu.
On voit que le capteur de température émet 3 bursts radio, qui après analyse se révèlent être identiques.
En zoomant sur chaque burst, on voit qu’il sont composés de 44 pulsations. Il y a des pulsations courtes (2 fronts montants) et des pulsations plus longues (4 fronts montants).
La documentation trouvée sur internet(1) indique que le protocole de ce capteur est composé de trames de 44 bits, ce qui correspond à notre observation. Une pulsation correspondant donc à 1 bit d’une trame de ce protocole. La documentation indique également qu’une pulsation longue représente un 0 et une pulsation courte représente un 1. Nous pouvons donc convertir le signal radio en une trame composée de 44 chiffres binaires (bits).
Une autre documentation trouvée sur internet(2) détaille l’encodage de cette trame de 44 bits :
- 8 bits (blanc) : séquence de démarrage
- 4 bits (jaune) : type de mesure (0000 = thermo, 1110 = hygro)
- 7 bits (bleu) : adresse du capteur
- 1 bit (violet) : bit de parité
- 12 bits (vert) : mesure
- 8 bits (gris) : recopie des 8 premiers bits de la mesure
- 4 bits (rouge) : somme de contrôle (checksum)
Le décodage de la trame suivant ce schéma permet d’identifier facilement la mesure remontée par le capteur. Par exemple, dans la capture suivante, le capteur remonte une température (indiqué par le 3ième nibble qui est égal à 0000, correspondant au type de mesure thermo). La mesure de cette température est contenue dans les 3 nibbles indiqués en rouge.
La documentation du capteur indique que la mesure d’une température est codée en utilisant le principe du décimal codé binaire, dont la valeur correspond à la température en dixième de °C additionnés de 50°C (afin de pouvoir mesurer des températures négatives).
La mesure remontée par le capteur (691) correspond donc à une température de 19,1°C (691 dixième de °C = 69,1°C ; 69,1°C – 50°C = 19,1°C).
Dans un prochain article, j’irai un peu plus loin grâce à l’utilisation du boitier HackRF One qui permet de couvrir un spectre plus large et qui possède d’intéressantes capacités puisqu’il s’agit d’un émetteur/récepteur 😉
⚠️ Considérations importantes : La surveillance de certaines transmissions peut être restreinte selon les lois locales. Émettre sans autorisation sur des fréquences non libres peut entraîner des sanctions pénales sévères, car cela peut perturber d’autres services (aviation, sécurité publique, etc.).
J’espère que cet article vous aura intéressé. N’hésitez pas à donner votre avis en cliquant sur les étoiles ci-dessous.
(1) https://github.com/merbanan/rtl_433/blob/master/src/devices/lacrosse.c