prop.kc2g.com
Development of an Open-Source IRI-based Nowcasting Tool for Ionospheric Electron Density and HF Propagation
Andrew Rodland
Amateur Callsign KC2G
July 21, 2022
44th COSPAR Scientific Assembly
16-24 July 2022, Athens, Greece
C4.1
Intro
The main product of the website: a global map of current MUF(3000km)
Approach
Ionosonde Data: Uses data from GIRO and NOAA NCEI ionosonde networks, as near-realtime as possible
Effective SSN: Discover a value of Rz12 that provides the best agreement between IRI and the past 24 hours of observations
IRI: Run IRI-2016 with the eSSN as a high-resolution baseline
Temporal Prediction: Use a Gaussian Process model to extrapolate observed-minus-IRI for each station to a common point in time
Spatial Assimilation: Use another GP model to interpolate those deltas all around the world, and add them to the IRI base
Goals
Combine the better features of observation and model in a plausible way:
Data Sources
GIRO (Lowell Global Ionospheric Radio Observatory) and NOAA NCEI (US National Centers for Environmental Information).
GIRO data is pulled from DIDBase as TSV every 15 minutes (by special permission, they don’t like scrapers). NOAA data is pushed to my site as SAO4 via FTP as soon as it’s processed.
Approx. 70% overlap between networks: anything that is available through both I get from NOAA, but fallback to GIRO if NOAA feed goes down.
Effective Sunspot Number
A live version of IG index. Uses an algorithm similar to Northwest Research Associates’ “SSNe”, but with some improvements:
30-day smoothed eSSN showing the rise of SC25
1 week of 24h eSSN
Temporal Prediction
Spatial Interpolation
A representative output of the spatial model: smoothed Δfof2 for one point in time
Why GPs?
Output Quality
| RMSE foF2 | Within 10% | RMSE MUF | Within 10% | RMSE hmF2 | Within 10% |
IRI | 1.029 | 52.3% | 3.530 | 47.9% | 30.89 | 70.7% |
KC2G | 0.767 | 75.3% | 2.646 | 72.7% | 25.67 | 83.6% |
8,745 observations, March - June 2022
IRI is IRI2016 with ig_rz.dat from CHAIN at time of prediction
KC2G is my model with one random station excluded from the input;
the prediction is compared against a measurement from the held-out station
Output Quality
| foF2 | MUF | hmF2 | ||||||
| RMSE | Median | Within 10% | RMSE | Median | Within 10% | RMSE | Median | Within 10% |
IRI | 1.029 | 0.617 | 52.3% | 3.530 | 2.060 | 47.9% | 30.89 | 18.07 | 70.7% |
KC2G | 0.767 | 0.310 | 75.3% | 2.646 | 1.037 | 72.7% | 25.67 | 12.08 | 83.6% |
8,745 observations, March - June 2022
IRI is IRI2016 with ig_rz.dat from CHAIN at time of prediction
KC2G is my model with one random station excluded from the input;
the prediction is compared against a measurement from the held-out station
Forecasting
Median absolute error as fraction of IRI @0h – 24h forecast
Purple: with holdout as in previous slide (N=910, June 2022)
Green: with anchor station included in model input (N=727, May 2022)
Future Directions
Open Source
My code: https://github.com/arodland/prop/
My data: https://prop.kc2g.com/api/ (open but please ask before any extensive use, for the health of my server)
Precursor: https://github.com/af7ti/giroapp https://github.com/af7ti/giroviz
Many thanks: Python, Perl, NumPy, SciPy, pandas, matplotlib, cartopy, george, Flask, IRI-2016, IGRF-13, WMM2020, the space-physics packages iri2016, igrf, and wmm2020, Mojolicious, Minion, PostgreSQL, and many more.
Thanks!
Questions and contributions are very much appreciated!