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().
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_heightis 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 onlytopology. Thetopologytuple can still be passed directly toset_topology().precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None,
precisionis used.device (str | None) – Device for computation. If None,
deviceis 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.
los – None. 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
topologyonly ifreturn_site_positionsis 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)