Radio Map Solvers

A radio map solver computes aradio map for a givenScene andfor everyTransmitter.Sionna provides a radio map solver (RadioMapSolver) which currentlysupports specular reflection (including specular chains), diffuse reflection,and refraction. It computes a path gain map, from which a received signalstrength (RSS) map or a signal to interference plus noise ratio (SINR) map can be computed.

classsionna.rt.RadioMapSolver[source]

Class that implements the radio map solver

This solver generates a radio map for each transmitter within the scene.For any given transmitter, the radio map is calculated over a measurement surface thatis segmented into flat cells. Each cell\(i\) in the radio map is associatedwith the quantity:

(54)\[g_i = \frac{1}{\lvert C_i \rvert} \int_{C_{i}} \lvert h(s) \rvert^2 ds.\]

Here,\(\lvert h(s) \rvert^2\) represents the sum of the squared amplitudes of the path coefficients\(a_i\) at the position\(s=(x,y)\), assuming an ideal isotropic receiver.The integral is evaluated over the cell\(C_i\), with\(ds\) being the infinitesimallysmall surface element, defined as\(ds=dx \cdot dy\). The value\(g_i\) can be interpretedas the averagepath_gain across a cell.This solver approximates\(g_i\) using Monte Carlo integration. For further details,refer to thesection on the radio map solver of the Sionna RT Technical Report.

The path gain can be transformed into the received signal strength (rss)by multiplying it with the transmitpower:

\[\mathrm{RSS}_{i} = P_{tx} g_{i}.\]

In scenarios with multiple transmitters, the signal-to-interference-plus-noise ratio (SINR) for a specifictransmitter\(k\) is calculated as follows:

\[\mathrm{SINR}^k_{i}=\frac{\mathrm{RSS}^k_{i}}{N_0+\sum_{k'\ne k} \mathrm{RSS}^{k'}_{i}}\]

where\(N_0\) [W] represents the thermal noise power of the scene (thermal_noise_power), which is determined by:

\[N_0 = B \times T \times k.\]

In this equation,\(B\) [Hz] is the bandwidth of the transmission (bandwidth),\(T\) [K] is the temperature of the scene (temperature), and\(k = 1.380649 \times 10^{-23}\) [J/K] is the Boltzmann constant.

This solver supports arbitrary meshes as measurement surfaces, where each triangle in the mesh acts as a cell in the radio map.If a mesh is not provided, the solver computes the radio map over a rectangular measurement grid, which is defined by theparameters:center,orientation,size, andcell_size. The resulting output is then a real-valuedmatrix of dimensions[num_cells_y,num_cells_x] for each transmitter, where:

\[\begin{split}\texttt{num_cells_x} = \bigg\lceil\frac{\texttt{size[0]}}{\texttt{cell_size[0]}} \bigg\rceil\\\texttt{num_cells_y} = \bigg\lceil \frac{\texttt{size[1]}}{\texttt{cell_size[1]}} \bigg\rceil.\end{split}\]

An orientation of (0,0,0) aligns the radio map parallel to the XY plane, with the surface normal directed towardsthe\(+z\) axis. By default, the radio map is set parallel to the XY plane, spans the entire scene, andis positioned at an elevation of\(z = 1.5\text{m}\).

For transmitters equipped with multiple antennas, transmit precoding is applied as specified by theprecoding_vec.For each path\(n\) that intersects a radio map cell\(i\), the channel coefficients\(a_n\) and the anglesof departure (AoDs)\((\theta_{\text{T},n}, \varphi_{\text{T},n})\) and arrival(AoAs)\((\theta_{\text{R},n}, \varphi_{\text{R},n})\) are determined. For further information, refer to thePrimer on Electromagnetics.

A “synthetic” array is simulated by introducing additional phase shifts, which are dependent on the antenna’s positionrelative to the transmitter and the AoDs. Let\(\mathbf{d}_{\text{T},k}\in\mathbb{R}^3\) represent the relativeposition of the\(k^\text{th}\) antenna (relative to the transmitter’s position) for which the channel impulseresponse is calculated. This can be accessed via the antenna array’s propertypositions. Assuming a plane-wave model, the phase shift for this antenna is computed as:

\[p_{\text{T},n,k} = \frac{2\pi}{\lambda}\hat{\mathbf{r}}(\theta_{\text{T},n}, \varphi_{\text{T},n})^\mathsf{T} \mathbf{d}_{\text{T},k}.\]

The path coefficient for the\(k\text{th}\) antenna is then expressed as:

\[h_{n,k} = a_n e^{j p_{\text{T}, n,k}}.\]

These coefficients form the complex-valued channel vector\(\mathbf{h}_n\) with a size of\(\texttt{num_tx_ant}\).

Finally, the coefficient for the equivalent SISO channel is given by:

\[h_n = \mathbf{h}_n^{\textsf{H}} \mathbf{p}\]

where\(\mathbf{p}\) denotes the precoding vectorprecoding_vec.

Note

This solver supports Russian roulette, which can significantly improve theefficiency of ray tracing by terminating rays that contribute little to the finalresult.

The implementation of Russian roulette in this solver consists in terminatinga ray with probability equal to the complement of its path gain (withoutthe distance-based path loss). Formally,after the\(d^{\text{th}}\) bounce, the ray path loss is set to:

