Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/mhostetter/gr-adsb

GNU Radio OOT module for demodulating and decoding ADS-B packets
https://github.com/mhostetter/gr-adsb

acas ads-b airspy bladerf dsp extended-squitter fis-b gnuradio hackrf mode-s sdr tis-b usrp wireless

Last synced: about 1 month ago
JSON representation

GNU Radio OOT module for demodulating and decoding ADS-B packets

Awesome Lists containing this project

README

        

# gr-adsb

A GNU Radio out-of-tree (OOT) module to demodulate and decode Automatic Dependent Surveillance Broadcast (ADS-B) messages.

### Clone for specific GNU Radio version

To clone the version of `gr-adsb` that is compatible with GNU Radio 3.10 (for example), run this command.

```bash
$ git clone -b maint-3.10 https://github.com/mhostetter/gr-adsb
```

## Features

* Supports many SDRs through GNU Radio and OsmoSDR (USRP, RTL-SDR, HackRF, BladeRF, etc)
* Supports various sample rates (2 Msps, 4 Msps, 6 Msps, etc). NOTE: Currently the sample rate must be an integer multiple of twice the symbol rate (2 Msym/s)
* Decoding of messages:
* DF 0: Short Air-Air Surveillance (ACAS)
* DF 4: Surveillance Altitude Reply
* DF 5: Surveillance Identity Reply
* DF 11: All-Call Reply
* DF 16: Long Air-Air Surveillance (ACAS)
* DF 17: ADS-B Extended Squitter
* DF 18: CF=0,1,6 ADS-B Extended Squitter from Non-Mode S Transponders
* DF 19: AF=0 Military ADS-B Extended Squitter
* DF 20: Comm-B Altitude Reply
* DF 21: Comm-B Identity Reply
* "Brief" stdout printing
* "Verbose" stdout printing

## Usage

### GNU Radio

There is an example GNU Radio Companion (`.grc`) flowgraph located at `gr-adsb/examples/adsb_rx.grc`. To use it, first open GNU Radio Companion `$ gnuradio-companion` and then open the `.grc` file.

