Examples¶
This page contains example code for common DVOACAP Python tasks.
Complete Prediction Workflow¶
A complete example showing all phases of propagation prediction:
import numpy as np
from dvoacap import GeoPoint
from dvoacap.prediction_engine import PredictionEngine
# Initialize engine
engine = PredictionEngine()
# Configure prediction parameters
engine.params.ssn = 100 # Sunspot number
engine.params.month = 6 # June
engine.params.tx_power = 1500 # 1.5 kW
engine.params.min_angle = np.deg2rad(3.0) # 3° takeoff angle
engine.params.required_snr = 73.0 # Required SNR for reliability
engine.params.required_reliability = 0.9 # 90% reliability
# Set transmitter (Philadelphia)
engine.params.tx_location = GeoPoint.from_degrees(40.0, -75.0)
# Set receiver (London)
rx = GeoPoint.from_degrees(51.5, -0.1)
# Predict for HF bands at noon UTC
frequencies = [3.5, 7.0, 10.1, 14.0, 18.1, 21.0, 24.9, 28.0]
engine.predict(rx, utc_time=0.5, frequencies=frequencies)
# Print detailed results
print(f"Path: Philadelphia to London")
print(f"Distance: {engine.path.get_distance_km():.0f} km")
print(f"Azimuth: {engine.path.get_azimuth_tr_degrees():.1f}°")
print(f"Circuit MUF: {engine.circuit_muf.muf:.2f} MHz")
print()
print(f"{'Freq':<6} {'SNR':<6} {'Rel':<6} {'Mode':<8} {'Hops':<6}")
print("-" * 40)
for i, freq in enumerate(frequencies):
pred = engine.predictions[i]
mode = pred.get_mode_name(engine.path.dist)
print(f"{freq:<6.1f} {pred.signal.snr_db:<6.1f} "
f"{pred.signal.reliability:<6.3f} {mode:<8} {pred.hop_count:<6}")
24-Hour Prediction¶
Predict propagation throughout the day:
import numpy as np
import matplotlib.pyplot as plt
from dvoacap import GeoPoint
from dvoacap.prediction_engine import PredictionEngine
engine = PredictionEngine()
engine.params.ssn = 100
engine.params.month = 6
engine.params.tx_location = GeoPoint.from_degrees(40.0, -75.0)
rx = GeoPoint.from_degrees(51.5, -0.1)
# Sample every 2 hours
utc_hours = np.arange(0, 24, 2)
frequencies = [7.0, 14.0, 21.0, 28.0]
results = {freq: {'snr': [], 'rel': []} for freq in frequencies}
for hour in utc_hours:
utc_time = hour / 24.0
engine.predict(rx, utc_time, frequencies)
for i, freq in enumerate(frequencies):
pred = engine.predictions[i]
results[freq]['snr'].append(pred.signal.snr_db)
results[freq]['rel'].append(pred.signal.reliability)
# Plot results
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))
for freq in frequencies:
ax1.plot(utc_hours, results[freq]['snr'], marker='o', label=f'{freq} MHz')
ax2.plot(utc_hours, results[freq]['rel'], marker='o', label=f'{freq} MHz')
ax1.set_ylabel('SNR (dB)')
ax1.set_title('24-Hour SNR Prediction')
ax1.legend()
ax1.grid(True)
ax2.set_xlabel('UTC Hour')
ax2.set_ylabel('Reliability')
ax2.set_title('24-Hour Reliability Prediction')
ax2.legend()
ax2.grid(True)
plt.tight_layout()
plt.show()
Coverage Map¶
Generate a coverage map from a transmitter location:
import numpy as np
import matplotlib.pyplot as plt
from dvoacap import GeoPoint
from dvoacap.prediction_engine import PredictionEngine
# Set up prediction
engine = PredictionEngine()
engine.params.ssn = 100
engine.params.month = 6
engine.params.tx_location = GeoPoint.from_degrees(40.0, -75.0)
# Create grid of receiver locations
lats = np.arange(-60, 61, 5)
lons = np.arange(-180, 181, 5)
# Frequency to predict
freq = 14.0 # MHz
# Storage for results
snr_map = np.zeros((len(lats), len(lons)))
# Compute for each grid point
for i, lat in enumerate(lats):
for j, lon in enumerate(lons):
rx = GeoPoint.from_degrees(lat, lon)
try:
engine.predict(rx, utc_time=0.5, frequencies=[freq])
snr_map[i, j] = engine.predictions[0].signal.snr_db
except:
snr_map[i, j] = np.nan
# Plot coverage map
plt.figure(figsize=(12, 6))
plt.contourf(lons, lats, snr_map, levels=20, cmap='RdYlGn')
plt.colorbar(label='SNR (dB)')
plt.title(f'Coverage Map at {freq} MHz')
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.grid(True, alpha=0.3)
plt.show()
More Examples¶
For more examples, see the examples/ directory in the repository:
examples/phase1_path_geometry_example.py- Path geometry calculationsexamples/phase2_solar_geomag_example.py- Solar and geomagnetic calculationsexamples/phase3_ionospheric_example.py- Ionospheric profile generationexamples/phase4_raytracing_example.py- MUF and raytracingexamples/phase5_prediction_example.py- Complete prediction workflow