Récepteur BLU distant
Remote SDR – Chaine de réception
Ci-après la présentation d’un récepteur BLU à base de SDR (Software Defined Radio) pilotable à distance par un navigateur internet comme l’on trouve sur la toile, les fameux WebSDR. Il est le pendant de l’émetteur BLU distant décrit dans cet article.
Matériel
Pour la partie matériel , l’ensemble présenté ici comprend:
- un SDR comme le RTL-SDR ou le HackRF One
- un nano ordinateur comme l’Orange Pi PC2 H5 ou l’Orange PI One Plus sous ARMBIAN. Notez que des OM comme CU2ED ont fait tourner le RX de Remote SDR sur un Raspberry 4 (23% de charge).
Pour le SDR, le modèle « HackRF One » est intéressant car il couvre une large bande de 1 MHz à 6 GHZ. Il permet l’écoute de son émission à 2.4 GHz lors d’une transmission vers Q0-100. On le trouve en chine (Aliexpress) pour une centaine d’€ avec sa boite aluminium et un TCXO pour la stabilité en fréquence.
Le RTL-SDR, plus limité en fréquence, permet de travailler sur 6m jusqu’au 740MHz de sortie du LNB de la parabole de réception du satellite QO-100. Il a l’avantage d’être très peu cher.
Les 2 modèles de SDR sont limités à une dynamique de 8 bits. Cela est suffisant pour QO-100 où les niveaux de chaque émission sont très similaires. Cela est acceptable aussi pour le 2m ou le 70cm sauf si l’on un relais à proximité qui peut saturer l’entrée.
Le nano processeur de traitement est un modèle de la famille Orange PI. Il ressemble au Raspberry PI. J’ai testé le traitement proposé avec un Orange PI PC2 H5 et un Orange PI One Plus H6. C’est ce dernier que j’utilise quotidiennement, on le trouve pour moins de 30€ en chine (Ebay ou Aliexpress). Ces 2 processeurs sont des 4 cœurs 64 bits. Ils sont chargés à 60% avec la chaîne de réception proposée ci-après. Un Raspberry PI3 ne tient pas la charge, quant au Raspberry PI 4, je n’ai pas essayé.
Logiciel
Pour la partie logiciel nous avons:
- un traitement du signal avec GNU-Radio en python2
- un simple serveur web en python3
- 3 petits modules en python3 d’interface entre GNU-Radio et les websockets d’échanges des données vers le navigateur web du PC ou de la tablette distante
- Le logiciel de visualisation et de traitement audio « Remote SDR » écrit en HTML et Javascript pour piloter l’ensemble à distance depuis un navigateur Web comme Chrome.
Traitement du Signal
L’ensemble du traitement est réalisé par le logiciel « GNU Radio ». Il dispose d’un éditeur graphique « Gnuradio-companion » qui facilite la tâche car il fourni tous les blocs de traitement pour faire un récepteur sans écrire une ligne de code. C’est presque un jeu d’enfant…. L’installation de GNU Radio est décrite ici.
Traitement HF
Pour la partie HF d’entrée, le SDR est traité par le bloc Osmocom qui va lui fournir les paramètres comme la fréquence centrale, les gains et la fréquence d’échantillonnage souhaitée. Dans le cas du HackRF, on peut choisir une fréquence centrale entre 1MHz et 6GHz. Pour la fréquence échantillonnage il faut travailler entre 2MHz et 10MHz maxi. C’est elle qui donnera la largeur de bande traitée. Un HackRF peut travailler en dessous de 2 MHz mais c’est à éviter car il y a des repliements de spectre.
Pour un RTL-SDR, la plage de fréquence d’échantillonnage théorique est:
- 225001-300000 Hz
- et 900001-3200000 Hz
En pratique, il ne faut pas dépasser les 2.4 MHz car au dessus le PLL ne synchronise pas parfois.
Dans le cas d’un récepteur dédie uniquement à la réception du transpondeur bande étroite de QO-100, une bande utile de 500 kHz et donc un échantillonnage à 600 kHz suffit. Cela permet de diminuer la charge de calcul de l’Orange Pi voire d’utiliser un Raspberry PI3B. Cependant un échantillonnage à 600 kHz est trop bas pour un HackRF et pas couvert par le RTL-SDR.
Le choix pris ici est de 2.4MHz. Cela permet:
- de travailler avec un HackRF ou un RTL-SDR
- d’avoir une bande utile de travail de 2MHz après filtrage ce qui est bien adaptée au 2M
- d’avoir par décimation des bandes utiles de 1MHz, 500KHz, 250KHz et 125KHz
- une bande utile de 500KHz bien adaptée à QO-100
Le SDR fourni 2 signaux complexe I et Q en sortie de démodulation échantillonnés à 2.4MHz. Ce principe de démodulation en raison des disparités entre les voies I et Q dans la conversion analogique digitale génère au centre de la bande une pointe de signal parasite. Le HackRF dispose d’une fonction de compensation de ce biais. Néanmoins on a rajouté un bloc appelé « DC blocker » dans GNU Radio pour retirer cette composante. Il est difficile de dire lequel des deux systèmes est le plus efficace, le biais variant avec le temps. Dans tous les cas, ces fonctions de filtrage passe-haut perturbent la réception autour de la fréquence centrale.
Traitement AUDIO
La chaîne de traitement audio permet de connecter une voie vers un client web. Il n’est pas prévu d’avoir plusieurs écouteurs en parallèle sur différentes voies. Les signaux audios en SSB étant inférieurs à 4 kHz, la fréquence d’échantillonnage choisie vers le client web est de 10 kHz afin de ne pas trop charger le débit en sortie.
Dans les 2 MHz (de -1 MHz à + 1MHz) de bande utile en sortie du SDR, l’opérateur choisie une fréquence d’écoute appelé ici fréquence fine. La voie audio est filtrée dans une bande de 100Hz à 3900Hz. Le filtrage n’est pas réalisé par un filtre passe-bande 100 à 3900Hz mais par un filtre passe-bas complexe de +-19ooHz.Ce filtre de +-1900Hz de large est positionné à la fréquence fine – 2000 Hz si nous sommes en bande latérale inférieur (BLI ou LSB) ou fréquence fine + 2000 Hz si nous sommes en bande latérale supérieure (BLS ou USB). Cela permet une écoute dans une bande audio de 100 Hz à 3900 Hz. La bande est un peu large pour de la SSB mais peut être refiltré par la suite par le client web. Cette largeur maxi pour couvrir tous les cas est nécessaire car il est impossible de changer la fréquence de démodulation des 2 oscillateurs en quadrature (sinus et cosinus) en temps réel. Les essais ont montré que l’on perd la quadrature parfaite si on change la fréquence.
En sortie du filtre, il y a une décimation par 240 qui permet de baisser la fréquence d’échantillonnage à 10 kHz=2.4 MHz/240. Ensuite un bloc AGC recadre la dynamique du signal audio complexe (signaux bleus). Un bloc permet ensuite de séparer en deux la partie réel et la partie imaginaire (signaux orange). Un signal est envoyé pour multiplication par un cosinus à 2kHz, l’autre vers un sinus en quadrature à 2kHz également. Le choix BLI ou BLS est défini par la variable LSB_USB qui agit sur l’une des voies en multipliant le signal par 1 ou -1.
L’ additionneur récupère la voie démodulée et transmet les données en nombres flottants vers un convertisseur en entier 16 bits avec un recadrage de la dynamique qui sur 16 bits sera bien suffisante pour de l’audio SSB.
La sortie de GNU Radio des trames audio par paquets de 1000 octets se fait par le protocole UDP sur le port 9001 de l’Orange PI. Pour envoyer ces paquets vers le client web, on utilise un websocket sur le port 8001 de l’Orange PI. Un petit module python3 décrit ici, se charge du transfert du port 9001 UDP vers 8001 websocket et le client web.
Traitement du Spectre
Pour avoir un affichage de l’ensemble du spectre sur la largeur d’échantillonnage du SDR (2.4MHz), on effectue une transformée de Fourier rapide (FFT) de 2048 points. Cela fourni environ 2 MHz utile compte tenu du filtrage sur les bords. Une décimation par 2, 4 ,8 ou 16 permet d’avoir un zoom jusqu’a 125 kHz de bande utile ou 150 kHz d’échantillonnage. Pour 2048 points de FFT la résolution est de 150 kHz/2048, soit à peu près 75Hz.
Pour comprendre la chaîne de traitement, il faut partir de la fin et ce qui correspond à notre besoin. À savoir une fréquence de 5 traces de spectre par seconde est suffisante pour avoir une vue directe de l’activité sur la bande. Il n’est absolument pas nécessaire d’effectuer une FFT sur tous les échantillons temporels (2.4 M/s) que fourni le SDR.
En prenant 12000 échantillons par secondes =2.4MHz/200 cela répond au besoin. GNU Radio dispose d’un bloc qui exécute la FFT 2048 points et calcule l’énergie directement en niveau logarithmique pour avoir des dB. La sortie étant des paquets de 2048 points en nombre flottant, on effectue une conversion en entiers 16 bits puis un envoi par UDP sur le port local 9002. De même que pour l’audio un petit module en python 3 convertit ces messages UDP en websocket pour le client web sur le port 8002.
Il faut nourrir cette FFT par des paquets de 2048 échantillons temporelles. 5.8 =12000/2048 paquets sont nécessaires par secondes si on veut une FFT qui couvre les 2.4 MHz de bande. Si on veut une bande 16 fois plus petite de 150 kHz il faut 16 fois plus d’échantillons en entrée d’un filtrage qui est centré sur une bande 16 fois plus petite suivi d’une décimation par 16. Ouf…, un peu difficile à suivre…
GNU Radio dispose d’un bloc qui permet de choisir M échantillons parmi N. Dans le cas d’une bande de 150 kHz, on prend 32768=2048*16 échantillons parmi 409600 que l’on filtre passe-bas dans un rapport de 16 . En entrée du filtre on est à 192k=16*12k de fréquence d’échantillonnage. En sortie on a une décimation par 16 pour arriver au 12k de l’entrée de la FFT. La décimation ne se fait pas directement dans le bloc filtre car on ne peut la changer en temps réel pour travailler sur d’autres largeurs de bande comme 300, 600 kHz etc..
Réception des commandes
Pour piloter le SDR et le traitement du signal dans GNU Radio il faut recevoir un certains nombres de paramètres du client web distant. La liaison se fait par un websocket sur le port 8003 de l’Orange PI. A nouveau un petit module en Python3 décrit ici, convertit les messages websocket vers une interface XMLRPC sur le port 9003 qui permet de les passer à GNU Radio.
Visualisation et pilotage à distance
Comme déjà mentionné le pilotage de l’ensemble se fait à distance dans une page web (chrome) fourni par le mini serveur web en python3 sur l’Orange Pi et le port 8000 (Remote SDR V1 uniquement).
http://adresse_IP_Orange_Pi:8000/remote_sdr.html
Cette partie en HTML et Javascript appelé « Remote SDR » fera l’objet d’un autre article.
Ce récepteur fait partie d’un transceiver complet comme présenté dans ces articles:
- Remote SDR V5 – Installation image Raspberry 4B ou Orange Pi
- Remote SDR v5 – Installation manuelle
- Remote SDR v5
- Écoute Satellite QO-100 en direct
- RTTY
- Dépannage
- Émetteur – Récepteur pour QO-100
- SSTV
- WSJT-X – FT8
- Omnirig – Remote SDR
- Ports de communication
- Générateurs de tonalités
- Positionnement sorties GPIO
- Scanning en réception
- Gains et Dynamiques
- Gestion des fréquences
- Lancement de Remote SDR
- Refroidissement CPU
- Autorisation traitement audio et microphone
- Configurations
- Caractéristiques
- Introduction à Remote SDR
- Remote SDR – Canaux Audio
- CW avec Remote SDR
- Bouton Rotatif et Manipulateur Morse pour Remote SDR
- VHF et UHF NBFM Transceiver
- Remote SDR v4
- Gpredict – Remote SDR
- Remote SDR V4 – Installation image Raspberry 4B ou Orange Pi
- Remote SDR v4 – Installation manuelle
- SA818 / RTL-SDR
- Remote SDR – Exemples de Réalisations
- QSO via QO-100 avec un smartphone
- Remote SDR V2 – Architecture Logiciel
- Remote SDR V1 – Approvisionnements
- Remote SDR V1 – Interface Homme Machine
- Remote SDR V1 – Traitement du Signal
- Client Web vers GNU Radio
- GNU Radio vers client Web
- Emetteur BLU distant
- Récepteur BLU distant
- GPIO de l’Orange PI One Plus H6
- Émetteur et récepteur vers Q0-100 avec 2 SDR – Remote SDR V1
- Installation TCXO sur un HackRF
En cherchant des infos pour trouver une solution de partage de RX (pour un radio club) vers plusieurs « clients », je découvre votre site.
Je tiens à vous féliciter pour la qualité de vos développements. Je suis un utilisateur plutôt qu’un développeur et je suis séduit par votre travail.
Félicitations
René – F6AUE
Merci. Remote SDR est orienté mono utilisateur. 73
Très intéressant ! et vos explications sont vraiment détaillée, on peut en apprendre beaucoup sur l’utilisation de GNU Radio et sur la technique de modulation/démodulation en BLU. Avez-vous publié le .grc de l’article ?
Cordialement,
Georges
En téléchargeant le source de Remote SDR, vous trouverez le source parmi les fichiers dans le dossier PY