Decodeur APRS avec Raspberry Pi 4 et RTL-SDR v4 Publié le 19 août 2026 - par

Tuto : Décodage APRS avec Raspberry Pi 4 et RTL-SDR

Transformer un Raspberry Pi 4 en station de réception radioamateur performante exige de la rigueur. Après avoir validé le fonctionnement de la clé RTL-SDR v4, ce nouveau dossier technique s’attaque au décodage des trames APRS (Automatic Packet Reporting System) sur la fréquence VHF 144.800 MHz. De l’optimisation du démodulateur GQRX au paramétrage du TNC Dire Wolf, découvrez étape par étape comment configurer un routage audio UDP sans faille en évitant les pièges de l’IPv6. Cet article aborde également un défi matériel majeur : la neutralisation du thermal throttling du processeur face à la charge intensive du DSP, une étape indispensable pour garantir la fiabilité de la station en continu.

Décoder le réseau APRS et le Packet Radio avec un Raspberry Pi 4 et un dongle RTL-SDR

L’APRS, c’est quoi exactement ?

Si, comme moi, vous avez récemment lu de la documentation sur les réseaux numériques (DMR, C4FM) parlant d’APRS, vous avez probablement été confronté à un jargon indigeste de passerelles internet et de serveurs distants. Oubliez tout cela un instant et revenons à la source, aux bases de la radio…

Source : https://www.gadget-talk.com/2023/08/01/easy-aprs/

L’APRS (Automatic Packet Reporting System) est un système de communication tactique inventé à la fin des années 80 par Bob Bruninga (WB4APR). Avant d’être une trace sur une carte Internet, l’APRS est fondamentalement une transmission radio numérique : c’est du Packet Radio. Pour moi qui suis un dinosaure de la radio, j’ai pratiqué le Packet Radio sur la région Bourgogne au siècle dernier…

D’un point de vue purement technique et physique, voici ce que vous entendez lorsque vous écoutez la fréquence unique européenne 144.800 MHz en VHF :

  • La modulation : Les données sont transmises sous forme de modulations audio (des salves très courtes et stridentes) en AFSK (Audio Frequency Shift Keying) à une vitesse de 1200 bauds (standard Bell 202).
  • Le protocole : L’information est encapsulée dans des trames de données respectant le protocole AX.25, la norme historique de transmission de données radioamateur.
  • Le TNC : Le décodage (réception) et l’encodage (émission) de ces trames audio en données numériques sont assurés par un Terminal Node Controller (TNC), qui peut être matériel (comme ce que j’ai utilisé sur ma station en 1990) ou purement logiciel (comme Dire Wolf que nous utiliserons sur notre Raspberry Pi).

À quoi servent ces salves de données ?

L’objectif de l’APRS n’est pas de transmettre de la voix, mais d’assurer un suivi tactique et de la télémétrie en temps réel sur une zone géographique. Une trame APRS permet de diffuser :

  • Des données de positionnement (Tracking) : Couplé à un récepteur GPS, un émetteur mobile (véhicule, randonneur, ballon-sonde) diffuse ses coordonnées exactes, sa vitesse et son cap.
  • De la télémétrie : Des stations météorologiques automatiques transmettent les relevés de vent, de température et de pression, ou l’état de charge des batteries d’un relais isolé.
  • De la messagerie courte : Le système permet d’échanger de brefs messages textuels de station à station, de manière autonome.

L’indépendance du réseau : Digipeaters et iGates

La grande force de l’APRS historique est de pouvoir fonctionner de manière totalement décentralisée, sans aucune connexion Internet ni réseau cellulaire. L’architecture radio repose sur deux types de stations automatiques :

  • Les Digipeaters : Ce sont des relais numériques situés sur des points hauts. Ils écoutent la fréquence 144.800 MHz, valident l’intégrité de la trame AX.25 reçue, et la réémettent immédiatement en RF pour étendre la couverture du signal.
  • Les iGates (Internet Gateways) : Ce sont des stations passerelles. Elles interceptent le trafic radio local et injectent les trames validées sur des serveurs mondiaux (le réseau APRS-IS). C’est grâce à ces iGates que vous pouvez visualiser l’activité radio de votre région sur des cartes web comme aprs.fi.

