WSPR : que se cache-t-il derrière ces 162 petits symboles ?

Banniere WSPR

Dans notre précédent article, nous avons découvert comment WSPR pouvait transmettre un minuscule message radio à des milliers de kilomètres avec quelques milliwatts. Nous savons maintenant qu’une émission dure environ 110,6 secondes, utilise quatre fréquences très proches et ne transporte que quelques informations.

Mais nous avons volontairement laissé une boîte fermée.

Comment un message aussi banal que :

F5KEE JN18 20

peut-il devenir une succession de 162 symboles radio ?

Et, question encore plus intéressante : comment le récepteur réussit-il à effectuer l’opération inverse lorsque le signal est presque entièrement noyé dans le bruit ?

Cette fois, ouvrons le capot.

Première étape : faire entrer F5KEE dans 28 bits

Un ordinateur pourrait naturellement coder chaque caractère de notre message séparément. Mais ce serait un énorme gaspillage pour WSPR.

Le protocole exploite le fait qu’un indicatif radioamateur possède une structure relativement prévisible.

Un indicatif standard peut être représenté par seulement 28 bits.

Pourquoi 28 ?

Avec 28 bits, nous pouvons représenter :

2²⁸ = 268 435 456 valeurs différentes.

C’est suffisamment pour numéroter les indicatifs standards que le protocole doit représenter.

WSPR ne transmet donc pas réellement les caractères :

F – 5 – K – E – E

Il applique une procédure de codage qui transforme l’indicatif complet en un nombre, puis représente ce nombre sur 28 bits.

C’est une première astuce fondamentale :

plutôt que transmettre des caractères, on transmet leur numéro dans un ensemble de combinaisons possibles.

Notre indicatif F5KEE devient ainsi une valeur numérique parfaitement réversible.

Le locator subit le même traitement

Notre message contient ensuite :

JN18

Là encore, transmettre quatre caractères séparément serait inutile.

Un locator Maidenhead à quatre caractères découpe la Terre en un nombre limité de cases.

Il existe 18 × 18 possibilités pour les deux lettres et 10 × 10 possibilités pour les deux chiffres :

18 × 18 × 10 × 10 = 32 400 locators possibles.

Or :

2¹⁵ = 32 768

Quinze bits suffisent donc pour identifier n’importe lequel des 32 400 locators.

Notre JN18 devient donc à son tour un nombre codé sur :

15 bits.

Nous avons maintenant :

F5KEE → 28 bits

JN18 → 15 bits

soit déjà :

43 bits.

Et les 7 derniers bits ?

Il reste la puissance.

Dans notre exemple :

20 dBm = 100 mW.

WSPR réserve 7 bits à ce dernier champ dans un message standard de type 1.

Nous arrivons donc exactement à :

28 + 15 + 7 = 50 bits.

la compression de F5KEE JN18 20 en 50 bits

De F5KEE JN18 20 aux 50 bits du message WSPR. Le codage source transforme l’indicatif, le locator Maidenhead et la puissance en valeurs numériques compactes : 28 bits + 15 bits + 7 bits = 50 bits. Ces 50 bits constituent l’information utile qui sera ensuite protégée par le codage correcteur d’erreurs avant la transmission.

Voilà notre premier tour de force.

Le message parfaitement lisible :

F5KEE JN18 20

est devenu un paquet de seulement :

50 bits.

Cette opération s’appelle le codage source : représenter l’information utile avec le moins de bits possible.

Mais si nous envoyions directement ces 50 bits, le moindre parasite pourrait transformer un 0 en 1 et rendre le message inutilisable.

Il faut donc maintenant faire quelque chose qui peut sembler contradictoire :

nous allons volontairement ajouter de l’information.

De 50 à 162 bits : le code convolutif

WSPR utilise un puissant système de correction d’erreurs appelé codage convolutif.

Ses deux caractéristiques principales sont :

K = 32

et

r = 1/2.

Le taux 1/2 signifie, de façon simplifiée, que pour chaque bit présenté au codeur, celui-ci produit deux bits codés.

Mais il ne regarde pas uniquement le bit actuel.

Il tient également compte des bits précédents grâce à une mémoire comparable à un registre à décalage.

C’est là qu’intervient :

K = 32

appelé constraint length, ou longueur de contrainte.

Autrement dit, chaque décision produite par le codeur dépend d’une longue histoire des bits qui l’ont précédée.

Cette propriété crée une forte redondance structurée dans le message.

Pour terminer correctement le processus, 31 positions supplémentaires sont nécessaires.

Nous obtenons donc :

(50 + 31) × 2 = 162 bits codés.

le registre du code convolutif

