Mise en oeuvre du protocole LORA par radio logicielle

De Wiki de Projets IMA
Révision datée du 14 juin 2017 à 10:00 par Mmcharfi (discussion | contributions) (LoRa)

Description du stage

Dans le cadre de ma quatrième année de ma formation d'ingénieur spécialités IMA, j'effectue un stage qui a pour but d'étudier la mise en place du protocole LoRa par radio logicielle. Pour réaliser cette étude j'utilise le hackRF One un émetteur-récepteur SDR (par radio logicielle). Dans un premier temps il est nécessaire d'étudier les différentes documentations liées a l'utilisation du HackRF One afin d'établir un descriptif technique facilitant son implémentation. Pour ensuite implémenter l'application qui devras gérer le protocole LoRa.


Avancement du Stage

Semaine 1

HackRF One

Descriptif

HackRF One est un périphérique de radio logiciel (Software Defined Radio), capable de de gérer la réception et l'émission de signal Radio allant de 1MHz à 6GHz. Crée pour permettre le test et le développement de technologie radio. HackRF One peut être utilisé en tant que périphérique USB ou peut être programmé pour un fonctionnement autonome.

Figure 1: HackRF One
  • Réception half-duplex.
  • 20 millions d'échantillons par seconde.
  • 8 bit d'échantillons en quadrature (8-bit I et 8-bit Q).
  • Compatible avec de nombreux radio logiciel.
  • Gain RX, TX et filtre passe bande paramétrable par logicielle.
  • Puissance de l'antenne contrôlée par logicielle (50 mA a 3.3V).
  • Connecteur SMA femelle pour antenne.
  • Connecteur SMA femelle pour synchronisation du signal d'horloge.
  • Hi-Speed USB 2.0.
  • Alimentation USB.
  • Partie matériel open source.

Vous trouverez plus de détails sur les caractéristiques techniques sur le wiki du projet hackrf.

Le HackRF One se présente comme une alternative innovante et à bas prix aux projets d'étude de technologie Radio, en effet une grande partie du traitement de signal est effectué par logiciel ce qui réduit les coûts matériels comparativement aux autres alternatives du marché. De plus pour son prix le HackRF One propose une gamme de fréquence très large qui lui permet d'étudier tout signal radioélectrique utilisant tout type de modulation.

GNU Radio et SDR

Une radio logicielle ou Software Defined Radio(SDR), est un récepteur/émetteur Radio où les composants matériel ont été remplacés par logiciel. Les signaux sont traiter numériquement, après une conversion analogique-numérique.Le traitement est effectué via un DSP (Digital Signal Processor) qui permet une grande flexibilité et permet de s'adapter a différent type de système radio.

GNU Radio

Gnu Radio est une suite logicielle libre dédiée à l'implémentation de radios logicielles et de systèmes de traitement du signal. Gnu radio permet d'effectuer toute opération de traitement du signal. Implémenté en Python et en C++ à permit l'ajout constant de nouveaux module rendant ce logiciel de plus plus en performant. GNU Radio embarque un outil en interface graphique (GUI) qui permet d'implémenter avec plus de facilité les différents modules.

Figure 2 GNU Radio

C'est via cette suite que la prise en main du HackRF One ce fait. D'autres SDR son disponible est compatible avec l'hackRF One, l'avantage qu'offre GNU Radio c'est qu'elle permet l'implémentation de notre propre solution.

Gqrx

Il existe plusieurs logiciels graphique implémentant un analyseur de spectre par radio logicielle, je me suis tourné vers le logiciel Gqrx qui permet la prise en main rapide du HackRF One. Gqrx est une radio logicielle open source exploitant GNU Radio, fonctionne seulement en tant que récepteur. Elle est compatible avec de nombreux équipement SDR.

Figure 3 Gqrx

Installation

