Peut-on demander à une IA de construire notre récepteur SDR ?

Peut-on construire un récepteur SDR avec une IA ?

L’intelligence artificielle sait rédiger un texte, créer une image ou écrire un programme. Mais pourrait-elle aller beaucoup plus loin et construire pour nous un véritable récepteur SDR ?

Voilà une excellente question pour un radioamateur !

Tentons donc une expérience : prenons un ordinateur, un dongle RTL-SDR et demandons à une IA de développer progressivement notre propre logiciel de réception radio.

Un SDR, c’est finalement beaucoup de logiciel

Dans un récepteur classique, une grande partie du travail est réalisée par des circuits électroniques : oscillateurs, mélangeurs, filtres, démodulateurs…

Avec un SDR (Software Defined Radio), une partie importante de ces fonctions est transférée dans le logiciel.

Notre clé RTL-SDR va évidemment rester indispensable. Elle reçoit le signal provenant de l’antenne et fournit à l’ordinateur les fameux échantillons I et Q représentant le signal reçu.

À partir de là, énormément de choses peuvent être réalisées par programme.

Notre chaîne pourrait donc devenir : ANTENNE → RTL-SDR → I/Q → IA + PYTHON → AUDIO

Évidemment, l’IA ne reçoit pas elle-même les ondes radio. Son rôle sera d’écrire le programme permettant à notre ordinateur de les traiter.

Chaîne SDR : du signal à l’audio

Du signal radio au haut-parleur : l’IA programme le traitement, le RTL-SDR fournit les données I/Q.

Commençons par lui donner un cahier des charges

Plutôt que de simplement demander : « Fabrique-moi un SDR ! » soyons un peu plus précis.

Nous voulons un programme capable de :

  • communiquer avec notre RTL-SDR ;
  • choisir une fréquence de réception ;
  • régler le gain ;
  • afficher le spectre ;
  • afficher un waterfall ;
  • sélectionner un signal ;
  • modifier la largeur du filtre ;
  • démoduler AM, FM, NFM, USB, LSB et CW ;
  • envoyer finalement le signal démodulé vers la carte son.

Voilà déjà un joli programme !

Mais plutôt que de tout demander simultanément, procédons comme le ferait probablement un développeur : construisons notre récepteur morceau par morceau.

Première étape : récupérer les signaux I/Q

Python dispose déjà d’une bibliothèque particulièrement intéressante : pyrtlsdr.

Elle constitue une interface Python avec librtlsdr et permet notamment de choisir la fréquence centrale, la fréquence d’échantillonnage et le gain, puis de récupérer directement les échantillons complexes I/Q provenant du récepteur. La bibliothèque propose aussi une lecture asynchrone, intéressante pour un traitement continu.

Notre IA n’a donc pas besoin de réinventer le pilote USB du RTL-SDR.

Elle peut commencer son travail directement à partir des données radio.

« IA, montre-nous maintenant le spectre ! »

Notre deuxième demande est déjà plus amusante.

Les données I/Q représentent le signal reçu dans le domaine temporel. Pour voir les différentes émissions présentes autour de notre fréquence centrale, nous allons demander à l’IA d’utiliser une FFT, la transformation de Fourier rapide.

Pas besoin ici de sortir les équations !

Retenons simplement que la FFT permet à notre programme de passer d’une succession d’échantillons à une représentation des différentes fréquences présentes.

Nous obtenons alors notre premier affichage : RTL-SDR → I/Q → FFT → SPECTRE

Notre programme commence déjà à ressembler à un logiciel SDR.

Et maintenant, un waterfall !

Une FFT nous donne une photographie du spectre à un instant donné.

Mais recommençons cette opération continuellement et empilons les résultats les uns sous les autres.

Nous obtenons alors :

  • horizontalement : la fréquence
  • verticalement : le temps
  • intensité : la puissance du signal

Nous venons de construire notre waterfall !

Des échantillons I/Q au waterfall SDR

La FFT transforme les échantillons I/Q en spectre ; leur succession dans le temps forme le waterfall.

Et cette fois notre petit programme commence sérieusement à ressembler aux logiciels SDR que nous connaissons.

Mais nous n’entendons toujours rien !

Afficher de jolies traces sur un écran ne suffit évidemment pas pour faire un récepteur.

Supposons qu’une émission apparaisse sur 145,500 MHz.

Il faut maintenant demander à notre programme de l’isoler : I/Q → accord → filtrage → réduction du débit → démodulation → audio

C’est là que notre expérience devient particulièrement intéressante.

Les échantillons provenant du SDR arrivent généralement beaucoup trop rapidement pour devenir directement un signal audio. Il faut donc les filtrer puis réduire leur fréquence d’échantillonnage.

La bibliothèque scientifique SciPy possède justement les outils nécessaires : filtrage numérique, décimation et rééchantillonnage font partie des traitements proposés par scipy.signal.

Autrement dit, une nouvelle fois, l’IA n’a pas besoin de réinventer toutes les mathématiques du traitement numérique du signal. Elle doit surtout assembler correctement les briques existantes.

« Ajoute-nous maintenant la FM ! »

Nous pouvons commencer par une démodulation relativement simple.

Demandons à l’IA : « Ajoute maintenant un démodulateur FM et envoie le résultat vers la carte son. »

