Skip to content

skyelaird/dvoacap-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

DVOACAP-Python πŸ“‘

Python port of DVOACAP (Digital Voice of America Coverage Analysis Program) - An HF radio propagation prediction engine

License: MIT Python Version Version Status Validation Performance CI

🎯 About

DVOACAP-Python is a modern Python port of the DVOACAP HF propagation prediction engine, originally written in Delphi/Pascal by Alex Shovkoplyas (VE3NEA). This project aims to provide an accessible, well-documented, and maintainable Python implementation of the VOACAP ionospheric propagation model.

Original DVOACAP by: Alex Shovkoplyas, VE3NEA Python Port: Production Ready (v1.0.1, November 2025) - 2.3x faster than v1.0.0

⚑ Quick Start

Installation

Choose the installation option that fits your needs:

Option 1: Core Library Only (lightweight, for developers)

# Clone the repository
git clone https://github.com/skyelaird/dvoacap-python.git
cd dvoacap-python

# Install just the propagation engine
pip install -e .

Option 2: With Dashboard (includes Flask server and web UI)

# Clone the repository
git clone https://github.com/skyelaird/dvoacap-python.git
cd dvoacap-python

# Install library + dashboard dependencies
pip install -e ".[dashboard]"

Option 3: Development Setup (includes testing tools)

# Clone the repository
git clone https://github.com/skyelaird/dvoacap-python.git
cd dvoacap-python

# Install everything
pip install -e ".[all]"

What's Included

Installation Core Library Dashboard Dev Tools
pip install -e . βœ… ❌ ❌
pip install -e ".[dashboard]" βœ… βœ… ❌
pip install -e ".[dev]" βœ… ❌ βœ…
pip install -e ".[all]" βœ… βœ… βœ…

Basic Usage

from dvoacap import FourierMaps, ControlPoint, IonoPoint, compute_iono_params
import math

# Load CCIR/URSI ionospheric maps
maps = FourierMaps()
maps.set_conditions(month=6, ssn=100, utc_fraction=0.5)  # June, SSN=100, noon UTC

# Create control point at Philadelphia
pnt = ControlPoint(
    location=IonoPoint.from_degrees(40.0, -75.0),
    east_lon=-75.0 * math.pi/180,
    distance_rad=0.0,
    local_time=0.5,  # Noon local
    zen_angle=0.3,   # Solar zenith angle
    zen_max=1.5,
    mag_lat=50.0 * math.pi/180,
    mag_dip=60.0 * math.pi/180,
    gyro_freq=1.2
)

# Compute ionospheric parameters
compute_iono_params(pnt, maps)

print(f"E layer:  foE  = {pnt.e.fo:.2f} MHz at {pnt.e.hm:.0f} km")
print(f"F1 layer: foF1 = {pnt.f1.fo:.2f} MHz at {pnt.f1.hm:.0f} km")
print(f"F2 layer: foF2 = {pnt.f2.fo:.2f} MHz at {pnt.f2.hm:.0f} km")

See examples/ for more detailed usage examples.

πŸ“Š Interactive Dashboard

DVOACAP-Python includes a web-based dashboard for visualizing propagation predictions, DXCC tracking, and real-time band conditions.

Features

  • 🌍 Interactive Propagation Map - Visual display of MUF predictions across DX entities
  • πŸ“ˆ Band Condition Meters - Real-time signal quality indicators for 160m-10m
  • πŸ† DXCC Progress Tracking - Monitor worked/confirmed entities by band and mode
  • ⚑ On-Demand Predictions - One-click refresh with Flask server backend
  • πŸ“‘ Live Space Weather Data - Real-time Kp/A-index, solar flux, and sunspot numbers from NOAA SWPC with international fallback sources
  • 🎨 Responsive Design - Works on desktop and mobile devices

Quick Start with Dashboard

Option A: Flask Server (Recommended)

cd Dashboard
pip install -r requirements.txt
python3 server.py

# Visit http://localhost:8000
# Click "⚑ Refresh Predictions" button to generate new predictions

The Flask server provides:

  • API endpoints for prediction generation (/api/generate)
  • Real-time progress monitoring (/api/status)
  • Background processing (non-blocking)
  • Automatic dashboard reload when complete

Option B: Static Files

cd Dashboard
python3 generate_predictions.py
open dashboard.html

Configuration

Edit Dashboard/dvoacap_wrapper.py to customize:

  • Your callsign and QTH coordinates
  • Station power and antenna characteristics
  • Target bands and DX entities
  • Update frequency

Dashboard Documentation

See Dashboard/README.md for complete setup instructions, configuration options, and API documentation.

Future Plans

