TDL#

class sionna.phy.channel.tr38901.TDL(model: str, delay_spread: float | None = None, carrier_frequency: float | None = None, num_sinusoids: int = 20, los_angle_of_arrival: float = np.float64(0.7953988301841436), min_speed: float = 0.0, max_speed: float | None = None, num_rx_ant: int = 1, num_tx_ant: int = 1, spatial_corr_mat: torch.Tensor | None = None, rx_corr_mat: torch.Tensor | None = None, tx_corr_mat: torch.Tensor | None = None, precision: str | None = None, device: str | None = None, spec_version: str = '19.2')[source]#

Bases: sionna.phy.channel.channel_model.ChannelModel

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

The power delay profiles (PDPs) are normalized to have a total energy of one.

Two families of delay profiles are available. They differ in how the tap delays are obtained.

The scalable profiles "A" to "E" from TR 38.901 tabulate tap delays that are normalized to an RMS delay spread of one. The delays used in the simulation are these normalized values multiplied by delay_spread, so a single profile shape describes short and long delay spreads alike, and delay_spread is what represents the propagation scenario. Typical values are tabulated under Notes below.

The fixed-delay profiles "A10" to "D30" from Annex B.2.1 of [TS38101-4] tabulate absolute tap delays in nanoseconds and are defined for UE conformance and performance testing. Their RMS delay spread is part of the profile definition and is stated in nanoseconds by the model name, for example 30 ns for "A30". Since the tap delays are absolute, they are used as tabulated and delay_spread scales nothing. It can therefore be omitted for these profiles; a value that differs from the one of the profile is overridden at construction, with a message printed, and later assignments to delay_spread are ignored. Reading the property returns the delay spread of the profile. These profiles are normally referenced together with a maximum Doppler frequency, as listed in the Doppler combination tables below.

Note

The scalable TR 38.901 models apply from 0.5 GHz to 100 GHz and for system bandwidths of at most 2 GHz. These applicability limits are not enforced by this class.

Channel coefficients are generated using a sum-of-sinusoids model [SoS]. Channel aging is simulated in the event of mobility.

If a minimum speed and a maximum speed are specified such that the maximum speed is greater than the minimum speed, then speeds are randomly and uniformly sampled from the specified interval for each link and each batch example.

The TDL model only works for systems with a single transmitter and a single receiver. The transmitter and receiver can be equipped with multiple antennas. Spatial correlation is simulated through filtering by specified correlation matrices.

The spatial_corr_mat parameter can be used to specify an arbitrary spatial correlation matrix. In particular, it can be used to model correlated cross-polarized transmit and receive antennas as follows (see, e.g., Annex G.2.3.2.1 [TS38141-1]):

\[\mathbf{R} = \mathbf{R}_{\text{rx}} \otimes \mathbf{\Gamma} \otimes \mathbf{R}_{\text{tx}}\]

where \(\mathbf{R}\) is the spatial correlation matrix spatial_corr_mat, \(\mathbf{R}_{\text{rx}}\) the spatial correlation matrix at the receiver with same polarization, \(\mathbf{R}_{\text{tx}}\) the spatial correlation matrix at the transmitter with same polarization, and \(\mathbf{\Gamma}\) the polarization correlation matrix. \(\mathbf{\Gamma}\) is 1x1 for single-polarized antennas, 2x2 when only the transmit or receive antennas are cross-polarized, and 4x4 when transmit and receive antennas are cross-polarized.

It is also possible not to specify spatial_corr_mat, but instead the correlation matrices at the receiver and transmitter, using the rx_corr_mat and tx_corr_mat parameters, respectively. This can be useful when single polarized antennas are simulated, and it is also more computationally efficient. This is equivalent to setting spatial_corr_mat to :

\[\mathbf{R} = \mathbf{R}_{\text{rx}} \otimes \mathbf{R}_{\text{tx}}\]

where \(\mathbf{R}_{\text{rx}}\) is the correlation matrix at the receiver rx_corr_mat and \(\mathbf{R}_{\text{tx}}\) the correlation matrix at the transmitter tx_corr_mat.

Parameters:
  • model (str) – TDL model to use. Must be one of "A", "B", "C", "D", "E", "A10", "A30", "B100", "C60", "C300", "D10", or "D30". The models "A" to "E" are the scalable TR 38.901 TDL profiles. The models "A10", "A30", "B100", "C60", "C300", "D10", and "D30" are the fixed-delay Annex B.2.1 delay profiles from [TS38101-4].

  • delay_spread (float | None) – RMS delay spread [s]. Required for the scalable profiles "A" to "E", whose normalized tap delays it scales. The fixed-delay TS 38.101-4 models tabulate absolute tap delays, so this parameter can be omitted for them; it then takes the delay spread of the profile, which is 10 ns for "A10" and "D10", 30 ns for "A30" and "D30", 60 ns for "C60", 100 ns for "B100", and 300 ns for "C300". A value that differs from the one of the profile is discarded and a message is printed.

  • carrier_frequency (float | None) – Carrier frequency [Hz]

  • num_sinusoids (int) – Number of sinusoids for the sum-of-sinusoids model. Defaults to 20.

  • los_angle_of_arrival (float) – Angle-of-arrival for LoS path [radian]. Only used with LoS models. Defaults to arccos(0.7), placing the LoS Doppler peak at 0.7 times the maximum Doppler shift as specified by [TR38901V1920].

  • min_speed (float) – Minimum speed [m/s]. Defaults to 0.0.

  • max_speed (float | None) – Maximum speed [m/s]. If set to None, then max_speed takes the same value as min_speed.

  • num_rx_ant (int) – Number of receive antennas. Defaults to 1.

  • num_tx_ant (int) – Number of transmit antennas. Defaults to 1.

  • spatial_corr_mat (torch.Tensor | None) – Spatial correlation matrix of shape [num_rx_ant*num_tx_ant, num_rx_ant*num_tx_ant]. If not set to None, then rx_corr_mat and tx_corr_mat are ignored and this matrix is used for spatial correlation. If set to None and rx_corr_mat and tx_corr_mat are also set to None, then no correlation is applied.

  • rx_corr_mat (torch.Tensor | None) – Spatial correlation matrix for the receiver of shape [num_rx_ant, num_rx_ant]. If set to None and spatial_corr_mat is also set to None, then no receive correlation is applied.

  • tx_corr_mat (torch.Tensor | None) – Spatial correlation matrix for the transmitter of shape [num_tx_ant, num_tx_ant]. If set to None and spatial_corr_mat is also set to None, then no transmit correlation is applied.

  • 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.

  • spec_version (str) – Version of the TR 38.901 parameter tables to use. Supported values are "16.1" and "19.2". Defaults to "19.2". This selector applies only to the scalable TDL-A through TDL-E profiles, not to the fixed TS 38.101-4 profiles.

Inputs:
  • batch_sizeint. Batch size.

  • num_time_stepsint. Number of time steps.

  • sampling_frequencyfloat. Sampling frequency [Hz].

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

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

Examples

The following code snippet shows how to set up a TDL channel model and generate channel impulse responses:

import torch
from sionna.phy.channel.tr38901 import TDL

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

channel_model = TDL(model="A",
                    delay_spread=300e-9,
                    carrier_frequency=3.5e9,
                    min_speed=0.0,
                    max_speed=3.0,
                    num_rx_ant=2,
                    num_tx_ant=1,
                    device=device)

h, tau = channel_model(batch_size=32,
                       num_time_steps=14,
                       sampling_frequency=30.72e6)

Available Model Options

model

Source

Delay handling

LoS component

"A"

TR 38.901

Scaled by delay_spread

No

"B"

TR 38.901

Scaled by delay_spread

No

"C"

TR 38.901

Scaled by delay_spread

No

"D"

TR 38.901

Scaled by delay_spread

Yes

"E"

TR 38.901

Scaled by delay_spread

Yes

"A10"

TS 38.101-4

Fixed, 10 ns RMS

No

"A30"

TS 38.101-4

Fixed, 30 ns RMS

No

"B100"

TS 38.101-4

Fixed, 100 ns RMS

No

"C60"

TS 38.101-4

Fixed, 60 ns RMS

No

"C300"

TS 38.101-4

Fixed, 300 ns RMS

No

"D10"

TS 38.101-4

Fixed, 10 ns RMS

Yes

"D30"

TS 38.101-4

Fixed, 30 ns RMS

Yes

The fixed-delay resources contain the profiles standardized by TS 38.101-4 V19.2.2. Their release and frequency-range availability is:

Table 1 Fixed-delay profile availability#

Specification

FR1 profiles

FR2 profiles

Restriction

TS 38.101-4 V16.1

"A30", "B100", "C300"

"A30", "C60"

None

Added by TS 38.101-4 V19.2.2

"D30"

"D30", "A10", "D10"

"A10" and "D10" apply only for channel bandwidths greater than 200 MHz

The class has no channel-bandwidth argument and does not enforce these fixed-profile restrictions. Select a profile appropriate for the simulated frequency range and bandwidth.