En résumé : sur la fréquence VHF 144.800 MHz, l’APRS est un réseau d’échange de données par paquets, robuste, décentralisé, et que l’on peut parfaitement intercepter et démoduler avec notre modeste dongle RTL-SDR connecté au Raspberry Pi 4.

APRS vs Meshtastic : Pareil ou pas ?

En observant ce schéma, les makers et les adeptes de réseaux décentralisés auront immédiatement une sensation de déjà-vu. Des nœuds radio qui répètent le signal, des stations qui font passerelle vers Internet… Cela ressemble à s’y méprendre à la topologie d’un réseau Meshtastic (LoRa). Alors, est-ce la même chose ?

Sur le plan de la philosophie et des usages, les similitudes sont effectivement frappantes :

  • Les fonctionnalités : Les deux systèmes permettent la transmission de coordonnées GPS (tracking), l’envoi de télémétrie locale et l’échange de messages textuels courts.
  • L’architecture maillée : Le rôle des Digipeaters de l’APRS est strictement identique à celui des nœuds Router ou Repeater sous Meshtastic : répéter le signal radio pour étendre la couverture.
  • Le pont Internet : Les iGates (Internet Gateways) de l’APRS remplissent exactement la même fonction que les nœuds Meshtastic configurés en passerelles MQTT vers Internet.

La grande différence : La réglementation et les fréquences

Si l’architecture se ressemble, la couche physique et surtout le cadre légal sont radicalement différents.

L’APRS (Le domaine des Radioamateurs) :

  • Licence obligatoire : L’APRS historique fonctionne sur la bande VHF (144.800 MHz en Europe). L’émission sur cette fréquence est strictement et exclusivement réservée aux radioamateurs brevetés. Il est formellement interdit d’y émettre sans posséder un indicatif officiel délivré par l’administration (l’ANFR en France).
  • Transparence totale : La réglementation radioamateur interdisant le chiffrement, toutes les trames APRS (AX.25) transitent en clair. Tout le monde peut lire vos messages.
  • Technologie : Modulation AFSK (1200 bauds), nécessitant des puissances d’émission souvent comprises entre 1 et 50 Watts pour couvrir de grandes distances.

Meshtastic (Le réseau ouvert à tous) :

  • Bande libre (ISM) : Meshtastic exploite les bandes de fréquences ISM (Industriel, Scientifique et Médical), notamment le 868 MHz en Europe. Aucune licence ou indicatif n’est requis. Tout citoyen peut déployer un nœud et émettre, à condition de respecter les limites de puissance (généralement 500 mW max) et le cycle d’utilisation (Duty Cycle).
  • Sécurité : Les communications sur Meshtastic peuvent être chiffrées de bout en bout (AES256).
  • Technologie : Modulation LoRa (Chirp Spread Spectrum), permettant d’atteindre des distances impressionnantes avec des puissances d’émission dérisoires (souvent moins de 100 mW), grâce à un bilan de liaison exceptionnel sous le plancher de bruit.

En résumé : l’APRS est le grand frère historique, robuste et normé, réservé aux opérateurs licenciés. Meshtastic en est l’évolution moderne et accessible à tous les makers, s’appuyant sur les bandes libres et la technologie LoRa.

Recevoir l’APRS sur Raspberry Pi avec le RTL-SDR v4

Réception d'une trame APRS sur Raspberry Pi 4 avec RTL-SDR v4

Réception d’une trame APRS sous GQRX. La flèche jaune désigne le « burst » de données.

Allez assez de bla-bla, on passe à à la pratique. Votre Raspberry Pi 4 est sur l’établi, le dongle RTL-SDR v4 est connecté et GQRX est lancé. On va configurer la chaîne de réception matérielle et logicielle pour recvoir parfaitement les trames de données avant de les router vers le décodeur logiciel.

Le paramétrage strict de GQRX