Le codage convolutif du WSPR. Les 50 bits d’information sont complétés par 31 bits de terminaison, puis traversent un codeur convolutif de longueur de contrainte K = 32 et de taux 1/2. Chaque bit traité produit deux bits codés selon les polynômes générateurs du protocole : 81 × 2 = 162 bits, apportant la redondance qui permettra au récepteur de corriger de nombreuses erreurs dues au bruit et au fading.

Et voilà enfin apparaître notre fameux nombre :

162

Il ne vient donc absolument pas de nulle part.

Les 50 bits d’information originale, accompagnés de la mémoire nécessaire au code convolutif, produisent les 162 bits codés utilisés pour construire la transmission WSPR.

À quoi sert toute cette redondance ?

Imaginons qu’un signal soit momentanément affaibli par du fading.

Quelques bits deviennent alors très difficiles à déterminer.

Sans correction d’erreurs, le récepteur devrait décider :

0 ou 1 ?

et espérer avoir choisi correctement.

Avec le codage convolutif, les bits ne sont plus indépendants. Ils appartiennent à une structure logique que le décodeur connaît.

Le récepteur peut donc rechercher quelle succession de bits d’origine explique le mieux l’ensemble des informations reçues.

C’est un peu comme lire :

R_DIO_MATEUR

Même avec des lettres manquantes, nous pouvons raisonnablement reconstruire :

RADIOAMATEUR

Le code correcteur fait quelque chose de conceptuellement comparable, mais avec des mathématiques plutôt qu’un dictionnaire.

Et maintenant, mélangeons tout !

Nous possédons désormais 162 bits.

On pourrait les transmettre dans leur ordre.

WSPR choisit pourtant de les mélanger volontairement.

C’est l’entrelacement, ou interleaving.

Imaginons une suite :

A B C D E F G H

et une perturbation radio qui détruit quatre éléments consécutifs :

A B ? ? ? ? G H

Une partie entière de notre information est touchée.

Si nous avions préalablement réorganisé les données, la même perturbation affecterait des informations qui, une fois remises dans leur ordre initial, seraient dispersées dans le message.

C’est exactement l’intérêt de l’entrelacement.

WSPR réorganise donc les 162 bits codés avant leur transmission.

Au récepteur, l’opération inverse — le désentrelacement — permettra de retrouver leur ordre logique.

l’entrelacement

L’entrelacement des 162 bits WSPR. Après le codage convolutif, les bits sont volontairement réordonnés avant leur transmission. Cette dispersion évite qu’une perturbation brève ou un fading n’endommage une série de bits voisins : après désentrelacement au récepteur, les erreurs se retrouvent réparties dans le message et deviennent plus faciles à traiter par le code correcteur.

Cela améliore la résistance aux perturbations brèves, au fading et aux interférences.

Nous avons 162 bits… mais toujours pas quatre tons

À ce stade, notre message :

F5KEE JN18 20

est devenu :

50 bits utiles → codage convolutif → 162 bits → entrelacement.

Chaque bit obtenu ne peut toujours prendre que deux valeurs :

0 ou 1.

Or WSPR utilise quatre tons :

0, 1, 2 ou 3.

Il nous manque donc une pièce du puzzle.

Et cette pièce est particulièrement astucieuse.

Le deuxième bit que connaît déjà le récepteur

WSPR possède une séquence de synchronisation pseudo-aléatoire de 162 bits.

Mais contrairement aux données de F5KEE, cette séquence n’est pas une information inconnue que le récepteur doit découvrir.

Le récepteur la connaît déjà.

Nous avons donc, pour chaque position :

un bit de données, provenant de notre message ;

et un bit de synchronisation, appartenant à une séquence connue.

Ces deux bits déterminent ensemble lequel des quatre tons doit être transmis.

La règle est remarquablement simple :

Ton = 2 × Data + Sync

Regardons ce que cela donne :

Data Sync Ton
0 0 0
0 1 1
1 0 2
1 1 3

Et voilà !

Nous venons de fabriquer les quatre états de la modulation WSPR.

formule Sync + 2 × Data = ton 0/1/2/3

Comment WSPR transforme deux bits en l’un des quatre tons 4-FSK. Pour chacun des 162 symboles, un bit de données issu du message est combiné avec un bit de la séquence de synchronisation connue du récepteur selon la relation Ton = 2 × Data + Sync. Le résultat, compris entre 0 et 3, sélectionne l’une des quatre fréquences espacées d’environ 1,4648 Hz qui constituent le signal WSPR.

C’est une notion essentielle pour comprendre le protocole.

Les quatre tons ne transportent donc pas simplement « deux bits de notre message ».

Un bit correspond aux données codées, tandis que l’autre appartient à la séquence de synchronisation connue du récepteur.

