Traitement de signaux radiofréquences par logiciel (SDR ...

12
Traitement de signaux radiofréquences par logiciel (SDR) – GNURadio J.-M Friedt, 30 janvier 2017 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). Afin de nous familiariser avec GNURadio-companion, un premier exemple consiste à générer une séquence de traitement avec une source de bruit, un filtre passe bande de fréquence centrale et de bande passante variable, et un affichage du spectre : Trouver, sur le site GNURadio décrivant l’API des blocs de traitement, les méthodes associées à l’objet “filtre passe bande”. Ajouter dans le script Python généré par GNURadio-companion la longueur du filtre. Sortir le signal ainsi filtré sur la carte son : écouter l’effet de la largeur et de la fréquence centrale du filtre. Prenons un second exemple simple qui illustrera la souplesse de GNURadio-companion pour appréhender et prototyper des concepts de traitement du signal en explicitant les coefficients du filtre. Un filtre FIR propose une sortie y n comme somme pondérée des entrées x k tel que y n = N X 0 b k · x n-k avec N le nombre de coefficients. Ce nombre influe significativement sur la puissance de calcul nécessaire à produire chaque y n et il est utile d’en intuiter le sens. Partant d’un schéma tel que proposé ci-dessous dans lequel les coefficients b k , nommés , sont dynamiquement définis par la fonction Python pour définir un filtre de fréquence de coupure sur une bande avec une atténuation hors bande de . Nous allons voir que est un point clé pour définir N . Pour intuiter le sens de N et sa relation avec , une transformée de Fourier sur N points se traduit par un spectre de pas de fréquence samp _rate /N avec samp _rate la fréquence d’échantillonnage. Si est plus petit que samp _rate /N , le spectre n’est pas suffisamment résolu pour définir les flancs du filtre : il faut augmenter N . GNURadio-companion étant un générateur de code Python, nous pouvons modifier le code généré en ajoutant dans la fonction de callback de un affichage de la longueur du vecteur : 1

