En mer, le « Mayday » à la voix n’est plus le premier réflexe. Les radios VHF marines modernes ont un bouton de détresse, souvent rouge et protégé par un clapet. Un appui long, et la radio envoie en une demi-seconde un message numérique sur une fréquence réservée, le canal 70 (156,525 MHz) : qui appelle (son numéro d’identité, le MMSI), la nature de la détresse (naufrage, incendie, homme à la mer…), l’heure et la position GPS. Toutes les radios et les stations côtières à portée l’affichent et sonnent.
Ce système s’appelle l’appel sélectif numérique, ASN en français, DSC en anglais (Digital Selective Calling). Cette semaine, j’ai écrit une application qui permet au talkie-walkie Quansheng UV-K1 (lien affilié) de recevoir et d’afficher ces appels. En réception seulement : une radio de radioamateur n’a rien à faire en émission sur le canal 70.
D’où vient l’idée
Le firmware alternatif d’Armel, F4HWN, accepte de petites applications installées dans la radio. Armel avait écrit ATIS RX, qui décode l’ATIS : l’identification automatique que les bateaux de navigation intérieure envoient sur les canaux de travail des fleuves, à la fin de chaque émission.
Or l’ATIS n’est qu’un cas particulier de l’ASN. Même modulation (deux tonalités, 1 300 et 2 100 Hz, à 1 200 bauds), même code, même façon d’envoyer chaque caractère deux fois à quelques instants d’écart pour résister aux parasites. Seul le contenu change : l’ATIS est un message court de format fixe, l’ASN du canal 70 un message de longueur variable, qui porte bien plus d’informations.
J’ai donc repris tel quel le récepteur d’ATIS RX, et écrit la partie qui lit les appels du canal 70. C’est pour ça que l’application s’appelle ATIS DSC RX : elle est la petite sœur d’ATIS RX.
Ce que l’application affiche
Pour un accusé de réception de détresse, par exemple :
DISTRESS ACK 3
002275300 France
TO ALL SHIPS
MAYDAY 227006480
SINKING 14:35
43 18N 005 22E
-73dBm heard 1 last 00m12
On lit, de haut en bas : le type d’appel, la station qui l’envoie (ici une station côtière) et son pays, le destinataire, le bateau en détresse, la nature (« sinking », naufrage) et l’heure, la position en degrés et minutes, puis le niveau du signal.
L’application reconnaît la détresse, son accusé de réception et son relais, l’urgence, la sécurité, les appels de routine et les appels de test. Une nouvelle détresse ou urgence déclenche une alerte : l’écran s’inverse, la LED verte clignote et la radio bipe, trois fois, même haut-parleur coupé. Les six derniers appels sont gardés, et les flèches permettent de les parcourir.
Le pays est déduit des trois premiers chiffres du MMSI. La table n’en contient qu’une soixantaine (les côtes européennes et les principaux pavillons de complaisance) et a été saisie de mémoire : les neuf chiffres du MMSI, eux, sont toujours exacts.
La règle d’or : jamais d’émission sur le canal 70
Pour tester un récepteur d’appels de détresse, il faut des appels de détresse. Mais envoyer un faux appel sur le canal 70 est une infraction, et surtout cela peut mobiliser les secours pour rien.
Le banc d’essai fabrique donc des appels sur une fréquence de la bande radioamateur (433,650 MHz), que la radio écoute à la place du canal 70. Deux émetteurs :
- un Flipper Zero, avec sept fichiers d’appels (détresse avec et sans position, accusé, urgence, sécurité, routine, test) et un huitième volontairement corrompu, que l’application doit ignorer ;
- un LimeSDR, une radio logicielle qui produit un signal propre, plus proche d’une vraie radio marine que les signaux carrés du Flipper.
Tous les MMSI des fichiers de test sont inventés.
Le mystère des appels perdus
Sur l’ordinateur, tout allait bien. Le modèle de réception décodait tous les appels, même avec du bruit, un décalage de fréquence ou une horloge imprécise. Et le code de l’application, compilé et testé sur l’ordinateur, aussi.
Sur la radio, il fallait quatre ou cinq envois pour décoder un appel.
J’ai procédé par élimination, une hypothèse à la fois, chacune vérifiée avant de passer à la suivante :
- le Flipper ? Le LimeSDR, en réception, a montré des trames parfaites au bit près. Seule surprise : le Flipper module deux fois plus fort qu’une radio marine. Hors de cause ;
- le clavier et l’écran, qui interrompent l’écoute ? Simulé sur l’ordinateur : pas la cause ;
- le processeur trop lent ? Mesuré : il lui reste de la marge à chaque échantillon. Pas la cause ;
- la mémoire ? Mesurée aussi : largement suffisante.
Restait à regarder ce que la radio entendait vraiment. Une version de diagnostic a enregistré les échantillons audio réels pendant un appel, puis les a affichés à l’écran. Un petit outil sur l’ordinateur, qui lit l’écran de la radio par USB, les a récupérés.
La réponse était là. Pour décider si chaque bit est un 0 ou un 1, le récepteur compare la force des deux tonalités, avec trois « juges » plus ou moins sévères, et garde l’avis de celui qui trouve un message valide. Sur l’audio réel de l’UV-K1, la tonalité haute arrive un peu plus faible que prévu. Résultat : un seul des trois juges se trompait rarement (98 à 99 % de bits justes), les deux autres beaucoup (60 à 78 %). Le décodeur reposait sur un seul juge, et perdait quatre appels sur dix.
Le modèle de l’ordinateur ne pouvait pas le voir : ses filtres sont parfaits, ceux de la radio non. J’ai donc recalé les trois juges sur six enregistrements réels, à différents niveaux de modulation. Avec les nouveaux réglages, tous gardent 99,5 à 100 % de bits justes.
Sur la radio, avec le LimeSDR : 10 appels de détresse décodés sur 10, à chacun des trois niveaux de modulation testés.
ATIS RX, l’application d’Armel, partageait le même récepteur et donc le même défaut sur l’UV-K1. Le même correctif lui a été appliqué, et Armel l’a intégré le même jour.
Comment l’utiliser
- Un firmware F4HWN récent (édition Labs ou Fusion_) et l’application ATIS DSC RX installée.
- Le VFO de la radio sur 156,525 MHz, en FM.
- On lance ATIS DSC RX.
WAITs’affiche jusqu’au premier appel.
| Touche | Action |
|---|---|
| Haut / Bas | Appel plus récent / plus ancien (six gardés) |
| 1 | Haut-parleur (coupé par défaut) |
| 2 | Effacer la liste |
| EXIT | Quitter |
L’application tient dans 3 656 octets, sur les 4 096 d’une application.
Les limites
- Pas encore d’essai sur un vrai appel du canal 70. Tous les essais ont été faits au banc, sur 433,650 MHz. Les appels de test et de routine qu’envoient régulièrement les stations côtières seront le prochain essai.
- La table des pays est à vérifier contre la liste officielle de l’UIT.
- Les messages d’extension récents (position plus précise) sont ignorés pour l’instant.
- C’est un outil d’écoute et d’apprentissage. Il ne remplace en rien une radio marine homologuée, ni la veille des CROSS.
Ce que je retiens
Le modèle ne suffit pas. Tout passait sur l’ordinateur, et la radio perdait quatre appels sur dix. Seule la mesure du signal réel, dans la radio, a donné la cause.
Éliminer une hypothèse à la fois. Le Flipper, le clavier, le processeur, la mémoire : chaque piste a été mesurée avant d’être écartée. C’est plus long sur le moment, et beaucoup plus court au total.
Un correctif peut servir aux autres. Le défaut trouvé sur la nouvelle application existait déjà dans celle d’Armel. Il est corrigé dans les deux.
Pour aller plus loin
- La radio, Quansheng UV-K1 (lien affilié Amazon) : voir sur Amazon
- La contribution ATIS DSC RX : PR #703 sur le dépôt d’Armel, et le correctif d’ATIS RX : PR #707
- Le firmware d’Armel F4HWN : github.com/armel/uv-k1-k5v3-firmware-custom
- La norme de l’ASN : recommandation UIT-R M.493
Johan Denoyer, F4WAT
Les liens vers Amazon sont des liens affiliés : si vous achetez par leur intermédiaire, je touche une petite commission, sans surcoût pour vous. En tant que Partenaire Amazon, je réalise un bénéfice sur les achats remplissant les conditions requises.
Leave a Comment