L'utilisation du HackRF One se fait par la radio Logicielle GNU Radio et de librairie hackrf. Pour installer les différents packages il est préconiser d'utiliser le package manager Pybombs, d'autres alternatives sont possibles ici. Nous ne détaillerons que l’installation via Pybombs.

Installation via Pybombs

Le logiciel Pybombs étant un projet opensource nous pouvons récupérer la dernières version du logiciel d’installation sur Git.

  • 1. Récupérer le dépôt GIT:
$ git clone https://github.com/pybombs/pybombs.git
  • 2. On ce place dans le répertoire pybombs, Nous utilisons l'installateur Python pour installer PyBOMBS.
$ cd pybombs
$ sudo python setup.py install
  • 3.On initialise un chemin de prefix c'est ici que seras installés les paquets.
$ pybombs prefix init ~/prefix 
  • 4.Nous installons le paquet gnu radio.
$ pybombs install gnuradio
  • 5.On fait la meme chose pour la recette hackrf
$ pybombs install hackrf
  • 5.Une fois les paquets installés, pour pouvoir utiliser les commande associés on exécute la commande suivante.
$ source /home/<user>/prefix/setup_env.sh
  • 6.Ajouter cette même ligne a la fin du fichier /home/<user>/.bashrc.

Prise en main du Hackrf One

Test du Hackrf One

Après avoir connecter l'HackRF, on exécute la commande suivante:

$ hackrf_info

Si le HackRF One fonctionne correctement on a la réponse suivante:

hackrf_info version: git-9bbbbbf
libhackrf version: git-9bbbbbf (0.5)
Found HackRF
Index: 0
Serial number: ######################
Board ID Number: 2 (HackRF One)
Firmware Version: 2017.02.1 (API:1.02)
Part ID Number: 0x######## 0x#########

Dans mon cas j'ai tout d'abord eu l'erreur suivante:

hackrf_open() failed: HACKRF_ERROR_LIBUSB (-1000)

Cela est dû aux droits accordés aux utilisateurs concernant l'accès arbitraire des périphériques USB. Une option pour contourner ce problème est d'écrire un règles udev afin d'autoriser à un utilisateur appartenant à un groupe de pouvoir gérer un périphérique. Pour cela il faut crée un nouveau fichier dans le répertoire /etc/udev/rules.d:

$ vim /etc/udev/rules.d/52-hackrf.rules 

et ajouter les lignes suivantes:

ATTR{idVendor}=="1d50", ATTR{idProduct}=="604b", SYMLINK+="hackrf-jawbreaker-%k", MODE="660", GROUP="plugdev"
ATTR{idVendor}=="1d50", ATTR{idProduct}=="6089", SYMLINK+="hackrf-one-%k", MODE="660", GROUP="plugdev"
ATTR{idVendor}=="1fc9", ATTR{idProduct}=="000c", SYMLINK+="hackrf-dfu-%k", MODE="660", GROUP="plugdev"

Ensuite il suffit de redémarrer ou d’exécuter la commande suivante udevadm control --reload-rules en root. Ensuite rebrancher le hackRF One. Si vous n'avez toujours pas accès au hackrf one vérifier que vous appartenais bien au groupe "plugdev".

Mise à jour du hackrf one

Avant d'utiliser notre Hackrf il faut s'assurer qu'il soit bien mise a jour. Tout d'abord avec la commande hackrf_info on vérifie la version du firmware.

hackrf_info version: git-9bbbbbf
libhackrf version: git-9bbbbbf (0.5)
Found HackRF
Index: 0
Serial number: 0000000000000000a06063c82316395f
Board ID Number: 2 (HackRF One)
Firmware Version: 2017.02.1 (API:1.02)
Part ID Number: 0xa000cb3c 0x00544f59

Vous pouvez trouver la dernière version du firmware ici ou sur le dépôt git. Une fois télécharger, on extrait le paquet:

tar -xvf hackrf-2017.02.1.tar.xz

