gen_tr38901_indoor_factory_topology#

sionna.sys.gen_tr38901_indoor_factory_topology(factory_scenario: str, batch_size: int, num_ut: int, hall_length: float | None = None, hall_width: float | None = None, hall_height: float | None = None, bs_spacing: float | None = None, bs_height: float | None = None, ut_height: float | None = None, min_bs_ut_dist: float = 1.0, return_site_positions: bool = False, precision: Literal['single', 'double'] | None = None, device: str | None = None) sionna.sys.topology.IndoorFactoryTopology | Tuple[sionna.sys.topology.IndoorFactoryTopology, torch.Tensor][source]#

Generates a TR 38.901 indoor-factory topology using Tables 7.2-4 and 7.8-7 of [TR38901V1920].

The supported factory sub-scenarios are "SL" (sparse clutter, low BS height), "DL" (dense clutter, low BS height), "SH" (sparse clutter, high BS height), and "DH" (dense clutter, high BS height). These are the sub-scenarios included in the large-scale calibration assumptions. "HH" is a valid InF sub-scenario, but it is not part of the Table 7.8-7 calibration topology. With default parameters, 18 base stations are placed on a rectangular lattice with spacing \(D\) and offset \(D/2\) from the hall walls. UTs are dropped uniformly inside the hall, marked as indoor, and constrained by min_bs_ut_dist.

The default calibration deployments use \(L\times W = 120\,\mathrm{m}\times 60\,\mathrm{m}\) and \(D=20\,\mathrm{m}\) for "SL" and "DH", and \(L\times W = 300\,\mathrm{m}\times 150\,\mathrm{m}\) and \(D=50\,\mathrm{m}\) for "DL" and "SH". The BS height is \(1.5\,\mathrm{m}\) for the low-BS cases and \(8\,\mathrm{m}\) for the high-BS cases.

The returned IndoorFactoryTopology remains tuple-compatible and can be passed directly to set_topology(). It also records the resolved factory_scenario and hall_dimensions. For custom hall dimensions, construct InF with topology.hall_dimensions and call topology.set_topology(channel_model) to validate the channel’s statistics configuration before applying the deployment. Directly unpacking a topology with non-default hall dimensions remains supported but emits a warning because it bypasses this validation.

../../_images/tr38901_indoor_factory_topology.png

Fig. 26 Example InF-SH indoor-factory topology with a rectangular BS lattice 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_factory_topology

config.seed = 42
topology, site_positions = gen_tr38901_indoor_factory_topology(
    "SH",
    batch_size=1,
    num_ut=80,
    return_site_positions=True,
    precision="single",
    device="cpu")
Parameters:
  • factory_scenario (str) – Indoor-factory sub-scenario. Must be "SL", "DL", "SH", or "DH".

  • batch_size (int) – Batch size.

  • num_ut (int) – Number of UTs to drop per batch.

  • hall_length (float | None) – Hall length along the x-axis [m]. If None, the Table 7.8-7 default for factory_scenario is used.

  • hall_width (float | None) – Hall width along the y-axis [m]. If None, the Table 7.8-7 default for factory_scenario is used.

  • hall_height (float | None) – Hall height [m]. If None, the Table 7.8-7 default is used. Hall height does not alter the generated coordinates, but it is included in topology.hall_dimensions because it affects InF channel statistics.

  • bs_spacing (float | None) – BS lattice spacing [m]. If None, the Table 7.8-7 default for factory_scenario is used.

  • bs_height (float | None) – BS height [m]. If None, the Table 7.8-7 default for factory_scenario is used.

  • ut_height (float | None) – UT height [m]. If None, the Table 7.8-7 default is used.

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

  • return_site_positions (bool) – If True, return (topology, site_positions) instead of only topology. The topology object still provides the metadata and validation API described above.

  • 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_bs, 3], torch.float. BS locations [m].

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

  • bs_orientations – [batch_size, num_bs, 3], torch.float. BS 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_bs, num_ut, 3], torch.float. Virtual BS locations [m]. No wraparound is applied.

  • bs_site_ids – [num_bs], torch.int64. Site identifier of each BS.

  • site_positions – [num_bs, 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 InF
from sionna.sys import gen_tr38901_indoor_factory_topology

topology = gen_tr38901_indoor_factory_topology(
    "SH", 1, 20, hall_length=200.0, hall_width=100.0)
channel_model = InF(carrier_frequency, ut_array, bs_array, "downlink",
                    factory_scenario=topology.factory_scenario,
                    hall_dimensions=topology.hall_dimensions)
topology.set_topology(channel_model)