gen_tr38901_indoor_office_topology#

sionna.sys.gen_tr38901_indoor_office_topology(batch_size: int, num_ut_per_sector: int, room_length: float = 120.0, room_width: float = 50.0, room_height: float = 3.0, isd: float = 20.0, bs_height: float | None = None, ut_height: float = 1.0, min_bs_ut_dist: float = 0.0, return_site_positions: bool = False, precision: Literal['single', 'double'] | None = None, device: str | None = None) tuple[source]#

Generates a TR 38.901 indoor-office topology using Tables 7.2-2 and 7.8-1 of [TR38901V1920].

With the default arguments, the room has size \(120\,\mathrm{m}\times 50\,\mathrm{m}\times 3\,\mathrm{m}\), the inter-site distance is 20 m, and 12 ceiling-mounted BS sites are generated. Each site has three co-located sectors with azimuth orientations \(30^\circ\), \(150^\circ\), and \(270^\circ\). UTs are dropped uniformly over the room and marked as indoor.

The returned tuple can be passed directly to set_topology().

../../_images/tr38901_indoor_office_topology.png

Fig. 25 Example indoor-office topology with ceiling-mounted BS sites and indoor UT drops.#

The topology shown in the figure was generated with:

from sionna.phy import config
from sionna.sys import gen_tr38901_indoor_office_topology

config.seed = 42
topology, site_positions = gen_tr38901_indoor_office_topology(
    batch_size=1,
    num_ut_per_sector=1,
    return_site_positions=True,
    precision="single",
    device="cpu")
Parameters:
  • batch_size (int) – Batch size.

  • num_ut_per_sector (int) – Number of UTs to drop per sector and batch. The total number of UTs is num_sites*3*num_ut_per_sector.

  • room_length (float) – Room length along the x-axis [m].

  • room_width (float) – Room width along the y-axis [m].

  • room_height (float) – Room height [m].

  • isd (float) – Spacing between neighboring BS sites [m].

  • bs_height (float | None) – BS height [m]. If None, room_height is used.

  • ut_height (float) – UT height [m].

  • min_bs_ut_dist (float) – Minimum 2D distance between each UT and BS site [m].

  • return_site_positions (bool) – If True, return (topology, site_positions) instead of only topology. The topology tuple can still be passed directly to set_topology().

  • precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None, precision is used.

  • device (str | None) – Device for computation. If None, device is used.

Outputs:
  • ut_loc – [batch_size, num_ut, 3], torch.float. UT locations [m].

  • bs_loc – [batch_size, num_sites*3, 3], torch.float. BS sector locations [m].

  • ut_orientations – [batch_size, num_ut, 3], torch.float. UT orientations [radian].

  • bs_orientations – [batch_size, num_sites*3, 3], torch.float. BS sector orientations [radian].

  • ut_velocities – [batch_size, num_ut, 3], torch.float. UT velocity vectors [m/s].

  • in_state – [batch_size, num_ut], torch.bool. Indoor state of UTs. Always True.

  • losNone. Placeholder for stochastic LoS/NLoS sampling by the channel model.

  • bs_virtual_loc – [batch_size, num_sites*3, num_ut, 3], torch.float. Virtual BS sector locations [m]. No wraparound is applied.

  • bs_site_ids – [num_sites*3], torch.int64. Site identifier of each BS sector. Co-located sectors share the same identifier.

  • site_positions – [num_sites, 2], torch.float. BS site center positions [m]. Returned separately from topology only if return_site_positions is True.

Examples

from sionna.phy.channel.tr38901 import InH
from sionna.sys import gen_tr38901_indoor_office_topology

topology = gen_tr38901_indoor_office_topology(1, 2)
channel_model = InH(carrier_frequency, ut_array, bs_array, "downlink")
channel_model.set_topology(*topology)