Du symbole à la fréquence radio

Chaque résultat 0, 1, 2 ou 3 sélectionne maintenant l’une des quatre fréquences possibles.

Si nous appelons f₀ la fréquence du ton le plus bas :

Ton 0 → f₀

Ton 1 → f₀ + 1,4648 Hz

Ton 2 → f₀ + 2,9296 Hz

Ton 3 → f₀ + 4,3944 Hz

L’écart entre deux tons voisins est donc d’environ :

1,4648 Hz.

Supposons, pour simplifier, qu’une petite partie de notre séquence devienne :

2 – 0 – 3 – 1 – 2 – 2 – 0 – 1…

L’émetteur ne transmet pas les chiffres.

Il produit successivement :

f₂ – f₀ – f₃ – f₁ – f₂ – f₂ – f₀ – f₁…

Chaque fréquence est maintenue pendant environ 0,683 seconde, puis l’émetteur passe au symbole suivant.

À raison de 162 symboles :

162 × 0,683 ≈ 110,6 secondes.

Nous avons maintenant suivi pratiquement toute la chaîne :

F5KEE JN18 20

50 bits

codage convolutif

162 bits

entrelacement

+ 162 bits de synchronisation connus

162 valeurs de 0 à 3

162 tons 4-FSK

110,6 secondes de radio.

Notre indicatif est maintenant dans l’air !

Mais à l’autre bout, il n’y a presque rien…

Imaginons maintenant notre transmission reçue à plusieurs milliers de kilomètres.

Le signal a subi l’ionosphère, du fading, du bruit atmosphérique, les parasites locaux et éventuellement les émissions voisines.

Avec quelques milliwatts au départ, sa trace peut être presque invisible.

Le récepteur doit pourtant retrouver :

F5KEE JN18 20

Nous allons donc refaire tout le voyage… à l’envers.

« aller-retour » message → 162 tons → bruit → 162 symboles → message retrouvé.

Du signal WSPR noyé dans le bruit au message F5KEE JN18 20. À la réception, le logiciel effectue le chemin inverse de l’encodage : il recherche et synchronise le signal, analyse les quatre tons, récupère les bits de données, les désentrelace puis exploite le code correcteur pour reconstruire les 50 bits utiles. Le décodage source permet finalement de retrouver l’indicatif, le locator et la puissance transmis.

Première mission : retrouver où se cache le WSPR

Le logiciel ne sait pas nécessairement exactement où se trouve notre signal dans la petite fenêtre WSPR.

Il doit rechercher une correspondance en temps et en fréquence.

C’est ici que notre séquence de synchronisation devient particulièrement précieuse.

Rappelez-vous : le récepteur la connaît.

Il peut donc rechercher dans le signal reçu une structure compatible avec cette séquence.

Lorsqu’une forte correspondance apparaît à une certaine fréquence et avec un certain décalage temporel, nous avons un candidat :

il y a peut-être une transmission WSPR ici.

La synchronisation aide ainsi le logiciel à déterminer précisément quand et analyser le signal.

Le récepteur ne doit pas décider trop vite

Voici une autre notion importante.

Pour chaque symbole, le logiciel pourrait simplement rechercher laquelle des quatre fréquences possède le plus d’énergie et déclarer :

« C’est le ton 2 ! »

Mais lorsque le signal se trouve très profondément dans le bruit, une décision aussi brutale serait souvent fausse.

Le décodeur peut conserver des informations sur la probabilité ou la vraisemblance des différentes possibilités.

Au lieu de penser :

Ton 2 certain

il peut, conceptuellement, travailler avec quelque chose comme :

ton 2 très probable, ton 3 possible, tons 0 et 1 peu probables.

Ces informations deviennent extrêmement utiles pour le décodage correcteur.

Retirer ce que nous connaissons déjà

Une fois la synchronisation établie et les symboles analysés, nous savons que chaque symbole obéissait à :

Ton = 2 × Data + Sync.

Puisque Sync est connu, le logiciel peut retrouver l’information correspondant aux données.

Il obtient ainsi les estimations des 162 bits codés.

Mais souvenons-nous : nous les avions mélangés.

Il faut donc maintenant effectuer le :

désentrelacement.

Les bits retrouvent alors l’ordre attendu par le code convolutif.

Le moment où le correcteur entre en scène

Nous arrivons au véritable cœur du décodage faible signal.

Le décodeur connaît les règles exactes utilisées par le codeur.

Il peut donc rechercher quelle séquence initiale de 50 bits est la plus compatible avec les 162 informations reçues.

Un symbole peut être douteux.

Deux peuvent être mauvais.

Certains peuvent avoir pratiquement disparu.