\[\begin{split}a_d \leftarrow\begin{cases} \frac{a_d}{\sqrt{\min \{ p_{c},|a_d|^2 \}}}, & \text{with probability } \min \{ p_{c},|a_d|^2 \}\\ 0, & \text{with probability } 1 - \min \{ p_{c},|a_d|^2 \}\end{cases}\end{split}\]

where\(a_d\) is the path coefficient corresponding to the ray (withoutthe distance-based pathloss) and\(p_c\) the maximum probability with which to continue a path (rr_prob).The first case consists in continuing the ray, whereas the second case consistsin terminating the ray. When the ray is continued, the scaling by\(\frac{1}{\sqrt{\min \{ p_{c},|a_d|^2 \}}}\) ensures an unbiased map by accountingfor the rays that were terminated. When a ray is terminated, it is no longertraced, leading to a reduction of the required computations.

Russian roulette is by default disabled. It can be enabled by settingtherr_depth parameter to a positive value.rr_depth corresponds tothe path depth, i.e., the number of bounces, from which on Russian rouletteis enabled.

Note

The parameterstop_threshold can be set to deactivate (i.e., stop tracing)paths whose gain has dropped below this threshold (in dB).

Example

importsionnafromsionna.rtimportload_scene,PlanarArray,Transmitter,RadioMapSolverscene=load_scene(sionna.rt.scene.munich)scene.radio_materials["marble"].thickness=0.5# Configure antenna array for all transmittersscene.tx_array=PlanarArray(num_rows=8,num_cols=2,vertical_spacing=0.7,horizontal_spacing=0.5,pattern="tr38901",polarization="VH")# Add a transmitterstx=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.)
../../_images/radio_map_preview.png
__call__(scene,center=None,orientation=None,size=None,cell_size=[[10,10]],measurement_surface=None,precoding_vec=None,samples_per_tx=1000000,max_depth=3,los=True,specular_reflection=True,diffuse_reflection=False,refraction=True,diffraction=False,edge_diffraction=False,diffraction_lit_region=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 map

  • center (typing.Optional[mitsuba.Point3f]) – Center of the radio map measurement plane\((x,y,z)\) [m] as a three-dimensional vector.Ignored ifmeasurement_surface is provided.If set toNone, the radio map is centered on the center of thescene, except for the elevation\(z\) that is set to 1.5m.Otherwise,orientation andsize must be provided.

  • orientation (typing.Optional[mitsuba.Point3f]) – Orientation of the radio map measurement plane\((\alpha, \beta, \gamma)\) specified through three anglescorresponding to a 3D rotation as defined in(3).Ignored ifmeasurement_surface is provided.An orientation of\((0,0,0)\) orNone corresponds to aradio map that is parallel to the XY plane.If not set toNone, thencenter andsize must beprovided.

  • size (typing.Optional[mitsuba.Point2f]) – Size of the radio map measurement plane [m].Ignored ifmeasurement_surface is provided.If set toNone, then the size of the radio map is set such thatit covers the entire scene.Otherwise,center andorientation must be provided.

  • cell_size (mitsuba.Point2f) – Size of a cell of the radio map measurement plane [m].Ignored ifmeasurement_surface is provided.

  • measurement_surface (typing.Union[mitsuba.Shape,sionna.rt.scene_object.SceneObject,None]) – Measurement surface. If set, theradio map is computed for this surface, where every triangle in themesh is a cell in the radio map.If set toNone, then the radio map is computed for a measurementgrid defined bycenter,orientation,size, andcell_size.

  • precoding_vec (typing.Optional[typing.Tuple[drjit.cuda.ad.TensorXf,drjit.cuda.ad.TensorXf]]) – Real and imaginary components of thecomplex-valued precoding vector.If set toNone, then defaults to\(\frac{1}{\sqrt{\text{num_tx_ant}}} [1,\dots,1]^{\mathsf{T}}\).

  • samples_per_tx (int) – Number of samples per source

  • max_depth (int) – Maximum depth

  • los (bool) – Enable line-of-sight paths

  • specular_reflection (bool) – Enable specular reflections

  • diffuse_reflection (bool) – Enable diffuse reflectios

  • refraction (bool) – Enable refraction

  • diffraction (bool) – Enable diffraction

  • edge_diffraction (bool) – Enable diffraction on free floating edges

  • diffraction_lit_region (bool) – Enable diffraction in the lit region

  • seed (int) – Seed

  • rr_depth (int) – Depth from which on to start Russian roulette

  • rr_prob (float) – Maximum probability with which to keep a path whenRussian roulette is enabled

  • stop_threshold (typing.Optional[float]) – Gain threshold [dB] below which a path isdeactivated

Return type:

sionna.rt.radio_map_solvers.radio_map.RadioMap

Returns:

Computed radio map

propertyloop_mode

Get/set the Dr.Jit mode used to evaluate the loop that implementsthe solver. Should be one of “evaluated” or “symbolic”. Symbolic mode(default) is the fastest one but does not support automaticdifferentiation.For more details, see thecorresponding Dr.Jit documentation.

Type:

“evaluated” | “symbolic”