NBFM Transceiver avec Pluto SDR et GNU Radio

La première étape consiste en l’installation de GNU Radio et de l’interface vers l’Adalm-Pluto ou PlutoSDR sur un Orange Pi One Plus tournant sous Armbian. Puis en exemple, on étudiera la réalisation d’un émetteur-récepteur ou d’un transpondeur NBFM.

Configuration matérielle

Orange Pi One Plus

L’Orange PI One Plus est une carte de développement puissante offrant de nombreuses possibilités avec son processeur 4 cœurs 64 bits (H6). Pour l’installation du système d’exploitation, voir l’article suivant : https://f1atb.fr/index.php/fr/2020/09/01/mise-en-route-orange-pi-one-plus/

L’Adalm-Pluto ou Pluto SDR est une radio logicielle intéressante permettant de créer un émetteur-récepteur fonctionnant en duplex.

Pluto SDR

Le Pluto s’interface par le port USB qui se comporte comme un port ethernet. Il ne faut pas l’alimenter par le port USB de l’Orange PI, car il y a des coupures dans la liaison. En complément rajoutez une alimentation 5V2A extérieure. Le Pluto dispose d’une entrée micro USB pour l’alimenter. Mettez un Hub de ports USB pour raccorder une souris, un clavier nécessaire au développement et corriger un bug sur le bus USB (voir ci-après). Branchez votre Orange Pi sur ethernet ainsi qu’un moniteur video sur l’HDMI ou utilisez VLC pour visualiser l’écran en mode graphique nécessaire à GNU Radio Companion.

Installation GNU Radio 3.7

GNU Radio Companion est un outil graphique permettant de construire des chaines de traitement radio très facilement sans écrire une ligne de code.

apt-get install gnuradio

Installation interface Adalm-Pluto

Vérifiez que les modules suivant sont présents avec:
lsmod. Ils sont absents avec certaines versions d’Armbian.

  • cdc_acm,cdc_ether
  • rndis_host
  • rndis_wlan
  • usbnet

Si un module manque tapez:
modprobe « nom du module »

modprobe rajoute les modules avec leurs dépendances, ainsi en rajoutant par exemple cdc_ether, usbnet sera également rajouté. Après chaque installation faite un lsmod pour vérifier.

Comme recommandé sur le site d’Analog Device, rajoutez dans le dossier
/etc/udev/rules.d/
le fichier de règles: 53-adi-plutosdr-usb.rules donnée ci dessous.

# allow "plugdev" group read/write access to ADI PlutoSDR devices
# DFU Device
SUBSYSTEM=="usb", ATTRS{idVendor}=="0456", ATTRS{idProduct}=="b674", MODE="0664", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2fa2", ATTRS{idProduct}=="5a32", MODE="0664", GROUP="plugdev"
# SDR Device
SUBSYSTEM=="usb", ATTRS{idVendor}=="0456", ATTRS{idProduct}=="b673", MODE="0664", GROUP="plugdev"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2fa2", ATTRS{idProduct}=="5a02", MODE="0664", GROUP="plugdev"
# tell the ModemManager (part of the NetworkManager suite) that the device is not a modem, 
# and don't send AT commands to it
SUBSYSTEM=="usb", ATTRS{idVendor}=="0456", ATTRS{idProduct}=="b673", ENV{ID_MM_DEVICE_IGNORE}="1"
SUBSYSTEM=="usb", ATTRS{idVendor}=="2fa2", ATTRS{idProduct}=="5a02", ENV{ID_MM_DEVICE_IGNORE}="1"

Si en testant avec lsusb vous ne voyez pas le Pluto et que dmesg vous donne pour le port concerné unable to enumerate USB device, dans ce cas rajouté un hub USB (pas nécessairement alimenté) et cela devrait rentrer dans l’ordre. Ne me demandez pas pourquoi.

Pour faire fonctionner l’Adalm-Pluto avec GNU Radio, il faut installer les paquets suivants:

  • apt-get install gr-iio
  • apt-get install libiio-utils
  • apt-get install gqrx-sdr

Accès SSH

