Skip to content

API

Angles

High-level computation of incidence, look, squint, and other angles from sensor trajectories.

Attributes

__all__ module-attribute

Python
__all__ = ['compute_incidence_angles', 'compute_look_angles']

Classes

Functions:

compute_incidence_angles

Python
compute_incidence_angles(trajectory: Trajectory, azimuth_time: PreciseDateTime | datetime64, range_times: float | NDArray[floating], look_direction: SensorLookDirection, geodetic_altitude: float | None = None, doppler_frequencies: float | NDArray[floating] | None = None, carrier_wavelength: float | None = None, *, radians: bool = True) -> float | npt.NDArray[np.floating]

Compute incidence angles in radians/degrees from sensor trajectory.

Parameters:

Name Type Description Default
trajectory Trajectory

sensor trajectory

required
azimuth_time PreciseDateTime | datetime64

azimuth time at which compute the incidence angles corresponding to the input range times

required
range_times float | NDArray[floating]

range times where to compute the incidence angles, a float or a (N,) array

required
look_direction SensorLookDirection

sensor looking side where to perform geocoding, "RIGHT" or "LEFT"

required
geodetic_altitude float | None

the altitude over wgs84, if None is set to 0, by default None

None
doppler_frequencies float | NDArray[floating] | None

frequency_doppler_centroid value or set of values, one for each range time, if None is set to 0, by default None

None
carrier_wavelength float | None

carrier signal wavelength, if None is set to 1, by default None

None
radians bool

output angles are expressed in radians if this flag is set to True (default), if False are expressed in degrees

True

Returns:

Type Description
float | NDArray[floating]

incidence angles in radians/degrees corresponding to the input range times at the given azimuth time

compute_look_angles

Python
compute_look_angles(trajectory: Trajectory, azimuth_time: PreciseDateTime | datetime64, range_times: float | NDArray[floating], look_direction: SensorLookDirection, geodetic_altitude: float | None = None, doppler_frequencies: float | NDArray[floating] | None = None, carrier_wavelength: float | None = None, *, radians: bool = True) -> float | npt.NDArray[np.floating]

Compute look angles in radians/degrees from sensor trajectory.

Parameters:

Name Type Description Default
trajectory Trajectory

sensor trajectory

required
azimuth_time PreciseDateTime | datetime64

azimuth time at which compute the look a angles corresponding to the input range times

required
range_times float | NDArray[floating]

range times where to compute the look angles, a float or a (N,) array

required
look_direction SensorLookDirection

sensor looking side where to perform geocoding, "RIGHT" or "LEFT"

required
geodetic_altitude float | None

the altitude over wgs84, if None is set to 0, by default None,

None
doppler_frequencies float | NDArray[floating] | None

doppler frequencies values, if None is set to 0, by default None

None
carrier_wavelength float | None

carrier signal wavelength, if None is set to 1, by default None

None
radians bool

output angles are expressed in radians if this flag is set to True (default), if False are expressed in degrees

True

Returns:

Type Description
float | NDArray[floating]

look angles in radians/degrees corresponding to the input range times at the given azimuth time

Doppler

Computation of Doppler-related quantities.

Classes

Functions:

doppler_equation

Python
doppler_equation(wavelength: float, pv_scalar: float | NDArray[floating], distance: float | NDArray[floating], doppler_frequency: float | NDArray[floating], sensor_velocity: NDArray[floating], los: NDArray[floating]) -> tuple[float | npt.NDArray[np.floating], npt.NDArray[np.floating]]

Doppler equation solver.

Parameters:

Name Type Description Default
wavelength float

carrier signal wavelength

required
pv_scalar (float | NDArray[floating],)

scalar product between sensor velocity and line of sight scalar or shape (N,)

required
distance float

ground point - sensor position distance scalar or shape (N,)

required
doppler_frequency float

doppler frequency scalar or shape (N,)

required
sensor_velocity NDArray[floating]

sensor velocity (3,) or shape (N, 3)

required
los NDArray[floating]

ground point - sensor position (3,) or shape (N, 3)

required

Returns:

Type Description
float | NDArray[floating]

doppler equation solution scalar or shape (N,)

NDArray[floating]

doppler equation gradient (3,) or shape (N, 3)

doppler_equation_monostatic_residuals

Python
doppler_equation_monostatic_residuals(ground_point: NDArray[floating], sensor_positions: NDArray[floating], sensor_velocities: NDArray[floating], doppler_frequency: float, wavelength: float) -> float | npt.NDArray[np.floating]

Evaluate SAR doppler equation residual, assuming monostatic approximation.

Doppler Equation

\[ f_{doppler} = \\frac{2}{\\lambda} \\frac{v_{sensor} \\cdot LOS}{\\|LOS\\|} \]

Doppler Equation Residual

\[ residual = \\frac{2}{\\lambda} \\frac{v_{sensor} \\cdot LOS}{\\|LOS\\|} - f_{doppler} \]

where LOS is defined as the line of sight, a.k.a. the position difference between the ground point and the sensor positions.

Parameters:

Name Type Description Default
ground_point NDArray[floating]

ground point in ECEF coordinates, with shape (3,)

required
sensor_positions NDArray[floating]

sensor positions, with shape (3,) or (N, 3)

required
sensor_velocities NDArray[floating]

sensor velocities, with shape (3,) or (N, 3)

required
doppler_frequency float

frequency doppler centroid in Hz

required
wavelength float

signal carrier wavelength in meters

required

Returns:

Type Description
float | NDArray[floating]

doppler equation residual (Hz) for each input sensor position, scalar or (N,)

doppler_equation_bistatic_residuals

Python
doppler_equation_bistatic_residuals(sensor_pos_rx: NDArray[floating], sensor_pos_tx: NDArray[floating], sensor_vel_rx: NDArray[floating], sensor_vel_tx: NDArray[floating], ground_points: NDArray[floating], wavelength: float, doppler_frequency: float) -> float | npt.NDArray[np.floating]

Evaluate doppler equation residual for bistatic sensors.

Parameters:

Name Type Description Default
sensor_pos_rx NDArray[floating]

sensor rx position, (3,) or (N, 3)

required
sensor_pos_tx NDArray[floating]

sensor tx position, (3,) or (N, 3)

required
sensor_vel_rx NDArray[floating]

sensor rx velocity, (3,) or (N, 3)

required
sensor_vel_tx NDArray[floating]

sensor tx velocity, (3,) or (N, 3)

required
ground_points NDArray[floating]

ground points from direct geocoding solution, (3,) or (N, 3)

required
wavelength float

carrier signal wavelength in meters

required
doppler_frequency float

doppler frequency in Hz

required

Returns:

Type Description
float | NDArray[floating]

doppler equation residual, scalar or (N,)

get_geometric_doppler_centroid

Python
get_geometric_doppler_centroid(sensor_positions: NDArray[floating], sensor_velocities: NDArray[floating], ground_points: NDArray[floating], wavelength: float) -> float

Compute doppler centroid (geometrically) from squint angle.

Parameters:

Name Type Description Default
sensor_positions NDArray[floating]

sensor positions array, in the form (3,) or (N, 3)

required
sensor_velocities NDArray[floating]

sensor velocities array, in the form (3,) or (N, 3)

required
ground_points NDArray[floating]

ground points array, in the form (3,) or (N, 3)

required
wavelength int

carrier signal wavelength in meters

required

Returns:

Type Description
float | NDArray[floating]

doppler centroid in Hz, scalar or with shape (N,)

compute_theoretical_doppler_rate

Python
compute_theoretical_doppler_rate(trajectory: Trajectory, azimuth_time: PreciseDateTime | datetime64, ground_points: NDArray[floating], carrier_frequency: float) -> float | npt.NDArray[np.floating]

Compute theoretical doppler rate.

Parameters:

Name Type Description Default
trajectory Trajectory

sensor trajectory

required
azimuth_time PreciseDateTime | datetime64

azimuth time when to evaluate the doppler rate

required
ground_points NDArray[floating]

ground point coordinates, with shape (3,) or (N, 3)

required
carrier_frequency float

signal carrier frequency in Hz

required

Returns:

Type Description
float | NDArray[floating]

theoretical doppler rate in Hz/s, scalar or with shape (N,) if multiple ground points are provided

compute_steering_doppler_frequency

Python
compute_steering_doppler_frequency(trajectory: Trajectory, azimuth_time: PreciseDateTime | datetime64, az_mid_burst_time: PreciseDateTime | datetime64, doppler_rate: float, az_steering_rate: float, carrier_frequency: float) -> float

Compute doppler frequency related to the antenna electrical steering.

Parameters:

Name Type Description Default
trajectory Trajectory

sensor trajectory

required
azimuth_time PreciseDateTime | datetime64

azimuth time at which compute the steering frequency

required
az_mid_burst_time PreciseDateTime | datetime64

azimuth mid burst time

required
doppler_rate float

sensor doppler rate in Hz/s

required
az_steering_rate float

azimuth steering rate in rad/s

required
carrier_frequency float

signal carrier frequency

required

Returns:

Type Description
float

steering doppler frequency in Hz

Velocities

Computation of sensor velocity quantities.

Attributes

__all__ module-attribute

Python
__all__ = ['compute_ground_velocity']

Classes

Functions:

compute_ground_velocity

Python
compute_ground_velocity(trajectory: Trajectory, azimuth_time: PreciseDateTime | datetime64, look_angles_rad: NDArray[floating], reference_frame: ReferenceFrame = 'ZERODOPPLER', geodetic_altitude: float = 0, averaging_interval_relative_origin: float = 0, averaging_interval_duration: float = 1, averaging_interval_num_points: int = 11) -> npt.NDArray[np.floating] | float

Numerical computation of the ground velocity [m/s] at given look angles.

The algorithm is based on the direct geocoding, via look angles, of points at different azimuth times in a averaging interval.

Parameters:

Name Type Description Default
trajectory Trajectory

sensor trajectory

required
azimuth_time PreciseDateTime | datetime64

azimuth time at which compute the ground velocity

required
look_angles_rad NDArray[floating]

look angles in radians, float or array with shape (N,)

required
reference_frame ('GEOCENTRIC', 'GEODETIC', 'ZERODOPPLER')

the reference frames in which the look angles are intended, by default "ZERODOPPLER"

'ZERODOPPLER'
geodetic_altitude float

altitude of the points over wgs84, by default 0

0
averaging_interval_relative_origin float

averaging interval starts at time_point + averaging_interval_relative_origin, by default 0

0
averaging_interval_duration float

total duration of the averaging interval, by default 1.0

1
averaging_interval_num_points int

number of time points in the averaging interval, by default 11

11

Returns:

Type Description
NDArray[floating] | float

ground velocity in m/s