satsim.radar package

satsim.radar.simulate(ssp: Dict[str, Any], output_dir: str = './') str

Simulate analytical radar measurements and save per-frame JSON outputs.

Observation units follow SatSim/UDL conventions: - azimuth/elevation: degrees - range: kilometers - rangeRate: kilometers per second - doppler: meters per second (line-of-sight velocity; doppler == rangeRate * 1000)

Gaussian measurement noise is applied using the 1-sigma values in radar.detection. Only detections are emitted (no false alarms yet).

Returns:

The output directory used for this run.

satsim.radar.simulate_from_file(config_file: str, output_dir: str = './') str

Load, transform ($sample/$import/$ref), and run the radar simulator.

Submodules

satsim.radar.monostatic module

class satsim.radar.monostatic.RadarParams(tx_power: float, tx_frequency: float, antenna_diameter: float, efficiency: float, min_detectable_power: float | None = None, snr_threshold: float | None = None, angle_error: float = 0.0, range_error: float = 0.0, range_rate_error: float = 0.0, false_alarm_rate: float = 0.0, az_limits: Tuple[float, float] | None = None, el_limits: Tuple[float, float] | None = None, range_limits: Tuple[float, float] | None = None, dwell: float = 1.0, num_frames: int = 1, sensor_id: str | None = None)

Bases: object

Parameters for a (mono-static) radar sensor.

Units and conventions: - tx_power: transmit power [W] - tx_frequency: carrier frequency [Hz] - antenna_diameter: effective antenna diameter [m] - efficiency: antenna efficiency [0–1] - min_detectable_power: receiver minimum detectable power [W] (optional) - snr_threshold: optional SNR threshold (dimensionless) for downstream use - angle_error: 1-sigma angle measurement error [deg] - range_error: 1-sigma range error [km] - range_rate_error: 1-sigma range-rate error [km/s] - false_alarm_rate: probability per dwell (not used here yet) - az_limits: azimuth FOV limits [deg] (min, max) - el_limits: elevation FOV limits [deg] (min, max) - range_limits: detection range bounds [km] (min, max) - dwell: dwell time per frame [s] - num_frames: number of frames to simulate - sensor_id: optional sensor identifier string

angle_error: float = 0.0
antenna_diameter: float
az_limits: Tuple[float, float] | None = None
dwell: float = 1.0
efficiency: float
el_limits: Tuple[float, float] | None = None
false_alarm_rate: float = 0.0
min_detectable_power: float | None = None
num_frames: int = 1
range_error: float = 0.0
range_limits: Tuple[float, float] | None = None
range_rate_error: float = 0.0
sensor_id: str | None = None
snr_threshold: float | None = None
tx_frequency: float
tx_power: float
satsim.radar.monostatic.detect(p: RadarParams, rcs: float, range_value: float) Tuple[bool, float | None]

Binary detection test using a power threshold, with optional SNR gating.

Behavior: - If min_detectable_power is provided, an Rmax is computed and detection

requires range_value <= Rmax.

  • A simple SNR proxy is computed as (Rmax / range_value)^4 when Rmax is available. If p.snr_threshold is provided, detection additionally requires snr_proxy >= p.snr_threshold. If Rmax is not available, the SNR proxy is None and the SNR threshold is not enforced.

Parameters:
  • p – radar parameters

  • rcs – radar cross section [m^2]

  • range_value – range [km]

Returns:

Tuple of (detected, snr_proxy). snr_proxy is dimensionless and follows a simple (Rmax / R)^4 scaling when a power threshold is available; otherwise None.

satsim.radar.monostatic.doppler(p: RadarParams, rr: float) float

Compute monostatic Doppler frequency shift from range-rate.

Sign convention: positive for closing (decreasing range), negative for receding (increasing range).

Parameters:
  • p – radar parameters (uses tx_frequency)

  • rr – range-rate [km/s]

Returns:

Doppler frequency shift [Hz].

satsim.radar.monostatic.doppler_unc(p: RadarParams) float

Return Doppler 1-sigma uncertainty [Hz] from range-rate uncertainty.

Uses the monostatic mapping with standard deviation of range-rate.

satsim.radar.monostatic.gain_linear(diameter: float, wave_length: float, efficiency: float) float

Approximate aperture antenna gain in linear units.

Uses G = eta * (pi*D/lambda)^2.

Parameters:
  • diameter – effective diameter [m]

  • wave_length – wavelength [m]

  • efficiency – aperture efficiency [0–1]

Returns:

Dimensionless gain (linear). Returns 1.0 if inputs are invalid.

satsim.radar.monostatic.in_fov(az: float, el: float, p: RadarParams) bool

Check if (az, el) fall within configured FOV limits.

Parameters:
  • az – azimuth [deg]

  • el – elevation [deg]

  • p – radar parameters

Returns:

True if both azimuth and elevation are within limits (or if limits are not configured).

satsim.radar.monostatic.in_range_limits(rng: float, p: RadarParams) bool

Check if range falls within configured limits.

Parameters:
  • rng – range [km]

  • p – radar parameters

Returns:

True if within limits (or if limits are not configured).

satsim.radar.monostatic.max_detectable_range(p: RadarParams, sigma: float) float | None

Maximum detection range from the radar equation.

Solves for R where received power equals the minimum detectable power: Rmax = ((Pt * G^2 * lambda^2 * sigma) / ((4*pi)^3 * Smin))^(1/4)

Parameters:
  • p – radar parameters

  • sigma – target radar cross section [m^2]

Returns:

Maximum range [km] if min_detectable_power is provided; otherwise None.

satsim.radar.monostatic.range_rate(observer: Any, target: Any, t, dt: float = 1.0) float

Estimate range-rate via finite difference over a short interval.

Parameters:
  • observer – observing site/body (Skyfield object)

  • target – target object (Skyfield object)

  • t – epoch (Skyfield time or compatible)

  • dt – differencing interval [s]

Returns:

Range-rate [km/s].

satsim.radar.monostatic.range_unc(p: RadarParams) float

Return range 1-sigma uncertainty [km] from parameters.

satsim.radar.monostatic.wavelength(tx_frequency: float) float

Return RF wavelength for a given frequency.

Parameters:

tx_frequency – frequency [Hz]

Returns:

Wavelength [m]. Returns 0.0 if input is non-positive.

satsim.radar.simulator module

satsim.radar.simulator.simulate(ssp: Dict[str, Any], output_dir: str = './') str

Simulate analytical radar measurements and save per-frame JSON outputs.

Observation units follow SatSim/UDL conventions: - azimuth/elevation: degrees - range: kilometers - rangeRate: kilometers per second - doppler: meters per second (line-of-sight velocity; doppler == rangeRate * 1000)

Gaussian measurement noise is applied using the 1-sigma values in radar.detection. Only detections are emitted (no false alarms yet).

Returns:

The output directory used for this run.

satsim.radar.simulator.simulate_from_file(config_file: str, output_dir: str = './') str

Load, transform ($sample/$import/$ref), and run the radar simulator.