Make the fan-dipole summary and tuning chart per-band - #13
Merged
Conversation
A fan dipole is multiband by leg, but the summary and build sheet treated it
as a single-band antenna at the operating frequency.
Summary: the "Other bands" line ran the harmonic-match scan, which the coupled
fan legs miss, so a multiband antenna read as "not a close match on other
bands". A fan dipole now gets a per-leg report instead — fan_dipole_legs_report
solves at each leg's own design frequency, and the summary lists every band the
antenna covers with its SWR ("Bands covered — one dipole leg per band").
Build sheet: the tuning chart was one whole-antenna table from the summed leg
length, meaningless for a fan. A fan dipole now gets a per-band tuning table
(BandTuningRow) — each leg's length and the trim that shifts its band ~1% —
and the overall chart is suppressed. Templates render whichever applies.
Tests cover the per-leg report, the summary's "Bands covered" section, the
per-band tuning table replacing the overall chart, and that non-fan antennas
keep the overall chart. Suite 521 -> 526.
Note: the per-leg SWRs surface that the modelled legs interact strongly at
their default half-wave lengths (some bands read high until trimmed) — a
fan-dipole geometry-fidelity matter, separate from this presentation fix.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The fan geometry used a fixed 30° azimuth fan, so the spacing between adjacent leg ends was an uncontrolled by-product of angle × leg length — and came out backwards: the legs closest in frequency (nearly the same length) ended up closest together, maximising the coupling that detunes them. Replace it with a controlled end spacing — the distance between adjacent leg ends, which is what a spreader actually sets. FanDipoleModel gains end_spacing_m (default 0.3 m); leg_end_offsets_m centres the legs and steps their ends by that much, and the card builder fans each leg to put its end at that perpendicular offset (a longer leg takes a shallower angle). The model rejects a spacing too large for the shortest leg. A "Leg-end spacing" field on the fan-dipole input drives it (auto-saved and unit-aware like the other length inputs). Widening it measurably reduces the inter-leg coupling on most bands; perfect multiband still needs per-leg trimming (the per-band tuning chart), since a leg can also be a harmonic on another leg's band. Tests: the end offsets step by the spacing, the deck's leg ends match, an over-large spacing is rejected, and the field round-trips through the form. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem (reported)
For a fan dipole, the summary and build sheet only described the antenna at the single operating frequency:
Fix — per-band for a fan dipole
fan_dipole_legs_report) that solves at each leg's own design frequency, and the summary lists every band the antenna covers with its SWR — "Bands covered — one dipole leg per band; trim each leg to tune its own band."BandTuningRow) — each leg's length and the trim that shifts its band ~1% — replaces the meaningless overall chart (which is suppressed for a fan). Templates render whichever applies.Tests
+5: the per-leg report covers every leg band; the summary's "Bands covered" section (no more "not a close match"); the per-band tuning table replacing the overall chart; non-fan antennas keep the overall chart. Suite 521 → 526, green locally.
Honest note (separate follow-up)
The per-leg SWRs surface that the modelled fan legs interact strongly at their default half-wave lengths — with several closely-spaced legs in the 30° fan sharing one feed, some bands read high SWR until trimmed (and trimming alone may not fully fix coupling). That's a fan-dipole geometry-fidelity matter (wider/separated legs, drooping, per-leg trim), distinct from this presentation fix. Happy to take it on next if you'd like — the summary now makes the effect visible, which is the right first step.
🤖 Generated with Claude Code