-
Notifications
You must be signed in to change notification settings - Fork 1
FAQ
Common questions about DVOACAP-Python and HF propagation prediction.
- General Questions
- Installation & Setup
- Usage Questions
- Accuracy & Validation
- Performance
- Dashboard Questions
- Development
- Troubleshooting
DVOACAP-Python is a Python port of the DVOACAP HF propagation prediction engine, originally written in Delphi/Pascal by Alex Shovkoplyas (VE3NEA). It implements the VOACAP ionospheric propagation model for predicting HF radio propagation conditions.
Key Features:
- Predicts MUF (Maximum Usable Frequency)
- Calculates signal strength and reliability
- Models E/F1/F2 ionospheric layers
- Performs raytracing through the ionosphere
- Provides SNR and service probability estimates
VOACAP (Voice of America Coverage Analysis Program) is a professional-grade HF propagation prediction tool developed by the Institute for Telecommunication Sciences (ITS) for Voice of America. It's based on decades of ionospheric research and is considered the gold standard for HF propagation prediction.
DVOACAP is a Delphi/Pascal port of VOACAP by VE3NEA, and DVOACAP-Python is a Python port of DVOACAP.
Advantages of the Python port:
- ✅ Accessibility: Easier for modern developers to understand and use
- ✅ Integration: Works with Python scientific stack (NumPy, SciPy, Matplotlib)
- ✅ Documentation: Clear, modern documentation
- ✅ Maintainability: Easier to extend and modify
- ✅ Cross-platform: Works on Windows, macOS, Linux without compilation
Trade-offs:
⚠️ Performance: Python is slower than compiled Fortran/Pascal (but still usable)⚠️ Maturity: VOACAP has 40+ years of validation; DVOACAP-Python is in active development
Current validation status (v1.0.1):
- Phase 1-4 (Geometry, Solar, Ionosphere, Raytracing): >95% validation pass rate
- Phase 5 (Signal Predictions): 86.6% validation pass rate
This means 86.6% of predictions match reference VOACAP output within acceptable tolerances. The remaining 13.4% show minor discrepancies at edge cases.
See Validation Status and Known Issues for details.
Short answer: For most amateur radio use cases, yes.
Detailed answer:
- Amateur radio planning: ✅ Excellent
- Contest planning: ✅ Very good
- DXpedition planning: ✅ Good (cross-check with VOACAP Online)
-
Broadcast planning:
⚠️ Use production VOACAP (Fortran version) -
Military/critical comms:
⚠️ Use validated production tools
Recommendation: For critical applications, validate predictions against operational data or cross-check with the original VOACAP.
Yes! DVOACAP-Python is open source under the MIT License. You can use it freely for personal, commercial, or educational purposes.
| Tool | Accuracy | Speed | Ease of Use | Cost |
|---|---|---|---|---|
| VOACAP (Fortran) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | Free |
| DVOACAP (Delphi) | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | Free |
| DVOACAP-Python | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Free |
| VOACAP Online | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Free |
| PropPy | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Free |
| ITU-R P.533 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | Free |
DVOACAP-Python's niche: Easy integration into Python applications with good accuracy.
Minimum:
- Python 3.11 or higher
- 200 MB disk space
- 512 MB RAM
Recommended:
- Python 3.11 or higher
- 500 MB disk space (with dependencies)
- 1 GB RAM
Operating Systems:
- ✅ Linux (Ubuntu, Debian, Fedora, etc.)
- ✅ macOS (Intel and Apple Silicon)
- ✅ Windows 10/11
Basic installation:
git clone https://github.com/skyelaird/dvoacap-python.git
cd dvoacap-python
pip install -e .With dashboard:
pip install -e ".[dashboard]"With all extras (development):
pip install -e ".[all]"See Getting Started for detailed instructions.
No! DVOACAP-Python is a standalone implementation. You don't need VOACAP, DVOACAP, or any other external propagation software.
The only data files needed are the CCIR/URSI coefficient maps, which are included in the repository (DVoaData/ directory).
Not yet. DVOACAP-Python v1.0.1 is production-ready but not yet published to PyPI. Install from source using:
pip install -e .PyPI publication is planned for a future release:
pip install dvoacap # Planned future releasefrom dvoacap import PredictionEngine
from dvoacap.path_geometry import GeoPoint
import numpy as np
# Create engine
engine = PredictionEngine()
# Configure
engine.params.ssn = 100.0
engine.params.month = 6
engine.params.tx_location = GeoPoint.from_degrees(40.0, -75.0) # Philadelphia
# Run prediction
rx_location = GeoPoint.from_degrees(51.5, -0.1) # London
engine.predict(rx_location=rx_location, utc_time=0.5, frequencies=[14.0])
# Get results
print(f"MUF: {engine.muf_calculator.muf:.2f} MHz")
print(f"SNR: {engine.predictions[0].signal.snr_db:.1f} dB")See Quick Examples for more examples.
HF range: 1.6 MHz - 30 MHz (160m through 10m bands)
Tested bands:
- 160m (1.8 MHz) ✅
- 80m (3.5 MHz) ✅
- 40m (7 MHz) ✅
- 30m (10 MHz) ✅
- 20m (14 MHz) ✅
- 17m (18 MHz) ✅
- 15m (21 MHz) ✅
- 12m (24 MHz) ✅
- 10m (28 MHz) ✅
Note: Frequencies > 30 MHz may work but are less validated.
Required parameters:
- Month: 1-12
- UTC time: 0-24 hours
Automatically fetched (when using Dashboard):
- SFI (Solar Flux Index): Fetched live from NOAA SWPC (F10.7 cm flux)
- SSN (Sunspot Number): Fetched live from NOAA SWPC (observed solar cycle indices)
- Kp index: Fetched live from NOAA SWPC (planetary K-index)
- A-index: Fetched live from NOAA SWPC (predicted A-index)
For manual API usage:
- SSN (Sunspot Number): 0-300 (typical: 0-200)
- Kp index: 0-9 (typical: 0-5, defaults to 2 for quiet conditions)
- A-index: 0-400 (typical: 0-50, defaults to 10 for low absorption)
Data Sources:
- NOAA SWPC: https://www.swpc.noaa.gov/
- Dashboard auto-fetches from: https://services.swpc.noaa.gov/json/
- Manual fetch: See
Dashboard/generate_predictions.pyfor implementation
Yes! The PathGeometry module supports both short-path and long-path calculations.
from dvoacap.path_geometry import PathGeometry, GeoPoint
tx = GeoPoint.from_degrees(40.0, -75.0)
rx = GeoPoint.from_degrees(51.5, -0.1)
path = PathGeometry()
path.set_tx_rx(tx, rx)
# Short path (default)
short_distance = path.get_distance_km()
print(f"Short path: {short_distance:.0f} km")
# Long path
long_distance = (2 * 3.14159 * 6370) - short_distance
print(f"Long path: {long_distance:.0f} km")Currently: DVOACAP-Python uses simplified antenna models. You can specify:
- Transmit power (watts)
- Basic antenna gain patterns
Future: Full antenna modeling (Yagi, log-periodic, etc.) is planned.
The 86.6% pass rate for Phase 5 indicates that 86.6% of predictions match reference VOACAP within tolerances across 11 diverse test cases. The remaining 13.4% show minor discrepancies due to:
- Numerical differences - Python vs. Pascal floating-point operations
- Mode selection variations - Different propagation mode choices
- Edge cases - Extreme solar conditions, high latitudes, very short/long paths
- Over-the-MUF handling - Different approaches when frequency > MUF
Important: This validation rate exceeds the 85% target threshold and is considered production-ready. Even "failed" test cases typically show acceptable operational differences.
See Known Issues for details.
Methods:
- Compare with operational results - Check predictions against actual QSOs
- PSKreporter integration - Compare with real-time reception reports
- Contest log analysis - Analyze QSO logs vs. predictions
- Cross-check with VOACAP Online - Verify against reference implementation
The dashboard includes optional PSKreporter validation.
DVOACAP v1.0.1 delivers a 2.3x performance boost over v1.0.0 through algorithmic optimizations. While predictions remain computationally intensive (full raytracing through 3D ionospheric model), they are now much faster.
Typical times (v1.0.1):
- Single prediction: ~4 ms (was ~8 ms in v1.0.0)
- Multi-frequency (9 frequencies): ~48 ms (was ~111 ms, 2.3x faster)
- 24-hour scan: ~118 ms (was ~282 ms, 2.4x faster)
- Area coverage (100 predictions): ~350 ms (was ~820 ms, 2.3x faster)
Computational bottlenecks:
- Iterative raytracing (Phase 4)
- CCIR coefficient processing (Phase 3)
- Python overhead vs. compiled code
See Performance Tips for optimization strategies and benchmarks.
Yes! Several approaches:
-
Reduce number of regions/frequencies:
# Fewer regions = faster TARGET_REGIONS = {'EU': ..., 'JA': ...} # Instead of 10 regions
-
Increase time step:
# Predict every 3 hours instead of 2 utc_hours = [0, 3, 6, 9, 12, 15, 18, 21]
-
Reuse PredictionEngine:
engine = PredictionEngine() # Create once # Reuse for multiple predictions
-
Cache results: Predictions for the same conditions are identical - cache and reuse.
See Performance Tips for details.
Method 1: Flask Server (Recommended)
cd Dashboard
python3 server.py
# Visit http://localhost:8000Method 2: Static Files
cd Dashboard
python3 generate_predictions.py
open dashboard.htmlSee Dashboard Guide for complete setup.
Recommended update frequency:
- Normal conditions: Every 2-4 hours
- After solar events: Immediately (flares, CMEs)
- Before operating sessions: Generate fresh predictions
- Automated setup: Every 2 hours via cron/scheduler
Solar conditions change slowly (hours to days), so updating every 2-4 hours is sufficient.
Yes! Edit Dashboard/generate_predictions.py:
MY_QTH = {
'call': 'YOUR_CALL',
'lat': YOUR_LATITUDE,
'lon': YOUR_LONGITUDE,
'grid': 'YOUR_GRID',
'antenna': 'Your Antenna Description',
}
TARGET_REGIONS = {
# Add your target regions
}
BANDS = {
# Configure your bands
}See Dashboard Guide for details.
Current version: No, the dashboard is single-user.
Future plan: A multi-user web service is planned. See Dashboard/ISSUE_MULTI_USER_WEB_APP.md for the roadmap.
We welcome contributions! Areas needing help:
- Validation: Identify and fix failing test cases
- Performance: Optimize hot paths (Cython, Numba)
- Features: Es modeling, antenna patterns, output formats
- Documentation: Examples, tutorials, API docs
- Testing: Add test coverage
See Contributing Guide for guidelines.
Essential:
- Python 3.11+
- pytest (testing)
- black (formatting)
- flake8 (linting)
Install all dev tools:
pip install -e ".[dev]"See Development Setup for complete setup.
# Run all tests
pytest
# Run with coverage
pytest --cov=dvoacap tests/
# Run validation
python3 test_voacap_reference.pySee Testing Guide for details.
Cause: Package not installed or not in Python path.
Solution:
# From repository root
pip install -e .Cause: Predictions haven't been generated.
Solution:
cd Dashboard
python3 generate_predictions.pyCause: The propagation path is not possible under current conditions (e.g., frequency too high, path too long).
Solution:
- Try a lower frequency
- Check MUF and use frequencies below FOT (Frequency of Optimum Traffic)
- Verify solar conditions are reasonable
Cause: Missing test dependencies or data files.
Solution:
# Install dev dependencies
pip install -e ".[dev]"
# Ensure you're in repository root
cd /path/to/dvoacap-python
pytestCause: Missing dependencies or import errors.
Solution:
# Install dashboard dependencies
pip install -e ".[dashboard]"
# Test generator directly
cd Dashboard
python3 generate_predictions.pyResources:
- Wiki Home - Main documentation
- Troubleshooting - Common issues and solutions
- GitHub Issues - Report bugs or ask questions
- API Reference - Code documentation
Contact:
- Open an issue on GitHub
- Check existing issues for similar questions
- See README for project links
73! Happy HF propagation predicting! 📻