Skip to content

Commit 0f07ea8

Browse files
authored
Merge pull request #112 from skyelaird/claude/add-map-examples-01AUqA6i9eWi5mAQ9F67VZ2J
Add REL and SDBW map examples
2 parents 1f4d608 + bd7efb4 commit 0f07ea8

3 files changed

Lines changed: 626 additions & 0 deletions

File tree

VOACAP_VALIDATION_FINDINGS.md

Lines changed: 326 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,326 @@
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

Comments
 (0)