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 average
path_gainacross 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 the
precoding_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 property
positions. 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 vector
precoding_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 settingthe
rr_depthparameter to a positive value.rr_depthcorresponds tothe path depth, i.e., the number of bounces, from which on Russian rouletteis enabled.Note
The parameter
stop_thresholdcan 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.)

- __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 mapcenter (
typing.Optional[mitsuba.Point3f]) – Center of the radio map measurement plane\((x,y,z)\) [m] as a three-dimensional vector.Ignored ifmeasurement_surfaceis 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,orientationandsizemust 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_surfaceis provided.An orientation of\((0,0,0)\) orNone corresponds to aradio map that is parallel to the XY plane.If not set toNone, thencenterandsizemust beprovided.size (
typing.Optional[mitsuba.Point2f]) – Size of the radio map measurement plane [m].Ignored ifmeasurement_surfaceis provided.If set toNone, then the size of the radio map is set such thatit covers the entire scene.Otherwise,centerandorientationmust be provided.cell_size (
mitsuba.Point2f) – Size of a cell of the radio map measurement plane [m].Ignored ifmeasurement_surfaceis 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 sourcemax_depth (
int) – Maximum depthlos (
bool) – Enable line-of-sight pathsspecular_reflection (
bool) – Enable specular reflectionsdiffuse_reflection (
bool) – Enable diffuse reflectiosrefraction (
bool) – Enable refractiondiffraction (
bool) – Enable diffractionedge_diffraction (
bool) – Enable diffraction on free floating edgesdiffraction_lit_region (
bool) – Enable diffraction in the lit regionseed (
int) – Seedrr_depth (
int) – Depth from which on to start Russian rouletterr_prob (
float) – Maximum probability with which to keep a path whenRussian roulette is enabledstop_threshold (
typing.Optional[float]) – Gain threshold [dB] below which a path isdeactivated
- Return type:
- 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”