← All posts

First Field Test: Debugging the Signal Pipeline

I took the platform out for its first real-world field test — and immediately discovered why bench testing and field testing are different disciplines. The system connected, the scanner started decoding radio traffic, but no geolocation pins appeared on the map. Three distinct problems were hiding behind that single symptom.

The first issue was a site resolution bug. The system determines which jurisdiction the user is in by querying a database of P25 tower sites licensed by the FCC. But FCC licensing geography doesn't always match operational geography — the nearest licensed site to my test location in central Maryland was actually registered to a county 40 miles away. I replaced the proximity-based lookup with a geographic boundary system using polygon ray-casting, which tests whether the device's GPS coordinates fall within predefined county boundary polygons. Simple, fast, and correct.

The second issue was that the scanner was capturing signal data but never completing a measurement bundle. The original measurement approach spawned a new system process for each signal sample, which took 1.5–2 seconds per sample. With eight samples required per bundle and most radio transmissions lasting only 3–8 seconds, the math simply didn't work — the transmission ended before the bundle could complete. I rewrote the scanner's SDR interface to maintain a persistent connection to the radio hardware, computing signal strength directly from raw IQ data. The new implementation captures all eight samples in roughly 600 milliseconds.

The third issue was the most instructive. A signal strength threshold meant to filter weak signals was set to a physically impossible value — 0.0 dBFS, when the measurement scale is always negative. Every valid signal was being discarded. This was residual placeholder logic from early development that was never updated when real data pipelines came online. I corrected it and made a mental note to audit for similar legacy placeholders throughout the codebase.

← The Geolocation Engine Goes Live...Terrain Awareness and the First Accurate... →