CDL#

class sionna.phy.channel.tr38901.CDL(model: str, delay_spread: float, carrier_frequency: float, ut_array=None, bs_array=None, direction: str = 'downlink', ut_orientation: torch.Tensor | None = None, bs_orientation: torch.Tensor | None = None, ut_velocity: torch.Tensor | None = None, min_speed: float = 0.0, max_speed: float = 0.0, normalize_delays: bool = True, precision: str | None = None, device: str | None = None, spec_version: str = '19.2')[source]#

Bases: sionna.phy.channel.channel_model.ChannelModel

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

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

Note

The CDL-A through CDL-E profile parameters are unchanged between TR 38.901 V16.1 and V19.2. Selecting either supported spec_version therefore produces the same CDL profile, but the resources remain versioned and are selected by spec_version.

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.

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

The CDL model only works for systems with a single transmitter and a single receiver. The transmitter and receiver can be equipped with multiple antennas.

The channel coefficient generation is done following the procedure described in sections 7.7.1 and 7.7.3.

Parameters:
  • model (str) – CDL model to use. Must be "A", "B", "C", "D", or "E".

  • delay_spread (float) – RMS delay spread [s]. Ignored if normalize_delays is set to False.

  • carrier_frequency (float) – Carrier frequency [Hz]

  • ut_array – Antenna array used by the UTs. All UTs share the same antenna array configuration.

  • bs_array – Antenna array used by the base stations. All base stations share the same antenna array configuration.

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

  • ut_orientation (torch.Tensor | None) – Orientation of the UT. If set to None, [\(\pi\), 0, 0] is used. Shape [3] or [batch size, 3].

  • bs_orientation (torch.Tensor | None) – Orientation of the BS. If set to None, [0, 0, 0] is used. Shape [3] or [batch size, 3].

  • ut_velocity (torch.Tensor | None) – UT velocity vector [m/s]. If set to None, velocities are randomly sampled using min_speed and max_speed. Shape [3] or [batch size, 3].

  • min_speed (float) – Minimum speed [m/s]. Ignored if ut_velocity is not None. Defaults to 0.

  • max_speed (float) – Maximum speed [m/s]. Ignored if ut_velocity is not None. Defaults to 0.

  • normalize_delays (bool) – If set to True, the path delays are normalized such that the delay of the first path is zero. Defaults to True.

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

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 CDL channel model and generate channel impulse responses:

import torch
from sionna.phy.channel.tr38901 import CDL, PanelArray

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

bs_array = PanelArray(num_rows_per_panel=1,
                      num_cols_per_panel=1,
                      polarization="dual",
                      polarization_type="cross",
                      antenna_pattern="38.901",
                      carrier_frequency=carrier_frequency,
                      device=device)
ut_array = PanelArray(num_rows_per_panel=1,
                      num_cols_per_panel=1,
                      polarization="single",
                      polarization_type="V",
                      antenna_pattern="omni",
                      carrier_frequency=carrier_frequency,
                      device=device)

channel_model = CDL(model="A",
                    delay_spread=300e-9,
                    carrier_frequency=carrier_frequency,
                    ut_array=ut_array,
                    bs_array=bs_array,
                    direction="downlink",
                    min_speed=0.0,
                    max_speed=3.0,
                    device=device)

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

Notes

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

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\)

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 spec_version: str#

Version of the TR 38.901 parameter tables in use.