Radio Map Solvers
A radio map solver computes a radio map for a given Scene
and
for every Transmitter
.
Sionna provides a radio map solver (RadioMapSolver
) which currently
supports specular reflection (including specular chains), diffuse reflection,
and refraction. It computes a path gain map, from which a received signal
strength (RSS) map or a signal to interference plus noise ratio (SINR) map can be computed.
- class sionna.rt.RadioMapSolver[source]
Class that implements the radio map solver
This solver computes a radio map for every transmitter in the scene. For a given transmitter, a radio map is a rectangular surface with arbitrary orientation subdivded into rectangular cells of size
. The parametercell_size
therefore controls the granularity of the map. The radio map associates with every cell the quantity(54)where
is the squared amplitude of the path coefficients at position assuming an ideal isotropic receiver, the integral is over the cell , and is the infinitesimal small surface element . The dimension indexed by ( ) corresponds to the -axis of the radio map in its local coordinate system. The quantity can be seen as the averagepath_gain
across a cell. This solver computes an approximation of through Monte Carlo integration.The path gain can be transformed into the received signal strength (
rss
) by multiplying it with the transmitpower
:If a scene has multiple transmitters, the signal-to-interference-plus-noise ratio (
sinr
) for transmitter is then defined aswhere
[W] is thethermal_noise_power
, computed as:where
[Hz] is the transmissionbandwidth
, [K] is thetemperature
, and [J/K] is the Boltzmann constant.The output of this function is a real-valued matrix of size
[num_cells_y, num_cells_x]
, for every transmitter, with elements equal to the sum of the contributions of paths, and whereThe surface defining the radio map is a rectangle centered at
center
, with orientationorientation
, and with sizesize
. An orientation of (0,0,0) corresponds to a radio map parallel to the XY plane, with surface normal pointing towards the axis. By default, the radio map is parallel to the XY plane, covers all of the scene, and has an elevation of . If transmitter and has multiple antennas, transmit precoding is applied which is defined byprecoding_vec
.For every ray
intersecting the radio map cell , the channel coefficients and the angles of departure (AoDs) and arrival (AoAs) are computed. See the Primer on Electromagnetics for more details.A “synthetic” array is simulated by adding additional phase shifts that depend on the antenna position relative to the position of the transmitter as well as the AoDs. Let us denote by
the relative position of the antenna (with respect to the position of the transmitter) for which the channel impulse response shall be computed. It can be accessed through the antenna array’s propertypositions
. Using a plane-wave assumption, the resulting phase shift for this antenna can be computed asThe expression for the path coefficient of the
antenna is thenThese coefficients form the complex-valued channel vector
of size .Finally, the coefficient of the equivalent SISO channel is
where
is the precoding vectorprecoding_vec
.Note
This solver supports Russian roulette, which can significantly improve the efficiency of ray tracing by terminating rays that contribute little to the final result.
The implementation of Russian roulette in this solver consists in terminating a ray with probability equal to the complement of its path gain (without the distance-based path loss). Formally, after the
bounce, the ray path loss is set to:where
is the path coefficient corresponding to the ray (without the distance-based pathloss) and the maximum probability with which to continue a path (rr_prob
). The first case consists in continuing the ray, whereas the second case consists in terminating the ray. When the ray is continued, the scaling by ensures an unbiased map by accounting for the rays that were terminated. When a ray is terminated, it is no longer traced, leading to a reduction of the required computations.Russian roulette is by default disabled. It can be enabled by setting the
rr_depth
parameter to a positive value.rr_depth
corresponds to the path depth, i.e., the number of bounces, from which on Russian roulette is enabled.Note
The parameter
stop_threshold
can be set to deactivate (i.e., stop tracing) paths whose gain has dropped below this threshold (in dB).Example
import sionna from sionna.rt import load_scene, PlanarArray, Transmitter, RadioMapSolver scene = load_scene(sionna.rt.scene.munich) scene.radio_materials["marble"].thickness = 0.5 # 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") # Add a transmitters tx = Transmitter(name="tx", position=[8.5,21,30], orientation=[0,0,0]) scene.add(tx) tx.look_at(mi.Point3f(40,80,1.5)) solver = RadioMapSolver() rm = solver(scene, cell_size=(1., 1.), samples_per_tx=100000000) scene.preview(radio_map=rm, clip_at=15., rm_vmin=-100.)
- __call__(scene, center=None, orientation=None, size=None, cell_size=[[10, 10]], precoding_vec=None, samples_per_tx=1000000, max_depth=3, los=True, specular_reflection=True, diffuse_reflection=False, refraction=True, seed=42, rr_depth=-1, rr_prob=0.95, stop_threshold=None)[source]
Executes the solver
- Parameters:
scene (
sionna.rt.scene.Scene
) – Scene for which to compute the radio mapcenter (
typing.Optional
[mitsuba.Point3f
]) – Center of the radio map [m] as three-dimensional vector. If set to None, the radio map is centered on the center of the scene, except for the elevation that is set to 1.5m. Otherwise,orientation
andsize
must be provided.orientation (
typing.Optional
[mitsuba.Point3f
]) – Orientation of the radio map specified through three angles corresponding to a 3D rotation as defined in (3). An orientation of or None corresponds to a radio map that is parallel to the XY plane. If not set to None, thencenter
andsize
must be provided.size (
typing.Optional
[mitsuba.Point2f
]) – Size of the radio map [m]. If set to None, then the size of the radio map is set such that it covers the entire scene. Otherwise,center
andorientation
must be provided.cell_size (
mitsuba.Point2f
) – Size of a cell of the radio map [m]precoding_vec (
typing.Optional
[typing.Tuple
[drjit.cuda.ad.TensorXf
,drjit.cuda.ad.TensorXf
]]) – Real and imaginary components of the complex-valued precoding vector. If set to None, then defaults to .samples_per_tx (
int
) – Number of samples per sourcemax_depth (
int
) – Maximum depthlos (
bool
) – Enable line-of-sight pathsspecular_reflection (
bool
) – Enable specularl reflectionsdiffuse_reflection (
bool
) – Enable diffuse reflectiosrefraction (
bool
) – Enable refractionseed (
int
) – Seedrr_depth (
int
) – Depth from which on to start Russian rouletterr_prob (
float
) – Maximum probability with which to keep a path when Russian roulette is enabledstop_threshold (
typing.Optional
[float
]) – Gain threshold [dB] below which a path is deactivated
- Return type:
- Returns:
Computed radio map
- property loop_mode
Get/set the Dr.Jit mode used to evaluate the loop that implements 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”