Data & algorithms · Proof of concept
Pinpoint
Estimates where a recording was made by matching the Doppler shift of aircraft overhead against historical ADS-B flight tracks.
Technologies: Go · Signal processing · ADS-B · Leaflet
Proof of concept. Built to test whether the idea works, not as a finished product.
Stage: Research prototype; accuracy on real phone recordings not yet measured
Synthetic location search
Explore the search results for a simulated recording of two aircraft flyovers. Click a dot to see its score, matched aircraft and clock correction, or compare the recorded and predicted Doppler curves.

Pinpoint example
// Solve the constant-velocity segment's retarded-time quadratic. The
// rationalized root avoids subtracting nearly equal positive numbers.
r0 := a.Position.Sub(observer)
v2 := velocity.Dot(velocity)
qa := c*c - v2
qb := c*c*target + r0.Dot(velocity)
qc := c*c*target*target - r0.Dot(r0)
disc := qb*qb - qa*qc
if disc >= 0 {
candidate := qc / (qb + math.Sqrt(disc))
// ... keep roots inside this segment ...
r := r0.Add(velocity.Scale(candidate))
d := r.Norm()
// Ratio of received to emitted frequency.
return c / (c + r.Dot(velocity)/d), d, true
}Hearing where a recording was made
When an aircraft passes overhead, the pitch of its engine or propeller falls as it goes by. The shape of that Doppler curve depends on where the listener was standing. Aircraft also broadcast their positions over ADS-B, and those tracks are archived. Pinpoint combines the two: it measures the falling tones in a recording, predicts the curve each archived flight would have produced at each possible location, and searches for the place where they agree.
The idea came from a video about locating a recording this way. Pinpoint is my implementation in Go, with no third-party Go dependencies. The recording contains aircraft sound, not radio messages; flight tracks come separately from ADSB.lol’s historical archives.
Explore the synthetic search
The map above is the report generated by Pinpoint’s reproducible demo. The program synthesizes a 220-second recording of two turning aircraft with harmonics, background noise and a steady hum. The track file also contains two distractor aircraft that were never in the recording. Pinpoint then searches an area about 2.7 km square without knowing the answer.
Each dot is a tested location. Purple and blue dots fit poorly; red dots fit well. Click a dot to see its score, the aircraft it matched and the clock correction. Color by switches between the joint score and each flyover’s score, and Compare Doppler curves overlays the predicted tones on the recorded spectrogram. The search found the simulated recorder within about 20 m and recovered its +2 second clock error.
This is a synthetic regression test, so the answer is known. Colors show relative fit, not probability, and the 50 m grid spacing is not an accuracy radius. Search data is embedded in the page; satellite imagery is loaded from Esri.
How it works
Sound from an aircraft takes time to arrive, so the tone heard at any moment was emitted earlier, from a different position. Pinpoint converts each flight track to Earth-centered coordinates and, for each candidate location, solves for the emission time before computing the aircraft’s radial velocity. The example above is that calculation for one straight segment of a track. Simply shifting a Doppler curve by a constant delay would put the curve in the wrong place.
The recording is turned into a whitened spectrogram, which subtracts steady hum and broadband level changes. Each predicted harmonic samples that spectrogram, and the scores are averaged over time. All flyovers must share one location and one recording clock. The search starts on a coarse grid and refines promising areas. When it chooses groups of flyovers automatically, a group is ranked by its weakest match, so one bright tone cannot hide a poor fit elsewhere.
Real recordings
Pinpoint also includes a local web app. Drop in a phone recording, enter its approximate start time, and optionally limit the search to a state or a drawn rectangle. The app detects candidate tones, downloads the day’s flight archive and terrain elevations, and searches for locations. It runs on your own machine, since a single day of flight data is several gigabytes. The repository explains how to run it.
On a public test recording, the reviewed workflow found a location about 48 m from the position reported for that recording. That is one reviewed reproduction, not a measured accuracy for arbitrary recordings. The current work is about telling real matches from coincidences: holding back part of the audio to check each fit, and repeating every search at deliberately wrong times to see how well a false match can score. Jet passes, which are brief and higher-pitched, need a separate detector that is still experimental.
The model assumes a stationary recorder, still air and a steady engine tone. It ignores wind, echoes and engine speed changes. ADS-B gaps and errors can limit accuracy regardless of how finely the area is searched.