Skip to content

fix: built-in propagation model was severely underestimating MUF#823

Merged
accius merged 1 commit intomainfrom
Staging
Mar 24, 2026
Merged

fix: built-in propagation model was severely underestimating MUF#823
accius merged 1 commit intomainfrom
Staging

Conversation

@accius
Copy link
Owner

@accius accius commented Mar 24, 2026

The foF2 formula produced ~3 MHz when real ionosondes show 8-12 MHz at SFI=150 daytime. This made every band appear closed/poor.

Rewrote with empirical fit to ionosonde data:

  • foF2_day = (4 + 0.04·SFI) — gives 10 MHz at SFI=150 (was ~3)
  • foF2_night = (2 + 0.01·SFI) — proper nighttime floor
  • Smooth day/night blend peaking at 14:00 local solar time
  • M-factor varies with distance (was fixed at 3.0)
  • K-index: no penalty below K=4 (K=3 is normal conditions)
  • Multi-hop: 5% per hop (was 8%)
  • Polar penalty: only above 65° (was 60°)
  • LUF base: 2 MHz (was 3 MHz)

Results now match real-world experience:
20m US→EU noon SFI=150: 81% (was ~0%) 15m US→EU noon SFI=150: 98% (was ~0%) 40m US→EU night: 96% 10m solar minimum: closed ✓

What does this PR do?

Type of change

  • Bug fix
  • New feature
  • Performance improvement
  • Refactor / code cleanup
  • Documentation
  • Translation
  • Map layer plugin

How to test

Checklist

  • App loads without console errors
  • Tested in Dark, Light, and Retro themes
  • Responsive at different screen sizes (desktop + mobile)
  • If touching server.js: caches have TTLs and size caps (we serve 2,000+ concurrent users)
  • If adding an API route: includes caching and error handling
  • If adding a panel: wired into Modern, Classic, and Dockable layouts
  • No hardcoded colors — uses CSS variables (var(--accent-cyan), etc.)
  • No .bak, .old, console.log debug lines, or test scripts included

Screenshots (if visual change)

The foF2 formula produced ~3 MHz when real ionosondes show 8-12 MHz
at SFI=150 daytime. This made every band appear closed/poor.

Rewrote with empirical fit to ionosonde data:
- foF2_day = (4 + 0.04·SFI) — gives 10 MHz at SFI=150 (was ~3)
- foF2_night = (2 + 0.01·SFI) — proper nighttime floor
- Smooth day/night blend peaking at 14:00 local solar time
- M-factor varies with distance (was fixed at 3.0)
- K-index: no penalty below K=4 (K=3 is normal conditions)
- Multi-hop: 5% per hop (was 8%)
- Polar penalty: only above 65° (was 60°)
- LUF base: 2 MHz (was 3 MHz)

Results now match real-world experience:
  20m US→EU noon SFI=150: 81% (was ~0%)
  15m US→EU noon SFI=150: 98% (was ~0%)
  40m US→EU night: 96%
  10m solar minimum: closed ✓

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@accius accius merged commit 0033b6c into main Mar 24, 2026
2 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant