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. Cette application peut également tourner sur Orange Pi Zero 2 tournat sur Debian téléchargeable sur http://www.orangepi.org.
Configuration matérielle
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/
Pour installer le système d’exploitation sur un Orange Pi Zero 2, voir l’article suivant :
https://f1atb.fr/index.php/fr/2021/05/06/mise-en-route-orange-pi-zero-2/
Pour installer le système d’exploitation sur un Raspberry Pi 4, téléchargez l’image correspondant à la version Desktop sans les ‘recommended software’.
https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit
L’Adalm-Pluto ou Pluto SDR est une radio logicielle intéressante permettant de créer un émetteur-récepteur fonctionnant en duplex.
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/raspberry 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/Raspberry 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.
Avec l’orange pi zero 2 ces modules ne sont pas tous disponibles sur l’os Debian, mais cela ne semble perturber le fonctionnement. Il manque cdc_ether et usbnet. De même avec le Rasopberry Pi 4, il manque usbnet.
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
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
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
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.
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 ..
Positionnez à côté du Pluto un récepteur radio (clé SDR ou autre) et écoutez votre émission à faible niveau.
Note sur le gain d’émission
En fait, il faut parler d’atténuation. La valeur doit se situer entre 0 (signal fort) et – 89. cela correspond à des dB. Au delà le système plante.
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.
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.
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
- Remote SDR V5 – Installation image Raspberry 4B ou Orange Pi
- Remote SDR v5 – Installation manuelle
- Remote SDR v5
- Dépannage
- Choix SDR
- Lancement de Remote SDR
- Configurations
- Caractéristiques
- Remote SDR v4
- Remote SDR V4 – Installation image Raspberry 4B ou Orange Pi
- Remote SDR v4 – Installation manuelle
- Remote SDR v2 – Installation image Raspberry 4B
- Remote SDR v2 – Installation image Orange Pi One Plus ou Orange Pi Zero 2
- Remote SDR v2 – Installation manuelle
- Remote SDR v2
- Changement Fréquence du SDR Pluto
- NBFM Transceiver avec Pluto SDR et GNU Radio
- Extension en fréquence du Pluto SDR
- Installation SDR Adalm-Pluto
Articles traitant de GNU – Radio
- Changement Fréquence du SDR Pluto
- Lancement script GNU Radio au boot
- NBFM Transceiver avec Pluto SDR et GNU Radio
- Audio GNU-RADIO vers VLC
- Remote SDR V1 – Installation
- Client Web vers GNU Radio
- GNU Radio vers client Web
- Emetteur BLU distant
- Récepteur BLU distant
- Émetteur et récepteur vers Q0-100 avec 2 SDR – Remote SDR V1
- HackRF – RTL-SDR – GNU RADIO
Commentaires récents