V5.0.5-airspy dump1090-fa with native AirSpy support now available

Did you ever get a chance to look at this?

Sorry, other stuff … and in that moment it seemed more interesting than now :confused:

I know that feeling well. :slight_smile:

Need some settings info from you guys…

Can you give me the following settings from your running airspy_adsb/dump1090-fa configuration:

  • airspy_adsb: -f (fix)
  • airspy_adsb: -n (Verbatim mode)
  • airspy_adsb: -x (DX mode)
  • airspy_adsb: -r (Reduced IF bandwidth)
  • dump1090-fa: --no-fix, --fix, --fix-2bit
  • dump1090-fa: --net-verbatim
  • dump1090-fa: --enable-df24

If you don’t have one of the flags set, reply with ā€œnot setā€.

Thanks!

  • airspy_adsb: -f (fix) 1
  • airspy_adsb: -n (Verbatim mode) ā€œnot setā€
  • airspy_adsb: -x (DX mode) ā€œnot setā€
  • airspy_adsb: -r (Reduced IF bandwidth) ā€œnot setā€
  • dump1090-fa: --fix
  • dump1090-fa: --net-verbatim ā€œnot setā€
  • dump1090-fa: --enable-df24 ā€œnot setā€

Corrected first item below at 07:58 UTC 11th Aug

airspy_adsb: -f (fix)   1  (Corrected, misread file)
airspy_adsb: -n (Verbatim mode) "not set"
airspy_adsb: -x (DX mode)  "not set"
airspy_adsb: -r (Reduced IF bandwidth)  "not set"  tested and made number of AC and range worse (previous post refers)
dump1090-fa: --no-fix, --fix, --fix-2bit   --no-fix
dump1090-fa: --net-verbatim  "not set"
dump1090-fa: --enable-df24  "not set"

@g7ruh You run with no error correction at all?

Pretty sure -f 1 / --fix are the defaults for the respective programs so omitting the option means 1 bit fixing.

I recall that the folks over at PlanePlotter prefer that setting to be enabled to reduce the impact of bad data caused by fixing messages that may be corrupt, but I cannot find the definitve reference for it. So my PP uploader has it disabled. Happy to use it on the test system if you require it. Just ask.

I think that came from David Taylor’s site :

Oh yeah, no kidding. I forgot about the defaults. :slight_smile:

Progress Update:

Here’s where I’m at now.

  • 3 Identical hosts.
  • dump1090-fa-airspy-1 and dump1090-fa-airspy-2 are identical software and config. dump1090-fa-airspy-1 is actually my production feeder.
  • airspy_adsb-dump1090-fa is running the latest airspy_adsb.
  • All 3 hosts are fed by the same antenna, filter, LNA, and 3-way splitter.
  • The 3 SDRs are all Airspy R2s.
  • The test ran 7 days.
graphs-1090
measurement
dump1090-fa
airspy 1
dump1090-fa
airspy 2
airspy_adsb
dump1090-fa
Aircraft Seen Avg 136.0 123.0 124.0
Aircraft Seen Max 378.0 385.0 395.0
Range Avg Max (nm) 238.6 214.1 215.3
Range Median (nm) 45.3 44.9 44.8
Range Peak (nm) 463.3 467.4 467.4
RSSI Mean Median -26.5 -28.5 -1.7
RSSI Weakest -44.4 -42.2 -19.5
RSSI Peak -9.6 -9.8 0.0
Maxima Msg/Sec 1,854.0 1,859.0 1,909.0
Maxima ADS-B (acft) 253.0 263.0 270.0
Maxima Pos/Sec 336.0 388.0 383.0
Msg/Sec/Acft Avg 4.8 4.7 4.6
Msg/Sec/Acft Max 7.3 7.3 7.2
CPU Util Avg 18.7 19.4 33.6
Notes
Hosts 3 nvidia Jetson Nanos, 64 bit , Ubuntu18
Antenna FA Green 1090
Filter FA Blue
LNA Nooelec LANA 20db USB powered
Splitter 3-way XRDS-RF 489-2700MHz, -4.8db ins loss
SDRs
AirSpy R2 0x62CC68FF3547AB5B
AirSpy R2 0x62CC68FF3568255B
AirSpy R2 0x62CC68FF356C0F5B
Parameters
dump1090-fa-airspy –airspy-linearity-gain 21 --airspy-enable-packing
–sample-rate 12 --sample-format u16o12 --demod hirate
–demod-preamble-threshold 0.9 --demod-smoother-window 4
–demod-preamble-strictness 3 --demod-msg-window -7:7
–enable-df24 --demod-no-drop-dup-msgs --max-range 500
–fix-2bit
airspy_adsb -g 21 -m 12 -f 2 -e 5 -t 300 -w 5 -p -v -n

