ADSB# – A simple and cheap ADS-B receiver using RTL-SDR

ADS-B, an acronym for Automatic Dependent Surveillance-Broadcast is a technology that allows tracking aircrafts using high speed radio transmissions. I have never had much interest in this technology until recently. While I was fiddling with this mode with Ian, we discovered a very simple way of demodulating this digital mode using the cheap DVB-T/FM (rtlsdr) dongles. This diagram explains how it works:

Simple ADS-B Demodulator

The final application, ADSB# (read ADSB-Sharp) is released under the MIT license and looks a bit like this:

ADSB#

The executable can be downloaded here. The sources are also available here.
Henry Forte also wrote a nice documentation to get started. You can view it here.
Configure your plotting software to use 127.0.0.1:47806 in AVR format.
I’m working with Osmocom on a C port of this POC application. Check Keen’s git repository.
There’s also another version by Salvatore Sanfilippo that uses the same decoding method developed in the latest versions of adsb#. Have a look on it here. Very promising so far!
More on this later…

107 thoughts on “ADSB# – A simple and cheap ADS-B receiver using RTL-SDR

  1. Pingback: ADSB Aircraft RADAR with RTL-SDR | rtl-sdr.comrtl-sdr.com

  2. i have manged to get sdrsharp a et4000 dongle and the hamitup rf converter to work. i packaged it into a die cast off the shelf enclosure. i am writing a short cookbook with pictures as to how to get it to work without the hair pulling i experienced along the way (maybe some other hair pulling but not the dead ends i went down) where should i post this in the blog so it will do the most good?

    gerry@moersdorf.com

  3. Pingback: SonicGoose.com

  4. Version 1.0.11.1 is much faster than version 1.0.00.0. However, the posted source code is for version 1.0.00.0. Can you post the source code for version 1.0.11.1?

    • The source code in the zip is sync’ed with svn. The only difference is the version number in the AssemblyInfo.cs file. That number is generated automatically by the build.

      • I must be doing something wrong then. I see much better performance from the posted binary than I do from an executable built from the posted source code. Also, when I run the binary through a decompiler, I see a different version of ReadData. It changed from ‘void ReadData()’ to ‘bool ReadData(int)’. The decompiled source if difficult to read, but it looks like the new version in the binary is doing a different form of phase correction, which would explain the better performance.

  5. Neat program!!!

    I’ve used it with 3 dongles (R820T, FC0013, & E4000) and adsbSCOPE with no problems. 2 of my dongles require a Frequency Correction value of 57/58 to work well and the 3rd requires a value of 11. It would be nice if ADSB# retained the Frequency Correction value.

    Thanks!

    • I have several E4000 and R820 dongles and I notice the E4000 units have a significant I/Q imbalance spike in the middle of the spectrum display. Is there any way to tune that out with software? The control provided does not do much good…
      Thanks…
      Bill Beamon
      KD4FNC

  6. Pingback: Decoding ADS-B Aircraft Transponders: An SDR for $17 | Aerospace Blog

  7. I updated to 1.0.11.1. After that frame rate went up to 100 times :) but Number of plane tracked dropped badly. I see few planes once in a while but not like earlier versions.

    Please fix. Also please keep older versions also for downloads. Zip files can come with versions number in names so that they can be archived.

    Please help :)

  8. Pingback: Decoding ADS-B Aircraft Transponders: An SDR for $17 – The R820T USB RTL-SDR DVB-T Dongle – Part 3 | RadioHobbyist.org

  9. Hi, I’d like 1 feature request.
    I currently run my USB dongle in a Linux machine in my shed(has my antennas connected nicely) and I share it on my LAN via the `rtl_tcp’ program out onto my LAN network. (Works nice with SDR# software via TCP mode).
    I notice that the ADSB# program requires the dongle to be local to the machine. Could some of the SDR# code be transplanted into ADSB# with the option to select a TCP connection instead of local..
    Regards
    Greg / VK3JIY

    • …and if you’re looking around the RTL_TCP stuff in SDR#, can you add “switch to direct sampling mode”? We talked about in ##RTLSDR a few days ago ;)

      Thank you very much, dear Youssef.

Leave a Reply