|
| 1 | +# VOACAP Reference Maps Validation - Key Findings |
| 2 | + |
| 3 | +## Executive Summary |
| 4 | + |
| 5 | +Analysis of VOACAP reference maps uploaded for FN74ui station reveals several parameter mismatches between VOACAP.com reference maps and our DVOACAP-Python implementation. |
| 6 | + |
| 7 | +**Date:** 2025-11-17 |
| 8 | +**Reference Maps:** `examples/FN74ui 2025.11.17-*.pdf` (REL and SDBW maps for WSPR, FT8, CW, SSB) |
| 9 | + |
| 10 | +--- |
| 11 | + |
| 12 | +## VOACAP Reference Parameters |
| 13 | + |
| 14 | +### Common Parameters (All Modes) |
| 15 | +From the PDF map headers: |
| 16 | + |
| 17 | +- **Location:** FN74ui (44.35N, 64.29W) ✅ **MATCHES** |
| 18 | +- **Time:** November, 1800 UTC ✅ **MATCHES** |
| 19 | +- **SSN:** 77 ✅ **MATCHES** |
| 20 | +- **Frequency:** 14.100 MHz ✅ **MATCHES** |
| 21 | +- **Power:** 80 W ✅ **MATCHES** |
| 22 | +- **TX Antenna:** HVD025.ANT, -1° takeoff angle |
| 23 | +- **RX Antenna:** HVD025.ANT |
| 24 | +- **Noise:** -150 dBW |
| 25 | +- **Generated:** www.voacap.com, 2025-11-17 |
| 26 | + |
| 27 | +### Mode-Specific Bandwidth Parameters |
| 28 | + |
| 29 | +| Mode | Bandwidth (dB/Hz) | Typical Required SNR | VOACAP Maps | |
| 30 | +|------|------------------|---------------------|-------------| |
| 31 | +| **WSPR** | 3 dB/Hz | ~-28 dB | ✅ Available | |
| 32 | +| **CW** | 13 dB/Hz | ~5-8 dB | ✅ Available | |
| 33 | +| **FT8** | 19 dB/Hz | ~-21 dB | ✅ Available | |
| 34 | +| **SSB** | 38 dB/Hz | ~10-15 dB | ✅ Available | |
| 35 | + |
| 36 | +--- |
| 37 | + |
| 38 | +## Critical Differences Found |
| 39 | + |
| 40 | +### 1. Missing Bandwidth Parameter ⚠️ |
| 41 | + |
| 42 | +**Issue:** DVOACAP-Python does NOT have a bandwidth parameter |
| 43 | + |
| 44 | +- **VOACAP uses:** Mode-specific bandwidth values (3, 13, 19, 38 dB/Hz) |
| 45 | +- **DVOACAP-Python:** No `bandwidth` parameter in `VoacapParams` |
| 46 | +- **Impact:** Cannot differentiate between modes with different bandwidths |
| 47 | +- **Severity:** 🟡 **MEDIUM** - Affects noise calculations and SNR |
| 48 | + |
| 49 | +**Formula Impact:** |
| 50 | +``` |
| 51 | +Noise Power (dBW) = Noise Density + 10*log10(Bandwidth) |
| 52 | +SNR = Signal Power - Noise Power |
| 53 | +``` |
| 54 | + |
| 55 | +Without bandwidth, the noise floor is calculated incorrectly for different modes. |
| 56 | + |
| 57 | +### 2. Required SNR Default Too High 🔴 |
| 58 | + |
| 59 | +**Issue:** Default `required_snr = 73.0 dB` is unrealistically high |
| 60 | + |
| 61 | +- **VOACAP validation tests:** Use 73 dB (reference level) |
| 62 | +- **Practical communications:** |
| 63 | + - WSPR: -28 dB |
| 64 | + - FT8: -21 dB |
| 65 | + - CW: 5-8 dB |
| 66 | + - SSB: 10-15 dB |
| 67 | + |
| 68 | +- **DVOACAP default:** 73.0 dB |
| 69 | +- **Impact:** Causes 0-1.2% reliability predictions when should be 20-100% |
| 70 | +- **Severity:** 🔴 **CRITICAL** (already documented in REQUIRED_SNR_PARAMETER_FIX.md) |
| 71 | + |
| 72 | +**Documented Solution:** |
| 73 | +```python |
| 74 | +# For practical use |
| 75 | +engine.params.required_snr = 10.0 # SSB |
| 76 | +engine.params.required_snr = 6.0 # CW |
| 77 | +engine.params.required_snr = -21.0 # FT8 |
| 78 | +engine.params.required_snr = -28.0 # WSPR |
| 79 | +``` |
| 80 | + |
| 81 | +### 3. Antenna Model Mismatch ⚠️ |
| 82 | + |
| 83 | +**Issue:** VOACAP uses HVD025.ANT at -1° takeoff angle |
| 84 | + |
| 85 | +- **VOACAP reference:** HVD025.ANT (half-wave dipole at 25 feet) |
| 86 | +- **Takeoff angle:** -1° (slightly downward) |
| 87 | +- **DVOACAP-Python:** Uses generic antenna models, no direct HVD025 equivalent |
| 88 | +- **Impact:** Antenna gain patterns may differ |
| 89 | +- **Severity:** 🟡 **MEDIUM** - Affects signal strength predictions |
| 90 | + |
| 91 | +### 4. Noise Floor Specification ⚠️ |
| 92 | + |
| 93 | +**Issue:** Different noise specification methods |
| 94 | + |
| 95 | +- **VOACAP maps show:** -150 dBW absolute noise level |
| 96 | +- **DVOACAP-Python uses:** `man_made_noise_at_3mhz = 145.0 dB above kTB` |
| 97 | +- **DVOACAP default:** 145.0 dB (relative to thermal noise) |
| 98 | +- **Impact:** Need to verify noise calculations match |
| 99 | +- **Severity:** 🟡 **MEDIUM** - Affects SNR calculations |
| 100 | + |
| 101 | +**Noise Calculation:** |
| 102 | +``` |
| 103 | +Thermal noise kTB at 1 Hz = -204 dBW/Hz |
| 104 | +At 3 MHz bandwidth: kTB = -204 + 10*log10(3e6) = -139.2 dBW |
| 105 | +Man-made noise: -139.2 + 145 = 5.8 dBW (seems wrong?) |
| 106 | +``` |
| 107 | + |
| 108 | +Need to investigate how VOACAP's -150 dBW maps to our noise model. |
| 109 | + |
| 110 | +--- |
| 111 | + |
| 112 | +## Parameter Comparison Summary |
| 113 | + |
| 114 | +| Parameter | VOACAP Reference | DVOACAP-Python | Status | |
| 115 | +|-----------|------------------|----------------|--------| |
| 116 | +| **Location** | 44.35N, 64.29W | 44.35N, 64.29W | ✅ Match | |
| 117 | +| **SSN** | 77 | 77 | ✅ Match | |
| 118 | +| **Month** | 11 (November) | 11 | ✅ Match | |
| 119 | +| **Time** | 1800 UTC | 1800 UTC | ✅ Match | |
| 120 | +| **Frequency** | 14.100 MHz | 14.100 MHz | ✅ Match | |
| 121 | +| **Power** | 80 W | 80 W | ✅ Match | |
| 122 | +| **Bandwidth** | 3/13/19/38 dB/Hz | **NOT AVAILABLE** | ❌ Missing | |
| 123 | +| **Required SNR** | Mode-dependent | 73 dB (default) | ❌ Wrong default | |
| 124 | +| **TX Antenna** | HVD025.ANT @ -1° | Generic models | ⚠️ Different | |
| 125 | +| **RX Antenna** | HVD025.ANT | Generic models | ⚠️ Different | |
| 126 | +| **Noise** | -150 dBW | 145 dB @ 3MHz | ⚠️ Different spec | |
| 127 | + |
| 128 | +--- |
| 129 | + |
| 130 | +## Recommendations |
| 131 | + |
| 132 | +### Immediate Actions |
| 133 | + |
| 134 | +1. **🔴 IMPLEMENT BANDWIDTH PARAMETER** |
| 135 | + ```python |
| 136 | + @dataclass |
| 137 | + class VoacapParams: |
| 138 | + ... |
| 139 | + bandwidth_hz: float = 2700.0 # Default for SSB (2.7 kHz) |
| 140 | + # Or bandwidth_db_hz for dB/Hz specification |
| 141 | + ``` |
| 142 | + |
| 143 | +2. **🔴 ADD MODE PRESETS** |
| 144 | + ```python |
| 145 | + MODE_PRESETS = { |
| 146 | + 'WSPR': {'bandwidth_hz': 6, 'required_snr': -28}, |
| 147 | + 'FT8': {'bandwidth_hz': 50, 'required_snr': -21}, |
| 148 | + 'CW': {'bandwidth_hz': 500, 'required_snr': 6}, |
| 149 | + 'SSB': {'bandwidth_hz': 2700, 'required_snr': 10} |
| 150 | + } |
| 151 | + ``` |
| 152 | + |
| 153 | +3. **🟡 ADD HVD025 ANTENNA MODEL** |
| 154 | + - Half-wave dipole at 25 feet (7.6m) |
| 155 | + - Implement takeoff angle control |
| 156 | + - Match VOACAP antenna gain patterns |
| 157 | + |
| 158 | +4. **🟡 VERIFY NOISE CALCULATIONS** |
| 159 | + - Compare noise floor output to VOACAP -150 dBW |
| 160 | + - Add bandwidth to noise power calculation |
| 161 | + - Document noise model differences |
| 162 | + |
| 163 | +### Testing Required |
| 164 | + |
| 165 | +1. **Run predictions with mode-specific parameters:** |
| 166 | + ```python |
| 167 | + # WSPR test |
| 168 | + engine.params.required_snr = -28.0 |
| 169 | + # bandwidth TBD once parameter added |
| 170 | + |
| 171 | + # FT8 test |
| 172 | + engine.params.required_snr = -21.0 |
| 173 | + # bandwidth TBD |
| 174 | + |
| 175 | + # CW test |
| 176 | + engine.params.required_snr = 6.0 |
| 177 | + # bandwidth TBD |
| 178 | + |
| 179 | + # SSB test |
| 180 | + engine.params.required_snr = 10.0 |
| 181 | + # bandwidth TBD |
| 182 | + ``` |
| 183 | + |
| 184 | +2. **Compare outputs to VOACAP reference maps** |
| 185 | + - Generate coverage predictions for each mode |
| 186 | + - Verify SNR values match within ±5 dB |
| 187 | + - Verify reliability values match within ±20% |
| 188 | + - Check MUF predictions |
| 189 | + |
| 190 | +### Documentation Needed |
| 191 | + |
| 192 | +1. **User Guide:** How to set parameters for different modes |
| 193 | +2. **Validation Report:** Quantified comparison vs VOACAP maps |
| 194 | +3. **Known Limitations:** Document missing features vs VOACAP |
| 195 | + |
| 196 | +--- |
| 197 | + |
| 198 | +## Detailed Analysis: Bandwidth Impact |
| 199 | + |
| 200 | +### Current Behavior (No Bandwidth Parameter) |
| 201 | + |
| 202 | +Without bandwidth in noise calculations: |
| 203 | +```python |
| 204 | +# Current: Noise is frequency-dependent but NOT bandwidth-dependent |
| 205 | +noise_dbw = atmospheric_noise + galactic_noise + man_made_noise |
| 206 | +snr_db = signal_power_dbw - noise_dbw |
| 207 | +``` |
| 208 | + |
| 209 | +This gives the same noise floor for WSPR (6 Hz) and SSB (2700 Hz), which is incorrect. |
| 210 | + |
| 211 | +### Correct Behavior (With Bandwidth) |
| 212 | + |
| 213 | +VOACAP uses bandwidth in dB/Hz format: |
| 214 | +``` |
| 215 | +Bandwidth (dB/Hz) = 10 * log10(Bandwidth_Hz) |
| 216 | +
|
| 217 | +WSPR: 10*log10(6) = 7.78 dB ≈ 8 dB/Hz (maps show 3 dB/Hz - CHECK!) |
| 218 | +FT8: 10*log10(50) = 16.99 dB ≈ 17 dB/Hz (maps show 19 dB/Hz - CHECK!) |
| 219 | +CW: 10*log10(500) = 26.99 dB ≈ 27 dB/Hz (maps show 13 dB/Hz - CHECK!) |
| 220 | +SSB: 10*log10(2700) = 34.31 dB ≈ 34 dB/Hz (maps show 38 dB/Hz - CHECK!) |
| 221 | +``` |
| 222 | + |
| 223 | +**Note:** The bandwidth values in VOACAP maps don't match standard signal bandwidths! Need to investigate what these values actually represent. |
| 224 | + |
| 225 | +**Hypothesis:** These may be receiver bandwidth or processing gain values, not signal bandwidths. |
| 226 | + |
| 227 | +### Impact on SNR |
| 228 | + |
| 229 | +For the same signal power and noise density: |
| 230 | +``` |
| 231 | +SNR_WSPR = SNR_base - 3 dB (3 dB/Hz bandwidth) |
| 232 | +SNR_CW = SNR_base - 13 dB (13 dB/Hz bandwidth) |
| 233 | +SNR_FT8 = SNR_base - 19 dB (19 dB/Hz bandwidth) |
| 234 | +SNR_SSB = SNR_base - 38 dB (38 dB/Hz bandwidth) |
| 235 | +``` |
| 236 | + |
| 237 | +This explains why weak-signal modes (WSPR, FT8) can work with much lower SNR! |
| 238 | + |
| 239 | +--- |
| 240 | + |
| 241 | +## Next Steps |
| 242 | + |
| 243 | +### Phase 1: Investigation |
| 244 | +- [ ] Understand VOACAP bandwidth specification (dB/Hz vs Hz) |
| 245 | +- [ ] Compare noise calculations: our output vs VOACAP -150 dBW |
| 246 | +- [ ] Identify where HVD025 antenna pattern is defined |
| 247 | +- [ ] Run test predictions with current implementation |
| 248 | + |
| 249 | +### Phase 2: Implementation |
| 250 | +- [ ] Add `bandwidth` parameter to `VoacapParams` |
| 251 | +- [ ] Integrate bandwidth into noise calculations |
| 252 | +- [ ] Add mode preset system |
| 253 | +- [ ] Implement HVD025 antenna model (if needed) |
| 254 | + |
| 255 | +### Phase 3: Validation |
| 256 | +- [ ] Generate predictions matching VOACAP test cases |
| 257 | +- [ ] Compare numerical outputs |
| 258 | +- [ ] Generate coverage maps (if visualization added) |
| 259 | +- [ ] Document validation results |
| 260 | + |
| 261 | +### Phase 4: Documentation |
| 262 | +- [ ] Update user guide with mode settings |
| 263 | +- [ ] Add example scripts for each mode |
| 264 | +- [ ] Document validation against VOACAP |
| 265 | +- [ ] Update README with known differences |
| 266 | + |
| 267 | +--- |
| 268 | + |
| 269 | +## Validation Test Cases (from PDFs) |
| 270 | + |
| 271 | +Based on uploaded reference maps, we should test: |
| 272 | + |
| 273 | +1. **FN74ui → Various distances, WSPR mode** |
| 274 | + - Bandwidth: 3 dB/Hz |
| 275 | + - Required SNR: -28 dB |
| 276 | + - Compare REL and SDBW maps |
| 277 | + |
| 278 | +2. **FN74ui → Various distances, FT8 mode** |
| 279 | + - Bandwidth: 19 dB/Hz |
| 280 | + - Required SNR: -21 dB |
| 281 | + - Compare REL and SDBW maps |
| 282 | + |
| 283 | +3. **FN74ui → Various distances, CW mode** |
| 284 | + - Bandwidth: 13 dB/Hz |
| 285 | + - Required SNR: 6 dB |
| 286 | + - Compare REL and SDBW maps |
| 287 | + |
| 288 | +4. **FN74ui → Various distances, SSB mode** |
| 289 | + - Bandwidth: 38 dB/Hz |
| 290 | + - Required SNR: 10 dB |
| 291 | + - Compare REL and SDBW maps |
| 292 | + |
| 293 | +For each test: |
| 294 | +- Extract sample points from maps at various distances/azimuths |
| 295 | +- Run DVOACAP prediction with matching parameters |
| 296 | +- Compare SNR, Reliability, and Signal Strength |
| 297 | +- Document discrepancies |
| 298 | + |
| 299 | +--- |
| 300 | + |
| 301 | +## Conclusion |
| 302 | + |
| 303 | +**Main Issues Identified:** |
| 304 | + |
| 305 | +1. ❌ **No bandwidth parameter** - Cannot differentiate between modes |
| 306 | +2. ❌ **Required SNR default too high** - Already documented, solution exists |
| 307 | +3. ⚠️ **Antenna model differences** - May affect results |
| 308 | +4. ⚠️ **Noise specification differences** - Need verification |
| 309 | + |
| 310 | +**Priority Fixes:** |
| 311 | + |
| 312 | +1. **HIGH:** Add bandwidth parameter and integrate into noise calculations |
| 313 | +2. **MEDIUM:** Add mode preset system for easy configuration |
| 314 | +3. **MEDIUM:** Verify noise calculations match VOACAP |
| 315 | +4. **LOW:** Add HVD025 antenna model (may not be critical) |
| 316 | + |
| 317 | +**Expected Outcome:** |
| 318 | + |
| 319 | +With bandwidth and required_snr properly set, DVOACAP should produce predictions matching VOACAP reference maps within acceptable tolerances (±5 dB SNR, ±20% reliability). |
| 320 | + |
| 321 | +--- |
| 322 | + |
| 323 | +**Report Generated:** 2025-11-17 |
| 324 | +**Analysis By:** Claude Code |
| 325 | +**Reference:** VOACAP maps from examples/FN74ui 2025.11.17-*.pdf |
| 326 | +**Status:** READY FOR IMPLEMENTATION |
0 commit comments