You’ll notice that there are even differences in the results between the two identical dump1090-fa-airspy hosts, let alone between them and the airspy_adsb host. Practically speaking though, the only real difference is the CPU used.

Of course, this is all in my environment which is quite active but also quite noisy due to nearby FM/TV transmitters.

I’m going to add a few more knobs to dump1090-fa-airspy to control the whitelist stuff we talked about earlier and also an option to adjust the filter in the R820T but when I did that manually things only got worse so I’m not sure how to test it in other environments.

I’m also exploring a way to create a virtual USB device that can play a sample file captured with airspy_rx to airspy_adsb so we can do real comparisons with the exact same data. We’ll see how that goes. :slight_smile:

3 Likes

-f 1 -e 8 would be a more common setting in my eyes. (well among the enthusiasts on the forum anyhow)
I might need to auto-detect if it’s a pi3 and otherwise automatically put -e 8 in the configuration :slight_smile:

total positions received or average positions per second as a stat maybe?
and msg/s avg or total?

I’m not sure, does dump1090-fa also have speed check CPR rejections in the stats?
Maybe upload the three stats.json or stats console output after some runtime? (at least i would have a look).

And mentioning the CPU i get the impression i’ll have to look at that code again squeeze some more cycles!

1 Like

I’m down for more antenna work this weekend but I’ll try again with -e 8 when I’m back up. My experience though is that for me increasing -e only increases CPU utilization.

Not sure. I’ll have to look.

I have all 3 stats.json…

dump1090-fa-airspy-1. Being my production feeder, it has MLAT remote messages not in the stats above.

