Sionna RT#

The Sionna RT solve loads the compiled scene with Sionna’s own load_scene, adds transmitters at their terrain-relative positions, builds a terrain-following measurement surface, and calls RadioMapSolver. Nothing between the compiled XML and the solver is OWRT-specific, which is why the same scene can be driven directly from Python.

Native use#

from openworld_radio_twin import rt as owrt
from sionna.rt import PlanarArray, RadioMapSolver, Transmitter

scene = owrt.load_scene(latitude=52.3762, longitude=4.8993, radius_m=250)
scene.frequency = 3.5e9
scene.tx_array = PlanarArray(num_rows=8, num_cols=2, pattern="tr38901", polarization="V")
scene.rx_array = PlanarArray(num_rows=1, num_cols=1, pattern="iso", polarization="V")
scene.add(Transmitter(
    name="tx",
    position=owrt.position(scene, latitude=52.3770, longitude=4.9003, height_agl=25.0),
    power_dbm=30.0,
))

radio_map = RadioMapSolver()(
    scene,
    measurement_surface=owrt.measurement_surface(scene, cell_size=(5.0, 5.0), height=1.5),
    max_depth=3,
    samples_per_tx=1_000_000,
    refraction=True,
    diffraction=False,
)

Propagation controls keep the native RadioMapSolver keyword names. PathSolver, channel impulse responses, scene.render and scene.preview work unchanged on the same scene.

Power-delay profiles, RMS delay spread and channel frequency responses from PathSolver

Beyond coverage maps: PathSolver on OWRT scenes in Bergen and Murray Hill yields power-delay profiles, RMS delay spread and channel frequency responses at outdoor receivers.

The service and dataset request#

Through the HTTP API and datasets, the same solve is configured by a request. Its engine_config accepts exactly the following keys:

Key

Default

Meaning

device

"auto"

"auto" prefers CUDA and falls back to LLVM; "cuda" fails explicitly without a GPU

include_ground

true

Keep the ground mesh in the ray-traced scene

include_vegetation, include_paved, include_water

true

Keep the corresponding semantic surface meshes (ITU profile)

include_building_roofs, include_building_walls

true

Keep roof or wall triangles of every building

los, specular_reflection, diffuse_reflection, refraction, diffraction, edge_diffraction, diffraction_lit_region

Sionna RT 2.0.1 defaults: true, true, false, true, false, false, true

Forwarded verbatim to RadioMapSolver

Request-level fields set the rest: max_depth (0 to 8), samples_per_tx (10,000 to 100,000,000), seed, resolution_m as the cell size, receiver_height_m, and association_metric (path_gain, rss or sinr). Sionna cases need one shared frequency between 1 and 10 GHz and one shared antenna pattern across transmitters; the default ITU ground material model is valid in that band.

sionna_cases = {
    "engine": "sionna",
    "engine_config": {
        "device": "cuda",
        "include_water": False,        # drop the water mesh, keep it in the dataset
        "diffraction": True,
    },
    "max_depths": [3],
    "samples_per_tx": [1_000_000],
}

Geometry masks edit a temporary copy of the scene XML; the source meshes and provenance stay in place, and the completed case records which geometry classes were excluded.

Antenna presets#

Preset

Transmit array

Receive array

sector

8 × 2 PlanarArray, tr38901 elements, vertical polarisation, uniform precoding

1 × 1 isotropic

isotropic

1 × 1 isotropic, vertical polarisation

1 × 1 isotropic

Azimuth and downtilt become a look_at point for each transmitter. Custom arrays and precoding vectors are available through the native API (scene.tx_array, RadioMapSolver()(scene, precoding_vec=...)).

Measurement surface and cell reduction#

The measurement surface is a triangulated grid that follows the compiled terrain at the receiver height. Each exported cell covers two triangles; the solver’s per-triangle values are reduced to one cell value by a surface-area-weighted mean for path gain and received power. Cell SINR is then the desired transmitter’s received power divided by the sum of all other transmitters’ received power plus the scene’s thermal noise power. Bandwidth, temperature, the effective noise power and the radio-map contract version are recorded in the result metadata. The reported cell coordinate is the planimetric centre of the regular cell.

Version 0.2.1 introduced radio-map contract version 2, which changed SINR and therefore SINR-based association; path gain and received power were unchanged. Resuming a Sionna dataset with an older or absent contract version is rejected (Resume and extend).

Recorded solver details#

Every Sionna result carries, among other fields: the sionna-rt version, the Mitsuba variant and resolved device, the device policy, whether geometry was masked and which classes were excluded, the ground geometry kind (flat, terrain-following or excluded), building and triangle counts, frequency, noise bandwidth, temperature and thermal noise power, the array preset, cell size, receiver-cell count, the total initial ray samples, the diagnostic samples_per_tx / receiver_cells ratio, the served-cell fraction, the association metric and the reflection depth.