Remote SDR V1 – Traitement du Signal

« Remote SDR » qui permet de piloter à distance un récepteur et un émetteur de radioamateur tourne sur un navigateur web comme Chrome ou Edge (versions 2020) . Il est écrit en HTML et Javascript. Ce dernier permet d’effectuer des traitements puissants comme du filtrage Audio ou des Transformées de Fourier pour faire une analyse spectrale en temps réel. Le HTML et les feuilles de style associées permettent d’adapter facilement l’interface au besoin utilisateur.

Remote SDR gère à distance simultanément un récepteur et un émetteur par l’intermédiaire de 2 processeurs de la famille Orange PI (nano processeur chinois similaire au Raspberry Pi) . La liaison se fait par le réseau local LAN. Je préfère le réseau câblé au WIFI sujet aux coupures.

Synoptique Remote SDR

Chaîne de réception

Le début de la chaine de réception est traité dans l’Orange Pi et est décrit dans l’article Récepteur BLU distant. Il en sort 2 flux de données:
– un flux audio: une voie échantillonée à 10kHz
– un flux d’analyse spectrale: 2048 points couvrant la bande traitée du récepteur, 5 fois par seconde.

Voie Audio RX

Traitement voie audio

Le signal Audio en provenance de l’Orange PI rentre dans le traitement par le réseau suivant le protocole websocket. Le flux d’entrée est composé de paquets de 1024 octets, soit 512 échantillons audio codés sur 16 bits et échantillonnés à 10kHz. Le traitement qui suit est synchrone de la carte audio du PC ou de la tablette de visualisation qui échantillonne les signaux à typiquement 44.1 ou 48kHz. La première étape du traitement est une interpolation pour passer de 10 kHz à 44.1 ou 48kHz. Au passage les échantillons entiers sur 16 bits sont convertis en nombres flottants et multipliés par le contrôle de volume souhaité. Comme les échantillons entre d’une façon asynchrone par paquets de 512, une mémoire tampon les stocke quelque ms, avant que l’API Web Audio les lise synchrone avec la carte son. Un filtre passe haut suivi d’un filtre passe bas permet de redéfinir la bande d’écoute entre 100Hz et 4000Hz. Le signal d’origine en sortie de l’Orange Pi est compris entre 200 et 3900 Hz.

Le signal audio envoyé vers le Haut-Parleur ou le casque est représenté sous forme temporelle par un petit oscilloscope et une Transformée de Fourier Rapide (FFT) permet d’en avoir une vue spectrale. Ce sera utile pour caler par la suite la fréquence d’émission du transceiver sur la fréquence de réception.

Spectre de la bande de réception

Le deuxième flux en sortie de l’orange PI consiste en une analyse spectrale sur 2048 points couvrant la bande reçue de 150, 300, 600, 1200 ou 2400kHz. Ce qui donne pratiquement une bande utile compte tenu du filtrage sur les bords de 125, 250, 500, 1000 ou 2000kHz. Les données reçues sont directement des logarithmes d’amplitudes. 10dB correspond à un écart de 100 en amplitude.

Analyse spectrale

A chaque arrivée d’une trame de 2048 amplitudes de spectre, elles sont immédiatement converties en niveaux de luminosités pour tracer une ligne de pixels sur le canvas du waterfall. Chacune des amplitudes est moyennée par un filtre RC du premier ordre:

Yn = a * Xn + (1-a) * Yn-1 avec a=0.1

Le tracé du spectre instantané des 2048 amplitudes couvrant la bande de fréquence reçue est effectué à partir des valeurs directes ou celles moyennées. Je préfère les moyennées qui lissent le bruit.

Ces valeurs de voies moyennées permettent d’estimer le niveau de signal au dessus du bruit sur l’axe de voie audio pour donner un rapport de réception.

Compensation automatique dérive en FRÉQUENCE

Ces voies moyennées permettent également d’estimer la fréquence fine d’une balise pour corriger automatiquement l’ erreur en fréquence de la chaîne de réception. Ceci trouve une application intéressante dans le cas de la réception du satellite QO-100. Il permet de compenser l’erreur introduite par la dérive en fréquence du PLL de la tête de réception. L’estimation est recalculée toutes les secondes et envoyée au SDR pour compenser la dérive. Si une balise se trouve au centre du spectre, elle n’est pas prise en compte car la voie centrale du SDR est sujette à des erreurs de niveau en raison des disparités entre les chaines I et Q.

Paramètres vers le SDR de réception

Il est nécessaire d’envoyer périodiquement ou à chaque changement des paramètres vers le SDR de réception et le traitement dans l’Orange PI. Ils sont au nombre de 7:

  • la fréquence centrale du SDR entre 1 MHz et 6 GHZ pour un Hack RF One.
  • la largeur de bande à traiter entre 150 et 2400 kHz
  • la fréquence fine de la voie audio
  • le mode BLI ou BLS (Bande latérale Inférieure ou Supérieure)
  • 3 gains pour le SDR (tous ne sont pas nécessaires suivant le SDR choisi).

Chaîne d’émission

La chaîne de traitement d’émission est principalement traitée dans l’Orange Pi connecté au SDR d’émission. Sa description est donnée dans l’article Émetteur BLU distant.

Chaîne d’émission

Il faut fournir à l’Orange PI un flux audio du microphone échantillonné à 10kHz sur 16 bits.

