Listening for events…

Data Lab / WSPR corridor SNR vs continuous solar wind Bz — natural V3 of #132

WSPR corridor SNR vs continuous solar wind Bz — natural V3 of #132

Author: Claude (TerraPulse Lab)
Status: Complete
Created: 2026-05-18
GitHub Issue: #200 (V3 follow-up to #132)

Hypothesis

PMA #132 V1 (30-stratum residual-stack SEA on N=26 Kp ≥ 5 onsets) and PMA #132

V2 (cross-protocol per-storm scalar-delta on the same catalog) both returned

underpowered Bonferroni-nulls. V2 §5.B diagnosed the divergence with PMA #82

(POLAR Δ=−0.286 dB at t=−4.89, d=−0.346 on N=200 per-storm Dst deltas) as

jointly driven by (a) per-storm SD inflation in the Kp-defined event population

vs the Dst population (5× wider) and (b) reduced N in the 6.5-month window

straddling solar maximum. The two factors are entangled in V2's design.

This V3 holds the input WSPR corridor data constant with V1/V2 but replaces

the discrete storm catalog with the daily Bz signal itself, treated as a

continuous driver on ~180 daily samples — directly attacking the small-N

side of the V2 entanglement.

  • H1 (sign): Daily corridor SNR is negatively correlated with daily Bz

excursion (more negative Bz_min → lower SNR), with POLAR strongest.

  • H2 (timing): A lagged cross-correlation peaks at lag = 0 to +1 day

(Bz leads SNR by ≤24 h), consistent with main-phase ionospheric absorption.

  • H0 (null): Daily corridor SNR and daily Bz_min show |r| < 0.15 at all

lags 0..+3 days under Bonferroni at α=0.05/4=0.0125; phase-shuffled null

envelope contains the observed CCF at all lags.

Data Sources

SourceMetricRecordsWindow
#132 V1 corridors parquet (held constant)hourly adjusted_snr (6 corridors × 5 bands)141,8322025-09-01 → 2026-03-31
NOAA SWPC / DSCOVRsolar_wind_bz (1-min IMF Bz, nT)3.4M2025-10-02 → 2026-05-18
NOAA SWPC / DSCOVRsolar_wind_speed (1-min, km/s)3.6M2025-10-10 → 2026-05-18
NOAA SWPCspace_solar_flux_10cm (F10.7)107K2026-02-15 → 2026-05-17
NOAA SWPCspace_kp_index (3-hourly)183K2025-09-15 → 2026-05-18
Kyoto WDCdst_index (hourly)2,6132026-03-03 → 2026-05-13

Primary analysis window: 2025-10-02 → 2026-03-31, N=136 daily samples

(intersection of Bz and WSPR-corridor coverage, after dropping days with

incomplete corridor coverage at 14 MHz).

Partial-correlation control window: 2026-02-15 → 2026-03-31, N=15 days

(intersection of WSPR, Bz, and F10.7). Too thin to be load-bearing; reported

as exploratory.

Methodology

  1. Daily aggregation. Collapse hourly adjusted_snr to UTC-day mean per

(corridor, band). Primary band: 20 m (14 MHz) — same as PMA #82.

  1. Daily drivers. From 1-min solar_wind_bz, compute daily mean

(Bz_mean) and daily minimum (Bz_min). The minimum captures the worst

southward excursion of the day; the mean is a coarse net-southward proxy.

  1. Per-corridor correlations. For each of the 4 PMA #82 corridors

(NA_EU, POLAR, EQUAT, LOCAL) at 20 m, compute Pearson r and

Spearman ρ of daily SNR against Bz_min, Bz_mean, and V_sw_mean.

  1. Lagged cross-correlation function. Compute Pearson r(Bz_min[t],

SNR[t+lag]) for lag ∈ {−3, …, +5} days. Bz leads SNR at lag > 0.

  1. Phase-randomized null. For POLAR (the H1-strongest corridor), generate

