Skip to content

Changelog

[4.0.0] - 2026-10-13

A rebuild of the simulator around a correct detection loop, a new desktop interface and a cleaned-up package. Scenario files, the Python import path and two sign conventions changed, so this is a major release; see Migrating from 3.x below.

Breaking changes

  • The package is now radarsim instead of src: from radarsim.simulation.engine import SimulationEngine.
  • One coordinate frame everywhere: ENU (x East, y North, z Up), azimuth clockwise from North.
  • Doppler is fd = −2·vr/λ with vr positive when opening; closing targets have negative radial velocity in every output.
  • Scenario files are validated against a schema. Unknown keys are errors with a suggestion; required_radar_preset and other unused keys were removed.
  • Removed modules that did not work or were never connected: advanced/ (except SAR/ISAR, now radarsim.signal.sar_isar), sensor fusion UI, LPI waveforms, RF spectrum view, WebGL renderer, the matplotlib 3-D view and the old Sphinx documentation.

Detection and physics

  • Detection happens only when the beam centre crosses a target (circular, sector and stare scans), giving one look per revisit.
  • Pulse-compression gain and the compressed range cell were missing (up to 26 dB of error); noise, jamming and clutter now combine after the matched filter.
  • Mean RCS in the SNR with the Swerling statistic only in Pd, removing a double-counted fluctuation.
  • Exact Swerling 1 and 2 detection probabilities, Gauss–Legendre integration for cases 3 and 4, cached; checked against a pulse-level Monte Carlo.
  • CFAR loss from the Gandhi–Kassam closed forms for CA, GO, SO and OS.
  • Clutter enters through the elevation pattern; MTI improvement factor per Skolnik with a 50 dB stability limit.
  • Rain attenuation limited to the ITU-R P.839 rain height; P.676 receives the dry-air pressure.
  • Terrain masking with Earth bulge, terrain presets and height_above_terrain_m.
  • Coordinated-turn motion, deploy times for chaff and decoys, chaff bloom and decay.
  • Every random draw goes through one seeded generator; reset() reproduces a run exactly.

Tracking

  • Track-while-scan inside the engine with continuous white-noise acceleration, two-point initiation with a velocity gate, misses only when the beam looked, revisit guard and maximum coast time.
  • Rewritten monopulse estimator (squinted Gaussian beams).

Interface

  • New desktop interface: dark console theme, IBM Plex type, own icon set, PPI, B-scope, A-scope, RHI, range–Doppler and 3-D views.
  • Simulation runs at a fixed step on its own thread; rendering adapts to the machine (16, 33 or 50 ms frames) with motion interpolation and a reduce-motion setting.
  • New: Pd–range coverage diagram, Monte Carlo panel with Wilson intervals, event log with CSV/JSON report export, scenario editor that draws on the scope and saves canonical YAML.
  • English and Turkish.

Tooling

  • radarsim --headless SCENARIO --duration --seed --out and radarsim --list; built-in scenarios ship inside the package.
  • MkDocs documentation with figures generated by tools/make_figures.py and screenshots by tools/capture_screenshots.py.
  • CI runs ruff, mypy, bandit, the translation check, tests on three systems, a wheel check outside the repository and a strict docs build; tagged releases build Windows, Linux and macOS applications.

Migrating from 3.x

  1. Replace src. with radarsim. in imports.
  2. Re-save old scenarios: load the file, fix the keys the validator reports, and check that positions and headings follow ENU with azimuth from North.
  3. If you post-process Doppler or radial velocity, flip the sign of values from 3.x.
  4. python run_gui.py still works from a checkout; radarsim is the installed command.

3.0.1 - 2026-09-30

Patch release resolving scenario execution edge cases, dynamic parameter synchronization, and command-line scenario loading.

Fixed

  • Phosphor Persistence Rendering Freeze: Replaced on-the-fly QPainter brush creation with a pre-cached discrete brush palette in PPI Scope and B-Scope, eliminating GUI freezing at startup and speeding up phosphor updates from 117 ms to 0.5 ms.
  • Sub-1GHz Attenuation Safety: Guarded ITU-R P.676 atmospheric absorption and ITU-R P.838 rain attenuation for frequencies below 1.0 GHz, returning 0.0 dB rather than raising an out-of-domain exception. Resolves crashes in stealth_deep_penetration.yaml.
  • Terrain Type Normalization: Added "mountain" alias and normalization in ClutterModel.ground_clutter_sigma0 to match scenario specifications. Resolves crash in mountain_ambush.yaml.
  • Dynamic Radar Parameter Synchronization: Converted SimulationEngine._radar_params to a real-time property synchronized with self.radar, ensuring GUI frequency/power slider changes immediately affect SNR and detection calculations.
  • Windows Console Encoding: Replaced Unicode arrow and lambda characters in console logging to prevent UnicodeEncodeError on CP1252/CP1254 environments.