TS 38.101-4 Doppler Combinations

Annex B.2.2 of TS 38.101-4 defines full propagation-condition names by combining a fixed delay profile with a maximum Doppler frequency. These full names are not passed to model directly. Instead, select the delay profile with model and set min_speed and max_speed to realize the desired Doppler frequency.

Table 2 FR1 channel model parameters from TS 38.101-4 Table B.2.2-1#

TS 38.101-4 name

model

\(f_{\mathrm{D,max}}\)

TDLA30-5

"A30"

5 Hz

TDLA30-10

"A30"

10 Hz

TDLA30-20

"A30"

20 Hz

TDLA30-180

"A30"

180 Hz

TDLA30-195

"A30"

195 Hz

TDLA30-1400

"A30"

1400 Hz

TDLA30-2700

"A30"

2700 Hz

TDLB100-400

"B100"

400 Hz

TDLC300-100

"C300"

100 Hz

TDLC300-600

"C300"

600 Hz

TDLC300-1200

"C300"

1200 Hz

TDLD30-5

"D30"

5 Hz

Table 3 FR2 channel model parameters from TS 38.101-4 Table B.2.2-2#

TS 38.101-4 name

model

\(f_{\mathrm{D,max}}\)

TDLA30-35

"A30"

35 Hz

TDLA30-75

"A30"

75 Hz

TDLA30-300

"A30"

300 Hz

TDLC60-300

"C60"

300 Hz

TDLD30-75

"D30"

75 Hz

Notes

The scalable profiles do not define a delay spread of their own, so a value must be chosen for delay_spread. Table 7.7.3-1 of [TR38901V1920] provides example scaling parameters for this purpose, reproduced below. They span the range of RMS delay spreads observed in measurements for the typical 5G evaluation scenarios.

Model

Delay spread [ns]

Very short delay spread

\(10\)

Short delay spread

\(30\)

Nominal delay spread

\(100\)

Long delay spread

\(300\)

Very long delay spread

\(1000\)

Table 7.7.3-2, reproduced below, relates these values to scenarios and carrier frequencies, for information only. The short-delay profile is the median RMS delay spread of the LoS case, while the normal-delay and long-delay profiles are the median and the 90th percentile of the NLoS case. A TDL profile is not tied to a scenario: any of these delay spreads may occur in any scenario, but some values are more likely in some scenarios than in others. The table does not apply to the fixed-delay profiles, whose delay spread is part of the profile definition.

Delay spread [ns]

Frequency [GHz]

2

6

15

28

39

60

70

Indoor office

Short delay profile

20

16

16

16

16

16

16

Normal delay profile

39

30

24

20

18

16

16

Long delay profile

59

53

47

43

41

38

37

UMi Street-canyon

Short delay profile

65

45

37

32

30

27

26

Normal delay profile

129

93

76

66

61

55

53

Long delay profile

634

316

307

301

297

293

291

UMa

Short delay profile

93

93

85

80

78

75

74

Normal delay profile

363

363

302

266

249

228

221

Long delay profile

1148

1148

955

841

786

720

698

RMa / RMa O2I

Short delay profile

32

32

N/A

N/A

N/A

N/A

N/A

Normal delay profile

37

37

N/A

N/A

N/A

N/A

N/A

Long delay profile

153

153

N/A

N/A

N/A

N/A

N/A

UMi / UMa O2I

Normal delay profile

242

Long delay profile

616

Note

TS 38.101-4 model names combine a fixed delay profile with a maximum Doppler frequency, e.g., TDLA30-10. In this class, model selects only the fixed delay profile, e.g., model="A30". The min_speed and max_speed arguments are still used and determine the Doppler spread through carrier_frequency. To emulate a TS 38.101-4 model with maximum Doppler frequency \(f_\mathrm{D,max}\), use max_speed = f_D_max*c/carrier_frequency, where \(c\) is the speed of light. Set min_speed to the same value for a deterministic speed, or to a lower value to sample speeds uniformly over an interval.

Attributes

property delay_spread: torch.Tensor#

RMS delay spread [s]

property delays: torch.Tensor#

Path delays [s]

property k_factor: torch.Tensor#

K-factor in linear scale. Only available with LoS models.

property los: bool#

True if this is a LoS model. False otherwise.

property mean_power_los: torch.Tensor#

LoS component power in linear scale. Only available with LoS models.

property mean_powers: torch.Tensor#

Path powers in linear scale

property num_clusters: int#

Number of paths (\(M\))

property spec_version: str#

Version of the TR 38.901 parameter tables in use.