
Dump1090 is a simple Mode S decoder for RTLSDR devices
Dump 1090 ist ein Mode-S-Decoder, der speziell für RTLSDR-Geräte entwickelt wurde.
Die Hauptfunktionen sind:
Während ich von Zeit zu Zeit noch Dinge in meinem Fork hinzufüge oder korrigiere, ziele ich auf einen minimalistischen Implementierungsansatz ab. Es gibt jedoch einen wesentlich funktionsreicheren Fork, der von MalcolmRobb entwickelt wurde.
Geben Sie "make" ein.
Um Verkehr direkt von Ihrem RTL-Gerät zu erfassen und auf der Standardausgabe anzuzeigen, führen Sie das Programm einfach ohne Optionen aus:
./dump1090
Um nur hexadezimale Nachrichten auszugeben:
./dump1090 --raw
Um das Programm im interaktiven Modus auszuführen:
./dump1090 --interactive
Um das Programm im interaktiven Modus mit Netzwerkunterstützung auszuführen und sich mit Ihrem Browser unter http://localhost:8080 zu verbinden, um den Live-Verkehr zu sehen:
./dump1090 --interactive --net
Im interaktiven Modus ist eine weniger informationsdichte, aber stärker im "Arcade-Stil" gehaltene Ausgabe möglich, bei der der Bildschirm jede Sekunde aktualisiert wird und alle kürzlich gesehenen Flugzeuge mit zusätzlichen Informationen wie Höhe und Flugnummer anzeigt, die aus den empfangenen Mode-S-Paketen extrahiert wurden.
Um Daten aus einer Datei zu dekodieren, verwenden Sie:
./dump1090 --ifile /path/to/binfile
Die Binärdatei sollte mit rtl_sdr wie folgt erstellt werden (oder mit einem anderen Programm, das 8-Bit-unsignierte IQ-Abtastwerte mit einer Abtastrate von 2 MHz ausgeben kann).
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
Im Beispiel wird eine Verstärkung von 50 verwendet; Sie sollten einfach die höchste für Ihren Tuner verfügbare Verstärkung nutzen. Dies ist beim Aufruf von Dump1090 selbst nicht erforderlich, da es die höchste unterstützte Verstärkung automatisch auswählen kann.
Es ist möglich, das Programm über die Standardeingabe mit Daten zu versorgen, indem die Option --ifile mit "-" als Argument verwendet wird.
Dump1090 kann mit anderen Befehlszeilenoptionen aufgerufen werden, um eine andere Verstärkung, Frequenz usw. einzustellen. Für eine Liste der Optionen verwenden Sie:
./dump1090 --help
Alles, was hier nicht dokumentiert ist, sollte offensichtlich sein, und für die meisten Benutzer ist es am besten, es ganz ohne Argumente aufzurufen.
Standardmäßig versucht Dump1090, Bitfehler mit der CRC-Prüfsumme zu korrigieren. Das Programm verwendet eine vorberechnete Syndromtabelle, um bis zu zwei Bitfehler in empfangenen Nachrichten schnell zu identifizieren und zu korrigieren.
Dies ist tatsächlich in der Lage, Fehler zu korrigieren und funktioniert meiner Erfahrung nach zuverlässig. Wenn Sie jedoch an sehr zuverlässigen Daten interessiert sind, empfehle ich, die Befehlszeilenoption --no-fix zu verwenden, um die Fehlerkorrektur zu deaktivieren.
Meiner begrenzten Erfahrung nach konnte Dump1090 eine große Anzahl von Nachrichten dekodieren, selbst unter Bedingungen, bei denen ich mit anderen Programmen Probleme hatte. Es wurden jedoch keine formellen Tests durchgeführt, sodass ich nicht wirklich behaupten kann, dass dieses Programm im Vergleich zu anderen ähnlichen Programmen besser oder schlechter ist.
Wenn Sie Verkehr erfassen können, den Dump1090 nicht richtig dekodieren kann, senden Sie mir bitte eine E-Mail mit einem Download-Link. Ich werde versuchen, die Erkennung in meiner Freizeit zu verbessern (dies ist nur ein Hobbyprojekt).
Dump1090 kann Bodenpositionsmeldungen (Typecode 5-8) dekodieren, die von Flugzeugen während des Aufenthalts am Boden (Rollen, Warten an Gates usw.) gesendet werden. Diese Meldungen enthalten die Position des Flugzeugs, die Bodengeschwindigkeit und die Spur über Grund.
Bodenpositionen verwenden eine andere Kodierung als Luftpositionen: Das CPR-Format (Compact Position Reporting) umfasst nur 90 Grad statt 360 und erfordert eine Referenzposition innerhalb von 45 Seemeilen für eine eindeutige Dekodierung.
Anstatt dass Sie den Standort Ihres Empfängers konfigurieren müssen, berechnet Dump1090 automatisch eine Referenzposition durch Mittelung aller erfolgreich dekodierten Luftpositionen. Dies funktioniert, weil Sie, wenn Sie Bodenverkehr von einem Flughafen empfangen können, mit ziemlicher Sicherheit auch Luftverkehr empfangen. Die gemittelte Position überfliegender Flugzeuge liefert eine Referenz, die nahe genug ist (weit innerhalb der 45-NM-Anforderung), um Bodenpositionen zu dekodieren.
Hinweis: Bodenpositionen werden erst angezeigt, wenn mindestens eine Luftposition erfolgreich dekodiert wurde, um die Referenz zu etablieren. Flugzeuge am Boden werden im interaktiven Display mit der Höhe 0 angezeigt.
Durch Aktivieren der Netzwerkunterstützung mit --net beginnt Dump1090, auf Clientverbindungen auf den Ports 30002 und 30001 zu lauschen (Sie können beide Ports bei Bedarf ändern, siehe --help-Ausgabe).
Verbundene Clients werden mit Daten versorgt, sobald sie vom Gerät (oder aus der Datei, falls --ifile verwendet wird) eintreffen, und zwar im Rohformat ähnlich dem folgenden:
*8D451E8B99019699C00B0A81F36E;
Jeder Eintrag wird durch einen einfachen Zeilenumbruch (LF-Zeichen, hex 0x0A) getrennt.
Port 30001 ist der Rohdateneingangsport und kann verwendet werden, um Dump1090 mit Daten im gleichen Format wie oben angegeben zu versorgen, wobei Hex-Nachrichten mit einem * beginnen und mit einem ; enden.
Wenn es also eine andere entfernte Dump1090-Instanz gibt, die Daten sammelt, ist es möglich, die Ausgabe zu einer lokalen Dump1090-Instanz zu summieren, etwa so:
nc remote-dump1090.example.net 30002 | nc localhost 30001
Es ist wichtig zu beachten, dass das, was über Port 30001 empfangen wird, auch an Clients weitergeleitet wird, die auf Port 30002 horchen.
Im Allgemeinen wird alles, was von Port 30001 empfangen wird, genau wie der normale Verkehr von RTL-Geräten oder aus einer Datei behandelt, wenn --ifile verwendet wird.
Es ist möglich, Dump1090 nur als Hub zu verwenden, indem --ifile mit /dev/zero als Argument verwendet wird, wie im folgenden Beispiel:
./dump1090 --net-only
Oder alternativ, um zu sehen, was auf dem Bildschirm passiert:
./dump1090 --net-only --interactive
Dann können Sie es aus verschiedenen Datenquellen aus dem Internet speisen.
Verbundene Clients werden mit Nachrichten im SBS1-Format (BaseStation) versorgt, ähnlich wie:
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
Dies kann verwendet werden, um Daten an verschiedene Sharing-Seiten zu liefern, ohne einen anderen Decoder verwenden zu müssen.
Mode-S-Nachrichten werden auf der Frequenz 1090 MHz gesendet. Wenn Sie eine anständige Antenne haben, können Sie Signale von Flugzeugen empfangen, die ziemlich weit von Ihrem Standort entfernt sind, insbesondere wenn Sie sich im Freien an einem Ort mit guter Himmelssicht befinden.
Sie können ganz einfach eine sehr günstige Antenne bauen, indem Sie den Anweisungen auf folgender Seite folgen:
http://antirez.com/news/46
Mit dieser einfachen Antenne konnte ich Signale von Flugzeugen empfangen, die über 200 km von mir entfernt waren.
Wenn Sie an einer ernsthafteren Antenne interessiert sind, sehen Sie sich die folgenden Ressourcen an:
Mit --aggressive kann der aggressive Modus aktiviert werden, eine modifizierte Version der Mode-S-Paketerkennung und -Dekodierung. Der aggressive Modus verwendet normalerweise mehr CPU (insbesondere wenn viele Flugzeuge DF17-Pakete senden), kann aber einige Nachrichten mehr erkennen.
Der Algorithmus im aggressiven Modus ist wie folgt modifiziert:
Die Verwendung des aggressiven Modus wird nur an Orten mit geringem Verkehrsaufkommen empfohlen, um die Chance zu haben, einige weitere Nachrichten zu erfassen.
Der Debug-Modus ist eine visuelle Hilfe, um den Erkennungsalgorithmus zu verbessern oder zu verstehen, warum das Programm bei einer bestimmten Eingabe nicht funktioniert.
In diesem Modus werden Nachrichten in einer grafischen ASCII-Art-Darstellung angezeigt, bei der die einzelnen mit 2 MHz abgetasteten Magnitudenbalken dargestellt werden.
Ein Index zeigt die Abtastnummer, wobei 0 die Abtastung ist, bei der der erste Mode-S-Peak gefunden wurde. Vor dem ersten Peak wird auch etwas zusätzliches Hintergrundrauschen hinzugefügt, um einen Kontext zu bieten.
Um den Debug-Modus zu aktivieren und zu überprüfen, welche Paketkombinationen Sie protokollieren können, verwenden Sie dump1090 --help, um eine Liste der verfügbaren Debug-Flags zu erhalten.
Der Debug-Modus enthält eine optionale JavaScript-Ausgabe, die zur Visualisierung von Paketen in einem Webbrowser verwendet wird. Sie können die Datei debug.html im Verzeichnis 'tools' verwenden, um die generierte frames.js-Datei zu laden.
Der Code ist sehr gut dokumentiert und so geschrieben, dass er leicht zu verstehen ist. Für den fleißigen Programmierer mit einer Mode-S-Spezifikation in der Hand sollte es trivial sein zu verstehen, wie er funktioniert.
Die von mir verwendeten Algorithmen wurden im Wesentlichen durch das Betrachten vieler Nachrichten gewonnen, die mit einem Wegwerf-SDL-Programm angezeigt wurden, und indem versucht wurde, den Algorithmus basierend auf dem grafischen Erscheinungsbild der Nachrichten zu modellieren.
Wenn Sie ein RTLSDR-Gerät haben und sich zufällig in einem Gebiet befinden, in dem Flugzeuge über Ihnen fliegen, führen Sie einfach das Programm aus und prüfen Sie auf Signale.
Wenn Sie jedoch kein RTLSDR-Gerät haben oder die Anzahl der Flugzeuge in Ihrer Gegend sehr begrenzt ist, können Sie die mit der Dump1090-Distribution im Verzeichnis "testfiles" mitgelieferte Beispieldatei ausprobieren.
Führen Sie es einfach so aus:
./dump1090 --ifile testfiles/modes1.bin
Es ist nur ein einfacher Filter, der rohe 8-Bit-IQ-Abtastwerte als Eingabe nimmt und eine Datei ausgibt, der alle Teile der Datei fehlen, in denen I und Q für mehr als 32 Abtastwerte unter dem angegebenen liegen.
Verwenden Sie es so:
cat big.bin | ./dump1090 --snip 25 > small.bin
Ich habe es verwendet, um eine kleine Testdatei zu erstellen, die in die Quellcodeverteilung dieses Programms aufgenommen werden soll.
Dump1090 wurde in der Weihnachtszeit 2012 in meiner Freizeit geschrieben. Es ist ein Hobbyprojekt, daher kann ich mich nur in meiner Freizeit mit Problemen befassen und Verbesserungen vornehmen. Sie werden jedoch ermutigt, Pull-Requests zu senden, um das Programm zu verbessern. Ein guter Ausgangspunkt kann die TODO-Liste sein, die in der Quellcodeverteilung enthalten ist.
Dump1090 wurde von Salvatore Sanfilippo [email protected] und den anderen Mitwirkenden geschrieben, die im Laufe der Zeit Patches eingereicht haben (für weitere Informationen siehe die Commit-Historie), und es wird unter der BSD-Drei-Klausel-Lizenz veröffentlicht.