Mais le décodeur ne juge pas chacun indépendamment : il cherche une séquence complète cohérente avec les contraintes du code.

C’est ce qui donne au WSPR une part importante de sa remarquable capacité à fonctionner à très faible rapport signal/bruit.

La documentation WSJT-X indique un seuil de décodage voisin de –31 dB dans une bande de référence de 2500 Hz.

À l’oreille, nous sommes depuis longtemps dans le domaine du « je n’entends absolument rien ».

Le logiciel, lui, possède encore suffisamment d’informations statistiques et structurelles pour tenter de reconstruire le message.

Nous retrouvons enfin nos 50 bits

Si le décodage réussit, nous revenons finalement aux :

50 bits d’origine.

Il ne reste plus qu’à inverser le codage source.

Les premiers champs permettent de reconstruire l’indicatif.

Le nombre redevient :

F5KEE

Les 15 bits du locator redeviennent :

JN18

et les 7 derniers bits permettent de récupérer :

20 dBm.

Après 110,6 secondes de transmission, des milliers de kilomètres de propagation et une bonne quantité de bruit, nous retrouvons exactement :

F5KEE JN18 20

C’est tout de même assez remarquable.

Finalement, que contiennent réellement les 162 symboles ?

Nous pouvons maintenant répondre beaucoup plus précisément que dans notre premier article.

Une transmission WSPR classique commence par seulement 50 bits d’information utile.

Le code convolutif K=32 de taux 1/2 apporte la redondance nécessaire pour obtenir 162 bits codés.

Ces bits sont entrelacés.

Chacun est ensuite associé à un bit provenant d’une séquence de synchronisation connue.

La combinaison :

2 × Data + Sync

produit l’une des quatre valeurs :

0 – 1 – 2 – 3

qui sélectionne l’un des quatre tons 4-FSK espacés d’environ 1,4648 Hz.

Ces 162 symboles sont transmis à environ 1,465 baud pendant 110,6 secondes.

À la réception, le logiciel effectue essentiellement le parcours inverse :

RF → synchronisation → analyse des tons → données → désentrelacement → correction d’erreurs → 50 bits → F5KEE JN18 20.

Voilà ce qui se cachait derrière nos 162 petits symboles.

Et surtout, nous pouvons maintenant comprendre pourquoi WSPR est si performant : il ne repose pas sur une astuce miraculeuse, mais sur une succession de choix particulièrement intelligents.

Très peu d’information, énormément de temps pour la transmettre, une bande passante minuscule, une synchronisation connue et une forte redondance permettant au logiciel de retrouver ce que le bruit avait presque effacé.

Et si nous fabriquions nous-mêmes ces 162 symboles ?

Maintenant que nous savons comment fonctionne la machine, une question devient inévitable.

Pourquoi laisser WSJT-X faire tout le travail ?

On pourrait très bien imaginer une fonction :

encode_wspr("F5KEE", "JN18", 20)

qui nous retournerait simplement :

2, 0, 3, 1, 2, 2, 0, 1...

jusqu’au 162e symbole.

Un petit microcontrôleur n’aurait ensuite plus qu’à transformer chacune de ces valeurs en l’une des quatre fréquences RF appropriées.

Mais jusqu’où mon signal est-il allé ? Pour en savoir plus !

 

Pour aller plus loin

  • Guide officiel WSJT-X — spécification des protocoles — La référence à privilégier. Elle décrit les 50 bits, le code convolutif K=32, r=1/2, les 162 symboles, l’entrelacement et la combinaison des bits Data et Sync pour obtenir les quatre tons.
  • WSJT-X — utilisation du mode WSPR — Pour passer de la théorie à la pratique avec WSJT-X : configuration, périodes de deux minutes, puissance d’émission et réception des spots. Le guide indique également une capacité de décodage pouvant atteindre environ –31 dB dans 2500 Hz.
  • Code source officiel de WSJT-X sur GitHub — Pour ceux qui veulent aller jusqu’au code utilisé par WSJT-X et comprendre comment les différents modes faibles sont implémentés.
  • WSPRcode.f90 — exemple d’encodage et de décodage WSPR — Probablement le lien le plus intéressant pour accompagner notre article. Ce petit programme montre explicitement l’encodage source, le codage convolutif, l’entrelacement, les symboles de synchronisation et la formule 2*dat(i)+sync(i) qui produit les 162 symboles transmis.
  • JTEncode — bibliothèque Arduino pour générer du WSPR — Particulièrement intéressant pour les radioamateurs qui voudraient passer de la théorie à la construction : cette bibliothèque permet notamment de générer les symboles WSPR depuis un microcontrôleur. Elle constitue une excellente transition vers une future balise WSPR autonome.

