TDL#

class sionna.phy.channel.tr38901.TDL(model: str, delay_spread: float, carrier_frequency: float, num_sinusoids: int = 20, los_angle_of_arrival: float = 0.7853981633974483, 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)[source]#

Bases: sionna.phy.channel.channel_model.ChannelModel

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

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

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. One of ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘A30’, ‘B100’, ‘C300’.

  • delay_spread (float) – RMS delay spread [s]. For the ‘A30’, ‘B100’, and ‘C300’ models, the delay spread must be set to 30ns, 100ns, and 300ns, respectively.

  • carrier_frequency (float) – 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 pi/4.

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

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 setup a TDL channel model assuming an OFDM waveform:

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

tdl = TDL(model="A",
          delay_spread=300e-9,
          carrier_frequency=3.5e9,
          min_speed=0.0,
          max_speed=3.0)

channel = OFDMChannel(channel_model=tdl,
                      resource_grid=rg)

where rg is an instance of ResourceGrid.

Notes

The following tables from [TR38901] provide typical values for the delay spread.

Model

Delay spread [ns]

Very short delay spread

\(10\)

Short short delay spread

\(10\)

Nominal delay spread

\(100\)

Long delay spread

\(300\)

Very long delay spread

\(1000\)

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

Attributes

property num_clusters: int#

Number of paths (\(M\))

property los: bool#

True if this is a LoS model. False otherwise.

property k_factor: torch.Tensor#

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

property delays: torch.Tensor#

Path delays [s]

property mean_powers: torch.Tensor#

Path powers in linear scale

property mean_power_los: torch.Tensor#

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

property delay_spread: torch.Tensor#

RMS delay spread [s]