Quelques secondes plus tard, elle peut nous proposer les fonctions nécessaires.

Si tout se passe correctement : l’antenne reçoit → le RTL-SDR numérise → Python traite → le haut-parleur parle.

Notre programme est désormais véritablement devenu un récepteur radio.

Et rien ne nous empêche de poursuivre.

AM, NFM, USB, LSB et CW…

Nous pouvons maintenant demander successivement : « Ajoute la réception AM. »

Puis : « Ajoute la NFM avec un filtre de 12 kHz. »

Et encore : « Ajoute USB, LSB et CW. »

À chaque étape, l’IA modifie son programme.

Nous pouvons même lui demander d’ajouter plusieurs largeurs de filtres adaptées à nos usages : 6 kHz pour l’AM, environ 2,4 kHz pour la SSB ou quelques centaines de hertz pour la CW.

Et pourquoi ne pas ajouter un curseur permettant au radioamateur de modifier lui-même cette largeur ?

Petit à petit, notre expérience devient un véritable projet SDR.

Il nous manque une façade !

Nous avons maintenant le moteur. Demandons à notre programmeur artificiel de construire le tableau de bord.

Il nous faudrait : un grand affichage de fréquence, un spectre, un waterfall, un S-mètre, les boutons AM/FM/NFM/USB/LSB/CW, le gain RF, le volume et la largeur du filtre.

Interface SDR F5KEE générée par IA

À quoi pourrait ressembler notre futur F5KEE SDR : une interface complète développée avec l’aide de l’IA.

Ajoutons également la possibilité de cliquer directement sur un signal dans le spectre pour l’écouter.

Nous pourrions même écrire en haut de la fenêtre : F5KEE SDR — construit avec une IA

À ce stade, notre petit programme expérimental commence à ressembler à un véritable logiciel de réception.

L’IA va-t-elle réussir du premier coup ?

Probablement pas !

Et c’est justement ce qui rend l’expérience intéressante.

Nous risquons fort de rencontrer un son accéléré ou ralenti, une mauvaise fréquence, un filtre mal dimensionné, une interface graphique qui se fige, une bibliothèque absente ou encore un programme consommant énormément de ressources.

Il faudra alors revenir vers l’IA : « Voici le message d’erreur… »

ou : « Le programme fonctionne, mais l’audio est complètement haché. »

Et lui demander de rechercher puis de corriger le problème.

Car il existe une différence fondamentale entre l’IA et nous : elle n’entend pas notre récepteur !

Elle peut produire un algorithme parfaitement convaincant sur le papier alors que nous constatons devant le poste qu’il ne fonctionne pas correctement.

Le radioamateur reste donc indispensable à l’expérience.

Et si nous remplacions le RTL-SDR ?

Une fois notre récepteur opérationnel, nous pourrions lancer un nouveau défi : « Je voudrais maintenant utiliser ce programme avec différents SDR. »

Une solution possible consiste alors à remplacer l’accès spécifique au RTL-SDR par une couche telle que SoapySDR, conçue pour fournir une interface commune aux matériels SDR pris en charge.

Notre programme pourrait ainsi évoluer progressivement vers quelque chose de beaucoup plus universel.

Et pourquoi pas GNU Radio ?

Il existe encore une autre approche.

Plutôt que de demander à l’IA d’écrire entièrement notre traitement en Python, nous pourrions lui demander de concevoir un récepteur sous GNU Radio.

Le principe serait alors particulièrement parlant : Source SDR → filtre → démodulateur → traitement audio → haut-parleur

Chaque fonction devient une brique que l’on relie à la suivante.

Cela pourrait d’ailleurs faire l’objet d’une seconde expérience F5KEE : « Demandons à une IA de construire notre récepteur GNU Radio ! »

Alors, l’IA peut-elle construire notre SDR ?

Oui… mais certainement pas toute seule !

Elle peut écrire une quantité impressionnante de code, utiliser les bibliothèques existantes, concevoir les filtres, réaliser le waterfall, programmer les démodulateurs et construire l’interface graphique.

Mais c’est toujours le radioamateur qui définit ce qu’il souhaite construire.

C’est également lui qui branche l’antenne, observe le spectre, écoute le résultat, détecte les anomalies et explique à l’IA ce qu’elle doit corriger.

L’IA ne remplace donc pas le radioamateur.

Elle lui apporte plutôt quelque chose de particulièrement intéressant : un programmeur disponible à côté de l’établi.

Et pour les radioamateurs qui ont toujours eu envie d’expérimenter avec le traitement numérique du signal sans jamais oser se lancer dans plusieurs milliers de lignes de programmation, cela pourrait bien changer beaucoup de choses.

Et si nous essayions vraiment ?

C’est justement ce que nous allons faire.

Dans une prochaine étape, nous allons partir d’une feuille blanche avec seulement un RTL-SDR, Python et une IA.

Premier objectif : recevoir les échantillons I/Q, afficher notre premier spectre et notre premier waterfall.

Puis nous ajouterons l’audio, les différents modes, les filtres et enfin une véritable interface de récepteur.

Et nous verrons surtout combien de fois notre intelligence artificielle devra entendre cette phrase : « Non… ça ne fonctionne pas. Recommence ! »

Liens utiles pour aller plus loin

Laisser un commentaire

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

*

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.