I think I may have an explanation for what I am seeing.
I confirmed that running latest build with the -f switch was showing a lower processor load. I then decided to compare the results of running the same sample file with -q and -f:
jrg@pi52:~ $ cat samples48G_4.raw | /usr/bin/stream1090 -s 10 -u 24 -q -v >> st1090_20260209.msg
[Stream1090] build 260207
[Stream1090] Input sampling speed: 10 MHz
[Stream1090] Output sampling speed: 24 MHz
[Stream1090] Input to output ratio: 5:12
[Stream1090] Number of streams: 24
[Stream1090] Size of input buffer: 15360 samples
[Stream1090] Size of sample buffer: 36864 samples
[DCRemoval] alpha: 0.005
[FlipSigns] enabled
[IQLowPass] tap count: 15 symmetric: 1
[IQLowPass] taps: {0.000566716, 0.020335, 0.00571821, -0.0545961, 0.0605642, 0.167134, 0.162813, 0.27493, 0.162813, 0.167134, 0.0605642, -0.0545961, 0.00571821, 0.020335, 0.000566716}
[Stream1090] Sync Stdin Mode
[Stream1090] Reading from stdin
-------------------------------------------------------------
| Type | #Msgs | %Total | Dups | Fixed | Msg/s |
-------------------------------------------------------------
| ADS-B | 508229 | 53.6% | 45.2% | 23.1% | 282.3 |
| Comm-B | 147329 | 15.5% | 33.5% | | 81.85 |
| ACAS | 120289 | 12.7% | 23.5% | | 66.83 |
| Surv | 40741 | 4.3% | 32.1% | | 22.63 |
| DF-11 | 132469 | 14% | 48.8% | 30.8% | 73.59 |
-------------------------------------------------------------
| 112-bit | 666334 | 70.2% | 42.8% | 18.4% | 370.2 |
| 56-bit | 282723 | 29.8% | 38.7% | 17.3% | 157.1 |
-------------------------------------------------------------
| Total | 949057 | 100% | 41.6% | 18.1% | 527.3 |
-------------------------------------------------------------
(Max. msgs/s 527.3)
Messages Total 949057
[Stream1090] Finished.
jrg@pi52:~ $ cat samples48G_4.raw | /usr/bin/stream1090 -s 10 -u 24 -f /home/jrg/projects/stream1090/optfilter_3 -v >> st1090_20260209_2.msg
[Stream1090] build 260207
[Stream1090] Input sampling speed: 10 MHz
[Stream1090] Output sampling speed: 24 MHz
[Stream1090] Input to output ratio: 5:12
[Stream1090] Number of streams: 24
[Stream1090] Size of input buffer: 15360 samples
[Stream1090] Size of sample buffer: 36864 samples
[Stream1090] Sync Stdin Mode
[Stream1090] Reading from stdin
-------------------------------------------------------------
| Type | #Msgs | %Total | Dups | Fixed | Msg/s |
-------------------------------------------------------------
| ADS-B | 466098 | 53.2% | 47.3% | 22.5% | 258.9 |
| Comm-B | 138906 | 15.9% | 36.8% | | 77.17 |
| ACAS | 116272 | 13.3% | 25.9% | | 64.6 |
| Surv | 33702 | 3.9% | 36% | | 18.72 |
| DF-11 | 120385 | 13.8% | 50.3% | 29.9% | 66.88 |
-------------------------------------------------------------
| 112-bit | 615635 | 70.3% | 45% | 17.8% | 342 |
| 56-bit | 259728 | 29.7% | 40.5% | 16.6% | 144.3 |
-------------------------------------------------------------
| Total | 875363 | 100% | 43.8% | 17.4% | 486.3 |
-------------------------------------------------------------
(Max. msgs/s 486.3)
Messages Total 875363
[Stream1090] Finished.
The -f total messages result is much lower than -q and they should be very close. For comparison here is the result of running the same sample through the old build with the same (or very close) filter. (That run used a script to measure run times).
jrg@MBPro2021 stream1090 % ./run_stream1090.sh
start time 12:05:42 26-01-26
cmd = cat /Users/jrg/Desktop/samples48G_4.raw | ./build/stream1090_10M -f custom_filters/260122_2_OptFilter.txt -u 24 > samples48G_4raw_2601122opt-1.msg
[Stream1090] build 260123
[Stream1090] Input sampling speed: 10 MHz
[Stream1090] Output sampling speed: 24 MHz
[Stream1090] Input to output ratio: 5:12
[Stream1090] Number of streams: 24
[Stream1090] Size of input buffer: 15360 samples
[Stream1090] Size of sample buffer: 36864 samples
[Stream1090] Loaded 15 taps from custom_filters/260122_2_OptFilter.txt
-------------------------------------------------------------
| Type | #Msgs | %Total | Dups | Fixed | Msg/s |
-------------------------------------------------------------
| ADS-B | 508215 | 53.6% | 45.3% | 23.1% | 282.3 |
| Comm-B | 147236 | 15.5% | 33.4% | | 81.8 |
| ACAS | 120218 | 12.7% | 23.5% | | 66.79 |
| Surv | 40764 | 4.3% | 32% | | 22.65 |
| DF-11 | 132512 | 14% | 48.8% | 30.7% | 73.62 |
-------------------------------------------------------------
| 112-bit | 666214 | 70.2% | 42.8% | 18.4% | 370.1 |
| 56-bit | 282731 | 29.8% | 38.7% | 17.2% | 157.1 |
-------------------------------------------------------------
| Total | 948945 | 100% | 41.6% | 18.1% | 527.2 |
-------------------------------------------------------------
(Max. msgs/s 527.2)
Messages Total 948945
finish time 12:11:57 26-01-26
Looking at that it actually confirms what I was thinking - the -f switch isn’t picking up the custom filter on the new build, as the line equivalent to the one below is missing.
[Stream1090] Loaded 15 taps from custom_filters/260122_2_OptFilter.txt
I think I have the path right in the new build?
jrg@pi52:~/projects/stream1090 $ cat optfilter_3
# ================================================================
# Instance: /Users/jrg/Desktop/samples48G.raw
# Time: 2026-01-22 18:35:17
# FS: 10.0 MHz → FS_UP: 24.0 MHz
# Number of taps: 15
# Best score: 743532
# Best total: 472628
# Best params: [0.317668312687987, 0.42272982005696474, -0.9059743282476853, 0.44462302527647163, 0.2011254668190785]
# Current bounds:
# [-0.360464, 0.639536]
# [0.217618, 1.217618]
# [-1.841086, -0.841086]
# [-0.017670, 0.982330]
# [-0.733769, 0.266231]
# Best taps:
0.0005667160730808973
0.020335007458925247
0.005718213971704245
-0.05459609255194664
0.06056421995162964
0.1671341508626938
0.1628127247095108
0.2749301493167877
0.1628127247095108
0.1671341508626938
0.06056421995162964
-0.05459609255194664
0.005718213971704245
0.020335007458925247
[Edit]
So the “better” performance with the -f switch in the new build isn’t using the custom filter and is using less CPU but getting fewer messages. The true comparison is with the old build with the custom filter. (The gap from midnight was a power outage.)