Mise en oeuvre du protocole LORA par radio logicielle

De Wiki de Projets IMA
Révision datée du 9 juin 2017 à 10:27 par Mmcharfi (discussion | contributions) (Prise en main du logiciel)

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

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.

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.

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.

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.

Squelch

NB1 et NB2 sont deux limiteur de bruit.

Fenêtre de réglage de l'entrée (Imput control)
Fenêtre audio
Fenêtre de réglage de la FFT
Récepteur FM
Sniffer 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.

Protocole LoRa