satsim.radar package — SatSim 0.23.0 documentation

# 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.