Repository navigation
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.