Le Pluto dispose d’un système d’exploitation Linux accessible en ssh à l’adresse IP: 192.168.2.1
– utilistaeur: root
– password: analog

Note sur l’USB2

L’USB 2.0 est un protocole série semi-duplex 480 Mb / s. En supposant une utilisation à 100%, 480 Mb / s équivaudrait à 60 Mo / s.
En raison du protocole de communication entre la carte et le périphérique, on ne peut pas dépasser les ~ 45 Mo / s.
Puisqu’il s’agit d’un semi-duplex, cela fait ~ 22,5 Mo / s pour la transmission et ~ 22,5 Mo / s pour la réception.
Étant donné que chaque échantillon est de deux octets (échantillons de 12 bits), on peut au maximum demander ~ 11 MSPS (Méga Echantillons/s). Sachant qu’il y a un échantillon I et un échantillon Q, cela fait un maximum 5.5 MHz de fréquence d’échantillonnage. Mais en pratique avec le hub et les autres périphériques sur l’USB, ce sera encore plus bas pour être sûr d’avoir une liaison fluide.

Note sur l’Oscillateur local


L’oscillateur local du PlutoSDR servant de référence pour le traitement tourne à 40.000 MHz Il a une stabilité de fréquence de ± 25 ppm (tension, température, dérive plus précision initiale) ce qui n’est pas très performant.

Vous pensez peut-être que c’est vraiment mauvais (et ça l’est), mais:

il peut être corrigé numériquement en programmant la fréquence XO. Si vous remarquez qu’elle est de 39,987654 MHz (jusqu’à la résolution Hz), vous pouvez le dire au système, et la fréquence LO et les fréquences d’échantillonnage seront mises à jour pour refléter cela. Une fois stabilisé en température faite la correction en accédant en ssh et en positionnant la variable d’environnement xo_correction:

fw_setenv xo_correction 39987654

En surveillant ce décalage de fréquence, celui-ci peut être mis à jour à la volée. Il convient de noter qu’il y aura toujours des décalages de phase aléatoires entre les LO Tx et Rx, mais ils devraient être exactement la même fréquence.

Blocs d’interface GNU-Radio – PlutoSDR

Pluto Source (récepteur)

On y trouve les paramètres de base, à savoir la fréquence centrale, la fréquence d’échantillonnage, la bande traitement. Notez que ces valeurs sont des entiers et non des nombres flottants.

Le détail des blocs se trouvent sur le wiki d’Analog device https://wiki.analog.com/resources/tools-software/linux-software/gnuradio

Pluto Sink (émetteur)

De même pour le module d’émission, il faut définir la fréquence centrale, la fréquence d’échantillonnage et la bande traitement.

Note sur l’échantillonnage

Pour la chaine de réception, le taux de conversion Analogique/DigitalADC minimum est de 25 MSPS. Les débits en bande de base inférieurs à 2,083 MSPS (25 MSPS / 12) nécessitent la définition d’une décimation / interpolation FIR. En d’autres termes, le filtre FIR doit être configuré et activé. Le débit minimum en bande de base avec le filtre FIR (décimation par 4) activé est: 25 MSPS / (4 * 12) = 520,83 kSPS.
Idem pour la chaine d’émission, le taux ADC minimum est de 25 MSPS. Les débits en bande de base inférieurs à 2,083 MSPS (25 MSPS / 12) nécessitent la définition d’une décimation / interpolation FIR. En d’autres termes, le filtre FIR doit être configuré et activé. Le débit minimum en bande de base avec le filtre FIR (décimation par 4) activé est: 25 MSPS / (4 * 12) = 520,83 kSPS.

Émetteur – Récepteur NBFM

A titre d’exemple simple, il est facile d’implanter un petit émetteur-récepteur en FM bande étroite (NBFM) pouvant fonctionner en relais duplex ou en transpondeur 144 MHz vers 432 MHz. On peut reproduire ce schéma pour d’autres fréquences de travail sachant que le Pluto de base couvre la bande 325 MHz à 3800 MHz. Mais il est possible d’étendre la bande de 70MHz à 6000 MHz comme décrit dans cet article : Extension en fréquence du Pluto SDR