Pour démoduler correctement le protocole AFSK à 1200 bauds du Packet Radio, on commence par configurer l’étage de réception. Dans l’onglet Receiver Options (situé sur le panneau latéral droit), appliquez scrupuleusement ces réglages :

  • Fréquence (VFO) : Centrez la réception exactement sur 144.800 MHz, qui est la fréquence simplex unique allouée à l’APRS en Europe.
  • Mode de démodulation : Sélectionnez impérativement Narrow FM (NFM). L’APRS historique utilise la modulation de fréquence, et tout autre mode (comme l’AM) rendra le signal audio inexploitable par le modem logiciel.
  • Largeur de filtre (Filter width) : Choisissez Normal. Sur GQRX, ce préréglage offre une bande passante d’environ 10 à 12 kHz. C’est l’enveloppe parfaite pour laisser passer l’excursion de fréquence des deux tonalités de l’AFSK sans engouffrer le bruit parasite des canaux adjacents (le préréglage Narrow serait trop restrictif).
  • Contrôle automatique de gain (AGC) : Réglez-le sur Fast (Rapide). Les salves de données Packet Radio sont extrêmement brèves. Le récepteur doit donc adapter son gain instantanément à l’apparition soudaine de la porteuse pour éviter toute distorsion du signal.
  • Squelch (Silencieux) : Ajustez-le à l’oreille pour qu’il se referme juste au-dessus de votre plancher de bruit (noise floor), ou laissez-le complètement ouvert (vers -100 dBFS) si vous aimez le bruit de fond (moi ça me gonfle vite !). L’essentiel est de ne pas le régler trop haut pour ne pas amputer la première partie de la trame de données, ce qui la rendrait impossible à décoder.

Analyse spectrale visuelle et audio

Une fois vos paramètres verrouillés, observez la cascade (waterfall) au centre de votre écran. L’image en debut de ce chapitre illustre parfaitement le comportement d’une porteuse APRS sur l’analyseur de spectre.

La flèche jaune pointe directement sur une émission en cours : cette trace horizontale brillante et ponctuelle (un burst) représente une trame de données brute envoyée par un relais (Digipeater) ou une station mobile. À l’oreille, cette signature visuelle se traduit par un crépitement strident très caractéristique, similaire à la synchronisation d’un ancien modem analogique.

Enfin, regardez dans le coin inférieur droit de l’interface de GQRX. Vous y trouvez l’analyseur de spectre audio (le graphe FFT en bas à droite). Cet outil est utile pour valider la propreté de votre chaîne audio : il affiche la représentation fréquentielle du signal démodulé qui sort de GQRX. Lors de la réception d’une trame propre, vous y distinguerez les crêtes caractéristiques de l’AFSK. Il est indispensable de surveiller cet encart pour s’assurer que le signal ne sature pas (clipping) avant d’être injecté dans le logiciel de décodage, garantissant ainsi un taux de réussite optimal.

Décoder l’APRS avec Dire Wolf

Qu’est-ce que Dire Wolf et comment il fonctionne ?

Dire Wolf est un TNC (Terminal Node Controller) logiciel, souvent désigné sous le terme de « Soundcard TNC ». Historiquement, le décodage du Packet Radio nécessitait l’emploi d’un modem matériel dédié, connecté d’un côté à la radio et de l’autre au port série d’un ordinateur. Dire Wolf remplace l’intégralité de cette couche matérielle par des algorithmes de traitement du signal (DSP) extrêmement performants.

Il est spécifiquement optimisé pour exceller dans le décodage des signaux faibles, bruités ou légèrement distordus. Il prend en charge le protocole AX.25 et démodule parfaitement l’AFSK 1200 bauds utilisé par l’APRS sur 144.800 MHz. Dans notre configuration matérielle, Dire Wolf va s’exécuter en tâche de fond sur le Raspberry Pi 4. Il réceptionnera le flux audio continu fourni par le RTL-SDR via GQRX, l’analysera en temps réel, et affichera les trames de données interceptées en texte clair.

Installer Dire Wolf

L’avantage d’utiliser la distribution Raspberry Pi OS Bookworm est que Dire Wolf est désormais nativement présent et maintenu dans les dépôts officiels. L’installation est donc directe et ne nécessite pas de compilation complexe.

Ouvrez un terminal sur votre Raspberry Pi et lancez la commande d’installation (j’ai la manie de mettre systématiquement l’OS à jour avant une install) :

sudo apt update
sudo apt upgrade
sudo apt install direwolf -y

