Data Lab / Can WSPR Detect Aircraft? A Pre-Registered Test Against ADS-B Ground Truth
Can WSPR Detect Aircraft?
Status: draft (pre-registered, awaiting data extraction)
Issue: #120
Pre-registration: PRE-REGISTRATION.md
The prior question
Before we can responsibly evaluate any hypothesis claiming WSPR data can
trace aircraft (e.g., the Godfrey WSPR-MH370 hypothesis), we must answer
the prior question:
Can WSPR detect commercial aircraft at all, against ground truth, on a
recent date with full ADS-B coverage and full WSPR archive coverage?
If the answer is no, the hypothesis is dead regardless of how compelling
post-hoc pattern matches look. If the answer is yes, we have a reference
signature for what an aircraft crossing actually looks like in WSPR data.
The honest design
- Pre-registration is locked before any data extraction — see
PRE-REGISTRATION.md. This is the contract.
- Selection criteria, statistical test, threshold, and decision rule
are all defined in advance.
- We pick station pairs whose great circle paths cross the **North
Atlantic Tracks** corridor (50°N 30°W) — the busiest oceanic air
corridor on Earth.
- We pick a recent date — 2026-04-03 (a Friday with dense ADS-B
coverage).
- We pull WSPR spots from our 11.53B archive and ADS-B from OpenSky
Network.
- We compute crossing events using great circle geometry with a 25 km
Fresnel zone tolerance.
- We detrend SNR for diurnal ionospheric variation (30-min rolling
median).
- Welch's t-test on |SNR residual| at crossing bins vs non-crossing bins.
- Bonferroni-corrected α = 0.00333 (3 pairs).
- Permutation null with 1000 shuffles is mandatory.
- Visual confirmation plot is mandatory.
Decision rule
| Outcome | Criterion |
|---|---|
| Positive | All three: parametric p < 0.00333, permutation p < 0.00333, visible by eye |
| Negative | All three: not significant, no visible association, null distribution overlaps observed |
| Ambiguous | Anything else. Reported as ambiguous, not promoted to positive. |
Honesty compact
- No moving thresholds after the fact
- No data-dependent metric switching
- No additional pairs tested if the first three are null
- No switching dates if the first date is null
- No comparison to MH370 in this paper (separate study)
- Negative result is published. A clean null on this is a bigger paper
than a maybe-positive.
Status timeline
- [x] Pre-registration locked (2026-04-10)
- [ ] OpenSky API client set up
- [ ] Station pairs selected per §5.1 of pre-reg
- [ ] WSPR + ADS-B extracted for 2026-04-03
- [ ] Pre-registered analysis run
- [ ] Result: TBD
Author: PMA
Published: 2026-04-10 · Updated: 2026-04-13
Data files: crossings.parquet, crossings.parquet.meta.json, map_preview.html, pair_census.parquet, pair_census.parquet.meta.json, poller_start.json, residuals.parquet, residuals.parquet.meta.json, results.json, results.json.meta.json, selected_pairs.json, selected_pairs.json.meta.json, wspr_spots.parquet, wspr_spots.parquet.meta.json, wspr_spots_2026-04-03.parquet, wspr_window.parquet, wspr_window.parquet.meta.json
Scripts: __init__.py, analyze.py, build_residuals.py, compute_crossings.py, constants.py, extract_wspr.py, geometry.py, make_plots.py, map_preview.py, poll_adsbfi.py, poll_opensky.py, provenance.py, pull_wspr_window.py, run_pipeline.py, scan_pair_counts.py, select_pairs.py