UMi#

class sionna.phy.channel.tr38901.UMi(carrier_frequency: float, o2i_model: str, ut_array: sionna.phy.channel.tr38901.antenna.PanelArray, bs_array: sionna.phy.channel.tr38901.antenna.PanelArray, direction: str, enable_pathloss: bool = True, enable_shadow_fading: bool = True, always_generate_lsp: bool = False, precision: str | None = None, device: str | None = None)[source]#

Bases: sionna.phy.channel.tr38901.system_level_channel.SystemLevelChannel

Urban microcell (UMi) channel model from 3GPP [TR38901] specification.

Setting up a UMi model requires configuring the network topology, i.e., the UTs and BSs locations, UTs velocities, etc. This is achieved using the set_topology() method. Setting a different topology for each batch example is possible. The batch size used when setting up the network topology is used for the link simulations.

Parameters:
  • carrier_frequency (float) – Carrier frequency [Hz]

  • o2i_model (str) – Outdoor-to-indoor loss model for UTs located indoor. Set to "low" to use the low-loss model, or to "high" to use the high-loss model. See section 7.4.3 of [TR38901] for details.

  • ut_array (sionna.phy.channel.tr38901.antenna.PanelArray) – Panel array used by the UTs. All UTs share the same antenna array configuration.

  • bs_array (sionna.phy.channel.tr38901.antenna.PanelArray) – Panel array used by the BSs. All BSs share the same antenna array configuration.

  • direction (str) – Link direction. Either "uplink" or "downlink".

  • enable_pathloss (bool) – If True, apply pathloss. Otherwise don’t. Defaults to True.

  • enable_shadow_fading (bool) – If True, apply shadow fading. Otherwise don’t. Defaults to True.

  • always_generate_lsp (bool) – If True, new large scale parameters (LSPs) are generated for every new generation of channel impulse responses. Otherwise, always reuse the same LSPs, except if the topology is changed. Defaults to False.

  • precision (str | None) – Precision used for internal calculations and outputs. If set to None, precision is used.

  • device (str | None) – Device for computation (e.g., "cpu", "cuda:0"). If None, device is used.

Inputs:
  • num_time_samplesint. Number of time samples.

  • sampling_frequencyfloat. Sampling frequency [Hz].

Outputs:
  • a – [batch size, num_rx, num_rx_ant, num_tx, num_tx_ant, num_paths, num_time_samples], torch.complex. Path coefficients.

  • tau – [batch size, num_rx, num_tx, num_paths], torch.float. Path delays [s].

Examples

import torch
from sionna.phy.channel.tr38901 import PanelArray, UMi
from sionna.phy.channel import OFDMChannel

# UT and BS panel arrays
bs_array = PanelArray(num_rows_per_panel=4, num_cols_per_panel=4,
                      polarization='dual', polarization_type='cross',
                      antenna_pattern='38.901', carrier_frequency=3.5e9)
ut_array = PanelArray(num_rows_per_panel=1, num_cols_per_panel=1,
                      polarization='single', polarization_type='V',
                      antenna_pattern='omni', carrier_frequency=3.5e9)

# Instantiating UMi channel model
channel_model = UMi(carrier_frequency=3.5e9,
                    o2i_model='low',
                    ut_array=ut_array,
                    bs_array=bs_array,
                    direction='uplink')

# Setting up network topology
# ut_loc: UTs locations
# bs_loc: BSs locations
# ut_orientations: UTs array orientations
# bs_orientations: BSs array orientations
# ut_velocities: UTs velocities
# in_state: Indoor/outdoor states of UTs
channel_model.set_topology(ut_loc, bs_loc, ut_orientations,
                           bs_orientations, ut_velocities, in_state)

# Instantiating the frequency domain channel
# rg: an instance of sionna.phy.ofdm.ResourceGrid
channel = OFDMChannel(channel_model=channel_model,
                      resource_grid=rg)