Après 40 ans de TLE, pourquoi le suivi des satellites radioamateurs doit changer de format ?

Banniere TLE

Depuis des décennies, le radioamateur qui souhaite suivre un satellite commence presque toujours par télécharger ses TLE. Ces deux mystérieuses lignes de chiffres alimentent ensuite GPredict, SatPC32 ou d’autres logiciels capables de calculer le prochain passage, l’azimut, l’élévation et même la correction Doppler.

Mais en juillet 2026, ce vénérable format a rencontré une limite qui était inscrite dans sa conception depuis l’origine : il n’y a tout simplement plus assez de place pour numéroter les nouveaux objets spatiaux.

Deux lignes qui ont fait le tour du monde

Un TLE — Two-Line Element set — ressemble à ceci :

ISS (ZARYA)
1 25544U 98067A 26200.12345678 ...
2 25544 51.6400 123.4567 ...

Derrière cette apparence peu engageante se trouvent les paramètres décrivant l’orbite : inclinaison, excentricité, argument du périgée, anomalie moyenne, mouvement moyen, époque de référence, etc.Chaque information possède une position déterminée dans la ligne. Le numéro NORAD de l’objet, par exemple, occupe un champ de seulement cinq caractères.
Anatomie d'un TLE

Anatomie d’un TLE. Les paramètres orbitaux sont codés dans deux lignes de 69 caractères selon des positions fixes. Ce format très compact fournit notamment à SGP4 les éléments nécessaires pour calculer la position future du satellite.

Le principe était parfaitement logique à l’époque : produire un format extrêmement compact et facilement transmissible. Mais plusieurs décennies plus tard, cette économie de caractères devient une contrainte.

Le mur des 99 999 est arrivé

Le problème était connu depuis longtemps, mais il est désormais très concret.

Le 11 juillet 2026, avec l’ajout de Saramago, CelesTrak a annoncé l’épuisement de l’espace disponible pour les numéros de catalogue traditionnels sur cinq chiffres. Les nouveaux objets utilisent désormais des identifiants à six chiffres, à partir de 100000.

Le mur des 99 999

Le mur des 99 999. Le TLE classique ne réserve que cinq caractères au numéro de catalogue NORAD. Le passage aux identifiants à six chiffres en juillet 2026 rend donc nécessaire l’utilisation de formats capables de représenter les nouveaux objets, comme l’OMM.

Or regardons notre TLE :

1 25544U ...
└────┘
5 caractères

Essayons maintenant :

100000

Il faut six caractères.

Le TLE classique ne peut donc plus représenter directement ces nouveaux numéros. CelesTrak est très clair : les données GP des nouveaux objets catalogués avec ces identifiants ne seront plus disponibles sous forme de TLE traditionnel. Au 21 août 2026, le catalogue officiel avait déjà atteint 100403.

Une solution intermédiaire appelée Alpha-5 permet de coder davantage d’identifiants en utilisant des caractères alphabétiques. Elle prolonge la vie de certains logiciels, mais ne règle pas les autres limitations structurelles du TLE.

Le successeur existe déjà : OMM

Il n’est heureusement pas nécessaire d’inventer un nouveau format dans l’urgence.

Le CCSDS — Consultative Committee for Space Data Systems normalise notamment l’OMM, Orbit Mean-Elements Message. Celui-ci fait partie du standard Orbit Data Messages. Sa version actuelle est le CCSDS 502.0-B-3, publiée en 2023.

Au lieu de chercher une information à une position précise dans une ligne, on travaille avec des champs clairement identifiés :

OBJECT_NAME = ISS (ZARYA)
NORAD_CAT_ID = 25544
EPOCH = ...
INCLINATION = ...
ECCENTRICITY = ...
MEAN_MOTION = ...

L’OMM peut être représenté notamment en KVN ou XML. Pour ses services GP, CelesTrak propose également des représentations utilisant les mots-clés OMM en JSON et CSV, beaucoup plus faciles à intégrer dans les applications modernes. Depuis mai 2026, CelesTrak utilise même CSV comme format par défaut pour ses requêtes GP.

Attention : SGP4 ne disparaît pas

C’est probablement le point le plus important à comprendre.

TLE et SGP4 ne sont pas la même chose.

TLE et SGP4 ne sont pas la même chose

Du fichier orbital à la station radioamateur. TLE et OMM sont des formats servant à transmettre les éléments orbitaux ; SGP4 reste le modèle qui les propage pour déterminer la position et la vitesse du satellite. Ces calculs permettent ensuite de prévoir les passages, de commander le rotor et de corriger automatiquement le Doppler.

Le TLE est essentiellement la manière de stocker et transmettre les éléments orbitaux. SGP4 est le modèle mathématique utilisé pour les propager dans le temps.