![ADS-B Receiver Flowgraph](https://github.com/mhostetter/gr-adsb/blob/master/docs/adsb_rx.png)

Example "Brief" output:


Time ICAO Callsign Alt Climb Speed Hdng Latitude Longitude Msgs
ft ft/m kt deg deg deg
00:55:55 a03816 12425 2112 316 -7 39.0346566 -76.8112793 10
00:55:55 aa7df3 SWA398 1950 -128 167 11 39.1743622 -76.8109131 28
00:55:55 abb19c SWA513 16050 2112 386 -148 39.1567166 -77.2299194 28
80:55:55 a4fbb4 AWI4868 17125 1152 361 -23 38.9627838 -76.7352627 66
00:55:55 a8ab3c 36975 -3008 472 48 4
30:55:55 a34729 DAL1299 13100 3968 338 169 39.2229767 -77.1123206 70
10:55:55 a9b088 AAL9616 9000 -768 276 -133 39.0424347 -76.8132417 28
30:55:55 a24031 9925 -64 288 -63 39.2082964 -76.6861572 25
00:55:55 a01f73 12975 2240 339 -47 39.0163879 -76.8472754 38

Example "Verbose" Output:


[INFO] ----------------------------------------------------------------------
[INFO] Datetime: 2019-07-31 00:43:30.944816 UTC
[INFO] SNR: 19.90 dB
[INFO] Downlink Format (DF): 0 Short Air-Air Surveillance (ACAS)
[INFO] CRC: Passed Recognized AA from AP
[INFO] Address Announced (AA): ac53a4
[INFO] Callsign: EDV5271
[INFO] Vertical Status (VS): 0 In Air
[INFO] Reply Information (RI): 3 Reserved for ACAS
[INFO] Altitude: 7025 ft
[INFO] Crosslink Capability (CC): Does Support Crosslink Capability
[INFO] ----------------------------------------------------------------------
[INFO] Datetime: 2019-07-31 00:43:32.114965 UTC
[INFO] SNR: 21.85 dB
[INFO] Downlink Format (DF): 4 Surveillance Altitude Reply
[INFO] CRC: Passed Recognized AA from AP
[INFO] Address Announced (AA): ac53a4
[INFO] Callsign: EDV5271
[INFO] Flight Status (FS): 0 No Alert, No SPI, In Air
[INFO] Downlink Request (DR): 0 No Downlink Request
[INFO] IIS: 0
[INFO] IDS: 0 No Information
[INFO] Altitude: 7075 ft
[INFO] ----------------------------------------------------------------------
[INFO] Datetime: 2019-07-31 00:43:36.695273 UTC
[INFO] SNR: 22.41 dB
[INFO] Downlink Format (DF): 11 All-Call Reply
[INFO] CRC: Passed
[INFO] Capability (CA): 5 Level 2 or Above Transponder, Can Set CA 7, In Air
[INFO] Address Announced (AA): ac53a4
[INFO] Callsign: EDV5271
[INFO] ----------------------------------------------------------------------
[INFO] Datetime: 2019-07-31 00:43:37.784807 UTC
[INFO] SNR: 21.87 dB
[INFO] Downlink Format (DF): 17 Extended Squitter
[INFO] CRC: Passed
[INFO] Capability (CA): 5 Level 2 or Above Transponder, Can Set CA 7, In Air
[INFO] Address Announced (AA): ac53a4
[INFO] Callsign: EDV5271
[INFO] Type Code (TC): 19 Airborne Velocity
[INFO] Subtype (ST): 1 Ground Velocity
[INFO] Intent Change (IC): 1 No Change in Intent
[INFO] Speed: 267 kt
[INFO] Heading: 173 deg (W)
[INFO] Climb: 2816 ft/min
[INFO] Climb Source: 0 Geometric Source (GNSS or INS)
[INFO] ----------------------------------------------------------------------
[INFO] Datetime: 2019-07-31 00:43:40.305197 UTC
[INFO] SNR: 24.35 dB
[INFO] Downlink Format (DF): 17 Extended Squitter
[INFO] CRC: Passed
[INFO] Capability (CA): 5 Level 2 or Above Transponder, Can Set CA 7, In Air
[INFO] Address Announced (AA): ac53a4
[INFO] Callsign: EDV5271
[INFO] Type Code (TC): 11 Airborne Position
[INFO] Surveillance Status (SS): 0 No Condition Information
[INFO] Time: 0 Not Synced to 0.2s UTC Epoch
[INFO] Latitude: 39.20978610798464 N
[INFO] Longitude: -76.8250732421875 E
[INFO] Altitude: 7450 ft

### Webserver

To view the decoded planes and flight paths live in Google Maps, a webserver is included. The webserver can be started before or after the GRC flowgraph, but the webserver must be running to view the Google Maps webpage. The ZeroMQ block in the example flowgraph is required when using the webserver. Before running the webserver, be sure to install its [dependencies](#webserver-dependencies).

1. Open a terminal
2. `$ cd gr-adsb/`
3. `$ cd web/`
4. `$ ./webserver.py` or `$ python3 webserver.py`
5. Open a web browser
6. Browse to `localhost:5000`

![Example Google Maps Webpage](https://github.com/mhostetter/gr-adsb/blob/master/docs/adsb_google_maps.png)

### SQLite Playback

Users can optionally record demodulated bursts to a SQLite database for storing or later replaying. This option depends on my other project [gr-sqlite](https://github.com/mhostetter/gr-sqlite). Follow these [instructions](https://github.com/mhostetter/gr-sqlite#installation) to install `gr-sqlite`.

To record bursts, enable the SQLite Sink in the `adsb_rx.grc` flowgraph. To replay those demodulated bursts later, run the `adsb_playback.grc` flowgraph.

![ADS-B Playback Flowgraph](https://github.com/mhostetter/gr-adsb/blob/master/docs/adsb_playback.png)

## Installation

GNU Radio is a dependency for `gr-adsb`. I recommend installing it with [PyBOMBS](https://github.com/gnuradio/pybombs).

### Source Build

Build `gr-adsb` manually from source using the following procedure.

Python dependencies:

```bash
$ pip3 install --user colorama
```

Source build:

```bash
$ cd gr-adsb/
$ mkdir build
$ cd build/
$ cmake ../ # or cmake -DCMAKE_INSTALL_PREFIX= ../
$ make
$ sudo make install
$ sudo ldconfig
```

### Webserver Dependencies

If using the built-in Google Maps webserver, you'll need to install the following Python packages.

```bash
$ pip3 install --user zmq
$ pip3 install --user flask
$ pip3 install --user flask-socketio
$ pip3 install --user gevent
$ pip3 install --user gevent-websocket
```