See Dashboard/ISSUE_MULTI_USER_WEB_APP.md for the roadmap to expand the dashboard into a multi-user community service with:

  • User authentication and accounts
  • Per-user station configurations
  • Database backend for historical tracking
  • Public API endpoints
  • Mobile app integration
  • Community propagation reporting

πŸ“Š Project Status

Status: v1.0.1 Production Release - 86.6% validation accuracy across 11 diverse test paths, 2.3x performance improvement

βœ… Completed Modules

  • Phase 1: Path Geometry βœ“

    • Great circle calculations
    • Geodetic/geocentric conversions
    • Path midpoint calculations
    • Bearing calculations
    • Source: PathGeom.pas
  • Phase 2: Solar & Geomagnetic βœ“

    • Solar zenith angle calculations
    • Local time conversions
    • Magnetic field model (IGRF)
    • Gyrofrequency calculations
    • Source: Sun.pas, MagFld.pas
  • Phase 3: Ionospheric Profiles βœ“

    • CCIR/URSI coefficient models
    • E/F/F1/Es layer critical frequencies
    • Layer height modeling
    • Electron density profiles
    • Ionogram generation
    • True and virtual height calculations
    • Source: IonoProf.pas, LayrParm.pas, FrMaps.pas
  • Phase 4: Raytracing βœ“

    • MUF (Maximum Usable Frequency) calculations
    • FOT and HPF calculations
    • Ray path calculations (reflectrix)
    • Skip distance computation
    • Multi-hop path finding
    • Over-the-MUF mode handling
    • Source: Reflx.pas, MufCalc.pas
  • Phase 5: Signal Predictions βœ“

    • βœ“ Noise modeling (atmospheric, galactic, man-made)
    • βœ“ Antenna gain calculations
    • βœ“ Prediction engine framework
    • βœ“ Full end-to-end integration
    • βœ“ 86.6% validation pass rate across 11 diverse test cases
    • βœ“ Real-world validation with PSKReporter/WSPR integration
    • Source: VoaCapEng.pas, AntGain.pas, NoiseMdl.pas

⚑ Performance (v1.0.1)

  • 2.3x faster than v1.0.0 - Comprehensive algorithmic optimizations
    • Single prediction: 0.008s β†’ 0.004s (2x faster)
    • Multi-frequency (9 predictions): 0.111s β†’ 0.048s (2.3x faster)
    • 24-hour scan: 0.282s β†’ 0.118s (2.4x faster)
    • Area coverage (100 predictions): 0.82s β†’ 0.35s (2.3x faster)
    • Function call reduction: 68-71% fewer calls

Optimizations:

  • Binary search for height-to-density interpolation (O(n) β†’ O(log n))
  • NumPy vectorization in Gaussian integration (eliminated 40-iteration loop)
  • Vectorized oblique frequency computation (eliminated 1,200 nested iterations)
  • Optimized Fourier series with NumPy dot products

πŸ“… Planned

  • PyPI public release - Package ready (v1.0.1), pending publication decision
  • Comprehensive type hints - Add type annotations throughout codebase
  • Sphinx API documentation - Complete API reference with examples
  • Community engagement - Forum presence, user support, integration examples

πŸ“š Documentation

User Guides

Technical Documentation

Building Sphinx Documentation

The project includes comprehensive Sphinx documentation with API references. To build it:

Prerequisites:

pip install sphinx sphinx-rtd-theme

Build on Linux/macOS:

cd docs
make html

Build on Windows:

Option 1 - Using the batch file (PowerShell or CMD):

cd docs
.\make.bat html

Option 2 - Using the PowerShell script:

cd docs
.\make.ps1 html

Option 3 - Using sphinx-build directly:

cd docs
sphinx-build -M html source build

The built documentation will be in docs/build/html/index.html.

See docs/README.md for more details.

πŸ§ͺ Testing

# Run all tests
pytest tests/

# Run specific test file
pytest tests/test_path_geometry.py -v

# Run with coverage
pytest --cov=dvoacap tests/

πŸ“¦ Package Structure