{
  "start": 1628820835.9,
  "end": 1629391720.6,
  "local": {
    "samples_processed": 6850592735232,
    "samples_dropped": 0,
    "modeac": 0,
    "modes": 3825926580,
    "bad": 3441947557,
    "unknown_icao": 0,
    "suspected_dup": 6238458,
    "duplicates_dropped": false,
    "accepted": [
      317680217,
      49065312,
      17233494
    ],
    "signal": -19.7,
    "noise": -37.6,
    "peak_signal": -9.5,
    "strong_signals": 0
  },
  "remote": {
    "modeac": 0,
    "modes": 1691565,
    "bad": 0,
    "unknown_icao": 0,
    "accepted": [
      1691565,
      0,
      0
    ]
  },
  "cpr": {
    "surface": 24238381,
    "airborne": 54427457,
    "global_ok": 77998285,
    "global_bad": 9583,
    "global_range": 4713,
    "global_speed": 2694,
    "global_skipped": 44905,
    "local_ok": 454228,
    "local_aircraft_relative": 0,
    "local_receiver_relative": 0,
    "local_skipped": 202668,
    "local_range": 430,
    "local_speed": 4078,
    "filtered": 0
  },
  "altitude_suppressed": 0,
  "cpu": {
    "demod": 288473726,
    "reader": 84428,
    "background": 9948530
  },
  "tracks": {
    "all": 117885,
    "single_message": 44144,
    "unreliable": 50258
  },
  "messages": 385670588,
  "preamble_distro": [
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    8120893876,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "decode_distro": [
    18466,
    15155,
    27795,
    175092,
    591581,
    3985385,
    89096937,
    224646831,
    52403052,
    9898163,
    2600023,
    455835,
    24165,
    16933,
    23610
  ],
  "messages_by_df": [
    105949427,
    0,
    0,
    0,
    23840607,
    1763253,
    0,
    0,
    0,
    0,
    0,
    52759413,
    0,
    0,
    0,
    0,
    8238865,
    161414934,
    30745684,
    0,
    816764,
    25033,
    0,
    0,
    116608,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "adaptive": {
    "gain_db": -12,
    "gain_reduced_seconds": 0,
    "loud_undecoded": 0,
    "loud_decoded": 0,
    "noise_dbfs": 0,
    "gain_seconds": []
  }
}

dump1090-fa-airspy-2

{
  "start": 1628820835.8,
  "end": 1629470713.5,
  "local": {
    "samples_processed": 7798509797376,
    "samples_dropped": 983040,
    "modeac": 0,
    "modes": 479061527,
    "bad": 83887497,
    "unknown_icao": 0,
    "suspected_dup": 6470295,
    "duplicates_dropped": false,
    "accepted": [
      332117520,
      46521576,
      16534934
    ],
    "signal": -19.8,
    "noise": -38.1,
    "peak_signal": -9.6,
    "strong_signals": 0
  },
  "remote": {
    "modeac": 0,
    "modes": 0,
    "bad": 0,
    "unknown_icao": 0,
    "accepted": [
      0,
      0,
      0
    ]
  },
  "cpr": {
    "surface": 26032283,
    "airborne": 55851978,
    "global_ok": 81225542,
    "global_bad": 10101,
    "global_range": 5157,
    "global_speed": 2498,
    "global_skipped": 43740,
    "local_ok": 452681,
    "local_aircraft_relative": 0,
    "local_receiver_relative": 0,
    "local_skipped": 195141,
    "local_range": 491,
    "local_speed": 1035,
    "filtered": 0
  },
  "altitude_suppressed": 0,
  "cpu": {
    "demod": 352152316,
    "reader": 30080181,
    "background": 9987625
  },
  "tracks": {
    "all": 124034,
    "single_message": 50036,
    "unreliable": 56201
  },
  "messages": 395174030,
  "preamble_distro": [
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    9068996119,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "decode_distro": [
    18315,
    14284,
    32287,
    201156,
    675751,
    5011675,
    101323989,
    230110963,
    45994331,
    8771710,
    2477223,
    477680,
    26203,
    15686,
    22777
  ],
  "messages_by_df": [
    108054990,
    0,
    0,
    0,
    24676953,
    1870761,
    0,
    0,
    0,
    0,
    0,
    53742574,
    0,
    0,
    0,
    0,
    8383991,
    167174557,
    30216626,
    0,
    923590,
    24897,
    0,
    0,
    105091,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "adaptive": {
    "gain_db": -12,
    "gain_reduced_seconds": 0,
    "loud_undecoded": 0,
    "loud_decoded": 0,
    "noise_dbfs": 0,
    "gain_seconds": []
  }
}

airspy_adsb-dump1090-fa

{
  "start": 1628820835.8,
  "end": 1629470731.3,
  "local": {
    "samples_processed": 0,
    "samples_dropped": 0,
    "modeac": 0,
    "modes": 0,
    "bad": 0,
    "unknown_icao": 0,
    "suspected_dup": 0,
    "duplicates_dropped": false,
    "accepted": [
      0,
      0,
      0
    ],
    "strong_signals": 0
  },
  "remote": {
    "modeac": 0,
    "modes": 406200429,
    "bad": 948519,
    "unknown_icao": 7729019,
    "accepted": [
      367606587,
      22118607,
      7797697
    ]
  },
  "cpr": {
    "surface": 25606953,
    "airborne": 55710429,
    "global_ok": 80673849,
    "global_bad": 5550,
    "global_range": 2422,
    "global_speed": 1774,
    "global_skipped": 43381,
    "local_ok": 457245,
    "local_aircraft_relative": 0,
    "local_receiver_relative": 0,
    "local_skipped": 180738,
    "local_range": 231,
    "local_speed": 915,
    "filtered": 0
  },
  "altitude_suppressed": 0,
  "cpu": {
    "demod": 0,
    "reader": 0,
    "background": 4295874
  },
  "tracks": {
    "all": 74330,
    "single_message": 2648,
    "unreliable": 7434
  },
  "messages": 397522891,
  "preamble_distro": [
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "decode_distro": [
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "messages_by_df": [
    110110071,
    0,
    0,
    0,
    25184851,
    1896385,
    0,
    0,
    0,
    0,
    0,
    54767167,
    0,
    0,
    0,
    0,
    8373028,
    166672549,
    29587181,
    0,
    913916,
    17743,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0
  ],
  "adaptive": {
    "gain_db": 0,
    "gain_reduced_seconds": 0,
    "loud_undecoded": 0,
    "loud_decoded": 0,
    "noise_dbfs": 0,
    "gain_seconds": []
  }
}

That’s the interesting part. You have some more global_ok at least on the first station.
Curious how much it differs, that’s somewhat strange actually.
I’d say do the next test with gain 19, might make the results more consistent. (or does that already lose you range?)
Not sure how your CPU is so low, might be the new vector optimizations :wink:

Anyhow globe_range and global_speed are rejected CPR messages due to range / speed.
Due to -w i suppose not all bad range messages would be making it through from airspy_adsb … but they will likely increase with higher -e.
And from -e 5 to -e 8 the CPU used shouldn’t even increase all that much …

You have been busy, useful stats.

That is a good idea if you can do it, it will really mean we can compare apples with apples.

Update from me:

I have left the test system running airspy-adsb and made a slight change so I now have stats on FA (user g7ruh) showing similar performance (the site stats graph lines are right on top of each other). On the SkyAware page for each, I am seeing similar numbers of aircraft with positions on both FA Orange dongle and airspy-adsb, give or take a few. The total aircraft value still differs a little, but it is the ones without positions which is the difference.

The difference I see on graphs1090 is much more messages received and positions / sec on the airspy compared with the FA Orange dongle.

Range is similar from both systems and the Aircraft Seen / Tracked graph looks similar

Change I made was to dial back the gain slightly (which lowered the number of messages > -3dbfs on the FA Orange dongle so current config is:

# dump1090-fa won't automatically start unless ENABLED=yes
ENABLED=yes
RECEIVER_OPTIONS="--device-index 0 --gain 36.4 --ppm 0 --modeac"
DECODER_OPTIONS="--lat 12345--lon 67890 --max-range 360 --no-fix"
NET_OPTIONS="--net --net-heartbeat 60 --net-ro-size 1300 --net-ro-interval 0.2 --net-ri-port 0 --net-ro-port 30002 --net-sbs-port 30003 --net-bi-port 30004,30104 --net-bo-port 30005"
JSON_OPTIONS="--json-location-accuracy 1"
# Use a machine-specific wisdom file if it exists
if [ -f /etc/dump1090-fa/wisdom.local ]
then
  RECEIVER_OPTIONS="${RECEIVER_OPTIONS} --wisdom /etc/dump1090-fa/wisdom.local"
fi

and airspy-adsb:

`GAIN= 21`

OPTIONS= -p -v -f 1 -e 10 -w 3 -t 300


I look forward to testing the updated version of dump1090-fa-airspy. :)

I’ve refurbished my 1090 receiver hardware in the past few weeks. The main goal was fewer interruptions due to lightning storms. That’s all done, and I am taking data to see if I have improved anything in that area.

Today I restarted the main receiver with a fresh load of code. The system is an Airspy mini and a Pi4 running 5.0. Default values for all to start. Gain 21. 12 MHz.

The system came alive with a higher message rate than I’ve ever seen before. It is hovering around 3,000 messages per second. About 250-300 airplanes. Previously I rarely saw much above 2,000 messages/second.

Same antenna, coax, LNA, cavity filter as before.

Ideas why I see the higher message rate given about the same traffic?

Are you actually running what is being talked about in this thread?
If not, another thread will be a better place.

Some people manage to set it up wrong and flat out double the message count interfacing wiht airspy_adsb.
But again, use another thread in case you’re using airspy_adsb.

2 Likes

Fascinated with the work that has gone into this, well done. With the testing I have been doing since getting back into this hobby, I am being led to believe the Airspy unit, IHO, seems to be a better unit overall, but like a lot of things in life, sometimes quality comes at a price. Following this thread but from what I am seeing, possibly above my Linux skills at the moment, but no doubt, down the track, it will develop similar to other options of installs which are very easy to get going without too many heart aches. :slight_smile:

Don’t you hate when real life intrudes on your fun??? I do.
Anyway, I’m committed to finish this project out by the end of the year. To do that, I need some sample data from AirSpy owners, especially if you run in less than optimal conditions (trees, low traffic, etc). I’m hoping to play the samples back into airspy_adsb and dump1090 and compare the results.

If you’re willing to participate, download the ā€œcapture_samples.shā€ script from https://github.com/gtjoseph/dump1090/releases/download/v5.0.5-airspy/capture_samples.sh

./capture_samples.sh --userid=<fa_userid> --traffic=[ busy | quiet ] 
    [ --airspy-opts-path=<path> | --airspy-opts=<string> ]
    [ --serial-number=<airspy_dev_sn> ] [ --help ]

Captures samples from your AirSpy device using airspy_rx.
The output file will be named "samples-<userid>-<traffic>-<timestamp>.tar.xz"
and will contain the samples and the airspy options.
No other data is collected.

Required:
    --userid    Your FlightAware Discussions userid
    --traffic   "busy" if this is a busy period
                "quiet" if this is a quiet period

One of the following is required:
    --airspy-opts-path  The path to the file that contains the options
                        used to start airspy_adsb.
                        Usually /etc/default/airspy_adsb
    --airspy-opts       The options themselves.
                        For example: "-g 21 -m 12 -w 5 -e 5"
    NOTE:   At a minimum, the script must find values for -g (gain)
            and -m (sample rate).

Optional:
    --serial-number  The serial number of the specific AirSpy device to
                     use for the capture if you have more than one.

Make sure you have enough space in the directory you downloaded the script to for the capture files. At 12MHz, each file will be 228MB.

Examples:

$ ./capture_samples.sh --userid=myid --traffic=busy --airspy-opts-path=/etc/default/airspy_adsb
OR
$ ./capture_samples.sh --userid=myid --traffic=busy --airspy-opts="-g 21 -w 5 -m 12 -e 5"

The script uses the gain and sample rate options you normally provide to airspy_adsb to run airspy_rx. Ten seconds of samples are collected, then a tarball is created with the samples, plus the airspy_adsb options. Your userid is used only to identify the files in case I need to get more info from you. Please run the script twice, one with --traffic=busy during a period where you normally have the most aircraft in view, and once with --traffic=quiet during a quiet period.

When you’ve got both tarballs, upload them to the file hosting site of your choice (Google Drive, Dropbox, Microsoft Live, etc) and send me the links in a PM. I’m doing it this way instead of giving you a link to upload to because, at least in Google’s case, you can’t anonymously upload a file larger than 50MB and I don’t want to make each of you get an account at a common hosting provider.

THANKS!!!