Décoder les trames APRS

Sous Linux, les serveurs audio (PulseAudio, PipeWire, ou ALSA pur) peuvent parfois se montrer capricieux lorsqu’il s’agit de créer des câbles virtuels de bouclage (loopback) entre applications. Pour assurer une fiabilité absolue à la station de réception, je préfère contourner la carte son virtuelle et utiliser un flux réseau local (UDP). GQRX va encoder l’audio en direct et l’envoyer sur un port réseau, que notre TNC Dire Wolf écoutera.

Le piège de l’IPv6 sous GQRX

Mettez GQRX en réception sur 144,800 MHz et cliquez sur le bouton UDP  dans la section Audio en bas à droite de l’écran GQRX.

Avant de relier les deux logiciels, il y a un détail technique majeur à corriger. Par défaut, certaines versions de GQRX routent leur flux UDP sur l’adresse locale en IPv6 (::1). Or, Dire Wolf écoute ce port en IPv4 (127.0.0.1). Résultat : les données sont envoyées, mais le décodeur ne reçoit rien. Le silence total.

Pour le vérifier, on sort l’analyseur réseau tcpdump en écoutant la boucle locale :

sudo tcpdump -i lo -n udp port 7355

On a bien un flux UDP sur l’adresse IPV6

Forcer le flux en IPv4

Par défaut GQRX utilise l’adresse localhost… en IPV6 ! Pour corriger ce comportement, rendez-vous dans la fenêtre Audio en bas à droite de l’interface GQRX. Ne vous contentez pas d’appuyer sur le bouton UDP. Cliquez sur le petit bouton avec les trois points ... situé tout à droite de la ligne.

Dans la fenêtre qui s’ouvre, modifiez le champ UDP Host : supprimez localhost (qui autorise l’IPv6) et forcez l’adresse IP stricte 127.0.0.1. Le port reste à 7355. Refermez la fenêtre et vérifiez que le bouton UDP est bien activé. Redémarrez GQRX pour prendre la modification en compte.

Une nouvelle vérification au sniffer réseau confirmera que le flux emprunte désormais la bonne pile protocolaire :

sudo tcpdump -i lo -n udp port 7355

Cette fois on a bien un flux UDP en IPV4 sur le port 7355.

Configuration du TNC Dire Wolf

Dans votre terminal, créez un fichier de configuration très minimaliste pour Dire Wolf :

nano direwolf.conf

Insérez-y les directives suivantes. Nous donnons l’ordre au DSP d’écouter le port réseau UDP, de ne rien transmettre en retour (null), et surtout, nous imposons un échantillonnage à 48 kHz pour synchroniser parfaitement l’horloge logicielle avec celle de l’encodeur GQRX (évitant ainsi tout problème avec le moteur audio) :

ADEVICE udp:7355 null
ARATE 48000

Sauvegardez (Ctrl+O, Entrée) et quittez l’éditeur (Ctrl+X).

Lancement et calibration audio

Assurez-vous d’être bien calé sur 144,800 MHz en NFM dans GQRX, avec le Squelch réglé de manière à laisser passer uniquement les salves de données. Démarrez le TNC avec l’argument de diagnostic audio (-d a) pour calibrer le niveau :

direwolf -c direwolf.conf -d a

Le terminal est désormais à l’écoute. À chaque trame interceptée, Dire Wolf vous affichera un niveau audio.

trames APRS reçues avec un Raspberry Pi 4 et un RTL-SDR v4

Ici le niveau audio est un peu trop élevé > 100

Rassurez-vous et ignorez cette alerte. Ne perdez pas de temps à chercher à baisser le volume dans GQRX : le curseur de gain de l’interface n’aura strictement aucun effet sur le flux UDP !

La raison technique est simple : GQRX envoie le flux audio sur le réseau UDP directement à la sortie de son démodulateur numérique (DSP), bien en amont de l’étage d’amplification de la carte son. En modulation NFM, l’amplitude de ce signal brut dépend uniquement de la déviation de fréquence du signal reçu.