Émetteur – Récepteur NBFM

Chaine de réception

Ouvrir un nouveau projet dans GNU Radio. Dans le bloc Option, choisissez l’interface graphique WX GUI. Dans le bloc Variable, samp_rate mettez la valeur d’échantillonnage à 600000 (600kHz).

Mettez un bloc curseur (WX GUI Slider) et positionnez la bande de fréquence du récepteur souhaitée.

Mettez le bloc important ‘PlutoSDR Source’ qui décrit l’interface d’entrée des données du Pluto. L’échantillonnage étant à 600kHz, on limite la bande à 500 kHz (+/-250kHz) En sortie connectez un filtre passe bas pour limiter la bande à+/- 7 kHz. Décimez l’échantillonnage par 15 pour arriver à 40kHz en entrée du détecteur NBFM lequel fournira une audio à 10kHz. Pour cette audio , l’échantillonnage à seulement 10 kHz est suffisant. On traite de la voix ne dépassant pas les 4 kHz et non pas de la HIFI nécessitant un échantillonnage à 48 kHz. Cela permet de limiter le débit de sortie.

Sortie Audio à distance

Le format de traitement à l’intérieur de GNU Radio est du 32 bits flottants. On va se limiter à du 16 bits en entier. Sachant que l’audio est cadrée en flottant entre + et -1, on passe en entier en multipliant par 16000. Cette audio n’est pas écoutée en local mais envoyée en streaming sur le réseau pour être écoutée par VLC sur un PC distant (adresse IP:192.168……, port 9001). Voir la procédure ici : https://f1atb.fr/index.php/fr/2021/03/15/sortie-gnu-radio-vers-vlc/

Se positionner dans le dossier de VLC sous windows et tapez la commande:

vlc --demux=rawaud --rawaud-channels=1 --rawaud-samplerate=10000 udp://@:9001

Ce récepteur est le plus simplifié possible. En pratique il faudrait rajouter d’autres fonctions comme un contrôlè de gain, un squelch, un filtre audio, etc.

Chaine d’émission

Pour faire simple, on va positionner un générateur audio dont l’amplitude et la fréquence du sinus seront réglables avec 2 WX GUI Sliders.

La source audio échantillonnée à 10 kHz attaque un modulateur NBFM qui génère un signal complexe à 40 kHz. Lequel est interpolé pour atteindre 600 kHz (Pluto à besoin d’échantillons à 520kHz minimum). La fréquence d’émission radio est positionnée dans la bande des 144 ou 432 MHz ou ..

Émetteur NBFM

Positionnez à côté du Pluto un récepteur radio (clé SDR ou autre) et écoutez votre émission à faible niveau.

Relais Transpondeur

Il est très facile de convertir ce système en relais transpondeur en reliant la sortie audio du récepteur à l’entrée audio de l’émetteur dont on a inhibé le générateur.

Relais Radio

Téléchargement

Le fichier source ( Gnu Radio Companion *.grc) décrit ci dessus est téléchargeable ici: https://f1atb.fr/wp-content/uploads/2021/03/NBFM_TX_RX_Pluto.zip

Bilan charge de calcul

Avec cette configuration de transceiver il est intéressant de voir la charge de calcul imposée à l’Orange Pi ainsi que les débits d’entrée / sortie. Pour cela en mode terminal tapez: htop, application qui donne un bilan en une seule vue.

Charge de calcul

La charge de calcul (en vert) est d’environ 14% =100*0,57/4. Le max est de 4 en raison des 4 coeurs. Il reste de quoi rajouter des fonctionnalités à notre transceiver.

L’Ethernet de sortie (Eth0 en rouge) avec 26KB/s correspond bien à l’audio échantillonnée à 10k/s sur 2 octets plus le débit de mon affichage d’écran.

L’Ethernet / USB du Pluto (Eth1 en jaune) avec 2.7MB/s dans chaque sens correspond à l’échantillonnage à 600kHz sur 2 voies (I et Q) sur 2 octets chacune.

Articles traitant de l’Adalm – Pluto SDR

Articles traitant de GNU – Radio

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *