3GPP 38.901#

The submodule tr38901 implements 3GPP channel models from TR 38.901 V16.1 and V19.2 [TR38901V160100, TR38901V1920]. The version V19.2 is the default and recommended selection. Version V16.1 is retained for reproducing the calibration reference results and older experiments.

The CDL, UMi, UMa, RMa, InH, and InF models require setting-up antenna models for the transmitters and receivers. This is achieved using the PanelArray class. For handheld UT antenna arrays defined by TR 38.901 Clause 7.3, use HandheldUTArray.

The UMi, UMa, RMa, InH, and InF models require setting-up a network topology, specifying, e.g., the user terminal (UT) and base-station locations, UT velocities, etc. Topology generation is provided by Sionna SYS. The SYS topology helpers return tuples that can be passed directly to set_topology(). In particular, use gen_tr38901_multicell_topology() for TR 38.901 UMi/UMa calibration-style multi-cell drops, gen_hexgrid_topology() for general UMi/UMa/RMa hexagonal-grid drops, gen_tr38901_indoor_office_topology() for InH, and gen_tr38901_indoor_factory_topology() for InF. However, all models can be used with custom topologies as well.

Example#

The following example combines these components into a complete link-level setup: a panel array for the base stations, a handheld array for the UTs, the UMi model with spatial consistency enabled, and a topology helper that provides the geometry.

import torch
from sionna.phy.channel.tr38901 import HandheldUTArray, PanelArray, UMi
from sionna.sys import gen_tr38901_multicell_topology

device = "cuda:0" if torch.cuda.is_available() else "cpu"

# The antenna arrays, the channel model, and the topology helper must all
# use the same carrier frequency. It sets the wavelength that defines the
# element spacing and it selects the frequency-dependent parameter tables.
carrier_frequency = 3.5e9

# Base-station array: 2x2 cross-polarized elements, i.e., eight ports,
# with the sectorized element pattern of Table 7.3-1.
bs_array = PanelArray(num_rows_per_panel=2,
                      num_cols_per_panel=2,
                      polarization="dual",
                      polarization_type="cross",
                      antenna_pattern="38.901",
                      carrier_frequency=carrier_frequency,
                      device=device)

# UT array: handheld device of Clause 7.3 carrying four single-polarized
# ports at the corner candidate locations of Figure 7.3-2.
ut_array = HandheldUTArray(carrier_frequency=carrier_frequency,
                           polarization="single",
                           antenna_locations="tr38901-4",
                           antenna_pattern="38.901-handheld",
                           device=device)

# The channel model owns the scenario parameter tables and the generation
# pipeline. Spatial consistency correlates the LoS state and the
# small-scale parameters of UTs that are close to each other, instead of
# drawing them independently per UT.
channel_model = UMi(carrier_frequency=carrier_frequency,
                    o2i_model="low",
                    ut_array=ut_array,
                    bs_array=bs_array,
                    direction="downlink",
                    enable_spatial_consistency=True,
                    device=device)

# The topology helper builds the geometry: one ring of seven sites with
# three sectors each, hence 21 base stations, and one UT dropped per
# sector. It returns the tuple that set_topology expects, including the
# indoor/outdoor states and the wraparound virtual base-station positions.
topology = gen_tr38901_multicell_topology("umi",
                                          batch_size=1,
                                          num_ut_per_sector=1,
                                          carrier_frequency=carrier_frequency,
                                          num_rings=1,
                                          device=device)

# Hand the geometry to the model. The large-scale parameters as well as the
# cluster delays, powers, and angles are drawn here, and they are reused
# until the topology is set again.
channel_model.set_topology(*topology)

# Visualize the resulting drop, including the LoS state of every UT with
# respect to the base station selected by bs_index.
channel_model.show_topology()

# Sample channel impulse responses over 14 time steps spaced by 1/15 kHz.
# h has shape [batch size, num_ut, num_ut_ant, num_bs, num_bs_ant,
#              num_paths, num_time_samples] and holds the path
# coefficients; tau has shape [batch size, num_ut, num_bs, num_paths] and
# holds the path delays in seconds.
h, tau = channel_model(num_time_samples=14, sampling_frequency=15e3)
../../../../_images/tr38901_umi_example_topology.png

Fig. 12 Topology produced by the example, seen from an elevated viewing angle. The seven sites of the single-ring layout each carry three co-located sectors, drawn as black markers with their local coordinate systems. UT markers distinguish indoor UTs from outdoor UTs in LoS and NLoS with respect to base station bs_index=0.#

Because all system-level models share the same interface, replacing UMi by UMa, RMa, InH, or InF only requires a matching topology and, for some models, a different set of scenario-specific arguments. Setting direction="uplink" swaps the roles of the two arrays, and the resulting channel impulse responses can be turned into time-domain or frequency-domain channel realizations as described in the wireless channel overview.

PanelArray(num_rows_per_panel, ...[, ...])

Antenna panel array following the [TR38901V1920] specification

Antenna(polarization, polarization_type, ...)

Single antenna following the [TR38901V1920] specification

AntennaElement(pattern[, slant_angle, ...])

Antenna element following the [TR38901V1920] specification

AntennaArray(num_rows, num_cols, ...[, ...])

Antenna array following the [TR38901V1920] specification

HandheldUTArray(carrier_frequency[, ...])

Handheld UT antenna array from TR 38.901 Clause 7.3.

TDL(model[, delay_spread, ...])

Tapped delay line (TDL) channel model from the 3GPP [TR38901V1920] specification

CDL(model, delay_spread, carrier_frequency)

Clustered delay line (CDL) channel model from the 3GPP [TR38901V1920] specification

UMi(carrier_frequency, o2i_model, ut_array, ...)

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

UMa(carrier_frequency, o2i_model, ut_array, ...)

Urban macrocell (UMa) channel model from 3GPP [TR38901V1920] specification.

RMa(carrier_frequency, ut_array, bs_array, ...)

Rural macrocell (RMa) channel model from 3GPP [TR38901V1920] specification.

InH(carrier_frequency, ut_array, bs_array, ...)

Indoor hotspot (InH) channel model from 3GPP [TR38901V1920] specification.

InF(carrier_frequency, ut_array, bs_array, ...)

Indoor factory (InF) channel model.