Stream1090

Lets quickly make that clear. The name is “Dups” and is chosen due to its length. So what you is not being logged in the categoery dups is the following:

Two slightly phase-shifted streams contain the same: This is not logged under dups because i need numbers and that is 99.99 of the cases. And i dont like comparing 0.01 to something. So duplicates with the previous bit streams are surpressed in the stats. If the previous stream has dealt with that: we are done and that is not being counted.

	bool handleExtSquitterLongMessage(int streamIndex, const uint8_t& downlinkFormat) {
		auto frame = m_shiftRegisters.extractAlignedFrameLong(streamIndex);


		if (phaseDupCheckLong(frame))
			return false;


		auto crc = m_shiftRegisters.getCRC_112(streamIndex);


		// if the crc is zero, we have a correct message
		if (crc == 0) {
			// we consider a crc of 0 as a good message

This will never count into the dups section. The dups section is about: We missed something at x(t) and now there is new message at x(t + not directly next to t in terms of phase).

Duplicants are only created this way, because i can only repair DF-11 and DF-17 messages. Those repaired will be checked against “We did that already”.

Thanks for the explanation. In terms of noise/weak signals, I will record samples at maximum gain and see if there is a measurable further improvements vs airspy_adsb and dump1090-fa/readsb.

@jimMerk2 - it would be interesting if you recorded a sample when you have your least traffic to see what sort of a difference you get in those conditions.

1 Like

That will close the 99% vs the 98% gap and is a bad idea.

Edit: Increase your gain by one step.

Well, lower traffic occurs, of course, at night. But then another phenomenon happens. Planes will be detected at a distance, so then AWGN is a factor rather than interference from other planes. But, I will take another sample at night.

Another question, what are the transponder capabilities that you guys refer to?

1 Like

I had to look it up too:

https://mode-s.org/1090mhz/content/ads-b/1-basics.html

In my case that is the same as going to max gain

airspy gain 20 to gain 21

rtl-sdr gain 49.6 to (? the agc enabled value - have to look up how to do that.)

Edit: not an answer to the question. @JRG1956 covered that with the link.

Two fold:

  1. @JRG1956 has plenty of GA. Position => Send it. Thats it.
  2. The US are way moderate to nothing about about using the secondary radar.
  3. I am located in central Europe. Every town with an airfield basically will interrogate the plane nearby via secondary radar and ask things: what color are the pilots socks. This will have the 1090MHz at full speed during the day. Messages will overlap like crazy and you need some tool to deal with it.
1 Like

Some patience, please. The stats will tell you at some point about the signal strength. Auto-gain is around the corner then. Not for airspy though this requires some more calibration.

Sorry - I wasn’t asking for signal strength in stream1090 - I actually find I don’t miss it that much. It isn’t hard to swap back to airspy_adsb / readsb to look at signal strength if I need to.

What I was referring to was the extra gain step above 49.6 in rtl-sdr dongles that can only be accessed when the internal agc is switched on. I don’t know how to fix it at that step for recording a sample. I will do some reading.

# RTL-SDR configuration. The header entry defines
# that this device uses librtlsdr. The values all
# correspond to what rtl_fm / rtl_test use. Key/value
# pairs are processed in order as they appear in the file.
[rtlsdr]

# Optional: select a specific device by serial number
# serial = 00000001

# Center frequency in Hz (default: 1090 MHz for ADS-B)
frequency = 1090000000

# Gain in dB. If AGC is enabled, this value is ignored.
# gain = 40
agc = true

# Optional: frequency correction in PPM
# ppm = 0

# Optional: enable offset tuning (can improve dynamic range)
# offset_tuning = false

# Optional: direct sampling mode (0=off, 1=I, 2=Q)
# direct_sampling = 0

# Optional: tuner bandwidth in Hz (e.g. 3000000)
# tuner_bandwidth = 3000000

# Enable or disable the 5V bias tee (if supported)
bias_tee = false
1 Like

Night time 10 minute run with less traffic, gain set to 30-dB.

stream1090 results:

pi@raspberrypi:~/stream1090 $ sudo cat /home/pi/samples2.4_12_g30.raw | ./build/stream1090 -s 2.4 -u 12 -q -v  > /dev/null
[Stream1090] build 260222
[Stream1090] Input sampling speed: 2.4 MHz
[Stream1090] Output sampling speed: 12 MHz
[Stream1090] Input to output ratio: 1:5
[Stream1090] Number of streams: 12
[Stream1090] Size of input buffer: 8196 samples
[Stream1090] Size of sample buffer: 40980 samples
[IQLowPass] tap count: 15 symmetric: 1
[IQLowPass] taps: (-0.00245953, -0.00200476, 0.0238445, 0.0310966, 0.0531385, 0.096997, 0.0569147, 0.484946, 0.0569147, 0.096997, 0.0531385, 0.0310966, 0.0238445, -0.00200476, -0.00245953)
[Stream1090] Sync Stdin Mode
[Stream1090] Reading from stdin
-------------------------------------------------------------
|     Type |  #Msgs |  %Total |    Dups |   Fixed |   Msg/s |
-------------------------------------------------------------
|    ADS-B |  74748 |   43.7% |   29.3% |   36.1% |   124.6 |
|   Comm-B |    325 |    0.2% |      0% |         |  0.5417 |
|     ACAS |  20308 |   11.9% |      0% |         |   33.85 |
|     Surv |  14893 |    8.7% |      0% |         |   24.82 |
|    DF-11 |  60714 |   35.5% |   32.1% |   40.5% |   101.2 |
-------------------------------------------------------------
|  112-bit |  76714 |   44.9% |   28.8% |   35.5% |   127.9 |
|   56-bit |  94274 |   55.1% |   23.3% |   29.4% |   157.1 |
-------------------------------------------------------------
|    Total | 170988 |    100% |   25.9% |   32.2% |     285 |
-------------------------------------------------------------
(Max. msgs/s 285)
Messages Total 170988
DF 0 : 18667
DF 4 : 14710
DF 5 : 183
DF 11 : 60714
DF 16 : 1641
DF 17 : 73815
DF 18 : 918
DF 19 : 15
DF 20 : 283
DF 21 : 42
599984765 iterations @1MHz
[Stream1090] Finished. (245.163s)

dump1090-fa results:

pi@raspberrypi:~ $ dump1090-fa --fix --stats --show-only aaaaaa --ifile samples2.4_12_g30.raw >> samples_dump1090-fa_g30.txt

pi@raspberrypi:~ $ cat samples_dump1090-fa_g30.txt


Statistics: Fri Feb 27 00:38:29 2026 PST - Fri Feb 27 00:39:32 2026 PST
Local receiver:
    1439956992 samples processed
             0 samples dropped
             0 Mode A/C messages received
      14940558 Mode-S message preambles received
        34207535 with bad message format or invalid CRC
         6043958 with unrecognized ICAO address
          135393 accepted with correct CRC
            7721 accepted with 1-bit error repaired
  ----- dBFS noise power
   -6.4 dBFS mean signal power
   -0.8 dBFS peak signal power
  23382 messages with signal power above -3dBFS
Decoder:
    143114 total usable messages
       15668 DF0 messages
       12573 DF4 messages
         249 DF5 messages
       50183 DF11 messages
        1385 DF16 messages
       62141 DF17 messages
         620 DF18 messages
         233 DF20 messages
          62 DF21 messages
         0 surface position messages received
     22175 airborne position messages received
     21290 global CPR attempts with valid positions
       243 global CPR attempts with bad data
           0 global CPR attempts that failed the range check
         243 global CPR attempts that failed the speed check
        52 global CPR attempts with insufficient data
         4 local CPR attempts with valid positions
           0 aircraft-relative positions
           0 receiver-relative positions
       593 local CPR attempts that did not produce useful positions
           0 local CPR attempts that failed the range check
           3 local CPR attempts that failed the speed check
         0 CPR messages that look like transponder failures filtered
         0 non-ES altitude messages from ES-equipped aircraft ignored
        85 unique aircraft tracks
         0 aircraft tracks where only one message was seen
         0 aircraft tracks which were not marked reliable
CPU load:  80.8%
  42329 ms for demodulation
   8413 ms for reading from USB
     25 ms for network input and background tasks

170988 messages stream1090
143114 messages dump1090-fa

Still about +19% more messages for stream1090.

1 Like

But for comparison, you need to run the results of stream1090 through dump-fa to make sure that both use the same decoder. You should also probably do a range check.