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.ChannelModelClustered 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_versiontherefore produces the same CDL profile, but the resources remain versioned and are selected byspec_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_delaysis 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_speedandmax_speed. Shape [3] or [batch size, 3].min_speed (float) – Minimum speed [m/s]. Ignored if
ut_velocityis not None. Defaults to 0.max_speed (float) – Maximum speed [m/s]. Ignored if
ut_velocityis 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,
precisionis used.device (str | None) – Device for computation (e.g.,
"cpu","cuda:0"). If None,deviceis 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_size – int. Batch size.
num_time_steps – int. Number of time steps.
sampling_frequency – float. 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