Traitement de signaux radiofréquences par logiciel (SDR) - J.

Traitement de signaux radiofréquences par logiciel (SDR) – GNURadio
J.-M Friedt, 21 mars 2015
1 Premiers pas avec GNURadio
GNURadio est un ensemble de blocs de traitements de signaux numériques ainsi qu’un ordonnanceur de flux de données.
Les blocs de traitement sont développés en C++ ou Python. L’assemblage des blocs pour définir le flux de données est renseigné
en Python. Une interface graphique n’est pas obligatoire, rendant GNURadio particulièrement favorable aux environnements
embarqués qui ne sont pas munis de périphériques pour l’affichage graphique.
Un outil d’assistance à l’assemblage de blocs – qui s’avère être en pratique un générateur de code Python à partir d’un chaînage des blocs de traitements – se nomme GNURadio Companion. Nous l’utiliserons au cours de cette découverte du traitement
numérique de signaux radiofréquences (Software Defined Radio – SDR).
2 Premiers pas : réception de la FM commerciale
2.1 Affichage de spectre
Le premier exemple le plus simple consiste à démoduler le signal de la FM commerciale et restituer le son ainsi généré vers
la carte son (Fig. 1). Il s’agit de l’exemple le plus simple car le signal reçu est puissant et continu, mais qui démontre néanmoins
les principaux concepts de la SDR. Les objectifs de cette première expérience sont de
1. se familiariser avec la recherche de blocs dans le menu de droite qui liste l’ensemble des fonctions de traitement disponible,
2. sélectionner la source de données correspondant au récepteur DVB-T que nous utilisons au cours de ce TP.
F IGURE 1 – Fenêtre de démarrage de GNURadio Companion.
Une source fournit un flux de données I et Q vers les divers blocs de traitement pour finalement alimenter un puits – dans
notre cas la carte son. Le débit de données issues de la source définit la bande passante d’analyse et donc la quantité d’information que nous sommes susceptibles de récupérer (cf Shannon). La bande passante est limitée par la fréquence d’échantillonage
et le débit de transfert de données entre le périphérique de capture et le PC (dans notre cas, USB).
BLa fréquence centrale de travail n’a aucune importance – elle ne fait que définir la taille d’antenne – puisque le récepteur
radiofréquence l’élimine par mélange. Seule la bande passante importe !
Une source de données facilement accessible est l’entrée audio (carte son) du PC. Sa bande passante est cependant limitée
à 48 ou 96 kHz selon les modèles de carte son. Historiquement, la sortie de récepteurs radiofréquences ont été connectées aux
1
entrées audio pour traitement numérique des signaux. Dans notre approche, un récepteur de télévision numérique terrestre disponible à un prix modique s’avère être un récepteur radiofréquence universel opérant dans la gamme d’environ 50 à 2000 MHz.
Il couvre en particulier la bande FM commerciale qui va de ...
1. quelle est la bande de FM commerciale ? quelles sont les longueurs d’ondes associées ?
2. Trouver la source en tapant sous l’icône de la loupe osmo qui doit permettre d’atteindre le bloc source Osmocom Source.
3. Trouver le puits en tapant sous l’icône de la loupe WX qui doit donner accès à WX GUI FFT Sink.
4. Modifier la fréquence d’échantillonage samp_rate pour une valeur comprise entre 1 et 2 MHz.
5. Faire varier la fréquence d’échantillonage et observer la conséquence.
Plutôt que régler la fréquence de travail au lancement du processus de traitement, il serait agréable de pouvoir modifier
dynamiquement ce paramètre (Fig. 2).
F IGURE 2 – Définition de la fréquence de travail au moyen d’un ascenseur.
1. Créer un ascenseur lié à la variable f au moyen de WX Slider
2. Lier la fréquence centrale de réception à la variable f commandant la fréquence centrale de travail du récepteur DVB-T
3. Définir la fréquence centrale de la FFT comme étant égale à f et non à 0
2.2 Démodulation et sortie audio
Une fois la bande de fréquence contenant un signal utile identifiée, nous devons démoduler le signal (extraire l’information
de modulation de la porteuse) et envoyer le résultat sur une sortie exploitable, par exemple la carte son d’un PC.
F IGURE 3 – Définition de samp_rate comme multiple de la fréquence audio finale, et activation de la sortie son du PC.
La difficulté tient en la gestion du flux de données, qui doit passer d’un débit radiofréquence (plusieurs centaines de kéchantillons/s) vers un flux audio-fréquence (quelques dizaines de échantillons/s). GNURadio ne gère pas automatiquement le
flux de données, et ne prévient l’utilisateur d’une incohérence dans le flux de traitement par des messages au premier abord
cryptiques (mais parfaitement cohérents une fois que nous en comprenons le sens).
2
Le flux de données issu du récepteur DVB-T est compris entre 1 et 2,4 Méchantillons/s (la borne haute étant déterminée par
la bande passante de la liaison USB). La sortie sur carte son est contrainte par les quelques fréquences d’échantillonage accessibles que sont 48000, 44100, 22150 ou, pour les cartes son les plus anciennes, 11025 Hz. La gestion du flux de données consiste
à décimer de façon cohérente le flux d’un débit initial à un débit final. Afin de garantir que le flux d’acquisition radiofréquence
est multiple du débit audio-fréquence de sortie, il est prudent de définir samp_rate comme multiple de la fréquence de sortie
audio. Par exemple pour une sortie à 48 kHz, une entrée de 48 × 32 = 1, 536 MHz respecte la bande passante d’échantillonage
du récepteur. De même pour une sortie à 44,1 kHz, une entrée à 44, 1 × 50 = 2, 205 MHz respecte les conditions d’échantillonage
d’entrée et de sortie sous réserve que les divers blocs de traitement déciment de 50 = 5 × 5 × 2.
Connecter un casque à la sortie audio du PC et écouter le résultat. Que se passe-t-il si le facteur de décimation du démodulateur est modifié de 24 à 18 par exemple ? De 24 à 30 ?
3 Encombrement spectral des modes de modulation
La bande passante du canal définit la quantité d’information qui peut y circuler. Le mode de modulation induit un encombrement spectral et donc la distribution des raies dans la bande passante allouée. La Fig. 4 illustre l’encombrement spectral de
deux modes de modulation – AM et FM – pour encoder le même signal – une sinusoïde de fréquence et amplitude fixe.
F IGURE 4 – Encombrement spectral des modulations AM (gauche) et FM (droite). Dans les deux cas le signal modulant est une
sinusoïde à 2400 Hz.
4 Modulation FSK
La modulation FSK est très classique : les deux états possibles d’un bit sont codés par deux fréquence de modulation de la
porteuse. À la réception, un démodulateur FM renvoie deux états possibles de la tension de sortie, correspondant aux deux états
des bits du flux d’information.
Que se passe-t-il en cas de décallage des oscillateurs locaux de l'émetteur et du récepteur ? comment
une modulation sur une porteuse remédie à ce problème ?
5 Connexion à un outil de démodulation externe
Nous allons considérer une approche simple de démodulation de modes numériques : l’exploitation d’un outil externe disponible sous le nom de multimon 1 .
1. Une version plus récente de ce programme, nommée multimon-ng, est disponible à https://github.com/EliasOenal/multimon-ng. Il semble fonctionner à l’identique à l’exception d’un mode très verbeux qu’il faut éliminer : multimon-ng -t raw -s DUMPCSV
3
Nous nous focaliserons sur le décodage des signaux émis par les pagers ou vénérables Tam-tam et autres Tatoo qui sont
encore exploités par e*message 2 . Le protocole de communication est connu sous la nomenclature de POCSAG, et est en partie
survolé à http://fr.wikipedia.org/wiki/POCSAG. On y apprend notamment que les fréquences des six canaux alloués en
France sont 466,{025 ;05 ;075 ;175 ;20265 ;23125} MHz.
F IGURE 5 – Gauche : spectre autour de 466 MHz où les signaux POCSAG sont transmis. Droite : traitement des signaux démodulés.
multimon 3 supporte un grand nombre de modes de modulation datant de l’époque où la réception du signal radiofréquence
s’effectuait avec un récepteur dédié dont la sortie audio était physiquement connectée à l’entrée audio de la carte son. Aujourd’hui, cette liaison se fera de façon virtuelle au travers d’un pipe nommé (instruction mkfifo d’unix).
BUn flux au travers d’un pipe nommé ne commence à circuler que lorsque les deux extrémités du tuyau sont connectées. Le
lancement de l’application gnuradio ne se traduira par son traitement des signaux que après exécution de multimon.
La seule subtilité tient en la nécessité, pour respecter les attentes de multimon, de fournir un flux de données au débit de
22050 Hz avec un encodage sur 16 bits.
1. Créer un pipe nommé par mkfifo montuyau
2. Créer un puits de données dans GNURadio-companion respectant le format de sortie annoncé
3. Connecter multimon à ce tuyau par multimon -t raw montuyau
4. Observer le résultat (Fig. 6)
On notera l’utilisation du filtre passe-haut entre la sortie du démodulateur de fréquence et le convertisseur de flottant en
entiers. En effet tout décalage de fréquence entre les oscillateurs de l’émetteur et du récepteur en FM se traduisent après démodulation par une tension continue. Le filtre passe-haut sert non seulement à éliminer cette tension continue mais aussi à
décimer le flux de données pour atteindre le débit requis par multimon.
6 Analyse multicanaux
POCSAG est caractérisé par plusieurs canaux radiofréquences. Ici nous ne décodons que un seul canal en nous plaçant sur
sa fréquence de porteuse. Il serait intéressant, puisque le flux de données I/Q contient les informations portées dans tous les
canaux, de décoder le contenu de tous les canaux de communication en parallèle.
D’un point de vue de traitement du signal, il s’aggit de placer un filtre passe-bande autour de chaque canal et d’en traiter les
informations, sans être polué par le contenu spectral des canaux adjacents. En pratique, nous transposons chaque canal près de
la fréquence nulle, et plaçons un filtre passe-bas pour éliminer les autres contributions spectrales.
Cette méthode de travail est si classique qu’elle est implémentée comme un unique bloc dans GNURadio Companion :
Frequency Xlating FIR Filter. Ce bloc contient l’oscillateur local par lequel la fréquence est transposée par mélange, et
le filtre passe-bas. Un filtre passe-bas est défini par ses caractéristiques spectrales : les coefficients du FIR s’obtiennent par
firdes.low_pass(1,samp_rate,15000,5000,firdes.WIN_HAMMING,6.76). Nous plaçons cette commande dans une variable dont le nom renseigne les caractéristiques du filtre.
2. http://www.emessage.fr/index.aspx
3. https://github.com/EliasOenal/multimon-ng ou https://packages.debian.org/unstable/hamradio/multimon
4
F IGURE 6 – Traitement des signaux issus de la démodulation de POCSAG par multimon.
Démoduler deux canaux POCSAG simultanément.
Cette méthode de travail s’étend à un nombre quelconque de canaux, dans la limite de la puissance de calcul disponible. En
pratique on se limitera au nombre de cœurs de calcul disponibles sur le processeur.
5