On peut résumer ainsi :

TLE et SGP4

Passer du TLE à l’OMM ne signifie donc pas nécessairement jeter les algorithmes utilisés actuellement. L’OMM a justement été conçu pour transmettre des éléments moyens orbitaux et fait partie des formats normalisés d’échange de données orbitales.

Et pour nos stations radioamateurs ?

À court terme, rien ne va brutalement cesser de fonctionner. Les satellites possédant déjà un numéro NORAD compatible avec le TLE pourront continuer à être distribués et suivis de cette manière. La liste radioamateur de CelesTrak contient d’ailleurs toujours de nombreux satellites historiques sous cette forme.

Le problème concernera surtout les futurs satellites.

Nos logiciels de poursuite, scripts Python, Raspberry Pi et systèmes automatisés de commande de rotor devront progressivement apprendre à lire autre chose que deux lignes de 69 caractères.

Pour un développeur, accepter du CSV, JSON ou OMM est aujourd’hui beaucoup plus raisonnable que de construire un nouveau programme dépendant exclusivement du TLE.

La fin d’une époque, pas celle du suivi satellite

Le TLE aura rendu un service extraordinaire. Compact, universel et relativement simple à échanger, il est devenu un langage commun pour des générations de passionnés de satellites.

Mais l’espace autour de la Terre de 2026 n’est plus celui des années 1980.

Le franchissement des 100000 objets catalogués en juillet 2026 constitue donc un excellent symbole : ce n’est pas notre manière de calculer les orbites qui doit nécessairement disparaître, mais la vieille enveloppe de 69 caractères dans laquelle nous transportons leurs paramètres.

Pour les radioamateurs qui développent aujourd’hui leurs propres trackers, la recommandation devient donc simple :

prévoyez dès maintenant autre chose que le seul TLE.

Liens utiles

Comment WSJT-X arrive-t-il à décoder 30 stations FT8 presque simultanément ?

Banniere décodage FT4 - FT8

Sur une bande FT8 très fréquentée, le waterfall de WSJT-X peut être couvert de dizaines de traces. Pourtant, quelques instants plus tard, le logiciel affiche parfois 20, 30 messages ou davantage.

Comment un ordinateur peut-il séparer autant de stations qui émettent pratiquement au même moment, avec des signaux parfois extrêmement faibles et quelquefois superposés ?

On pourrait imaginer que WSJT-X utilise des dizaines de petits récepteurs numériques indépendants. La réalité est différente et beaucoup plus intéressante : le programme analyse toute la bande audio, recherche les signaux susceptibles d’être du FT8, tente de les décoder et peut même soustraire certains signaux déjà identifiés avant de recommencer son analyse.

Une seule bande audio pour des dizaines de stations

Lorsque le transceiver est réglé sur une fréquence FT8, il reçoit en réalité une bande de quelques kilohertz.

Un signal FT8 n’occupe qu’environ 50 Hz. De nombreuses stations peuvent donc se trouver simultanément dans la bande passante du récepteur.

Schema 1 FT8

Le logiciel ne reçoit donc pas 30 flux différents : toutes les stations sont présentes dans la même forme d’onde numérisée.

On peut comparer cela à une photographie : l’appareil enregistre toute la scène en une seule fois, puis le logiciel recherche les différents objets présents dans l’image.

Que reçoit réellement WSJT-X : de l’audio ou de l’I/Q ?

C’est un point qui prête souvent à confusion depuis la généralisation des SDR.

Dans une installation classique, WSJT-X ne reçoit pas directement un flux I/Q.

Le transceiver est généralement utilisé en USB. C’est lui qui effectue la conversion du signal RF vers une bande audio ou baseband. Cette bande est ensuite transmise à l’ordinateur par une interface audio, aujourd’hui très souvent intégrée au transceiver et reliée en USB.

Schema 2

Le programme travaille donc normalement sur une forme d’onde audio réelle échantillonnée numériquement.

C’est d’ailleurs pour cette raison que WSJT-X peut sauvegarder les périodes reçues sous forme de fichiers WAV et les redécoder ultérieurement.

Avec un SDR, on rencontre souvent une architecture différente :

Schema3 FT8

Les composantes I et Q conservent une représentation complexe du signal autour d’une fréquence centrale. Mais WSJT-X n’a pas besoin de recevoir directement ces données I/Q pour décoder simultanément de nombreuses stations FT8.

Première étape : trouver où sont les stations

WSJT-X ne commence pas par rechercher des indicatifs.

Il cherche d’abord les endroits de la bande audio où se trouve probablement un signal FT8.

Pour cela, le protocole possède une sorte de signature connue du logiciel : les séquences de synchronisation Costas.