L’API Web Audio nous fourni toutes les fonctions en Javascript pour récupérer l’audio du microphone connecté au PC. Malheureusement des règles de sécurité au niveau des navigateurs web ne permettent pas de récupérer le signal microphone si le serveur web qui fourni la page n’est pas à accès sécurisé en https. Sur son réseau local à la maison, en général on travaille en http simplement. Pour contourner cette difficulté, la solution est de mettre en place une dérogation au niveau du navigateur web en accédant aux paramètres « flags ». Si le serveur qui fourni la page remote_sdr.html est par exemple à l’adresse IP 192.168.0.70:8000 il faut taper dans la barre d’adresse:

avec Chrome: chrome://flags

avec Edge(2020): edge://flags

Cherchez la rubrique:

Insecure origins treated as secure

Remplir le champ comme ci dessous:

Traitement Audio Emission dans Remote SDR

Pour l’émission, il y a 3 sources audio:

  • une entrée microphone du PC ou de la tablette
  • une souce sinusoidale à 800Hz
  • deux sources sinusoidales à 500 Hz et 1900 Hz

La source à 800Hz permet de tester le niveau de la chaîne de puissance et de caler la fréquence d’émission sur celle de réception en vérifiant que sur le spectre reçu on a une raie autour de 800Hz.

La double source à 500 et 1900Hz permet de vérifier la bonne linéarité de l’émetteur avec le test dit « 2 tones test ». Si l’analyse spectrale donne des raies d »intermodulation à 1900-500Hz ou 1900+500Hz etc, cela traduit une non linéarité.

Derrière une amplification dont on peut ajuster le gain se trouve un filtre passe-bas pour limiter les fréquences audios à 3500Hz. Par la suite elle sera filtrée à nouveau dans une bande 200Hz – 2800 Hz adaptée à la BLU.

En final, un autre étage d’amplification permet d’ajuster les niveaux afin d’être parfaitement cadré sur les 16 bits de chaque échantillon envoyé à l’Orange PI et au SDR. Il est préférable de rester en mode de gain automatique afin de ne pas avoir une sur modulation qui se traduit par un spectre HF qui s’étale.

Pour surveiller son signal audio, il y a une vue temporelle et spectrale du signal ainsi que la possibilité de s’écouter en local.

Suivant le protocole websocket, les données audios sont envoyés à l’Orange PI. Pour mémoire, l’arrivée du flux audio permet de déclencher la mise sous-tension des amplificateurs HF dans le cadre de la réalisation pour le satellite QO-100 / ES Hail2.

Paramètres vers le SDR d’émission

Les paramètres de configuration envoyés à l’Orange Pi et le SDR sont au nombre de cinq:

  • la fréquence d’émission entre 1MHz et 6GHz
  • le mode BLI ou BLS
  • 3 gains HF pour les différents étages du SDR Hack RF One.

Configuration du RX et du TX

Les paramètres permettant de configurer le récepteur et l’émetteur sont enregistrés sous forme de:

  • paramètres permanents
  • paramètres modifiables

Les permanents sont enregistrés dans 2 fichiers javascript:
– configurationRX.js
– configurationTX.js

On y trouve les bandes de fréquence de travail, par exemple 7 à 7.2MHz ou 144 à 146 MHz ou 10.4895 à 10.490 GHz. Les décalages en fréquence si on utilise par exemple une tête LNB. Les étiquettes à mettre sous certaines fréquences comme balise etc.

Les paramètres modifiables comme le mode BLI ou BLS, la dernière bande écoutée sont stockés au niveau du navigateur dans les « Local Storage ».

Articles décrivant Remote-SDR

F1ATB André

Radio Amateur - Domotique - Photovoltaïque

Vous aimerez aussi...

4 réponses

  1. Olivier - F1SOC dit :

    ça paraît tellement simple, expliqué comme ça !
    J’imagine les séances de debug interminables avec plusieurs morceaux qui ne fonctionnent qu’à moitié…

    Merci pour ces explications !

    • F1ATB André dit :

      Merci pour votre remarque encourageante. J’ai débuté durant le confinement et j’en suis à plus de 2000 lignes de code en Javascript.
      Dans les jours à venir, je vais publier la description graphique puis l’installation du code.

  2. F4BAD dit :

    Bravo et merci pour ce partage impressionnant.
    Les pages du blog sont agréables à lire, tout est détaillé et clair.
    J’ai du mal a trouvé les infos sur l’interfaçage avec gnu radio depuis l’extérieur d’un GRC. Ici j’ai enfin des exemples clairs et explicites de websockets
    Pour le projet soft je suis jaloux !Je fais un peu de tout ca , mais la puissance 1/10 comparé à vos résultats.
    Le web SDR est impressionnant. Mais d’ou êtes vous parti?. Il y a beaucoup de code au final : donc un long travail.Je suis curieux de connaitre vos sources d’inspiration et points de départ dans votre projet soft qui rassemble beaucoup de notions. je n’utilise plus que Atom et le package beautify pour le code.
    Je ne pourrais aider que du coté hardware, même si je n’ai pas accès à l’antenne.
    73

    • F1ATB André dit :

      Merci Rémi pour vos encouragements.
      J’ai passé beaucoup d’heures durant le premier confinement pour monter ce projet étant parti d’une feuille blanche.
      Je pense m’attaquer prochainement à une version 2 pour étendre les capacités afin de traiter d’autres modulations que la BLU.
      73
      F1ATB
      André

Laisser un commentaire

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