Dumphfdl is a multichannel HFDL (High Frequency Data Link) decoder

Anyone heard of this already or have it in use?

6 Likes

Apparently Planeplotter displays HFDL from the decoder PC-HFDL

1 Like

I stumbled across a Facebook post where the data from it was shown on a Virtual Radar Instance

1 Like

Me to interesting …

1 Like

It is a great start for this kind of Linux decoder. I use it a few days now. Here is an actual screenshot of 13MHz receiption.

Little bit tricky because you have to use different bands at different times. I am still learning.

And be careful you don’t get high message rates. As this screenshot are man aircraft with just one position.

2 Likes

It’s from the same guy who gave us rtl_airband awesomeness! dumphfdl: A Multichannel HFDL Decoder for SDR

2 Likes

https://dk8ok.org/2016/10/12/pc-hfdl-display-how-to-receive-decode-and-analyze-the-biggest-net-on-hf/

Saturday playtime. Dumphfdl works pretty well with an Airspy HF+ and a poorly mounted YouLoop antenna. Now I can say my range is 2000 nmi. :rofl:

The antenna is positioned at the moment to catch the New York hfdl ground station. San Francisco ground station also comes in, maybe through the mesh/network, even though it’s pretty much in the loop antenna null zone.

chrome_P4lHPukQPX

Samples of what gets decoded

[2021-10-30 19:36:48 PDT] [6559.0 kHz] [-5.2 Hz] [300 bps] [S]
Downlink LPDU:
 Src AC: 234
 Dst GS: San Francisco, California
 Type: Unnumbered data
 Performance data:
  Version: 18
  Flight ID: CCA602
  Lat: 49.6105759
  Lon: -131.3452365
  Time: 02:36:44
  Flight leg: 165
  GS ID: San Francisco, California
  Frequency: 5508.0
  Frequency search count:
   This leg: 0
   Prev leg: 7
  HFDL disabled duration:
   This leg: 312 sec
   Prev leg: 9078 sec
  MPDUs received             : 300 bps:  28   600 bps:   1   1200 bps:   0   1800 bps:   0
  MPDUs received with errors : 300 bps:   0   600 bps:   0   1200 bps:   0   1800 bps:   0
  MPDUs transmitted          : 300 bps:   6   600 bps:   0   1200 bps:   0   1800 bps:   0
  MPDUs delivered            : 300 bps:   5   600 bps:   0   1200 bps:   0   1800 bps:   0
  SPDUs received: 65
  SPDUs missed: 0
  Last frequency change cause: 7 (No change)

[2021-10-30 19:12:45 PDT] [6661.0 kHz] [-4.7 Hz] [300 bps] [S]
Downlink LPDU:
 Src AC: 142
 Dst GS: Riverhead, New York
 Type: Unnumbered data
 Performance data:
  Version: 18
  Flight ID: FDX12
  Lat: 48.4944315
  Lon: -101.5969498
  Time: 02:12:40
  Flight leg: 250
  GS ID: Riverhead, New York
  Frequency: 5652.0
  Frequency search count:
   This leg: 0
   Prev leg: 0
  HFDL disabled duration:
   This leg: 270 sec
   Prev leg: 16934 sec
  MPDUs received             : 300 bps:  25   600 bps:   4   1200 bps:   0   1800 bps:   0
  MPDUs received with errors : 300 bps:   3   600 bps:   0   1200 bps:   0   1800 bps:   0
  MPDUs transmitted          : 300 bps:   0   600 bps:   1   1200 bps:   0   1800 bps:   0
  MPDUs delivered            : 300 bps:   0   600 bps:   1   1200 bps:   0   1800 bps:   0
  SPDUs received: 36
  SPDUs missed: 0
  Last frequency change cause: 7 (No change)


[2021-10-30 19:26:05 PDT] [6559.0 kHz] [1.7 Hz] [300 bps] [S]
Uplink LPDU:
 Src GS: San Francisco, California
 Dst AC: 255
 Type: Logoff request
  ICAO: A821E4
   AC info: N623FE, MD11, FDX
  Reason: 6 (Other)

[2021-10-30 19:21:20 PDT] [6559.0 kHz] [1.7 Hz] [300 bps] [S]
Downlink LPDU:
 Src AC: 255
 Dst GS: San Francisco, California
 Type: Logon resume
  ICAO: A58C2E
   AC info: N457AS, B739, ASA
 Frequency data:
  Flight ID: AS0765
  Lat: 46.4725999
  Lon: -96.4024666
  Time: 02:21:12
  GS ID: San Francisco, California
    Listening on: 21934.0, 17919.0, 13276.0, 8927.0, 6559.0, 5508.0
    Heard on: 13276.0, 6559.0
  GS ID: Reykjavik, Iceland
    Listening on: 17985.0, 15025.0, 11184.0, 8977.0, 6712.0, 5720.0, 3900.0
    Heard on:
  GS ID: Molokai, Hawaii
    Listening on: 21937.0, 17919.0, 13324.0, 13312.0, 13276.0, 11348.0, 11312.0, 10027.0, 8936.0, 8912.0, 6565.0, 5514.0
    Heard on: 13324.0, 11312.0
  GS ID: Agana, Guam
    Listening on: 21928.0, 17919.0, 11306.0, 6652.0
    Heard on:
  GS ID: Riverhead, New York
    Listening on: 21931.0, 17919.0, 13276.0, 8912.0, 5652.0
    Heard on: 8912.0
  GS ID: Al Muharraq, Bahrain
    Listening on: 21982.0, 17967.0, 10075.0, 8885.0
    Heard on:

[2021-10-30 19:21:39 PDT] [6559.0 kHz] [2.0 Hz] [300 bps] [S]
Uplink SPDU:
 Src GS: San Francisco, California
 Squitter: ver: 0 rls: 0 iso: 0
  Change note: None
  TDMA Frame: index: 265 offset: 8
  Minimum priority: 0
  System table version: 51
  Ground station status:
  ID: San Francisco, California
   UTC sync: 1
   Frequencies in use: 13276.0, 6559.0
  ID: Albrook, Panama
   UTC sync: 1
   Frequencies in use: 5589.0
  ID: Santa Cruz, Bolivia
   UTC sync: 1
   Frequencies in use: 21997.0, 13315.0

[2021-10-30 19:20:03 PDT] [6559.0 kHz] [2.4 Hz] [300 bps] [S]
Uplink SPDU:
 Src GS: San Francisco, California
 Squitter: ver: 0 rls: 0 iso: 0
  Change note: None
  TDMA Frame: index: 262 offset: 8
  Minimum priority: 0
  System table version: 51
  Ground station status:
  ID: San Francisco, California
   UTC sync: 1
   Frequencies in use: 13276.0, 6559.0
  ID: Auckland, New Zealand
   UTC sync: 1
   Frequencies in use: 13351.0, 10084.0
  ID: Hat Yai, Thailand
   UTC sync: 1
   Frequencies in use: 21949.0, 13270.0

[2021-10-30 18:54:37 PDT] [6559.0 kHz] [1.5 Hz] [300 bps] [S]
Uplink LPDU:
 Src GS: San Francisco, California
 Dst AC: 255
 Type: Logon confirm
  ICAO: A806D8
   AC info: N616UP, B748, UPS
  Assigned AC ID: 224

[2021-10-30 18:54:52 PDT] [6661.0 kHz] [-3.4 Hz] [300 bps] [S]
Uplink SPDU:
 Src GS: Riverhead, New York
 Squitter: ver: 0 rls: 0 iso: 0
  Change note: None
  TDMA Frame: index: 215 offset: 5
  Minimum priority: 0
  System table version: 51
  Ground station status:
  ID: Riverhead, New York
   UTC sync: 1
   Frequencies in use: 8912.0, 6661.0
  ID: San Francisco, California
   UTC sync: 1
   Frequencies in use: 13276.0, 6559.0
  ID: Molokai, Hawaii
   UTC sync: 1
   Frequencies in use: 21937.0, 13324.0, 11312.0

7 Likes

Interesting approach. Maybe the next project once my wife releases more money :wink:

3 Likes

It’s fun even with a simple setup which yields about 50 positions per hour overnight. There’s enough going on to keep it interesting.

HF is pretty forgiving and easy to work with. I’m going to put my trees to good use and see how a long wire dipole performs next week.

4 Likes

I have been running DUMPHFDL for a few days. I had set up a Pi3B+ with my SDRPlay RSP1A amd I agree it does have my interests.

1 Like

Ya, I’m having fun. I’ve been too busy to watch much, but already learned a couple tricks. e.g. smaller sample rate performs best with AirspyHF+ (the Dumphfdl readme also mentions this). Most of the multi ground station frequencies for a given grouping fit within 256000 sample rate. Don’t use a separate LNA for best performance, just let the highly sensitive AirspyHF+ default AGC go at it alone.

The ground stations that I have the most messages from are SFO, New York, and Hawaii so far. Can’t get Alaska yet. Since GS change frequency multiple times per day, ideally we’d create a way to follow a particular GS around. Probably not that hard based on minutes with no “src GS” messages logged. GS frequency changes and “frequencies in use” are logged to help with that.

I’m using this on my Ubuntu Server NAS machine with Intel Core i7-5820K. htop shows up to 40% CPU usage for dumphfdl, but the actual cores/threads have like 2% utilization. I’ll try it on a Pi 4 probably.

Have a cheap Balun One 9, and antenna wire coming this week. I think I’ll start with a dipole with each leg around 35 feet and see what happens from there. My trees will make this easy to hang.

After a few days verifying command line, I moved to systemd service with /etc/default/dumphfdl setup to make it easy to switch frequency swaths. Just in case it helps anyone my config file below (read the dumphfdl readme to setup some of these options (e.g. VRS) first and how to setup multitail for easy real-time log viewing). I used Frugal Radio’s HFDL frequency list to get started. Based on logs, these are still valid frequencies.

