Traitement de signaux radiofréquences par logiciel (SDR

Jan 30, 2017 - numérique de signaux radiofréquences (Software Defined Radio .... Il s'agit de l'exemple le plus simple car le signal reçu est puissant et ...
3MB taille 2 téléchargements 36 vues
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 N X y n = b k · x n−k 0

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 taps, sont dynamiquement définis par la fonction Python filter.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. Nous allons 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 Fourier sur N points se traduit par un spectre de pas de fréquence samp_r at e/N avec samp_r at e la fréquence d’échantillonnage. Si fc est plus petit que samp_r at e/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 taps un affichage de la longueur du vecteur :

1

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 ) ) p r i n t 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’un paramè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 émettre un 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

F IGURE 1 – Deux implémentations de filtres passe-bande, à gauche avec une bande de transition de 5 Hz, à droite avec une bande de transition de 150 Hz. La différence n’est pas significative en terme de performances, mais les implications en terme de nombre 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 du filtre, 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 carte son. Si un signal est acquis par une carte d’acquisition, là encore une fréquence d’échantillonnage est imposée. Mais si nous voulons ne faire que du traitement de signaux synthétitiques pour en afficher les caractéristiques, aucune fréquence d’échantillonnage n’est imposée au schéma par une interface matérielle. Nous devons donc informer le bloc de patienter entre deux traitements 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

F IGURE 2 – Outil de conception de filtres fourni par GNURadio Companion : noter la croissance du nombre de coefficients dont le 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é vers la 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é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. 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 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

F IGURE 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 modifier dynamiquement ce paramètre (Fig. 4).

F IGURE 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’information de 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 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). 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 4

F IGURE 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 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 ?

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 proposent pas la capacité à séparer les composantes du signal émis vers l’oreille droite ou gauche. Comment proposer un protocole compatible à la fois avec les récepteurs mono et stéréo ? La solution consiste à transmettre pour tous les récepteurs la somme des signaux gauche + droite, et uniquement pour les récepteurs stéréo le signal gauche - droite afin de permettre la reconstruction des deux signaux individuels si nécessaire. De plus, certaines stations FM transmettent une information numérique identifiant 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ée par 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érieure du 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’un signal de la bande FM commerciale.

5

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 encombrement spectral et donc la distribution des raies dans la bande passante allouée. La Fig. 6 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 6 – Encombrement spectral des modulations AM (gauche) et FM (droite). Dans les deux cas le signal modulant est une sinusoïde à 2400 Hz. Une modulation d’amplitude est produite par un atténuateur commandé en tension, aussi nommé transistor (par exemple FET). Une modulation de fréquence est produite par le tirage en fréquence d’un oscillateur, par exemple en plaçant une varicap

6

commandée en tension dans l’oscillateur (VCO – Voltage Controlled Oscillator). Démoduler les signaux AM et FM afin d’en afficher 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 part par un signal RF représentant la porteuse (port LO) et d’autre part par un signal crénau de valeur moyenne null représentant le 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 signal modulant détermine le côté du pont de diodes par lequel passe le signal LO pour attaquer le point milieu du transformateur, et donc la phase (entre 0 et π) qui affectera le signal de sortie.

F IGURE 7 – Gauche : extrait de la datasheet du ZX05-43MH+ expliquant son cablage interne, et schéma GnuRadio-Companion pour démontrer l’élimination de la modulation par mise au carré du signal modulé en phase, ainsi que la démodulation par boucle 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 du mé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’oscillateur 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 acceptable pour obtenir un asservissement acceptable ?

7

F IGURE 8 – Haut, de gauche à droite : porteuse à 1249,7 MHz (en dehors de la bande d’asservissement), puis 1249,99 et 1250,3 MHz (dans la bande d’asservissement). Par ailleurs la boucle de Costas fournit son estimate d’écart entre la fréquence du ré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 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 (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 une porteuse remédie à ce problème ?

F IGURE 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 de cette communication issu de l’analyse de la Fig. 9 (droite) ?

8

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 disponible sous le nom de multimon 1 élimine tous les décodeurs (-c) et ajoute ceux qui nous intéressent (POCSAG en 1200 bauds et 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 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 10 – 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. 11) 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.

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 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. 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 -c -a POCSAG1200 -a SCOPE fichier 2. http://www.emessage.fr/index.aspx 3. https://github.com/EliasOenal/multimon-ng ou https://packages.debian.org/unstable/hamradio/multimon

9

F IGURE 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 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. 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. Par ailleurs, cette conclusion s’étend au cas où une diversité de modes de modulation sont présents dans la bande passante d’analyse. Par exemple, dans le cas de la FM commerciale, les deux canaux mono (gauche+droite) et stéréo (gauche-droite) sont présents autour de la porteuse à 19 kHz de la porteuse radiofréquence, et par ailleurs l’identifiant numérique de la station émettrice (RDS) se trouve à 57 kHz de la porteuse radiofréquence. Ces deux types d’information se démodulent indépendamment puisque toutes les données nécessaires ont été obtenues dans la bande passante d’acquisition de la station FM si le flux issu du dé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

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

11

F IGURE 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 transmis pour identifier l’émetteur radiofréquence (inspiré du travail de K. McQuiggin). Bas : signal numérique lorsque le décodage est possible, avec un diagramme de constellation permettant de clairement distinguer les deux états possibles des bits (gauche), et droite lorsque le niveau de bruit est trop élevé.

12