On ce place dans le répertoire où à été extrait les fichiers, on accède au dossier firmware-bin.

cd firmware-bin/

La mise à jours ce fait via la commande hackrf_spiflash.

hackrf_spiflash -w hackrf_one_usb.bin

Une fois la mise à jour effectué, il faut redémarrer votre hackrf en pressant le bouton reset. Parfois il est aussi nécessaire de mettre a jours le fichier de configuration du cpld embarqué sur l'hackrf one, le cpld permet d'interfacer le microcontrôleur et les CAN et CNA.

hackrf_cpldjtag -x firmware/cpld/sgpio_if/default.xsvf

De la même façons redémarrés l'hackrf one. Vérifier avec hackrf_info si le firmware à bien été mise à jour.

Gqrx

Il vous faut tout d'abord installer les packages gnuradio avant d'installer Gqrx. Une fois gnuradio installer, on utilise la commande suivante pour installer gqrx.

$ sudo apt-get install gnuradio gqrx

Semaine 2

Gqrx

Prise en main du logiciel

Connecter tout d'abord le module HackRF One, et exécuter gqrx:

$ gqrx
Configuration

Une fois exécuté la première fenêtre qui s'affiche et la suivante:

Figure 4 Gqrx configuration

Elle permet de sélectionner les paramètres de votre installation. Dans la plus part des cas gqrx détecte automatiquement votre périphérique et ajuste les paramètres pour une performance optimal.

Menu

Sous le menu vous trouvez différents raccourcis:

Figure 5 Raccourci
  • Bouton On/off
  • Configuration du périphériques.
  • Récupérer une configuration sauvegardé.
  • Sauvegarder la configuration actuel.
  • Enregistrer données I/Q.
  • Configuration des paramètre de contrôle a distance (TCP).
  • Pleine écran.
Fenêtre principale

Le logiciel gqrx ce présente comme suit:

Figure 6 Fenêtre principale

Le fenêtre principale ce compose de:

  • La fréquence centrale sur lequel est calibré le récepteur.
  • Dessous ce trouve l'analyseur de spectre autour de la fréquence centrale.
  • Dessous ce trouve ce qu'on appel "waterfall frame" qui affiche l'historique du spectre dans le temps.
Option récepteur

A gauche vous trouverez les options de réglage du récepteur.

Figure 6 Option

La fréquence affiché est l'offset entre la fréquence de réception et la fréquence centrale calibré. Dessous nous avons la possibilité de sélectionner différents filtre (passe bas, coupe bande, large bande, réglages personnalisés) la qualités du filtre va principalement dépendre de la puissance de calcul de votre PC. Plusieurs types de démodulation peuvent être configurer:

  • CW-U ou CW-L :Pour la démodulation d'onde entretenue.
  • USB or LSB: Pour les modulation à bande latéral unique (en Bande latéral supérieur ou bande latéral inférieur).
  • WFM(stéréo ou mono): Pour la démodulation FM.
  • AM: Pour la démodulation d'amplitude.
  • RAW I/Q: pour la démodulation en quadrature de phase.
  • Demod Off: Aucune démodulation.

Le Squelch permet de régler la sensibilités du récepteur, elle permet par exemple d'ajusté la sensibilité au bruit pour éliminer ce dernier. Attention un gain trop élevé peut endommager le récepteur lors d'une mauvaise utilisation.

Les paramètres NB1 et NB2 sont deux limiteur de bruit.

Fenêtre de réglage de l'entrée (Imput control)

Gqrx offre la possibilité de configurer plusieurs paramètres pour traiter les signaux reçus par l'antenne. La fenêtre ce présente comme suis:

Figure 7 configuration entrée

Il y a plusieurs option intéressante, voici les principaux paramètres que vous pouvez être amenez à utiliser.

LNB LO permet de régler ma fréquence de oscillateur local dans le cas ou un up/down converter est utilisé en amont du périphérique. Dans les autres cas on l'initialise à 0.000000 MHz.

