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
radarsiminstead ofsrc: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_presetand other unused keys were removed. - Removed modules that did not work or were never connected:
advanced/(except SAR/ISAR, nowradarsim.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 --outandradarsim --list; built-in scenarios ship inside the package.- MkDocs documentation with figures generated by
tools/make_figures.pyand screenshots bytools/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¶
- Replace
src.withradarsim.in imports. - 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.
- If you post-process Doppler or radial velocity, flip the sign of values from 3.x.
python run_gui.pystill works from a checkout;radarsimis 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 inClutterModel.ground_clutter_sigma0to match scenario specifications. Resolves crash inmountain_ambush.yaml. - Dynamic Radar Parameter Synchronization: Converted
SimulationEngine._radar_paramsto a real-time property synchronized withself.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
UnicodeEncodeErroron 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 Scenariosmenu for instant one-click scenario launching without manual file browsing. - Command-Line Scenario Loading:
python run_gui.py [scenario_path]andradarsim [scenario_path]now accept a scenario YAML/JSON file path directly on startup. - GUI File Filter: Added
*.jsontoQFileDialogscenario 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
radarsimand sourcerun_gui.pyentry 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.