Today's work focused on signal processing refinements to improve the scanner's ability to distinguish real P25 transmissions from background noise. The core improvement is a narrowband FFT filter that processes the raw SDR capture through a 12.5 kHz frequency window matching P25's channel bandwidth, instead of computing power across the full SDR capture bandwidth. The result is approximately 23 dB of processing gain — the equivalent of replacing the antenna with one 200 times more sensitive.
The narrowband filter required careful engineering. P25 uplink transmissions occupy a 12.5 kHz channel, but inexpensive SDR hardware has frequency drift measured in parts per million, which can shift the expected signal position by several kilohertz. I added a peak tracker that scans a wider window and follows the strongest signal, tolerating PPM drift without losing the target.
A comprehensive test suite uncovered a hardware artifact that had been silently corrupting measurements: the SDR produces a DC spike at the center frequency that sits 20–35 dB above the noise floor. This is a known characteristic of direct-conversion receivers, but I hadn't accounted for it. Every capture was showing a strong signal at the center bin regardless of whether any radio was actually transmitting. The fix — subtracting the mean from the IQ samples before FFT processing — eliminates the DC component at negligible cost. All 26 tests pass after the correction.
I also established realistic accuracy expectations through analysis: best case 300–800 meters for a stationary vehicle radio with multiple captures from a good driving baseline, typical case 500 meters to 1.5 kilometers for a single burst capture while driving past, and marginal case out to 2.5 kilometers for low-power portable radios near detection limits.