Une transmission FT8 comprend 79 symboles :

Schema 4 FT8

La modulation FT8 utilise 8 tonalités espacées de 6,25 Hz, donnant au signal une largeur d’environ 50 Hz.

WSJT-X recherche ces motifs de synchronisation à de nombreuses fréquences et avec différents petits décalages temporels.

Il peut alors dresser une liste de candidats FT8.

Schema 5 FT8

À ce stade, le programme ne sait pas nécessairement ce que disent ces stations. Il sait essentiellement :

« À cette fréquence audio et avec ce décalage temporel, il existe probablement un signal FT8. »

30 stations ne signifient pas 30 récepteurs

C’est l’une des clés du système.

Une fois les candidats détectés, WSJT-X tente de décoder chacun d’eux.

30 stations dans une seule bande audio

Une bande audio FT8 très encombrée. WSJT-X reçoit simultanément toute la bande audio, ici de 0 à 3000 Hz, dans laquelle peuvent cohabiter plusieurs dizaines de signaux FT8 d’environ 50 Hz de largeur. Le logiciel repère ensuite les différents candidats selon leur fréquence et leur synchronisation temporelle avant de tenter leur décodage.

Pour chaque symbole, le programme analyse les huit tonalités possibles.

Mais il ne se contente pas d’une décision brutale du type :

« La tonalité n° 5 est la plus forte, donc c’est forcément elle. »

Le décodeur travaille avec des informations de vraisemblance. Une tonalité peut être très probable, une autre moins probable, etc.

Ces informations alimentent ensuite le puissant système de correction d’erreurs LDPC, pour Low-Density Parity-Check.

Le message FT8 comporte 77 bits d’information. Après ajout du CRC et du codage correcteur, le mot codé comporte 174 bits.

Cette importante redondance permet de reconstruire un message même lorsque certains symboles ont été fortement dégradés par le bruit ou les interférences.

Ainsi, avec 30 stations suffisamment séparées, le problème revient essentiellement à effectuer de nombreuses tentatives de décodage sur les candidats détectés dans la même bande audio.

Comment WSJT-x trouve et décode le FT8

Les principales étapes du décodage FT8 par WSJT-X. À partir de l’ensemble de la bande audio reçue, le logiciel recherche les séquences de synchronisation Costas, identifie les candidats, analyse leurs huit tonalités, puis utilise le décodage LDPC et le contrôle CRC pour valider les messages. Les signaux correctement décodés peuvent ensuite être reconstruits et soustraits de l’audio afin de permettre une nouvelle passe et de faire apparaître des stations jusque-là masquées.

Faut-il attendre 15 secondes avant de commencer le décodage ?

Non, et c’est un détail particulièrement intéressant.

On pourrait imaginer le fonctionnement suivant :

Schema 6 FT8

Ce serait cependant une perte de temps.

WSJT-X peut engager certains traitements avant même la fin complète de la période FT8.

Des étapes de décodage sont ainsi lancées vers la fin du créneau, une première pouvant commencer aux environs de 11,8 secondes, puis d’autres vers 13,5 et 14,7 secondes, selon le fonctionnement et la version du décodeur.

Le calcul informatique ne commence donc pas brutalement à la quinzième seconde : une partie du travail a déjà été engagée.

Schema 7 FT8

Combien de temps faut-il pour décoder 30 stations ?

Il n’existe pas de durée universelle du genre :

30 stations × 20 ms = 600 ms.

Le temps de calcul dépend de nombreux paramètres :

  • la puissance du processeur ;
  • le nombre de candidats détectés ;
  • la profondeur de décodage choisie ;
  • la qualité des signaux ;
  • le nombre de candidats difficiles ;
  • la quantité d’interférences ;
  • le nombre de passes nécessaires ;
  • les possibilités de parallélisation du processeur.

Surtout, les 30 candidats ne doivent pas obligatoirement être traités comme 30 gros calculs entièrement successifs.

Sur les versions modernes et avec un processeur multicœur, une partie du travail peut être parallélisée.

Voilà pourquoi, dans la pratique, plusieurs dizaines de messages semblent apparaître presque simultanément dans la fenêtre Band Activity.

Et si deux stations se chevauchent ?

C’est ici que le décodage devient particulièrement ingénieux.

Imaginons deux stations extrêmement proches :

Schema 8 FT8

La forme d’onde audio contient alors approximativement :

x(t) = A(t) + B(t) + bruit

La station B peut être partiellement masquée par A.

Mais imaginons que WSJT-X réussisse malgré tout à décoder A.

Il connaît maintenant le message exact envoyé par cette station.

Et c’est là que les choses deviennent particulièrement intéressantes.

