Skip to content

Signatures

A signature is a single aggregated propagation measurement for a specific transmitter–receiver path, band, and 3-hour time window, with solar conditions attached. It is the unit of analysis that sits between a raw spot and a training example.

Raw spots are noisy. A single WSPR decode can be affected by local RFI, equipment quirks, or transient ionospheric conditions. Aggregating multiple spots from the same path and time window gives a more stable measurement. A signature is that aggregated result.


What Goes Into a Signature

Each signature encodes:

Feature Source Notes
TX grid (Maidenhead 4-char) wspr.callsign_grid Resolved from callsign
RX grid (Maidenhead 4-char) wspr.callsign_grid Resolved from callsign
Path distance (km) Computed Great-circle from grid centers
TX latitude / longitude Computed From Maidenhead grid
RX latitude / longitude Computed From Maidenhead grid
Band (ADIF ID) wspr.bronze Normalized; fixed as of v2.1.0
Median SNR (dB) wspr.bronze Aggregated over 3-hr window
Spot count wspr.bronze Number of spots in window
Hour of day (UTC) wspr.bronze 3-hour bucket midpoint
Day of year wspr.bronze Seasonal position
SFI solar.bronze 3-hr bucket join
Kp solar.bronze 3-hr bucket join (intDiv(toHour(ts),3))
SSN solar.bronze 3-hr bucket join

The CUDA signature engine (ionis-cuda) encodes these as float4 vectors stored in wspr.silver. Signatures in the gold tables (wspr.signatures_v2_terrestrial, rbn.signatures, contest.signatures) are the filtered subset used for training and reporting.


How 10.8B Spots Become 93.3M Signatures

Step 1 — Bronze ingest. Raw CSV rows from wsprnet.org archives are loaded into wspr.bronze. All 10.8B rows, including noise, duplicates, and edge cases.

Step 2 — Quality filtering. Balloon callsigns removed. Spots < 500 km excluded (ground-wave, not ionospheric). SNR clipped to real WSPR range. See Data Quality for the full filter list.

Step 3 — Callsign grid resolution. Transmitter and receiver callsigns are resolved to Maidenhead grid squares via wspr.callsign_grid. Callsigns without a resolvable grid are excluded.

Step 4 — Solar join. Each spot is joined to solar.bronze on intDiv(toHour(timestamp), 3) to attach the 3-hour Kp bucket and daily SFI/SSN values. Spots with no solar data (gaps in the archive) have solar fields zeroed.

Step 5 — Aggregation. Spots are grouped by (tx_grid, rx_grid, band, 3-hr bucket, date). Median SNR, spot count, and solar indices are computed per group. The result is one row per unique (path, band, time window).

Step 6 — Promotion to gold. Aggregated rows meeting minimum spot count thresholds are written to the signatures tables.


Signature Table Summary

Table Rows SNR Range Source
wspr.signatures_v2_terrestrial 93.3M -28 to +20 dB WSPR
rbn.signatures 56.7M -20 to 80 dB (filtered) RBN
contest.signatures 6.3M +10/0 dB (anchored) Contest

These three tables are UNION ALL compatible — same schema, same solar join, same grid encoding.


The Float4 Embedding (wspr.silver)

The CUDA signature engine (ionis-cuda) encodes each signature as a float4 vector for fast similarity search. The engine reads from wspr.bronze, applies the same quality filter and solar join, and writes to wspr.silver.

  • 4.4B embeddings in wspr.silver (41 GiB)
  • Generated on RTX PRO 6000 (96 GB) via CUDA bulk processor
  • Encoding: geography features + time features + solar features + frequency — all normalized to the same scale as the IONIS training features