ADS-B Empfänger, Decoder und KML-Server zur Visualisierung

Hier beschreibe ich mein Projekt, mit dem ADS-B-Signale empfangen, dekodiert und anschaulich dargestellt werden können.

Antenne

Testweise habe ich eine schnell gebastelte Ground-Plane-Antenne verwendet: ein λ/4 langen Kupferdraht und weitere vier entsprechend lange Radials an einen SMA-Stecker gelötet; fertig. Das Ergebnis funktioniert erstaunlich gut, so dass ich noch keinen Bedarf gesehen habe das Provisorium durch eine bessere Antenne zu ersetzen. Mit dieser Antenne und dem mini-ADS-B-Empfänger konnten immerhin Signale aus einer Entfernung von deutlich über 150 km fehlerfrei empfangen werden.

Empfänger

Als Empfänger dient der mini-ADS-B-Empfänger, der als Bausatz erhältlich war.

mini-ADS-B-Empfänger
Der mini-ADS-B-Empfänger für 1.090 GHz. Anstatt der vorgesehenen BNC-Buchse (für die ohnehin zu wenig Platz war) habe ich eine SMA-Buchse eingebaut.

Der Empfänger besteht im Wesentlichen aus einem SAW-Filter, einen MMIC-Verstärker, einem weiteren SAW-Filter und — last not least — dem logarithmischen Verstärker und AM-Detektor AD8313. Die logarithmische Charakteristik des AD8313 ermöglicht es, dass innerhalb von wenigen 10 µs verschiedene Aussendungen empfangen werden können, deren Intensität sich um einige Zehnerpotenzen unterscheiden.

Komparator mit adaptivem Schwellwert

Um die unterschiedlichen Impulsamplituden zuverlässig zu dekodieren, wird das Ausgangssignal des Detektors mit einem schnellen Komparator mit adaptiver Schwelle in ein Digitalsignal gewandelt. Der adapitive Schwellwert wird aus dem Mittelwert der oberen und unteren Hüllkurve des Signals gebildet (ähnlich wie in [1], p. 59, "50MHz Adaptive Threshold Trigger Circuit").

Decoder

Mikrocontroller-Lösung

Erste Versuche die empfangenen und digitalisierten Impulse auszuwerten habe ich mit einem Atmel ATtiny2313 Mikrocontroller unternommen, der mit 20 MHz getaktet wurde.
Damit konnte ich eine Abtastrate von 4 Msps erreichen, was gerade so ausreicht, um auf die 0.5 µs langen Impulse zu synchronisieren. Vermutlich wurde aber ein gewisser Anteil an Telegrammen, die eine ungünstige Phasenlage zum Abtasttakt haben, nicht fehlerfrei dekodiert.
Die Kommunikation zum Host-Rechner lief über RS232.
So lange die Daten zum Host-Rechner gesendet wurden, war der Controller "taub" für weitere Signale. Das ist keine unerhebliche Zeit, da das Senden zum Host-Rechner (mit 115200 Baud) ca. zehn mal länger dauert als das ursprüngliche Telegramm (1 Mbps).
Wie man sieht: Die Mikrocontroller-Lösung hat erhebliche Nachteile, war aber gut genug um herauszufinden, ob man mit den empfangenen Daten überhaupt etwas anfangen kann, und hat reale Daten geliefert, mit denen die zu entwickelnde Host-Software getestet werden konnte.

FPGA-Lösung

Später habe ich den Dekoder in einem FPGA realisiert. Dazu verwende ich das FPGA-Modul von elektor, das einen Xilinx FPGA X3S250 und einen Atmel USB-Mikrocontroller ATmega32U4 beinhaltet und die FPGA-Konfiguration auf einer micro-SD-Karte speichert.
Das FPGA wird für dieses Projekt mit nur 8 MHz getaktet. Das reicht vollkommen dafür aus um eine höhere Abtastrate als mit dem höher getakteten Mikrocontroller-basierten Prototyp zu realisieren. Außerdem wird zusätzlich die CRC-Prüfsumme im Decoder berechnet, nicht erst im Host-Rechner. Damit können die empfangenen Daten also schon im Dekoder auf Korrektheit überprüft werden, und müssen damit nur noch im Gutfall an den Host-Rechner übertragen werden.
Darüber hinaus bietet das Modul ein USB-Interface, das nicht nur zur Programmierung des FPGA genutz wird, sondern — nach entsprechender Anpassung der Firmware — auch zur schnellen Übertragung der Empfangsdaten zum Host-Rechner.

ADS-B-Decoder
ADS-B-Empfänger mit Komparator, FPGA und USB-Mikrocontroller.

Host-Software

Als letztes Glied in der Kette habe ich eine Host-Applikation entwickelt, um die decodierten Daten anschaulich darzustellen. Anstatt eine eigene Applikation mit grafischer Oberfläche zu entwickeln, habe ich den Ansatz verfolgt, Google-Earth als GUI zu verwenden und einen KML-Server zu entwickelt, der die ADS-B-Daten aufbereitet und im KML-Format über http Google-Earth zur Verfügung stellt.

Der Server liest die Telegramme vom USB-Interface und verarbeitet die Telegrame mit Identifikations- (Zuordnung der 24-bit ICAO-Nummer zu einem Rufzeichen) und Positionsdaten. Die Daten werden pro Flugzeug gesammelt und zu einer Trajektorie zusammengefügt und über http für entsprechende Clients, wie z.B. Google-Earth, bereitgestellt.

Darstellung der Trajektorien mit Google Earth
Screenshot der Darstellung der Trajektorien in Echtzeit mit Google Earth am 2014-01-01 um ca. 15:30 MEZ. Jeder vertikale Strich entspricht einem empfangenen Positions-Telegram. Die kleinen Kugeln am Ende der Trajektorien kennzeichnen die zuletzt empfangene Position. Daneben sind die Rufzeichen der jeweiligen Flugzeuge angegeben.

Ähnliche Projekte

URL EmpfängerDecoder
http://dl8wig.darc.de/adsb.html mini-ADS-BPIC-Mikrocontroller
http://www.lll.lu/~edward/edward/adsb/VerySimpleADSBreceiver.html TV-TunerAtmel-Mikrocontroller
http://www.sprut.de/electronic/pic/projekte/adsb/adsb_en.html mini-ADS-BPIC-Mikrocontroller
http://www.qsl.net/dl4mea/picadsb/picadsb.htm mini-ADS-BPIC-Mikrocontroller
http://www.qsl.net/dl4mea/fpgaadsb/fpgaadsb.htm integriertes Bestandteil des ProjektsAltera-FPGA

Referenzen

  • [1] Williams, Jim: "High Speed Amplifier Techniques. A Designer's Companion for Wideband Circuitry ", Linear Technology Application Note 47, 8, 1991.