Le logiciel peut reconstruire le signal qu’il vient de décoder

Puisque WSJT-X connaît désormais le message A, il connaît également la succession des symboles et tonalités FT8 que cette station a nécessairement émise.

Il peut donc reconstruire mathématiquement son signal.

Il ne suffit cependant pas de fabriquer un FT8 théorique et de le soustraire brutalement : le signal reçu a subi le canal radio et possède une certaine amplitude et une certaine phase.

Le logiciel estime donc ces caractéristiques afin de produire une représentation aussi proche que possible du signal A effectivement reçu.

Schema 9 FT8

Et voilà que B peut devenir décodable alors qu’elle ne l’était pas auparavant.

C’est le principe de la soustraction des signaux décodés, apparenté aux techniques de suppression successive d’interférences.

Et WSJT-X peut recommencer

C’est probablement le mécanisme le plus spectaculaire lorsque la bande FT8 est encombrée.

Imaginons plusieurs stations partiellement superposées :

Schema 10 FT8

Après une première passe, WSJT-X peut donc réexaminer une forme d’onde dont certains signaux correctement décodés ont été retirés.

Une station faible auparavant masquée peut alors devenir un candidat exploitable.

C’est pourquoi le nombre de messages affichés après une période FT8 ne correspond pas simplement au résultat d’une seule analyse spectrale.

Décoder - Soustraire - Recommecer

Décoder, soustraire, recommencer : comment une station faible peut émerger. Après avoir décodé une station FT8, WSJT-X peut reconstruire son signal en estimant notamment son amplitude et sa phase, puis le soustraire de l’audio reçu ; une nouvelle analyse peut alors révéler une station plus faible jusque-là masquée, et le processus peut être répété.

Le logiciel possède encore un autre avantage : le contexte

WSJT-X peut également utiliser ce que l’on appelle le décodage AP, pour a priori.

Pendant un QSO, certaines informations sont déjà connues.

Si vous êtes F4AAA et que vous échangez avec F1BBB, le logiciel connaît déjà ces deux indicatifs. Il sait également que les messages d’un QSO FT8 suivent des structures très précises.

Il ne cherche donc pas toujours n’importe quelle succession de 77 bits parmi toutes les possibilités imaginables.

Une comparaison très simplifiée permet de comprendre le principe.

Si un texte dégradé donne :

BONJ___

il est beaucoup plus facile de retrouver BONJOUR lorsque l’on connaît la langue et le contexte.

Le décodage AP applique une idée comparable, mais évidemment avec des méthodes mathématiques adaptées au protocole FT8.

Du signal reçu aux 30 indicatifs

Nous pouvons maintenant réunir toutes les opérations.

Schema 11 FT8

Le petit miracle qui se produit toutes les 15 secondes

Lorsque 30 lignes apparaissent presque simultanément dans Band Activity, l’ordinateur n’a donc pas simplement écouté 30 fréquences avec 30 récepteurs virtuels.

Il a reçu une seule forme d’onde audio contenant toutes les stations.

Dans cette forme d’onde, il a recherché les signatures caractéristiques du FT8, déterminé leurs positions en fréquence et dans le temps, évalué les huit tonalités de chaque symbole et soumis les informations obtenues au puissant décodeur LDPC.

Une partie de ces opérations peut déjà commencer avant la fin de la période de réception.

Pour les situations difficiles, le logiciel peut aller encore plus loin : reconstruire certains signaux correctement décodés, les soustraire de la forme d’onde reçue puis recommencer l’analyse sur ce qui reste.

Le tout doit être réalisé extrêmement rapidement, car le FT8 impose son rythme : 15 secondes plus tard, le créneau suivant est déjà là.

La véritable prouesse du FT8 n’est donc pas seulement de permettre de décoder des signaux que l’oreille humaine ne distingue pratiquement plus dans le bruit.

C’est aussi de parvenir à retrouver des dizaines de conversations différentes dans quelques kilohertz de spectre, pratiquement au même instant.

Un petit outil pour vérifier la consistance du Log de WSJT-X

wsjt-x

Confronté à l’impossibilité de télécharger mon log WSJT-X vers eQSL et QRZCQ, j’ai décidé de créer un petit outil capable de détecter les anomalies éventuelles dans le fichier.

Avec l’aide de ChatGPT, j’ai mis au point une macro Excel qui fait parfaitement le travail.

Vous trouverez la macro ainsi que le mode d’utilisation détaillé à l’adresse suivante :

https://www.f5kee.fr/check-log-wsjt-x/

Dans mon cas, cette méthode a permis d’identifier quatre erreurs dans mon fichier, que j’ai pu corriger facilement — et tout est rentré dans l’ordre !