Skip to content

v4.1.5: Advanced analysis, professional 3D plots, code cleanup#55

Merged
RFingAdam merged 11 commits intomainfrom
refactor
Feb 25, 2026
Merged

v4.1.5: Advanced analysis, professional 3D plots, code cleanup#55
RFingAdam merged 11 commits intomainfrom
refactor

Conversation

@RFingAdam
Copy link
Owner

Summary

  • 5 new advanced analysis modules: Link Budget/Range Estimation, Indoor Propagation (ITU-R P.1238), Multipath Fading Assessment, Enhanced MIMO Analysis, and Wearable/Medical Device Assessment
  • Professional 3D antenna plots: Shared _setup_3d_axes() helper across all four 3D routines with equal aspect ratio, box-edge labels, and DUT orientation triad (X=green, Y=red, Z=blue) matching the physical chamber marker
  • Bug fixes: Indoor propagation heatmap FSPL vectorisation, multipath fading outage path loss, shadow fading heatmap application, link budget margin row index
  • Code cleanup: Removed dead functions from ai_analysis.py, unused imports, stale TODOs; replaced all deprecated plt.get_cmap() calls; standardised 3D plot titles and colorbar layout
  • CI clean: 0 flake8 critical errors, black-formatted, 300 tests pass (148 skipped)

Test plan

  • flake8 --select=E9,F63,F7,F82 — 0 critical errors
  • black --check — all 25 files pass
  • pytest — 300 passed, 148 skipped, 0 failures
  • PyInstaller exe builds successfully
  • Inno Setup installer builds (v4.1.5)
  • Real TRP data (ANT1 2440 MHz BT Ch17) renders correctly in all 3D views
  • DUT orientation triad visible and correctly oriented in both default and rotated views

🤖 Generated with Claude Code

RFingAdam and others added 11 commits February 11, 2026 20:00
…g, MIMO, wearable)

Implements 5 new analysis features integrated into both active and passive
workflows with GUI settings, batch processing, and 45 validation tests:

- Link Budget: Friis range estimation, range-vs-azimuth polar, link margin
  with protocol presets (BLE, WiFi, LoRa, Zigbee, LTE, NB-IoT)
- Indoor Propagation: ITU-R P.1238 path loss, P.2040 wall penetration,
  environment presets (Office, Hospital, Industrial, etc.)
- Multipath Fading: Rayleigh/Rician CDF, fade margin for target reliability,
  Monte-Carlo fading envelope with outage analysis
- Enhanced MIMO: MRC/EGC/SC combining gain, capacity-vs-SNR curves,
  Mean Effective Gain (Taga model with XPR)
- Wearable/Medical: Body-worn pattern analysis across positions, dense device
  SINR modeling, SAR exposure screening, IEEE 802.15.6 WBAN link budget

GUI: Scrollable settings dialog with collapsible LabelFrame sections,
protocol/environment dropdown presets with auto-populated parameters,
cross-feature parameter sharing between Link Budget and Indoor/Fading.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lib compat

- Bulk processing now reports per-job/per-file outcomes instead of blanket success
- Update checker runs in background thread (startup-safe, non-blocking)
- Replace deprecated cm.get_cmap with plt.get_cmap for matplotlib compat
- Add fixture-based parser tests replacing skipped TODOs
- Add batch failure regression integration tests
- Add Rician fading test coverage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- RELEASE_NOTES.md: Add v4.1.5 section (advanced analysis suite)
- README.md: Update "New in v4.1" section, test badge (450), MCP tools (25)
- AI_STATUS.md: Update version, roadmap with v4.1.5 milestone
- CONTRIBUTING.md: Fix stale test counts (227→450) and coverage (22%→26%)
- .bumpversion.cfg: Add installer.iss to auto-update on version bump
- .gitignore: Add installer_output/
- installer.iss: Update default version to 4.1.5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Refactored all three 3D plot routines (active, passive, masked) to share a
common _setup_3d_axes() helper that provides:
- Equal aspect ratio via set_box_aspect([1,1,1])
- Symmetric limits centred on the origin
- Box-edge axis labels (X/Y/Z) rendered in the 2D overlay layer so they
  are never occluded by the surface
- Short coloured orientation arrows (X=green, Y=red, Z=blue) on the
  negative side of each axis, matching the physical DUT marker used in the
  anechoic chamber
- Tighter figure layout (10×8, subplots_adjust) with suptitle and colorbar
  max-value annotation

Also vectorised free_space_path_loss() so it accepts arrays for distance,
fixing the indoor propagation heatmap calculation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaced individual per-axis arrows with a proper XYZ tripod anchored
at the (-lim, -lim, -lim) corner, pointing outward in +X/+Y/+Z.
Matches the physical chamber orientation marker from every view angle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The plot_polarization_3d() function (axial ratio + sense) was the only
3D routine still using inline axis setup. Now all four 3D plot functions
share the same helper with equal aspect, box-edge labels, and DUT
orientation triad.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…D layout

plotting.py:
- Remove unused `patheffects as pe` import
- Remove stale TODO and unused variables (peak_band_phi/theta_freq)
- Replace 5× deprecated plt.get_cmap() with matplotlib.colormaps.get_cmap()
- Standardise passive & masked 3D plots to fig.suptitle() + tighter colorbar
  (now consistent with active 3D layout)

ai_analysis.py:
- Remove dead functions: get_antenna_domain_knowledge(),
  create_analysis_system_prompt(), REPORT_TEMPLATE_STATUS dict

tests/test_ai_analysis.py:
- Remove tests for deleted utility functions (300 pass, 148 skipped)

docs:
- Update RELEASE_NOTES.md with cleanup details, correct test count, date
- Update README.md v4.1 section

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- black reformatted 7 files (plotting, calculations, file_utils,
  config_template, dialogs_mixin, callbacks_mixin, tools_mixin)
- Removed unused imports: apply_indoor_propagation, PROTOCOL_PRESETS,
  ENVIRONMENT_PRESETS, Axes3D from plotting.py
- All CI checks pass: 0 flake8 critical errors, black clean, 300 tests pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@RFingAdam RFingAdam merged commit 7008ea2 into main Feb 25, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant