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:
objectParameters 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_poweris provided, an Rmax is computed and detectionrequires
range_value <= Rmax.A simple SNR proxy is computed as
(Rmax / range_value)^4when Rmax is available. Ifp.snr_thresholdis provided, detection additionally requiressnr_proxy >= p.snr_threshold. If Rmax is not available, the SNR proxy isNoneand 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_proxyis dimensionless and follows a simple (Rmax / R)^4 scaling when a power threshold is available; otherwiseNone.
- 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_poweris provided; otherwiseNone.
- 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.