Hadware AGC: Dans le cas ou votre périphérique possède un AGC (Automatic gain control), elle permet d’adapter le gain selon la puissance des signaux reçus

Swap I/Q:Permet d'inverser les chaîne I et Q

No limits:Désactive les limites du logiciel, et permet de dépasser le domaine fréquentiel recommander par la SDR.

DC rem: Permet d'éliminer la composante continue.

Freq Correction: Cette option permet de régler les erreur de déviation de l'oscillateur interne. Pour cela vous commencez par régler votre récepteur sur la fréquence d'un générateur de fréquence fiable, et ensuite régler la valeurs de Freq.correction afin que la fréquence du signal ce rapproche au maximum de celle du signal de référence.

Antenna:spécifie si l'antenne est en réception ou émission ou les deux.

Fenêtre audio

En bas à droite, nous trouvons la fenêtre "audio" qui correspond au spectre du signal démodulé. Nous pouvons régler l’échelle de la fenêtre, ainsi qu'enregistrer le signal reçus sous un format .wav.

Figure 8 fenêtre audio
Fenêtre de réglage de la FFT

Cette fenêtre permet de régler les paramètres de la FFT.

Figure 9 Fenêtre FFT

Le paramètre FFT size permet de régler le nombre de points utilisés lors du calcul de la FFT (la resolution de la FFT). FFT Averaging permet d’effectué une moyenne sur la FFT, ce qui a pour effet de réduire le niveau de bruit. Vous trouverez une option de détection des raies via Peak D, et Peak H qui permet d'effectué une moyenne sur les valeur max des raies ce qui a pour effet de garder l'enveloppe du spectre de la FFT. les bouton Zoom R, C, D sont utilisés pour:

  • R: Remise à zéro des réglages du spectre du signal.
  • C: Centrer le spectre du signal autour de la fréquence originale.
  • D:Centrer le spectre du signal autour de la fréquence du démodulateur.
Récepteur FM

Une premières application intéressante pour vérifier le bon fonctionnement du HackRF One, et pour la prise en main du logiciel est la réalisation d'un récepteur FM.

  • 1:Connecter votre HackRF One au PC, et lancer le logiciel qgrx.
  • 2:Une fois le logiciel lancé, régler le mode de démodulation sur WFM(Mono), le filtre sur wide.
  • 3:Choisissez la fréquence radio sur laquelle vous voulez écouter puis lancer l'analyse via le bouton On/off.
  • 4:Vous remarquerez que la fréquence d'émission n'ai jamais exactement celle prévus, il vous faut donc déplacer le filtre de réception vers la raie la plus proche.
  • 5:Dans la fenêtre audio vous pouvez régler la valeur du gain ce qui permet d'augmenter le volume. Via la fonction averaging vous pouvez réduire le bruit afin d'avoir un signal plus propre.
Sniffer GSM

La seconde application intéressante qui permet d'utiliser pleinement les différente fonction du HackRF One est le GPS sniffing. La popularités des logiciel SDR à permis la mise en place de nombreuse application open source. De nombreux propose l'analyse des paquets GSM.

Prise en main de GnuRadio

Pour pouvoir comprendre utiliser j'ai commencé par suivre la suite de vidéo de cours permettant la prise en main de GNU Radio. Suivis de plusieurs application intéressante utilisant le HackRF One tels que le hacking du télécommande d'ouverture de porte de garage.

LoRa

Le domaine de l'IoT (Internet of things) étant en pleine essor ces dernières années, de nouvelle problématiques on vu le jours en ce qui concerne leur réseaux de communication. On cherche à interconnecter des systèmes basique qui doivent être isolés et fonctionnant en autonomie, il est donc nécessaire de trouver un moyen de communiquer consommant peu d'énergie, sans-fil, facilement configurable et pouvant être utilisé n'importe où.