Added

  • Scenario-Bundled Distribution: Bundled the scenarios/ directory in release ZIP/TAR.GZ archives so standalone executables have immediate access to all 10 scenario definitions.
  • Built-in Scenarios Menu: Added File > ⚡ Built-in Scenarios menu for instant one-click scenario launching without manual file browsing.
  • Command-Line Scenario Loading: python run_gui.py [scenario_path] and radarsim [scenario_path] now accept a scenario YAML/JSON file path directly on startup.
  • GUI File Filter: Added *.json to QFileDialog scenario open filter alongside *.yaml/*.yml.
  • Public API: Added MainWindow.load_scenario(filepath) for modular and programmatic scenario loading.
  • Automated Scenario Verification: Added regression test executing multi-step simulation on all distributed scenarios.

3.0.0 - 2026-08-20

This release replaces several approximate or placeholder paths with physically traceable implementations. It is a major release because signal-array shapes and calibration, tracking/fusion semantics, imaging behaviour, package metadata, and removed modules can affect existing callers.

Physics and detection

  • Corrected monostatic link-budget, thermal-noise, atmospheric/rain, polarization, Albersheim, Swerling, and seeded validation behaviour.
  • Added validated Oh 1992 bare-soil and NRL 2012 sea-reflectivity models with documented domains.
  • Added resolution-cell surface area, signal-to-noise-plus-clutter, Weibull/K clutter, and rain-volume calculations.
  • Added aggregate receiver input-power accounting and a circular-complex Gaussian hard-limiter/Bussgang distortion diagnostic.

Signal processing

  • Rebuilt pulse-Doppler acquisition around delayed complex LFM samples, linear matched filtering, fast/slow-time phase, physical axes, ambiguity metadata, window coherent gain, and equivalent noise bandwidth.
  • Calibrated CA, GO, SO, and OS one-dimensional CFAR thresholds and added true rectangular two-dimensional CA-CFAR.
  • Reworked stripmap SAR raw-data generation and range-Doppler focusing with non-circular fractional RCMC and calibrated coordinates.
  • Reworked ISAR compression, zero-filled profile alignment, and angular-rate cross-range mapping.
  • Omega-k and chirp-scaling entry points now explicitly report that they are unavailable instead of returning another algorithm’s result.

Tracking and fusion

  • Added NIS/chi-square gating, globally optimal Hungarian assignment, consecutive confirmation, exact coast/delete timing, and simulation timestamps.
  • Replaced explicit covariance inversions with stable solves and Joseph-form updates where applicable.
  • Added latency-aware constant-velocity timestamp alignment and joint multi-estimate covariance intersection.
  • Separated independent-Gaussian information fusion from unknown-correlation covariance intersection.

ECM and simulation

  • Added validated DRFM configuration, capture/pull/hold timing, RGPO/VGPO bounds, non-wrapping CPI injection, and radar-relative false-target placement.
  • Corrected exact SJNR combination and receiver saturation propagation into detection diagnostics.
  • Extended scenario round trips for receiver full scale, pulse integration, ground-surface parameters, and DRFM controls.

Desktop, packaging, and documentation

  • Unified the installed radarsim and source run_gui.py entry points on PySide6.
  • Wired target-inspector probability of detection to the simulation’s Swerling calculation and corrected SAR display normalization and metrics.
  • Removed obsolete optional modules and binary assets; RadarSim has no remote-service dependency.
  • Added UI smoke tests, strict lint/test/security/package CI, and tag-driven multi-platform PyInstaller release builds.
  • Replaced legacy phase notes with model equations, limitations, methodology, architecture, user guide, primary references, and release notes.

Verification

  • 341 automated tests across supported Python versions.
  • Ruff source/test lint, Bandit medium/high-severity scan, package build, Sphinx warnings-as-errors build, and offscreen PySide6 smoke coverage.

2.4.0 - 2026-05-11

  • Added initial SAR/ISAR, multi-radar fusion, DRFM/ECCM, EKF, and pulse-Doppler modules.
  • Added PySide6 scientific displays and scenario examples.
  • Several algorithms from this line were revised or removed in 3.0.0; use the 2.4.0 tag for historical behaviour.

1.0.0 - 2025-12-23

  • Initial open-source radar equation, target simulation, tracking, ECM, visualization, and export release.