Path Solvers
A path solver computes the propagation Paths
for a given Scene
.
This includes tracing the paths and computing the corresponding channel
coefficients, delays, and angles of departure and arrival.
Sionna provides a path solver (PathSolver
) which currently
supports specular reflections and diffuse reflections,
as well as refractions (or transmissions).
- class sionna.rt.PathSolver[source]
Class implementing a path solver
A path solver computes propagation paths between the antennas of all transmitters and receivers in the a scene. For each propagation path
, the corresponding channel coefficient and delay , the angles of departure and arrival , as well as the Doppler shifts are computed. For more detail, see (26). This path solver currently supports line-of-sigth, specular and diffuse reflection, as well as refraction. Paths can consist of any of these interaction types, in any order. Different propagation phenomena can be individually enabled/disabled.This solver assumes that materials are thin enough that their effect on transmitted rays (i.e., rays that traverse the materials through double refraction) is negligible. Rays are traced without angular deflection, and objects like walls should be modeled as single flat surfaces having an attached radio material that accounts for their
thickness
. This approach may be inaccurate for very thick objects. The figure below illustrates this model, where is the incident electric field, is the reflected field and is the transmitted field. The Jones matrices, and , represent the effects of reflection and transmission, respectively, and depend on the slab thickness, .If synthetic arrays are used (
synthetic_array
is True), transmitters and receivers are modelled as if they had a single antenna located at theirposition
. The channel responses for each individual antenna of the arrays are then computed “synthetically” by applying appropriate phase shifts. This reduces the complexity significantly for large arrays. Time evolution of the channel coefficients can be simulated with usingcir()
andcfr()
methods of the returnedPaths
object.Example
import sionna from sionna.rt import load_scene, Transmitter, Receiver, PlanarArray, PathSolver import mitsuba as mi # Load example scene scene = load_scene(sionna.rt.scene.munich) # Configure antenna array for all transmitters scene.tx_array = PlanarArray(num_rows=8, num_cols=2, vertical_spacing=0.7, horizontal_spacing=0.5, pattern="tr38901", polarization="VH") # Configure antenna array for all receivers scene.rx_array = PlanarArray(num_rows=1, num_cols=1, vertical_spacing=0.5, horizontal_spacing=0.5, pattern="dipole", polarization="cross") # Create transmitter tx = Transmitter(name="tx", position=mi.Point3f(8.5,21,27), orientation=mi.Point3f(0,0,0)) scene.add(tx) # Create a receiver rx = Receiver(name="rx", position=mi.Point3f(45,90,1.5), orientation=mi.Point3f(0,0,0)) scene.add(rx) # TX points towards RX tx.look_at(rx) # Compute paths solver = PathSolver() paths = solver(scene) # Open preview showing paths scene.preview(paths=paths, resolution=[1000,600], clip_at=15.)
- __call__(scene, max_depth=3, max_num_paths_per_src=1000000, samples_per_src=1000000, synthetic_array=True, los=True, specular_reflection=True, diffuse_reflection=False, refraction=True, seed=42)[source]
Executes the solver
- Parameters:
scene (
sionna.rt.scene.Scene
) – Scene for which to compute pathsmax_depth (
int
) – Maximum depthmax_num_paths_per_src (
int
) – Maximum number of paths per sourcesamples_per_src (
int
) – Number of samples per sourcesynthetic_array (
bool
) – If set to True (default), then the antenna arrays are applied syntheticallylos (
bool
) – Enable line-of-sight pathsspecular_reflection (
bool
) – Enables specular reflectiondiffuse_reflection (
bool
) – Enables diffuse reflectionrefraction (
bool
) – Enables refractionseed (
int
) – Seed
- Return type:
- Returns:
Computed paths
- property loop_mode
Get/set the Dr.Jit mode used to evaluate the loops that implement the solver. Should be one of “evaluated” or “symbolic”. Symbolic mode (default) is the fastest one but does not support automatic differentiation. For more details, see the corresponding Dr.Jit documentation.
- Type:
“evaluated” | “symbolic”