
Dump1090 est un simple décodeur Mode S pour les périphériques RTLSDR.
Dump 1090 est un décodeur Mode S spécialement conçu pour les périphériques RTLSDR.
Les principales fonctionnalités sont :
Bien que j'ajoute ou corrige de temps en temps des choses dans mon fork, je vise un minimalisme de l'implémentation. Cependant, il existe un fork beaucoup plus complet disponible, développé par MalcolmRobb.
Tapez « make ».
Pour capturer le trafic directement depuis votre périphérique RTL et afficher le trafic capturé sur la sortie standard, exécutez simplement le programme sans aucune option :
./dump1090
Pour afficher uniquement les messages hexadécimaux :
./dump1090 --raw
Pour exécuter le programme en mode interactif :
./dump1090 --interactive
Pour exécuter le programme en mode interactif avec la prise en charge réseau et vous connecter avec votre navigateur à http://localhost:8080 afin de voir le trafic en direct :
./dump1090 --interactive --net
En mode interactif, il est possible d'obtenir une sortie moins dense en informations mais plus « style arcade », où l'écran est rafraîchi chaque seconde en affichant tous les aéronefs récemment vus avec quelques informations supplémentaires telles que l'altitude et le numéro de vol, extraites des paquets Mode S reçus.
Pour décoder des données depuis un fichier, utilisez :
./dump1090 --ifile /path/to/binfile
Le fichier binaire doit être créé avec rtl_sdr comme ceci (ou avec tout autre programme capable de générer des échantillons IQ non signés de 8 bits à un taux d'échantillonnage de 2Mhz).
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
Dans l'exemple, rtl_sdr utilise un gain de 50 ; vous devriez simplement utiliser le gain le plus élevé disponible pour votre tuner. Cela n'est pas nécessaire lors de l'appel de Dump1090 lui-même, car il est capable de sélectionner automatiquement le gain le plus élevé pris en charge.
Il est possible de fournir des données au programme via l'entrée standard en utilisant l'option --ifile avec « - » comme argument.
Dump1090 peut être appelé avec d'autres options de ligne de commande pour définir un gain, une fréquence différents, etc. Pour une liste des options, utilisez :
./dump1090 --help
Tout ce qui n'est pas documenté ici devrait être évident, et pour la plupart des utilisateurs, l'appeler sans aucun argument est la meilleure chose à faire.
Par défaut, Dump1090 tente de corriger les erreurs de bits à l'aide du checksum CRC. Le programme utilise une table de syndromes précalculée pour identifier et corriger rapidement jusqu'à deux erreurs de bits dans les messages reçus.
Cela permet effectivement de corriger les erreurs et fonctionne de manière fiable selon mon expérience. Cependant, si vous recherchez des données très fiables, je suggère d'utiliser l'option de ligne de commande --no-fix afin de désactiver la correction d'erreurs.
D'après mon expérience limitée, Dump1090 a été capable de décoder un grand nombre de messages, même dans des conditions où j'ai rencontré des problèmes avec d'autres programmes. Cependant, aucun test formel n'a été effectué, je ne peux donc pas vraiment affirmer que ce programme est meilleur ou pire que des programmes similaires.
Si vous parvenez à capturer un trafic que Dump1090 n'arrive pas à décoder correctement, envoyez-moi un e-mail avec un lien de téléchargement. Je pourrai essayer d'améliorer la détection pendant mon temps libre (ce n'est qu'un projet de loisir).
Dump1090 peut décoder les messages de position au sol (Type Code 5-8), qui sont transmis par les aéronefs lorsqu'ils sont au sol (roulage, attente aux portes, etc.). Ces messages incluent la position de l'aéronef, sa vitesse au sol et sa trajectoire au sol.
Les positions au sol utilisent un encodage différent de celui des positions en vol : le format CPR (Compact Position Reporting) ne couvre que 90 degrés au lieu de 360 et nécessite une position de référence à moins de 45 milles marins pour un décodage sans ambiguïté.
Au lieu de vous demander de configurer la position de votre récepteur, Dump1090 calcule automatiquement une position de référence en faisant la moyenne de toutes les positions en vol décodées avec succès. Cela fonctionne car si vous pouvez recevoir le trafic au sol d'un aéroport, vous recevez presque certainement aussi le trafic en vol. La position moyenne des aéronefs en survol fournit une référence suffisamment proche (bien dans l'exigence des 45 NM) pour décoder les positions au sol.
Remarque : les positions au sol ne seront affichées qu'après le décodage réussi d'au moins une position en vol pour établir la référence. Les aéronefs au sol apparaîtront avec une altitude de 0 dans l'affichage interactif.
En activant la prise en charge réseau avec --net, Dump1090 commence à écouter les connexions des clients sur les ports 30002 et 30001 (vous pouvez modifier les deux ports si vous le souhaitez, voir la sortie de --help).
Les clients connectés reçoivent les données dès qu'elles arrivent du périphérique (ou du fichier si --ifile est utilisé), dans un format brut similaire à celui-ci :
*8D451E8B99019699C00B0A81F36E;
Chaque entrée est séparée par un simple saut de ligne (caractère LF, hex 0x0A).
Le port 30001 est le port d'entrée brut et peut être utilisé pour fournir à Dump1090 des données au même format que celui spécifié ci-dessus, avec des messages hexadécimaux commençant par * et se terminant par ;.
Ainsi, par exemple, s'il existe une autre instance distante de Dump1090 collectant des données, il est possible de combiner la sortie avec une instance locale de Dump1090 en faisant quelque chose comme ceci :
nc remote-dump1090.example.net 30002 | nc localhost 30001
Il est important de noter que ce qui est reçu via le port 30001 est également diffusé aux clients qui écoutent sur le port 30002.
En général, tout ce qui est reçu depuis le port 30001 est traité exactement comme le trafic normal des périphériques RTL ou du fichier lorsque --ifile est utilisé.
Il est possible d'utiliser Dump1090 simplement comme un hub en utilisant --ifile avec /dev/zero comme argument, comme dans l'exemple suivant :
./dump1090 --net-only
Ou, alternativement, pour voir ce qui se passe à l'écran :
./dump1090 --net-only --interactive
Vous pouvez ensuite l'alimenter à partir de différentes sources de données sur Internet.
Les clients connectés reçoivent des messages au format SBS1 (BaseStation), similaires à :
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
Cela peut être utilisé pour fournir des données à divers sites de partage sans avoir besoin d'utiliser un autre décodeur.
Les messages Mode S sont transmis sur la fréquence 1090 Mhz. Si vous avez une antenne correcte, vous pourrez capter des signaux d'aéronefs assez loin de votre position, surtout si vous êtes à l'extérieur et dans un endroit avec une bonne vue sur le ciel.
Vous pouvez facilement construire une antenne très bon marché en suivant les instructions sur :
http://antirez.com/news/46
Avec cette antenne triviale, j'ai pu capter des signaux d'aéronefs à plus de 200+ Km de moi.
Si vous êtes intéressé par une antenne plus sérieuse, consultez les ressources suivantes :
Avec --aggressive, il est possible d'activer le mode agressif, une version modifiée de la détection et du décodage des paquets Mode S. Le mode agressif utilise généralement plus de CPU (surtout si de nombreux avions envoient des paquets DF17), mais peut détecter quelques messages supplémentaires.
L'algorithme en mode agressif est modifié de la manière suivante :
L'utilisation du mode agressif n'est conseillée que dans les endroits à faible trafic afin d'avoir une chance de capter quelques messages supplémentaires.
Le mode débogage est une aide visuelle pour améliorer l'algorithme de détection ou pour comprendre pourquoi le programme ne fonctionne pas pour une entrée donnée.
Dans ce mode, les messages sont affichés dans une représentation graphique de type art ASCII, où les barres de magnitude individuelles échantillonnées à 2Mhz sont affichées.
Un index affiche le numéro de l'échantillon, où 0 est l'échantillon où le premier pic Mode S a été trouvé. Un bruit de fond supplémentaire est également ajouté avant le premier pic pour fournir un contexte.
Pour activer le mode débogage et vérifier quelles combinaisons de paquets vous pouvez journaliser, utilisez dump1090 --help pour obtenir la liste des indicateurs de débogage disponibles.
Le mode débogage inclut une sortie javascript optionnelle utilisée pour visualiser les paquets dans un navigateur web ; vous pouvez utiliser le fichier debug.html dans le répertoire « tools » pour charger le fichier frames.js généré.
Le code est très documenté et écrit pour être facile à comprendre. Pour un programmeur appliqué ayant une spécification Mode S entre les mains, il devrait être trivial de comprendre comment il fonctionne.
Les algorithmes que j'ai utilisés ont été obtenus en observant essentiellement de nombreux messages affichés à l'aide d'un programme SDL jetable, et en essayant de modéliser l'algorithme en fonction de l'apparence graphique des messages.
Si vous avez un périphérique RTLSDR et que vous vous trouvez dans une zone où des aéronefs survolent votre tête, lancez simplement le programme et vérifiez les signaux.
Cependant, si vous n'avez pas de périphérique RTLSDR, ou si la présence d'aéronefs est très limitée dans votre région, vous pouvez essayer le fichier d'exemple distribué avec Dump1090 dans le répertoire « testfiles ».
Exécutez-le simplement comme ceci :
./dump1090 --ifile testfiles/modes1.bin
C'est simplement un filtre qui prend en entrée des échantillons IQ bruts de 8 bits et produit en sortie un fichier sans toutes les parties du fichier où I et Q sont inférieurs au spécifié pendant plus de 32 échantillons.
Utilisez-le comme ceci :
cat big.bin | ./dump1090 --snip 25 > small.bin
Je l'ai utilisé afin de créer un petit fichier de test à inclure dans la distribution du code source de ce programme.
Dump1090 a été écrit pendant mon temps libre à Noël 2012 ; c'est un projet de loisir, je ne pourrai donc traiter les problèmes et l'améliorer que pendant mon temps libre. Cependant, vous êtes encouragé à envoyer des pull requests afin d'améliorer le programme. Un bon point de départ peut être la liste TODO incluse dans la distribution des sources.
Dump1090 a été écrit par Salvatore Sanfilippo [email protected] et les autres contributeurs qui ont envoyé des correctifs au fil du temps (consultez l'historique des commits pour plus d'informations) et il est publié sous la licence BSD à trois clauses.