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(delay_normalization=DelayNormalization.ZERO, oxygen_absorption=True, expected_state=None, gain=1.0, seed=None)[source]

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

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

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

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

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

  • expected_state (Optional[TypeVar(LSST, bound= LargeScaleState)]) – Expected large-scale state of the channel. If None, the state is randomly generated during each sample of the channel’s realization.

  • gain – Linear channel energy gain factor. Initializes the gain property. \(1.0\) by default.

  • seed (int | None) – Seed used to initialize the pseudo-random number generator.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

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:
serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

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 ClusterDelayLineRealizationParameters(state_variable, delay_normalization, oxygen_absorption, large_scale_parameters, cluster_shadowing_log_variable, cluster_delays_variable, azimuth_angle_variation_variable, azimuth_spread_sign, zenith_angle_variation_variable, zenith_spread_sign, angle_coupling_indices, cross_polarization_power_variable, cross_polarization_phase_variable)[source]

Bases: Serializable

Data class for initialization parameters of a 3GPP Cluster Delay Line channel model realization.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

ClusterDelayLineRealizationParameters

Returns:

The deserialized object.

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

angle_coupling_indices: ndarray
azimuth_angle_variation_variable: ConsistentGaussian
azimuth_spread_sign: ndarray
cluster_delays_variable: ConsistentUniform
cluster_shadowing_log_variable: ConsistentGaussian
cross_polarization_phase_variable: ConsistentUniform
cross_polarization_power_variable: ConsistentGaussian
delay_normalization: DelayNormalization
large_scale_parameters: ndarray

Large scale parameters of the channel model.

Numpy vector with the following elements with the elements containing samples of a standard normal distribution with specific cross-correlations.

oxygen_absorption: bool
state_variable: ConsistentUniform
zenith_angle_variation_variable: ConsistentGaussian
zenith_spread_sign: ndarray
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 (LinkState) – 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 (LinkState) – 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) – 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(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: SerializableEnum

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 LOSState(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: LargeScaleState, IntEnum

Line of sight state of the cluster delay line model.

LOS = 0

Direct line of sight connection without blockage between base station and user terminal.

NLOS = 1

Physical blockage between base station and user terminal.

property line_of_sight: bool

Direct line of sight between two linked devices.

property value: int

Integer value of the state.

class O2IState(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: LargeScaleState, IntEnum

O2I state of the cluster delay line model.

LOS = 0

Direct line of sight connection without blockage between base station and user terminal.

NLOS = 1

Physical blockage between base station and user terminal.

O2I = 2

User terminal loacated inside a building.

property line_of_sight: bool

Direct line of sight between two linked devices.

property value: int

Integer value of the state.

class DelayNormalization(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[source]

Bases: SerializableEnum

Normalization routine applied to a set of sampled delays.

Configuration option to :class:.ClusterDelayLineBase models.

TOF = 1

The minimal delay is the time of flight between two devices.

ZERO = 0

Normalize the delays, so that the minimal delay is zero.

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[Tuple[int, int], dtype[Any]]]

property title: str

Title of the visualizable.

Returns: Title string.