# This file is used by the dumphfdl systemd unit.
# - Copy it to /etc/default
# - Uncomment the following line and set your preferred command line options.
#8
#DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 256000 8834 8843 8885 8886 8894 8912 8921 8925 8927 8936 8939 8942 8948 8957 8977"
#5
#DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 384000 5502 5508 5514 5451 5529 5538 5544 5547 5583 5589 5622 5652 5655 5720"
#6
DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 256000 6529 6532 6535 6559 6565 6589 6596 6619 6628 6646 6652 6661 6712"
#17
#DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 256000 17901 17912 17916 17919 17922 17928 17934 17958 17967 17985 17919"
#10
#DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 256000 10027 10060 10063 10066 10075 10081 10084 10087 10093"
#11
#DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 256000 11184 11306 11312 11318 11321 11327 11348 11354 11384 11387"
#13
#DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 256000 13264 13270 13276 13303 13312 13315 13321 13342 13351 13354"
#21
#DUMPHFDL_OPTIONS="--output decoded:basestation:tcp:address=192.168.7.110,port=30012 --output decoded:text:file:path=/home/davidinjp/hfdl/hfdl.log,rotate=daily --prettify-xml --output-mpdus --bs-db /home/davidinjp/hfdl/basestation.sqb --ac-details normal --system-table /home/davidinjp/hfdl/systable.conf --system-table-save /home/davidinjp/hfdl/systable-new.conf --soapysdr driver=airspyhf,serial=<serial#_here> --sample-rate 256000 21928 21931 21934 21937 21949 21955 21982 21990 21997"
2 Likes

Aircraft callsigns in ModeS are 7 characters long, but HFDL only allows 6 characters. Mixing ADS-B with HFDL data may therefore cause the callsign to flip between two values, one of them truncated to 6 characters.

:frowning: Alas. I don’t know how it can be used to advantage.

It’s just for another SDR-utilizing fun thing/hobby, kind of like ADS-B. At least for me. VRS can still mostly accurately display aircraft, flight, and route details. For local consumption it’s quite fun!

This flight is 1658 nmi away from me.

2 Likes

My interest in HFDL goes back to the early 2000’s when I used PCHFDL with my Icom PCR1000. I still use PCHFDL but not dedicated like my Piaware set up but the advent of DUMPHFDL puts that into the same category. Plus its a hobby and I love to experiment. I am using my SDR Play RSP1A at 25000 and so far not too bad.
This is one of my command lines;
dumphfdl --soapysdr driver=sdrplay --sample-rate 250000 8843 8894 8912 8927 8936 8942 8948 8957 8977 --output decoded:basestation:tcp:address=192.168.1.26,port=20005 --bs-db /home/pi/basestation.sqb --ac-details verbose --system-table /home/pi/systable.conf --output decoded:text:file:path=/home/pi/hfdl.log,rotate=hourly

1 Like

I would like to test it as well.

but my personal minister of finance is not convinced about the benefits getting an Airspy HF+ with the appropriate antenna. Would cost another 300 bucks approx…

I have a Airspy HF+ discovery to listen to ATC when I feel like it (which, as it turns out, is not that often). That is the more expensive piece of equipment. There is the Youloop antenna that you would need for HFDL, and that one is affordable.

1 Like

I’m interested in trying this out but don’t have a spare SDR to use or an antenna. From what the author says, it needs a pretty good radio to work well but it seems rather expensive as an add on to what I’ve already got. I mean, £199 for an Airspy HF+ and even the SDRPLAY RSP-1A receiver is fairly expensive at £99 compared to the RTL-SDR that I use for ADSB.

So, does anyone have any experience of running it with something a bit less exotic?

Airspy HF+ Discovery is a little cheaper on this side of the pond, but still costs a chunk. While reading up on HFDL, there were some folks who had moderate success with the RTL-SDR and whatever hack is/was required to help with HF. The signals are barely visible in SDR# with Airspy HF+ D, so if you spend money at all, I do recommend an SDR with excellent sensitivity.

Also, Airspy HF+ can be used for lots of things beyond aviation related hobbies. I setup my cheap 24 AWG wire dipole 4 to 5 ft off the ground today. I can now get consistent HFDL messages and positions from stations and AC in Asia (and finally Barrow Alaska station). Once I plug the SDR back into my Windows machine, I’ll see what improved over popular HF bands. On the bright side, with HF frequencies, cables and antennas can be found or made on the cheap.

1 Like

I take it that if using an RTL-SDR dongle with a HamItUp upconverter I should use something like this?

dumphfdl --soapysdr driver=rtlsdr --sample-rate 250000 --freq-offset 125000 --freq-correction 0.5 21930 21934 21937 21931 21949 21949 21997 21990 21982 21928 21995 21926

(It’s mid-afternoon here so I’m trying the higher frequencies.)

2 Likes