Le moteur de décodage de Dire Wolf est extrêmement tolérant. Bien qu’il réclame un niveau idéal de 50, il est tout à fait capable de digérer des trames à 130 sans broncher. Le seul véritable danger pour le décodage est l’écrêtage du signal (clipping) qui déformerait la sinusoïde. Si vous voyez instantanément s’afficher sur votre écran les indicatifs radioamateurs (comme F1ZYG-3), les trames de télémétrie ou les positions GPS en clair, c’est que votre chaîne de réception est parfaite. La station est opérationnelle.

Alerte Température : Le piège du Thermal Throttling

Le traitement numérique du signal (DSP) et le calcul de la cascade spectrale sous GQRX sont extrêmement exigeants pour le matériel. Lors de mes essais, la charge CPU globale s’est maintenue entre 60 % et 70 %. Conséquence directe : dans le boîtier officiel du Raspberry Pi, la température du SoC BCM2711 a rapidement franchi le seuil des 80°C.

L’implication technique : À l’approche du plafond critique des 85°C, le contrôleur du Raspberry Pi déclenche une protection matérielle appelée thermal throttling (bridage thermique). Le processeur va réduire massivement sa fréquence d’horloge (underclocking) pour limiter la dissipation de chaleur. En pleine réception, cela se traduit par des saccades, des pertes d’échantillonnage I/Q, et des trames APRS impossibles à décoder par Dire Wolf.

L’ajout d’un simple radiateur passif s’est avéré largement insuffisant pour une charge soutenue. Pour garantir un fonctionnement H24, je vais procéder à la transplantation du Raspberry Pi 4 vers une solution de refroidissement actif. Mon choix s’est naturellement porté sur le boîtier Argon ONE (associé à un pad thermique haute conductivité), qui est dans mon tiroir et dont j’ai détaillé l’excellente conception dans cet article dédié sur Framboise314. Une fois ce transfert effectué, la température s’effondre et la station retrouve une stabilité parfaite.

Cliquez pour agrandir

Conclusion

Les précédents articles consacrés à l’exploitation de la clé RTL-SDR v4, d’abord sous Windows puis sur le Raspberry Pi 4, ont attiré une forte audience. Vous avez été particulièrement nombreux à réagir, à commenter et à suggérer de nouvelles pistes d’exploration radio.

Parmi toutes vos propositions, deux thématiques se sont détachées : la réception des images de satellites météo et le décodage du réseau APRS. Le choix de traiter l’APRS dans ce dossier répond à un impératif d’efficacité : c’est techniquement le protocole le plus simple et le plus rapide à mettre en œuvre pour valider une chaîne de réception SDR numérique.

La réalisation de ces tests a été grandement facilitée par la présence locale du digipeater F1ZYG-3. Installé au Mont Saint-Vincent (71), ce relais offre une couverture radio remarquable et fonctionne de manière irréprochable. Je tiens ici à remercier publiquement les gestionnaires de la FRASEL qui en assurent la maintenance technique avec une grande rigueur.

Préparez vos antennes, la réception des satellites météo fera très certainement l’objet d’un futur article d’un niveau technique supérieur. D’ici là, surveillez le refroidissement de votre Raspberry Pi, et bonnes écoutes !

Sources

Le WiKi de l’APRS mais j avous qu’après avoir lu « Principes et fonctionnement de l’APRS sur les réseaux digitaux » … je n’ai pas compris ce qu’était l’APRS ! Cette page ne définit pas l’APRS, elle explique comment l’encapsuler dans des réseaux vocaux numériques récents (DMR, C4FM). Cela s’adresse à des opérateurs qui connaissent déjà le système historique, pas à des débutants ! : https://www.franceaprs.net/doku.php?id=aide:principes_digitaux

https://www.franceaprs.net/doku.php?id=introduction:aprs_cest_quoihttps://github.com/wb2osz/direwolf

Direwolf – L’outil Essentiel

 

 

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

2 réflexions au sujet de « Tuto : Décodage APRS avec Raspberry Pi 4 et RTL-SDR »

  1. Obiclem

    Merci pour cette série d’articles: intéressante découverte et super effort pédagogique pour les débutants. A combien tombe la température en fonctionnement continu avec le boîtier?
    Impatient de suivre le tuto pour capter les émissions des satellites!

    Répondre ↓

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.