Transcript of Traitement de signaux radiofréquences par logiciel (SDR ...

Page 1: Traitement de signaux radiofréquences par logiciel (SDR ...

Traitement de signaux radiofréquences par logiciel (SDR) – GNURadio

J.-M Friedt, 30 janvier 2017

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 environnementsembarqué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 traitementnumérique de signaux radiofréquences (Software Defined Radio – SDR).

Afin de nous familiariser avec GNURadio-companion, un premier exemple consiste à générer une séquence de traitementavec une source de bruit, un filtre passe bande de fréquence centrale et de bande passante variable, et un affichage du spectre :

Trouver, sur le site GNURadio décrivant l’API des blocs de traitement, les méthodes associées à l’objet “filtre passe bande”.Ajouter dans le script Python généré par GNURadio-companion la longueur du filtre.Sortir le signal ainsi filtré sur la carte son : écouter l’effet de la largeur et de la fréquence centrale du filtre.

Prenons un second exemple simple qui illustrera la souplesse de GNURadio-companion pour appréhender et prototyperdes concepts de traitement du signal en explicitant les coefficients du filtre. Un filtre FIR propose une sortie yn comme sommepondérée des entrées xk tel que

yn =N∑0

bk · xn−k

avec N le nombre de coefficients. Ce nombre influe significativement sur la puissance de calcul nécessaire à produire chaque yn

et il est utile d’en intuiter le sens. Partant d’un schéma tel que proposé ci-dessous

dans lequel les coefficients bk , nommés taps, sont dynamiquement définis par la fonction Pythonfilter.firdes.low_pass_2(1, samp_rate, fc, fc+df ,attenuation)

pour définir un filtre de fréquence de coupure fc sur une bande fc+df avec une atténuation hors bande de attenuation. Nousallons voir que df est un point clé pour définir N . Pour intuiter le sens de N et sa relation avec fc, une transformée de Fouriersur N points se traduit par un spectre de pas de fréquence samp_r ate/N avec samp_r ate la fréquence d’échantillonnage. Sifc est plus petit que samp_r ate/N , le spectre n’est pas suffisamment résolu pour définir les flancs du filtre : il faut augmenterN .

GNURadio-companion étant un générateur de code Python, nous pouvons modifier le code généré en ajoutant dans lafonction de callback de taps un affichage de la longueur du vecteur :

1

Page 2: Traitement de signaux radiofréquences par logiciel (SDR ...

1 def set_taps ( s e l f , taps ) :s e l f . taps = taps

3 s e l f . f i r _ f i l t e r _ x x x _ 0 . set_taps ( ( s e l f . taps ) )print len ( taps ) # ajout au code o r i g i n a l

qui nous permet de constater que la longueur du filtre croît lorsque fc décroît. Cette fonction est appelée chaque fois qu’unparamètre du filtre est modifié, et permet donc de suivre l’évolution du nombre de coefficients avec les divers paramètres.Exercice : modifier la fonction de callback pour afficher, en plus du nombre de coefficients, la fréquence centrale et la fré-quence de coupure du filtre. Constater comment N évolue en fonction de ces paramètres.

2 GNURadio pour le traitement du signal appliqué

2.1 La carte son comme générateur basse fréquence

La carte son est une interface idéale pour se familiariser avec des concepts de traitement du signal. GNURadio sait émettreun signal vers la carte son au moyen du bloc Audio Sink.

1. Générer une sinusoïde à une fréquence audible, et l’émettre sur la carte son.

2. Afficher en même temps le spectre du signal émis.

2.2 Traitement du signal : filtres

FIGURE 1 – Deux implémentations de filtres passe-bande, à gauche avec une bande de transition de 5 Hz, à droite avec unebande de transition de 150 Hz. La différence n’est pas significative en terme de performances, mais les implications en terme denombre de coefficients à traiter est significative (Fig. 2).

Nous pouvons tester des algorithmes simples – mais fondamentaux – de traitement du signal tels que les filtres. Un filtre àréponse impulsionnelle finie (FIR) est conçu pour traiter un signal synthétique. Afin de caractériser les propriétés spectrales dufiltre, nous l’attaquons par un bruit uniforme, et observons le spectre en entrée et en sortie du filtre.

Quel est l’effet de demander une bande de transition plus étroite pour un filtre?

2.3 Que faire en l’absence d’entrée ou de sortie pour cadencer le flux

Lorsque le signal est émis sur une carte son, le débit de données est imposé par la fréquence d’échantillonnage de la carteson. Si un signal est acquis par une carte d’acquisition, là encore une fréquence d’échantillonnage est imposée. Mais si nousvoulons ne faire que du traitement de signaux synthétitiques pour en afficher les caractéristiques, aucune fréquence d’échan-tillonnage n’est imposée au schéma par une interface matérielle. Nous devons donc informer le bloc de patienter entre deuxtraitements pour respecter la fréquence d’échantillonnage imposée par la variable samp_rate : c’est le rôle du bloc throttle.

Retirer la sortie audio et afficher sur oscilloscope virtuel la sortie d’une source générant une sinusoïde.

2

Page 3: Traitement de signaux radiofréquences par logiciel (SDR ...

FIGURE 2 – Outil de conception de filtres fourni par GNURadio Companion : noter la croissance du nombre de coefficients dontle nombre est inversement proportionnel à la bande passante de transition requise.

3 Coefficients I-Q

4 Réception de signaux radiofréquence : réception de la FM commerciale

4.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é versla carte son (Fig. 3). Il s’agit de l’exemple le plus simple car le signal reçu est puissant et continu, mais qui démontre néanmoinsles 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 dispo-nible,

2. sélectionner la source de données correspondant au récepteur DVB-T que nous utilisons au cours de ce TP.

Une source fournit un flux de données I et Q vers les divers blocs de traitement pour finalement alimenter un puits – dansnotre 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’informa-tion que nous sommes susceptibles de récupérer (cf Shannon). La bande passante est limitée par la fréquence d’échantillonageet 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écepteurradiofré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 auxentrées audio pour traitement numérique des signaux. Dans notre approche, un récepteur de télévision numérique terrestre dis-ponible à 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

Page 4: Traitement de signaux radiofréquences par logiciel (SDR ...

FIGURE 3 – Fenêtre de démarrage de GNURadio Companion.

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 modifierdynamiquement ce paramètre (Fig. 4).

FIGURE 4 – 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

4.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’informationde modulation de la porteuse) et envoyer le résultat sur une sortie exploitable, par exemple la carte son d’un 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 leflux de données, et ne prévient l’utilisateur d’une incohérence dans le flux de traitement par des messages au premier abordcryptiques (mais parfaitement cohérents une fois que nous en comprenons le sens).

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 parla bande passante de la liaison USB). La sortie sur carte son est contrainte par les quelques fréquences d’échantillonage acces-sibles 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

4

Page 5: Traitement de signaux radiofréquences par logiciel (SDR ...

FIGURE 5 – Définition de samp_rate comme multiple de la fréquence audio finale, et activation de la sortie son du PC.

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 sortieaudio. Par exemple pour une sortie à 48 kHz, une entrée de 48×32 = 1,536 MHz respecte la bande passante d’échantillonagedu récepteur. De même pour une sortie à 44,1 kHz, une entrée à 44,1×50 = 2,205 MHz respecte les conditions d’échantillonaged’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émo-dulateur est modifié de 24 à 18 par exemple? De 24 à 30?

4.3 Stéréo et RDS

De nombreuses stations FM commerciales transmettent un signal en stéréo. Cependant, tous les récepteurs ne proposentpas la capacité à séparer les composantes du signal émis vers l’oreille droite ou gauche. Comment proposer un protocole com-patible à la fois avec les récepteurs mono et stéréo ? La solution consiste à transmettre pour tous les récepteurs la somme dessignaux gauche + droite, et uniquement pour les récepteurs stéréo le signal gauche - droite afin de permettre la reconstructiondes deux signaux individuels si nécessaire. De plus, certaines stations FM transmettent une information numérique identi-fiant la nature de la chaîne et de l’émission diffusée : le protocole RDS (Radio Data System) est situé à 57 kHz de la porteuse,au-delà de toutes les modulations des signaux audio-fréquences. La fréquence de transmission de l’information numérique,1187,5 bits/seconde, est suffisamment faible pour n’occuper qu’une bande réduite autour de la sous-porteuse de 57 kHz forméepar l’harmonique trois du pilote à 19 kHz qui indique au récepteur que l’émission est en stéréo (et que donc la partie supérieuredu spectre porte l’information gauche-droite).

Démontrer l’utilisation du mode waterfall pour afficher l’ensemble des informations fournies après démodulation d’unsignal de la bande FM commerciale.

5

Page 6: Traitement de signaux radiofréquences par logiciel (SDR ...

5 Encombrement spectral des modes de modulation

5.1 AM v.s FM

La bande passante du canal définit la quantité d’information qui peut y circuler. Le mode de modulation induit un encom-brement spectral et donc la distribution des raies dans la bande passante allouée. La Fig. 6 illustre l’encombrement spectral dedeux modes de modulation – AM et FM – pour encoder le même signal – une sinusoïde de fréquence et amplitude fixe.

FIGURE 6 – Encombrement spectral des modulations AM (gauche) et FM (droite). Dans les deux cas le signal modulant est unesinusoïde à 2400 Hz.

Une modulation d’amplitude est produite par un atténuateur commandé en tension, aussi nommé transistor (par exempleFET). Une modulation de fréquence est produite par le tirage en fréquence d’un oscillateur, par exemple en plaçant une varicap

6

Page 7: Traitement de signaux radiofréquences par logiciel (SDR ...

commandée en tension dans l’oscillateur (VCO – Voltage Controlled Oscillator). Démoduler les signaux AM et FM afin d’enafficher l’évolution temporelle lorsque la modulation est de nature sinusoïdale

5.2 BPSK

La modulation en phase s’obtient en attaquant un mélangeur (dans notre cas un Minicircuits ZX05-43MH+, Fig. 7) d’une partpar un signal RF représentant la porteuse (port LO) et d’autre part par un signal crénau de valeur moyenne null représentantle signal (port IF) pour générer le signal attaquant l’antenne (port RF). D’après le schéma du mélangeur, la polarité du signalmodulant détermine le côté du pont de diodes par lequel passe le signal LO pour attaquer le point milieu du transformateur, etdonc la phase (entre 0 et π) qui affectera le signal de sortie.

FIGURE 7 – Gauche : extrait de la datasheet du ZX05-43MH+ expliquant son cablage interne, et schéma GnuRadio-Companionpour démontrer l’élimination de la modulation par mise au carré du signal modulé en phase, ainsi que la démodulation parboucle de Costas. Droite : montage expérimental.

BPenser à

1. placer le synthétiseur en mode crénaux avec une amplitude de 1 V (voie IF du mélangeur),

2. placer la source radiofréquence au-dessus de 900 MHz, fréquence basse de fonctionnement du mélangeur (voie LO dumélangeur),

3. la sortie modulée est disponible sur la voie RF.

La subtilité de la démodulation PSK tient en l’extraction de la porteuse afin d’annuler l’écart de fréquence ∆ f entre l’oscilla-teur et la porteuse incidente. En effet, si cette différence n’est pas annulée, la phase du signal est affectée d’une part d’un signalévoluant dans le temps 2π ·∆ f · t et de la phase à détecter ϕ ∈ [0,π]. Une façon d’estimer la porteuse est la boucle de Costas(Costas loop) qui fournit le signal démodulé et l’estimation d’écart de fréquence.

Démontrer la démodulation du signal modulé en phase (Fig. 8). Quelle est l’écart de la fréquence de porteuse à LO accep-table pour obtenir un asservissement acceptable?

7

Page 8: Traitement de signaux radiofréquences par logiciel (SDR ...

FIGURE 8 – Haut, de gauche à droite : porteuse à 1249,7 MHz (en dehors de la bande d’asservissement), puis 1249,99 et1250,3 MHz (dans la bande d’asservissement). Par ailleurs la boucle de Costas fournit son estimate d’écart entre la fréquence durécepteur et la porteuse : bas, une source à 970 MHz fixe et le récepteur se décalle.

6 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 laporteuse. À la réception, un démodulateur FM renvoie deux états possibles de la tension de sortie, correspondant aux deux étatsdes bits du flux d’information (Fig. 9).Que se passe-t-il en cas de décallage des oscillateurs locaux de l’émetteur et du récepteur? comment une modulation sur uneporteuse remédie à ce problème?

FIGURE 9 – Réception du signal émis par un radiomodem Semtech XE1203F émettant des trames numériques sur 434 MHz.

Sachant que le signal commandant le VCO est issu d’un UART compatible RS232 de microcontrôleur, quel est la baudrate decette communication issu de l’analyse de la Fig. 9 (droite)?

8

Page 9: Traitement de signaux radiofréquences par logiciel (SDR ...

7 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 dis-ponible sous le nom de multimon 1 élimine tous les décodeurs (-c) et ajoute ceux qui nous intéressent (POCSAG en 1200 baudset la sortie graphique).

Nous nous focaliserons sur le décodage des signaux émis par les pagers ou vénérables Tam-tam et autres Tatoo qui sontencore exploités par e*message 2. Le protocole de communication est connu sous la nomenclature de POCSAG, et est en partiesurvolé à http://fr.wikipedia.org/wiki/POCSAG. On y apprend notamment que les fréquences des six canaux alloués enFrance sont 466,{025 ;05;075;175 ;20265 ;23125} MHz.

FIGURE 10 – Gauche : spectre autour de 466 MHz où les signaux POCSAG sont transmis. Droite : traitement des signaux démo-dulés.

multimon 3 supporte un grand nombre de modes de modulation datant de l’époque où la réception du signal radiofréquences’effectuait avec un récepteur dédié dont la sortie audio était physiquement connectée à l’entrée audio de la carte son. Aujour-d’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. Lelancement 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 de22050 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. 11)

On notera l’utilisation du filtre passe-haut entre la sortie du démodulateur de fréquence et le convertisseur de flottant enentiers. 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.

8 Analyse multicanaux

POCSAG est caractérisé par plusieurs canaux radiofréquences. Ici nous ne décodons que un seul canal en nous plaçant sursa fréquence de porteuse. Il serait intéressant, puisque le flux de données I/Q contient les informations portées dans tous lescanaux, de décoder le contenu de tous les canaux de communication en parallèle.

1. Une version plus récente de ce programme, nommée multimon-ng, est disponible à https://github.com/EliasOenal/multimon-ng. Il semble fonc-tionner à l’identique à l’exception d’un mode très verbeux qu’il faut éliminer : multimon-ng -t raw -c -a POCSAG1200 -a SCOPE fichier

2. http://www.emessage.fr/index.aspx3. https://github.com/EliasOenal/multimon-ng ou https://packages.debian.org/unstable/hamradio/multimon

9

Page 10: Traitement de signaux radiofréquences par logiciel (SDR ...

FIGURE 11 – Traitement des signaux issus de la démodulation de POCSAG par multimon.

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 lesinformations, sans être polué par le contenu spectral des canaux adjacents. En pratique, nous transposons chaque canal près dela 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, etle filtre passe-bas. Un filtre passe-bas est défini par ses caractéristiques spectrales : les coefficients du FIR s’obtiennent parfirdes.low_pass(1,samp_rate,15000,5000,firdes.WIN_HAMMING,6.76). Nous plaçons cette commande dans une va-riable dont le nom renseigne les caractéristiques du filtre.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. Enpratique on se limitera au nombre de cœurs de calcul disponibles sur le processeur.

Par ailleurs, cette conclusion s’étend au cas où une diversité de modes de modulation sont présents dans la bande passanted’analyse. Par exemple, dans le cas de la FM commerciale, les deux canaux mono (gauche+droite) et stéréo (gauche-droite) sontprésents autour de la porteuse à 19 kHz de la porteuse radiofréquence, et par ailleurs l’identifiant numérique de la station émet-trice (RDS) se trouve à 57 kHz de la porteuse radiofréquence. Ces deux types d’information se démodulent indépendammentpuisque toutes les données nécessaires ont été obtenues dans la bande passante d’acquisition de la station FM si le flux issu dudétecteur WBFM est cadencé à plus de 115 kéchantillons/s.Analyser la Fig. 13 et constater les deux canaux de démodulation, audiofréquence d’une part, et numérique d’autre part.

10

Page 11: Traitement de signaux radiofréquences par logiciel (SDR ...

FIGURE 12 – Décodage de 4 canaux POCSAG simulatanément.

11

Page 12: Traitement de signaux radiofréquences par logiciel (SDR ...

FIGURE 13 – Haut : schéma de la chaîne de traitement pour générer le signal audio et la séquence numérique de bits transmispour identifier l’émetteur radiofréquence (inspiré du travail de K. McQuiggin). Bas : signal numérique lorsque le décodage estpossible, avec un diagramme de constellation permettant de clairement distinguer les deux états possibles des bits (gauche), etdroite lorsque le niveau de bruit est trop élevé.

12