cleanup
This commit is contained in:
parent
acfdca35df
commit
49108423d6
2 changed files with 0 additions and 163 deletions
99
elevation.md
99
elevation.md
|
|
@ -1,99 +0,0 @@
|
|||
how does antenna height and dish elevation affect probability of success in launching to atmospheric wavegude.
|
||||
Mar 14
|
||||
Great question — this gets into the coupling efficiency problem, which is one of the least-discussed but most important factors in mm-wave tropo work.
|
||||
|
||||
|
||||
|
||||
Antenna Height & Elevation Angle — Coupling to Atmospheric Waveguides
|
||||
|
||||
The Core Problem
|
||||
A tropospheric duct is a physical waveguide layer in the atmosphere — typically 50–500m thick, at some height AGL. Your antenna must illuminate that layer at the correct geometry. Two independent variables control this:
|
||||
1. Physical antenna height AGL — determines whether the antenna beam physically intersects the duct layer at useful path distances
|
||||
2. Dish elevation angle — determines the vertical angle of the beam, which combined with height and distance sets where the beam axis crosses the duct
|
||||
These interact, and getting both wrong means launching energy above or below the duct entirely.
|
||||
|
||||
|
||||
|
||||
The Geometry — Surface Ducts
|
||||
|
||||
For a surface duct (base at ground, top 50–200m AGL), the coupling requirement is straightforward but demanding:
|
||||
The beam must arrive at the duct layer at a grazing angle — typically less than 0.5° for efficient coupling into a surface duct at 10 GHz. Above about 1° the signal largely passes through the duct ceiling rather than being trapped.
|
||||
For W5LUA at 70 feet (~21m) aiming at a duct top of say 150m AGL:
|
||||
|
||||
At 100 km: elevation needed = arctan((150-21)/100,000) = +0.074° ✓ grazing
|
||||
At 300 km: elevation needed = arctan((150-21)/300,000) = +0.025° ✓ excellent
|
||||
At 500 km: Earth curvature dominates — target duct is geometrically below horizonEarth curvature drops the apparent horizon by about 1° per 300 km at the surface. This means for paths beyond ~300 km, a surface duct contact requires the duct to either be elevated, or the Earth's effective radius to be significantly extended by the duct itself (k-factor >> 1.33).
|
||||
|
||||
|
||||
|
||||
The Geometry — Elevated Ducts
|
||||
|
||||
An elevated duct (base 200–2000m AGL) changes the picture completely. Now the antenna may need to aim slightly upward to intersect the duct layer at close range, and the geometry becomes path-distance dependent:
|
||||
|
||||
Duct base 500m AGL, antenna at 21m (W5LUA):
|
||||
|
||||
Distance Elev angle to duct base Notes
|
||||
50 km +0.55° Easy coupling
|
||||
100 km +0.28° Good
|
||||
200 km +0.14° Near zero, approaching grazing
|
||||
300 km +0.08° (≈0°) Essentially flat — optimal for trapping
|
||||
500 km Earth curve significant — duct base appears below geometric horizon
|
||||
but k-factor > 1 extends it... depends on duct depthThe key insight: there is a "sweet spot" distance for elevated duct coupling based on antenna height and duct altitude. Too close — beam overshoots. Too far — Earth curvature puts duct geometrically below you. The sweet spot is where the beam grazes the duct base at near-zero elevation.
|
||||
|
||||
|
||||
|
||||
Antenna Height Effect — Quantified
|
||||
|
||||
Higher antenna = more favorable geometry for elevated ducts at long distances, because you're looking down at a smaller angle or have better Earth curvature clearance.
|
||||
For VE4MA at 50 feet (15m) vs W5LUA at 70 feet (21m):
|
||||
|
||||
Duct at 300m AGL, path distance 500 km:
|
||||
|
||||
Geometric depression to duct (ignoring refraction):
|
||||
Earth drop at 500 km ≈ 500²/(2 × 6371) km ≈ 19.6 km ← Earth curves away dramatically
|
||||
|
||||
With standard k=1.33 atmosphere:
|
||||
Effective drop ≈ 500²/(2 × 8494) ≈ 14.7 km
|
||||
|
||||
The duct at 300m AGL is effectively 14,700 - 300 = 14,400m BELOW the geometric horizon.
|
||||
The duct is only accessible because the duct itself is extending the k-factor locally.
|
||||
|
||||
Antenna height difference (15m vs 21m) = 6m
|
||||
This shifts the beam geometry by arctan(6/500,000) = 0.0007° — essentially negligible
|
||||
at these distances compared to the dominant effect of the duct's own k-factor.The counterintuitive conclusion: at very long paths (>300 km), antenna height differences of 15–70 feet matter very little for duct coupling geometry — the duct's own refractive gradient dominates everything. Height matters much more at shorter paths (50–150 km) where the geometry is more sensitive to exact beam placement.
|
||||
|
||||
|
||||
|
||||
Elevation Angle — The Critical Variable
|
||||
|
||||
This is where operators have real control. Most microwave dishes are aimed at near-zero elevation by default, but the optimal angle is path and duct specific:
|
||||
For surface duct at 10 GHz:
|
||||
|
||||
Optimal: 0° to −0.1° (slightly below geometric horizon)
|
||||
Tilting up even 0.3° can significantly reduce coupling at 300+ km
|
||||
Many operators under-appreciate that aiming slightly DOWN into the duct is correct
|
||||
For elevated duct at 500–1500m AGL:
|
||||
|
||||
At 100 km: aim +0.2° to +0.5° upward
|
||||
At 300 km: aim near 0°
|
||||
At 600+ km: aim slightly negative (−0.05° to −0.1°) to account for Earth curvature
|
||||
The practical problem: most amateur dishes have elevation adjustments with 0.1°–0.5° graduations. At 10 GHz a typical 60cm dish has a beamwidth of ~3°, so you have several degrees of margin. But at 24 GHz beamwidth shrinks to ~1.5° and at 47 GHz to under 1° — elevation angle errors that are irrelevant at 10 GHz become contact killers at 47 GHz.
|
||||
|
||||
|
||||
|
||||
Why W5LUA at 70 Feet Matters — The Real Reason
|
||||
|
||||
The benefit of height isn't primarily the geometry — it's clearing local ground clutter and near-field obstructions. A dish at 21m is above most trees, rooflines, and terrain undulations within the first few km. This matters because:
|
||||
|
||||
Near-field ground reflections can cause destructive interference that creates deep nulls at specific elevation angles
|
||||
Multipath from nearby terrain can scatter energy away from the duct-coupling angle
|
||||
At 70 feet, W5LUA's beam is clean from the antenna outward — the first Fresnel zone at 10 km is already well above ground
|
||||
VE4MA at 50 feet is similarly well-positioned for the flat Manitoba prairie — there's nothing to obstruct at any azimuth.
|
||||
|
||||
|
||||
|
||||
Summary Table
|
||||
|
||||
FactorEffectDominant rangeHeight >50 ftClears local obstructions, clean beam0–20 kmHeight difference 50 vs 70 ftNegligible geometry effect>300 kmElevation angle ±0.5°Significant coupling change at 24/47 GHzAll distancesElevation angle ±0.5°Moderate effect at 10 GHz (3° beam)<200 kmDuct height AGLDetermines optimal aim angle vs distanceAllDuct k-factorDominates over all antenna geometry at long range>300 kmEarth curvatureHard limit without duct k-factor extension>400 km
|
||||
Bottom line for the model: elevation angle and duct height are the critical coupling variables — not antenna height per se, beyond the threshold of clearing local obstructions. The fact that VE4MA (50 ft, flat prairie) and W5LUA (70 ft, suburban Dallas) both achieve similar range classes confirms this — the duct geometry is the dominant term.
|
||||
|
||||
64
findings.md
64
findings.md
|
|
@ -1,64 +0,0 @@
|
|||
# Findings — Bugs & Improvements (Non-Critical)
|
||||
|
||||
## Bugs
|
||||
|
||||
### 🟡 Medium
|
||||
|
||||
**All medium findings have been fixed.**
|
||||
|
||||
### 🟢 Low
|
||||
|
||||
**All low-severity bug findings have been fixed.**
|
||||
|
||||
| # | Resolution |
|
||||
|---|------------|
|
||||
| 12 | Rate limit lowered to 15/min |
|
||||
| 13 | Model loading wrapped in `Task.start` |
|
||||
| 14 | Guard boundary changed from `d > -3.0` to `d >= -3.0` |
|
||||
| 15 | Won't fix — Elixir's `//` is the range step operator; `||` is the correct operator for this pattern. Elixir has no `??` operator |
|
||||
| 16 | Removed fallback `Repo.get(Station, ...)` — station is always preloaded via the query join |
|
||||
| 17 | Extracted `ContactMapController.cache_key/0` function; `radio.ex` calls it by name |
|
||||
| 18 | Added `has_many :contacts` and `has_many :beacons` to `User` schema |
|
||||
|
||||
---
|
||||
|
||||
## Improvements
|
||||
|
||||
### Architecture & Design
|
||||
|
||||
**All A&D findings have been fixed.**
|
||||
|
||||
| # | Resolution |
|
||||
|---|------------|
|
||||
| 4 | Moved `serve_markdown_if_requested` after `put_secure_browser_headers` in the browser pipeline |
|
||||
|
||||
### Test Coverage Gaps
|
||||
|
||||
| Module | Status | Coverage |
|
||||
|--------|--------|----------|
|
||||
| `lib/microwaveprop/ionosphere.ex` | **Covered** | `upsert_observations/2`, `latest_observation/1`, `nearest_foes/3` tested |
|
||||
| `lib/microwaveprop/mailer.ex` | **Covered** | `apply_defaults/1` tested |
|
||||
| `lib/microwaveprop/repo.ex` | Not worth testing | Trivial `use Ecto.Repo` one-liner |
|
||||
| `lib/microwaveprop/space_weather.ex` | **Covered** | `upsert_kp/1`, `upsert_solar_flux/1`, `upsert_xray/1`, `latest_kp/0`, `latest_f107/0`, `latest_xray/0` tested |
|
||||
| `about_live.ex` | **Covered** | Content rendering and database stats display tested |
|
||||
|
||||
### Config & Tooling
|
||||
|
||||
**All C&T findings have been fixed.**
|
||||
|
||||
| # | Resolution |
|
||||
|---|------------|
|
||||
| 1 | `signing_salt` moved to `runtime.exs`, reads from `System.get_env("LIVE_VIEW_SIGNING_SALT", ...)` |
|
||||
| 2 | Precommit alias uses `deps.unlock --check-unused` |
|
||||
| 3 | `Credo.Check.Warning.UnsafeToAtom` re-enabled |
|
||||
| 4 | Considered — left disabled. Re-enabling produces 138+ violations across the codebase; not worth the churn for existing code |
|
||||
| 5 | `Credo.Check.Warning.LeakyEnvironment` re-enabled |
|
||||
|
||||
### Security (Remaining)
|
||||
|
||||
| # | Finding | Severity | Status |
|
||||
|---|---------|----------|--------|
|
||||
| 1 | `String.to_atom/1` usage — Credo `UnsafeToAtom` now enabled to flag new occurrences | Low | Mitigated |
|
||||
| 2 | Login rate limit lowered to 15/min | Low | Fixed |
|
||||
| 3 | `build_contact_changes` in `radio.ex:1277` uses `String.to_existing_atom(key)` — safe due to whitelist, but fragile | Low | Acknowledged |
|
||||
| 4 | Markdown path now runs after `put_secure_browser_headers` | Low | Fixed |
|
||||
Loading…
Add table
Reference in a new issue