Repository navigation
feat(rf): circuit fundamentals, radio-system math, and a circuit calculator - #13
Merged
Merged
Conversation
…ulator
Covers every calculation question in the FCC Amateur Extra (Element 4)
2024-2028 question pool, plus the circuit and system arithmetic of
day-to-day advanced station work.
- 59 new formula functions in the Radio & RF category:
- circuits: Ohm's law/power, series/parallel, RC/RL time constants,
RLC impedance, phase angle, admittance, power factor, true/reactive/
apparent power, circuit Q
- radio systems: ERP/EIRP chains, received level and link margin,
op-amp gain, FM index and Carson bandwidth, CW/FSK necessary bandwidth
(47 CFR 2.202), ADC resolution and Nyquist rate, sideband band edges,
line length, stub reactance, antenna efficiency, IMD3/IP3/SFDR, image
frequency
- impedance arguments take an Excel complex string or R, X numbers;
complex results are complex strings IMREAL/IMAGINARY/IMABS read
- docs/examples/radio/extra-class-formulas works all 45 calculation
questions and exits non-zero if any disagrees with the answer key
- Tools > Radio > Circuit calculator: Ohm's law wheel, time-constant and
resonance graphs, and impedance. Graphs are keyboard-focusable, carry a
screen-reader description that updates with the numbers, and are
paired with a data table and "Data -> new sheet".
- core.science.engnum parses/formats engineering notation; the Qt compat
layer exports QAccessible/QAccessibleEvent.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0157FDmhHjtSvT3pWABUTvmX
Only rule text verified from primary sources is built in: 47 CFR 1.1310 Table 1 (MPE, both tiers, 6/30-minute averaging), the 1.1310(b)-(c) SAR limits, and the 1.1307(b)(3)(i)(C) exemption table with its lambda/2pi applicability limit. - 11 formula functions: MPELIMIT, MPEEFIELD, MPEHFIELD, PWRDENSITY, MPEDIST, MPEPERCENT, AVGPOWER, EXEMPTERP, EXEMPTMINDIST, SARLIMIT, SAR (frequencies in Hz, power density in the FCC's mW/cm2) - Ground reflection is a power-density factor: 1 (free space), 4 (full in-phase reflection) or user-entered. The tests show the 1.1307 exemption table is exactly the x4 model applied to ERP, and that the 1.1310 E-field and power-density columns agree via E^2/377. - Duty cycle and transmit time are inputs; OET-65's per-mode factors and reflection factor, the 1.1307(b)(3)(i)(B) P_th formula, and ICNIRP levels could not be verified and are documented as omitted. - Tools > Radio > RF exposure estimate (MPE): whole-station evaluation, verdicts stated in words, an accessible log-log density-vs-distance graph with limits and compliance distances marked, data table, and "Data -> new sheet". The estimate caveat is shown on the dialog. - GraphPanel/rows_to_new_sheet move into a shared dialogs module; vertical reference-line labels move to the plot bottom to avoid colliding with threshold labels. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0157FDmhHjtSvT3pWABUTvmX
This was referenced Sep 25, 2026
…-exposure feat(rf): FCC RF-exposure (MPE/SAR) estimates and an exposure dialog
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.
PR 1 of 3 in the radio-toolset series. Stacked PRs follow for RF exposure (MPE/SAR) and the Smith chart/accessibility upgrade.
Why
abax's RF layer did not cover the circuit math of the FCC Amateur Extra (Element 4) exam. The 2024–2028 pool is effective 2024-07-01 through 2028-06-30, and this PR works from the copy that includes the fourth errata (2026-02-04). The missing pieces:
I extracted the pool text and inventoried every question that needs arithmetic: 45 questions reducing to about 20 distinct relations. This PR covers all of them.
What
59 new formula functions (Radio & RF category):
OHMVOHMIOHMRPOWERVIPOWERIRPOWERVRRSERIESRPARALLELLSERIESLPARALLELCSERIESCPARALLEL(values or ranges)TAURCTAURLTCCHARGETCDECAYTCTIMEZSERIESRLCZPARALLELRLCZMAGPHASEANGLEPOWERFACTORADMITTANCECONDUCTANCESUSCEPTANCEPOLAR2RECTREALPOWERREACTIVEPOWERAPPARENTPOWERQSERIESQPARALLELERPWEIRPWRXLEVELLINKMARGINBWNOISEDBOPAMPINVOPAMPNONINVMODINDEXDEVRATIOCARSONBWCWBWFSKBWADCBITSADCLEVELSADCLSBADCSNRNYQUISTUSBMAXFREQLSBMINFREQLINELENELECDEGSTUBXANTEFFIMD3LOIMD3HIIP3SFDRIMAGEFREQ"75+25j") or separateR, Xnumbers.IMREAL,IMAGINARYandIMABSfunctions read.core.science.circuitsandcore.science.radio_calc.Worked examples:
docs/examples/radio/extra-class-formulasevaluates all 45 calculation questions as formulas. It exits non-zero if any result disagrees with the answer key, sotests/test_examples.pyenforces it. I also checked the answer letters and wording in the script against the pool text programmatically.Circuit calculator (Tools → Radio), with four tabs:
Fields accept engineering notation (
50u,40 pF,3.5 MHz).Accessibility of the graphs:
DescriptionChangedwhen the values change.Sources and caveats
CWBWuses 0.8 baud per WPM, the ratio in the rule's own worked example (25 WPM with B = 20), and the pool uses the same ratio (E8C05). This is documented.Verification
ruff check .passes.pytest -n auto: 4647 passed, 196 skipped. The skip count was unchanged by this PR; none of the new tests skip.mkdocs build --strictpasses.python make_pyz.pybuilds, andabax.pyz --versionruns.🤖 Generated with Claude Code
https://claude.ai/code/session_0157FDmhHjtSvT3pWABUTvmX
Generated by Claude Code