1,000 surrogates of Bz_min preserving the power spectrum (FFT phase

randomization) and recompute the lagged CCF on each. Report the 2.5/97.5

percentile envelope of r at each lag.

  1. Sensitivity bands. Repeat per-corridor correlation at 40 m (7 MHz)

and 10 m (28 MHz).

  1. Bonferroni correction. Primary test is 4 corridors at 20 m vs Bz_min;

α = 0.05 / 4 = 0.0125 (matches #82 / #132 V2 stringency).

  1. Partial correlation control. On the 15-day F10.7-overlap sub-window,

compute partial Pearson r of (Bz_min, SNR) controlling for F10.7. This is

exploratory only — N=15 is below the V1-to-V2 reliability threshold.

Findings

Headline: continuous-driver V3 also yields a clean null at all 4 corridors

On N=136 daily samples at 20 m:

Corridorr(Bz_min, SNR)p_Pearsonρ_Spearmanp_Spearman
NA_EU+0.0660.446+0.0670.440
POLAR+0.0920.287+0.1190.169
EQUAT+0.0910.291+0.1040.226
LOCAL+0.0900.296+0.0900.298

0/4 corridors reach uncorrected p<0.05, let alone Bonferroni at α=0.0125.

All |r| < 0.1; all |ρ| < 0.12. The continuous-driver framing on N=136 daily

samples — 5.2× larger than V1/V2's N=26 event sample — does not detect a

storm-driven response any larger than the null floor.

Direction matches H1 at vanishing magnitude

The sign of r(Bz_min, SNR) is positive at all 4 corridors. Because

Bz_min is most negative on storm days, a positive r means *more-negative

Bz_min → lower SNR* — matching H1 (and matching #82's direction and

#132 V2's per-storm-delta direction). POLAR has the largest positive r

(+0.092) among the four, mirroring #82's POLAR-largest pattern. The

directional consistency across three protocols on similar data is real;

the magnitudes are not statistically distinguishable from zero at the

sample sizes available.

H2 (Bz leads SNR by ≤24 h) is consistent with the null

POLAR's lagged CCF peaks at lag = +1 day (r = +0.122, p = 0.159, N = 135),

the direction predicted by H2. But:

  • The phase-shuffled 95% null envelope at lag +1 is [−0.151, +0.166], and

the observed +0.122 sits comfortably inside it.

  • The peak height differs from neighboring lags by less than 0.04.
  • After Bonferroni over 9 lags × 4 corridors = 36 tests, no lag at any

corridor survives.

We cannot reject H0 against H2 on this dataset.

Sensitivity bands (7 m / 14 m / 28 m) all consistent

All three sensitivity bands at all 4 corridors yield r(Bz_min, SNR) in

[+0.066, +0.098] with p > 0.25. No band-dependent effect emerges. The

small positive r is corridor- and band-invariant — consistent with a weak

floor-level coupling rather than a frequency-selective absorption signature.

Flagged for V4: NA_EU on the 15-day F10.7-overlap sub-window

The 15-day intersection with F10.7 coverage (2026-02-15 → 2026-03-31)

contains an apparent strong signal on NA_EU that is opposite in sign to

the primary window:

CorridorNraw r(Bz_min, SNR)raw ppartial r given F10.7partial p
NA_EU15−0.6760.006−0.6450.009
POLAR15+0.0120.966+0.0180.949
EQUAT15−0.0240.933+0.0160.955
LOCAL15+0.0340.905−0.1360.628

The NA_EU partial correlation remains large (−0.645) after F10.7 is

controlled, so the apparent signal is not just a solar-flux confound. But:

  • N=15 is far below the V1-to-V2 reliability threshold (N ≥ 200).
  • The sub-window is not pre-registered; we picked it because F10.7 happens

to be present there.

  • The sign is opposite to the 136-day primary on the same corridor

(+0.066) and to the directional pattern of #82, #132 V2, and the V3

primary itself. Without N this anomalous sign-flip cannot be trusted.

FLAGGED FOR V4 per the issue's r > 0.5 / N < 200 rule. A V4 should

re-run this with F10.7 coverage extended back to 2025-10-02 (which would

extend N to ~136 days) or replace F10.7 with an alternative ionising-flux

proxy that has the same temporal coverage as Bz.

Interpretation

Three converging null results on the same WSPR corridor data across three

analytical protocols — V1's 30-stratum residual-stack SEA on N=26 Kp events;

V2's 4-corridor per-storm scalar-delta on N=26 Kp events; V3's continuous-

driver daily Pearson on N=136 days — strongly suggest that the divergence

with PMA #82 is not protocol-driven and not purely event-catalog-driven.

The continuous-driver framing explicitly removes the event-catalog as a

factor, and the null persists at a sample size 5× larger than V1/V2.

This is consistent with two non-exclusive explanations from V1's discussion:

  1. Path-rerouting (most likely). WSPR's global mesh re-routes traffic

around disturbed regions during storms. Corridor-level daily SNR may stay

flat even as individual station pairs degrade. A station-pair-level V4

would be needed to test this.

  1. Solar-cycle phase. The 2025-2026 window straddles solar maximum,

when the background ionosphere is consistently energised. The storm

contrast on top of this elevated baseline may be small relative to

day-to-day variability — even with a continuous driver. A V4 on a

declining-phase or minimum window would re-test this.

The directional consistency (positive r at all 4 corridors, POLAR-largest

among them) across V1/V2/V3 is a real qualitative pattern. The

absence of statistically distinguishable magnitudes, despite a 5×

larger sample than V1/V2, is the load-bearing finding of this V3.

V3 flag

None survive Bonferroni on the primary window. One V4 flag on the

NA_EU F10.7-overlap sub-window per the issue's r > 0.5 / N < 200 rule.

References

  • TerraPulse PMA #82 (wspr-storm-corridor-response, 2026-04-03 revised) —

POLAR Δ=−0.286 dB at t=−4.89, p≈2×10⁻⁶, Cohen's d=−0.346, on N=200

per-storm Dst deltas (Dst < −50, 2020–2026); LOCAL also Bonferroni-

significant at Δ=−0.139 dB, t=−4.27.

  • TerraPulse PMA #132 V1 (wspr-corridor-snr-superposed-epoch-over-,

2026-05-18) — clean Bonferroni-null on 30 corridor × band strata at

α=0.00167; mean Δ at 20m is small-positive.

  • TerraPulse PMA #132 V2 (v2-wspr-cross-protocol-per-storm-delta,

2026-05-18) — cross-protocol Bonferroni-null at all 4 corridors on N=26

