3GPP Cluster Delay Line Models

Inheritance diagram of hermespy.channel.cdl.cluster_delay_lines.ClusterDelayLineBase, hermespy.channel.cdl.cluster_delay_lines.ClusterDelayLineRealization, hermespy.channel.cdl.cluster_delay_lines.ClusterDelayLineSample

Within this module, HermesPy implements the 3GPP standard for cluster delay line models as defined in the Study on channel model for frequencies from 0.5 to 100 GHz[1].

For a link between two devices \(\alpha\) and \(\beta\) featuring \(N^{(\alpha)}\) and \(N^{(\beta)}\) antennas, respectively, the model assumes that the channel impulse response is composed of a sum of propagation paths between \(C\) clusters of scatterers perceived by both devices, with each cluster containing \(L\) individual scatterers, therefore resulting in \(C \cdot L\) propagation paths between each antenna pair and \(C \cdot L \cdot N^{(\alpha)} \cdot N^{(\beta)}\) propagation paths in total.

The impulse response of each propagation path within the cluster delay model

\[h^{(\alpha, \beta)}(t, \tau) = \sqrt{\frac{1}{1 + K}} h^{(\alpha, \beta)}_{\mathrm{NLOS}}(t, \tau) + \sqrt{\frac{K}{1 + K}} h^{(\alpha, \beta)}_{\mathrm{LOS}}(t, \tau)\]

is a sum of a non-line-of-sight (NLOS) and a line-of-sight (LOS) component, balanced by the Ricean \(K\)-factor. Both the NLOS and LOS components

are functions of the two Antennas’ polarization characteristics \(\mathbf{F}^{(a)}(\theta, \phi)\) towards angle-of-arrival \(\theta_{\mathrm{ZOA}}, \phi_{\mathrm{AOA}}\) and angle-of-departure \(\theta_{\mathrm{ZOD}}, \phi_{\mathrm{AOD}}\). For a comprehensive description of all the parameters involved, please refer to the standard document.

The following standard parameterizations are currently provided by HermesPy:

Model

Description

Static CDL

Spatially invariant CDL models.

Indoor Factory

Model of a factory hall.

Indoor Office

Model of an office building.

Rural Macrocells

Model of a rural area.

Urban Macrocells

Model of an urban area.

Urban Microcells

Model of a street canyon.

These preset standard parameterizations distinguish between line-of-sight, no line-of-sight and, in some cases, outside-to-inside propagation conditions.

class ClusterDelayLineBase(gain=1.0, delay_normalization=DelayNormalization.ZERO, oxygen_absorption=True, expected_state=None, **kwargs)[source]

Bases: Channel[CDLRT, ClusterDelayLineSample], Generic[CDLRT, LSST]

Base class for all 3GPP Cluster Delay Line channel models.

Parameters:
  • gain (float, optional) – Linear gain factor a signal amplitude experiences when being propagated over this realization. \(1.0\) by default.

  • delay_normalization (DelayNormalization, optional) – The delay normalization routine applied during channel sampling.

  • oxygen_absorption (bool, optional) – Model oxygen absorption in the channel. Enabled by default.

  • expected_state (LSST, optional) – Expected large-scale state of the channel. If None, the state is randomly generated during each sample of the channel’s realization.

  • **kwargs – Additional keyword arguments passed to the base class.

recall_realization(group)[source]

Recall a realization of this channel type from its HDF serialization.

Parameters:

group (h5py.Group) – HDF group to which the channel realization was serialized.

Return type:

TypeVar(CDLRT, bound= ClusterDelayLineRealization)

Returns: The recalled realization instance.

property delay_normalization: DelayNormalization

The delay normalization routine applied during channel sampling.

property expected_state: LSST | None

Expected large-scale state of the channel.

If None, the state is randomly generated during each sample of the channel’s realization.

abstract property max_num_clusters: int

Maximum number of clusters a realization will generate.

abstract property max_num_rays: int

Maximum number of rays a realization will generate per cluster.

property oxygen_absorption: bool

Model oxygen absorption in the channel.

class ClusterDelayLineRealization(expected_state, state_realization, parameters, sample_hooks, gain=1.0)[source]

Bases: ChannelRealization[ClusterDelayLineSample], Generic[LSST]

Realization of a 3GPP Cluster Delay Line channel model.

Parameters:
  • expected_state (LSST | None) – Expected large-scale state of the channel. If not specified, the large-scale state is randomly generated.

  • state_realization (ConsistentRealization) – Realization of the large scale state.

  • parameters (ClusterDelayLineRealizationParameters) – General parameters of the cluster delay line realization.

  • sample_hooks (Set[ChannelSampleHook[ClusterDelayLineSample]]) – Hooks for callback functions during the sample generation.

  • gain (float, optional) – Linear amplitude scaling factor if signals propagated over the channel.

