Fork me on GitHub

Project Notes

#352 Decoding ACARS

Decoding ACARS with rtl_acars_ng and a R820T2+RTL2832U dongle on MacOSX.



I’m playing with a cheap RTL-SDR Dongle and one of the signals I can pick up quite well are the Aircraft Communications Addressing and Reporting System (ACARS) transmissions from the air traffic around Singapore.

ACARS is a short message digital datalink protocol, and thus needs decoding.

I quickly found a promising open-source package to try: rtl_acars_ng

Compiling rtl_acars_ng

I’m running on MacOSX and use brew for package management. So it was this easy…

$ brew install rtl-sdr
$ git clone
$ cd rtl_acars_ng
$ make
gcc -o rtl_acars_ng rtl_acars_ng.c `pkg-config --cflags --libs librtlsdr libusb-1.0` -lpthread -lm -O2
36 warnings generated.

Command-line Options

$ ./rtl_acars_ng -h
rtl_acars_ng - decoding ACARS transmissions with RTL2832 based DVB-T receivers

Usage:  rtl_acars_ng -f freq [-options]
  -f frequency_to_tune_to [Hz]
   (use multiple -f for scanning, requires squelch)
   (ranges supported, -f 118M:137M:25k)
   (try 131.55M, 129.125M, 130.025M, or 130.425M)
  [-d device_index (default: 0)]
  [-g tuner_gain (default: automatic)]
  [-l squelch_level (default: 0/off)]
  [-o oversampling (default: 1, 4 recommended)]
  [-p ppm_error (default: 0)]
  [-r squelch debug mode ]
  [-t squelch_delay (default: 0)]
   (+values will mute/scan, -values will exit)
  [-D datasets_dir (default: ./datasets)]
  [-F enables Hamming FIR (default: off/square)

Finding ACARS

The Signal Identification Guide indicates I should expect it probaby at 131.550 MHz in my area.

With CubicSDR I found ACARS broadcasts centered around 131.546MHz


Trial Run

So firing up rtl_acars_ng instead .. success!!

$ ./rtl_acars_ng -f 131546000
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001
Using device 0: Generic RTL2832U OEM
Found Rafael Micro R820T tuner
Oversampling input by: 21x.
Oversampling output by: 1x.
Buffer size: 8.13ms
Tuned to 131798000 Hz.
Sampling at 1008000 Hz.
Output at 48000 Hz.
Exact sample rate is: 1008000.009613 Hz
Tuner gain set to automatic.

Loaded: 406995 aircrafts from dataset.....
Loaded: 7733 airports from dataset.....
Loaded: 110952 flights from dataset.....
Loaded: 365 ACARS message labels from dataset.....
Listening for ACARS traffic...


CRC: Correct
Timestamp: 28/10/2017 11:56
ACARS mode: 2
Message label: _ (ACK)
Aircraft reg: .9V-SFK, flight id: SQ7294
Aircraft: Boeing 747-412F
Registration: 9V-SFK
Mode-S ID: 76CCCB
Airline: Singapore Airlines Cargo

Block id: 52,  msg. no: S57A
Message content:-

[END_MESSAGE ]------------------------------------------------------------


Credits and References

Project Source on GitHub Project Gallery Return to the LEAP Catalog

This page is a web-friendly rendering of my project notes shared in the LEAP GitHub repository.

LEAP is just my personal collection of projects. Two main themes have emerged in recent years, sometimes combined:

  • electronics - usually involving an Arduino or other microprocessor in one way or another. Some are full-blown projects, while many are trivial breadboard experiments, intended to learn and explore something interesting
  • scale modelling - I caught the bug after deciding to build a Harrier during covid to demonstrate an electronic jet engine simulation. Let the fun begin..
To be honest, I haven't quite figured out if these two interests belong in the same GitHub repo or not. But for now - they are all here!

Projects are often inspired by things found wild on the net, or ideas from the many great electronics and scale modelling podcasts and YouTube channels. Feel free to borrow liberally, and if you spot any issues do let me know (or send a PR!). See the individual projects for credits where due.