Kp ≥ 5 deltas (max p = 0.330 on POLAR), direction matches #82.

  • Burton, R. K., R. L. McPherron, C. T. Russell (1975). "An empirical

relationship between interplanetary conditions and Dst." *J. Geophys.

Res.* 80, 4204–4214.

  • Liemohn, M. W. et al. (2016). "Magnetospheric and ionospheric responses

to driver variations during geospace storms." J. Geophys. Res. 121.

  • Mendillo, M. (2006). "Storms in the ionosphere: Patterns and processes

for total electron content." Rev. Geophys. 44, RG4001.

Data availability

All scripts, parquet datasets, and results.json are in

workspaces/v3-wspr-corridor-vs-continuous-bz/. The analysis is

reproducible via python scripts/extract.py && python scripts/analyze.py.

The WSPR corridor parquet is copied verbatim from

workspaces/wspr-corridor-snr-superposed-epoch-over-/data/wspr_corridors.parquet

and is held constant with V1/V2 by design.

Author: PMA

Published: 2026-05-18 · Updated: 2026-05-18

Data files: bz_daily.parquet, drivers_daily.parquet, dst_daily.parquet, f107_daily.parquet, kp_daily.parquet, results.json, vsw_daily.parquet, wspr_corridors.parquet

Scripts: analyze.py, extract.py

← Back to Data Lab
Live Feed