dvoacap-python/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ dvoacap/                    # Main Python package
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   β”œβ”€β”€ path_geometry.py        # Phase 1
β”‚   β”‚   β”œβ”€β”€ solar.py                # Phase 2
β”‚   β”‚   β”œβ”€β”€ geomagnetic.py          # Phase 2
β”‚   β”‚   β”œβ”€β”€ fourier_maps.py         # Phase 3
β”‚   β”‚   β”œβ”€β”€ ionospheric_profile.py  # Phase 3
β”‚   β”‚   β”œβ”€β”€ layer_parameters.py     # Phase 3
β”‚   β”‚   β”œβ”€β”€ muf_calculator.py       # Phase 4
β”‚   β”‚   └── reflectrix.py           # Phase 4
β”‚   └── original/                   # Reference Pascal source
β”‚       └── *.pas
β”œβ”€β”€ Dashboard/                      # Web-based visualization dashboard
β”‚   β”œβ”€β”€ server.py                   # Flask API server
β”‚   β”œβ”€β”€ dashboard.html              # Interactive dashboard UI
β”‚   β”œβ”€β”€ generate_predictions.py     # Prediction generation script
β”‚   β”œβ”€β”€ dvoacap_wrapper.py          # DVOACAP integration wrapper
β”‚   β”œβ”€β”€ requirements.txt            # Server dependencies
β”‚   β”œβ”€β”€ README.md                   # Dashboard documentation
β”‚   └── ISSUE_MULTI_USER_WEB_APP.md # Multi-user service roadmap
β”œβ”€β”€ tests/                          # Test suite
β”‚   β”œβ”€β”€ test_path_geometry.py
β”‚   β”œβ”€β”€ test_voacap_parser.py
β”‚   └── test_ionospheric.py
β”œβ”€β”€ examples/                       # Usage examples
β”‚   β”œβ”€β”€ integration_example.py
β”‚   β”œβ”€β”€ phase2_integration_example.py
β”‚   β”œβ”€β”€ phase3_ionospheric_example.py
β”‚   └── phase4_raytracing_example.py
β”œβ”€β”€ docs/                           # Documentation
β”‚   β”œβ”€β”€ USAGE.md
β”‚   β”œβ”€β”€ INTEGRATION.md
β”‚   └── *.pdf
β”œβ”€β”€ DVoaData/                       # CCIR/URSI coefficient data
└── SampleIO/                       # Sample input/output files

πŸŽ“ Technical Background

What is VOACAP?

VOACAP (Voice of America Coverage Analysis Program) is a professional-grade HF propagation prediction tool based on decades of ionospheric research. It predicts:

  • Maximum Usable Frequency (MUF) - Highest frequency that will refract back to Earth
  • Signal Strength - Expected field strength at receiver
  • Reliability - Probability of successful communication
  • Path Geometry - Ray paths through the ionosphere

Why Python?

The original VOACAP is written in Fortran (1970s) and DVOACAP modernized it in Delphi/Pascal. This Python port aims to:

  • βœ… Make the code accessible to modern developers
  • βœ… Provide clear documentation and examples
  • βœ… Enable integration with Python scientific stack (NumPy, SciPy, Matplotlib)
  • βœ… Facilitate research and experimentation
  • βœ… Maintain numerical accuracy of the original

πŸ”¬ Validation

Component-Level Validation βœ…

Individual modules validated against original VOACAP/DVOACAP:

  • Path Geometry: < 0.01% distance error, < 0.01Β° bearing error
  • Solar Calculations: < 0.01Β° zenith angle error
  • Geomagnetic Model: < 0.1Β° magnetic latitude error
  • Ionospheric Profiles: CCIR/URSI maps verified against reference data

End-to-End Accuracy Validation πŸ”¬

Reference VOACAP Comparison:

# Compare predictions against original VOACAP output
python3 test_voacap_reference.py

Validates full propagation predictions (SNR, reliability, MUF) against reference files from the original VOACAP engine. This ensures the integrated system produces accurate results, not just plausible-looking numbers.

Functional Testing:

# Verify engine produces valid output without crashing
python3 validate_predictions.py

Tests that predictions execute successfully and produce values in reasonable ranges across representative propagation paths.

See VALIDATION_STRATEGY.md for detailed validation methodology, test coverage status, and guidelines for interpreting results.

🀝 Contributing

Contributions are welcome! This is a large project with many modules still to port.

Areas needing help:

  • Porting remaining Pascal modules
  • Adding more comprehensive tests
  • Improving documentation
  • Performance optimization
  • Validation against reference data

See CONTRIBUTING.md for guidelines.

πŸ“– References

Original Projects

Scientific Background

  • ITU-R P.533: HF propagation prediction method
  • CCIR Report 340: Ionospheric characteristics
  • IPS Radio and Space Services documentation

πŸ“„ License

MIT License - See LICENSE for details

Original DVOACAP License: Mozilla Public License Version 1.1

πŸ™ Acknowledgments

  • Alex Shovkoplyas (VE3NEA) - Original DVOACAP implementation
  • Voice of America / ITS - Original VOACAP development
  • Amateur radio and propagation modeling community

πŸ“§ Contact


Note: This is an active development project. The API may change as we progress through implementation phases. Star ⭐ the repository to follow progress!

Amateur Radio Operators: This tool is designed for HF propagation prediction to help you make better contacts! πŸ“» 73!