to_HDF(group)[source]

Serialize the channel realization to HDF5.

Parameters:

group (Group) – HDF5 group to serialize the channel realization to.

Return type:

None

property expected_state: LSST | None

Expected state of the channel realization.

If None, the state will be randomly drawn from the state variable for each sample.

class ClusterDelayLineSample(line_of_sight, rice_factor, azimuth_of_arrival, zenith_of_arrival, azimuth_of_departure, zenith_of_departure, delay_offset, cluster_delays, cluster_delay_spread, cluster_powers, polarization_transformations, state)[source]

Bases: ChannelSample

Sample of a 3GPP Cluster Delay Line channel model.

Parameters:

state (ChannelState) – State of the channel at the time of sampling.

plot_rays(title=None)[source]
Return type:

Figure

reciprocal(state)[source]

Generate a reciprocal sample of the current sample.

Parameters:

state (ChannelState) – State of the reciprocal sample.

Return type:

ClusterDelayLineSample

Returns: A reciprocal sample.

state(num_samples, max_num_taps, interpolation_mode=InterpolationMode.NEAREST)[source]

Generate the discrete channel state information from this channel realization.

Denoted by

\[\mathbf{H}^{(m, \tau)} \in \mathbb{C}^{N_{\mathrm{Rx}} \times N_{\mathrm{Tx}}}\]

within the respective equations.

Parameters:
  • num_samples (int) – Number of discrete time-domain samples of the chanel state information.

  • max_num_taps (int) – Maximum number of delay taps considered per discrete time-domain sample.

  • interpolation_mode (InterpolationMode, optional) – Interpolation behaviour of the channel realization’s delay components with respect to the proagated signal’s sampling rate. If not specified, an integer rounding to the nearest sampling instance will be assumed.

Return type:

ChannelStateInformation

Returns: The channel state information representing this channel realization.

property azimuth_arrival_spread: float

Spread of azimuth of arrival angles.

Returns: Angular spread in radians.

property azimuth_departure_spread: float

Spread of azimuth of departure angles.

Returns: Angular spread in radians.

property azimuth_of_arrival: ndarray

Azimuth of arrival angles in radians.

property azimuth_of_departure: ndarray

Azimuth of departure angles in radians.

property cluster_delay_spread: float

Cluster delay spread in seconds.

property cluster_delays: ndarray

Cluster delays in seconds.

property cluster_powers: ndarray

Cluster powers.

property delay_offset: float

Delay offset in seconds.

property expected_energy_scale: float

Expected linear scaling of a propagated signal’s energy at each receiving antenna.

Required to compute the expected energy of a signal after propagation, and therfore signal-to-noise ratios (SNRs) and signal-to-interference-plus-noise ratios (SINRs).

property line_of_sight: bool

Does the realization include direct line of sight between the two devices?

property max_delay: float

Maximum expected delay in seconds.

property num_clusters: int

Number of realized scatter clusters.

property num_rays: int

Number of rays within each cluster.

property plot_angles: _AngleVisualization
property plot_power_delay: _PowerDelayVisualization
property polarization_transformations: ndarray

Polarization transformations.

property rice_factor: float

Rice factor.

subcluster_indices: List[List[int]] = [[0, 1, 2, 3, 4, 5, 6, 7, 18, 19], [8, 9, 10, 11, 16, 17], [12, 13, 14, 15]]
property zenith_arrival_spread: float

Spread of zenith of arrival angles.

Returns: Angular spread in radians.

property zenith_departure_spread: float

Spread of zenith of departure angles.

Returns: Angular spread in radians.

property zenith_of_arrival: ndarray

Zenith of arrival angles in radians.

property zenith_of_departure: ndarray

Zenith of departure angles in radians.

class LargeScaleState[source]

Bases: object

Large scale state of a 3GPP Cluster Delay Line channel model.

abstract property line_of_sight: bool

Direct line of sight between two linked devices.

abstract property value: int

Integer value of the state.

class CDLRT

Type of a 3GPP Cluster Delay Line channel realization.

alias of TypeVar(‘CDLRT’, bound=ClusterDelayLineRealization)

class LSST

Type variable for large scale state types.

alias of TypeVar(‘LSST’, bound=LargeScaleState)

class _PowerDelayVisualization(sample)[source]

Bases: VisualizableAttribute[StemVisualization]

Visualization of cluster delay sample power delay profile.

property title: str

Title of the visualizable.

Returns: Title string.

class _AngleVisualization(sample)[source]

Bases: VisualizableAttribute[ScatterVisualization]

Visualization of the angles of arrival and departure.

create_figure(**kwargs)[source]

Create a new figure for plotting.

Returns: Newly generated figure and axes to plot into.

Return type:

Tuple[FigureBase, NDArray[Shape[*, *], Any]]

property title: str

Title of the visualizable.

Returns: Title string.