3GPP Cluster Delay Line Model#

Within this module, HermesPy implements the 3GPP standard for cluster delay line models as defined in Study on channel model for frequencies from 0.5 to 100 GHz[1]. For a comprehensive description of all the parameters involved, please refer to the standard document.

The abstract base class ClusterDelayLineBase defines all required parameters as abstrat properties and is required to be implemented by each specific cluster delay line model. HermesPy features the full customizable model ClusterDelayLine as well as implementations describing standard-compliant benchmark scenarios

with pre-defined parameters. In general, the HermesPy cluster delay line implementation mixes deterministic with statistical information: Devices linked by cluster delay line models are required to specify their assumed positions and orientations, since the specular line of sight ray components are deterministic.

class DelayNormalization(value)#

Bases: Enum

Normalization routine applied to a set of sampled delays.

Configuration option to :class:.ClusterDelayLineBase models.

ZERO = 0#

Normalize the delays, so that the minimal delay is zero

TOF = 1#

The minimal delay is the time of flight between two devices

NONE = 2#

No delay normalization is applied.

Only relevant for debugging purposes.

class ClusterDelayLineBase(delay_normalization=DelayNormalization.ZERO, **kwargs)#

Bases: Channel

Parameters:

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

delay_normalization: DelayNormalization#

The delay normalization routine applied during channel sampling.

abstract property line_of_sight: bool#

Does this model assume direct line of sight between the two devices?

Referred to as \(LOS\) within the standard.

Returns:

Line of sight indicator.

Return type:

bool

abstract property delay_spread_mean: float#

Mean of the cluster delay spread.

The spread realization and its mean are referred to as \(\mathrm{DS}\) and \(\mu_{\mathrm{lgDS}}\) within the the standard, respectively.

Returns:

Mean delay spread in seconds.

Return type:

float

abstract property delay_spread_std: float#

Standard deviation of the cluster delay spread.

The spread realization and its standard deviation are referred to as \(\mathrm{DS}\) and \(\sigma_{\mathrm{lgDS}}\) within the the standard, respectively.

Returns:

Delay spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

abstract property aod_spread_mean: float#

Mean of the Azimuth Angle-of-Departure spread.

The spread realization and its mean are referred to as \(\mathrm{ASD}\) and \(\mu_{\mathrm{lgASD}}\) within the the standard, respectively.

Returns:

Mean angle spread in seconds

Return type:

float

abstract property aod_spread_std: float#

Standard deviation of the Azimuth Angle-of-Departure spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ASD}\) and \(\sigma_{\mathrm{lgASD}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

abstract property aoa_spread_mean: float#

Mean of the Azimuth Angle-of-Arriaval spread.

The spread realization and its mean are referred to as \(\mathrm{ASA}\) and \(\mu_{\mathrm{lgASA}}\) within the the standard, respectively.

Returns:

Mean angle spread in seconds

Return type:

float

abstract property aoa_spread_std: float#

Standard deviation of the Azimuth Angle-of-Arrival spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ASA}\) and \(\sigma_{\mathrm{lgASA}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

abstract property zoa_spread_mean: float#

Mean of the Zenith Angle-of-Arriaval spread.

The spread realization and its mean are referred to as \(\mathrm{ZSA}\) and \(\mu_{\mathrm{lgZSA}}\) within the the standard, respectively.

Returns:

Mean angle spread in seconds

Return type:

float

abstract property zoa_spread_std: float#

Standard deviation of the Zenith Angle-of-Arrival spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ZSA}\) and \(\sigma_{\mathrm{lgZSA}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

abstract property zod_spread_mean: float#

Mean of the Zenith Angle-of-Departure spread.

The spread realization and its mean are referred to as \(\mathrm{ZOD}\) and \(\mu_{\mathrm{lgZSD}}\) within the the standard, respectively.

Returns:

Mean angle spread in degrees

Return type:

float

abstract property zod_spread_std: float#

Standard deviation of the Zenith Angle-of-Departure spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ZOD}\) and \(\sigma_{\mathrm{lgZOD}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in degrees.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

abstract property zod_offset: float#

Offset between Zenith Angle-of-Arrival and Angle-of-Departure.

The offset is referred to as \(\mu_{\mathrm{offset,ZOD}}\) within the standard.

Returns:

The offset in degrees.

Return type:

float

abstract property rice_factor_mean: float#

Mean of the rice factor distribution.

The rice factor realization and its mean are referred to as \(K\) and \(\mu_K\) within the the standard, respectively.

Returns:

Rice factor mean in dB.

Return type:

float

abstract property rice_factor_std: float#

Standard deviation of the rice factor distribution.

The rice factor realization and its standard deviation are referred to as \(K\) and \(\sigma_K\) within the the standard, respectively.

Returns:

Rice factor standard deviation in dB.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

abstract property delay_scaling: float#

Delay scaling proportionality factor

Referred to as \(r_{\tau}\) within the standard.

Returns:

Scaling factor.

Return type:

float

Raises:

ValueError – If scaling factor is smaller than one.

abstract property cross_polarization_power_mean: float#

Mean of the cross-polarization power.

The cross-polarization power and its mean are referred to as \(\mathrm{XPR}\) and \(\mu_{\mathrm{XPR}}\) within the the standard, respectively.

Returns:

Mean power in dB.

Return type:

float

abstract property cross_polarization_power_std: float#

Standard deviation of the cross-polarization power.

The cross-polarization power and its standard deviation are referred to as \(\mathrm{XPR}\) and \(\sigma_{\mathrm{XPR}}\) within the the standard, respectively.

Returns:

Power standard deviation in dB.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

abstract property num_clusters: int#

Number of clusters.

Referred to as \(M\) within the standard.

Returns:

Number of clusters.

Return type:

int

Raises:

ValueError – If the number of clusters is smaller than one.

abstract property num_rays: int#

Number of rays per cluster.

Referred to as \(N\) within the standard.

Returns:

Number of rays.

Return type:

int

abstract property cluster_delay_spread: float#

Delay spread within an individual cluster.

Referred to as \(c_{DS}\) within the standard.

Returns:

Delay spread in seconds.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

abstract property cluster_aod_spread: float#

Azimuth Angle-of-Departure spread within an individual cluster.

Referred to as \(c_{ASD}\) within the standard.

Returns:

Angle spread in degrees.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

abstract property cluster_aoa_spread: float#

Azimuth Angle-of-Arrival spread within an individual cluster.

Referred to as \(c_{ASA}\) within the standard.

Returns:

Angle spread in degrees.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

abstract property cluster_zoa_spread: float#

Zenith Angle-of-Arrival spread within an individual cluster.

Referred to as \(c_{ZSA}\) within the standard.

Returns:

Angle spread in degrees.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

abstract property cluster_shadowing_std: float#

Standard deviation of the cluster shadowing.

Referred to as \(\zeta\) within the the standard.

Returns:

Cluster shadowing standard deviation.

Return type:

float

Raises:

ValueError – If the deviation is smaller than zero.

realize(num_samples, sampling_rate)#

Generate a new channel impulse response.

Note that this is the core routine from which Channel.propagate() will create the channel state.

Parameters:
  • num_samples (int) – Number of samples \(N\) within the impulse response.

  • sampling_rate (float) – The rate at which the delay taps will be sampled, i.e. the delay resolution.

Return type:

ChannelRealization

Returns:

Numpy aray representing the impulse response for all propagation paths between antennas. 4-dimensional tensor of size \(M_\mathrm{Rx} \times M_\mathrm{Tx} \times N \times (L+1)\) where \(M_\mathrm{Rx}\) is the number of receiving antennas, \(M_\mathrm{Tx}\) is the number of transmitting antennas, \(N\) is the number of propagated samples and \(L\) is the maximum path delay (in samples). For the ideal channel in the base class \(L = 0\).

class ClusterDelayLine(line_of_sight=True, delay_spread_mean=7.14, delay_spread_std=0.38, aod_spread_mean=1.21, aod_spread_std=0.41, aoa_spread_mean=1.73, aoa_spread_std=0.28, zoa_spread_mean=0.73, zoa_spread_std=0.34, zod_spread_mean=0.1, zod_spread_std=0.0, zod_offset=0.0, rice_factor_mean=9.0, rice_factor_std=5.0, delay_scaling=1.0, cross_polarization_power_mean=9.0, cross_polarization_power_std=3.0, num_clusters=12, num_rays=20, cluster_delay_spread=5e-09, cluster_aod_spread=5.0, cluster_aoa_spread=17.0, cluster_zoa_spread=7.0, cluster_shadowing_std=3.0, **kwargs)#

Bases: ClusterDelayLineBase, Serializable

3GPP Cluster Delay Line Channel Model.

Parameters:
  • num_clusters (int, optional) – Number of generated clusters per channel sample.

  • delay_spread (float, optional) – Root-Mean-Square spread of the cluster delay in seconds.

  • delay_scaling (float, optional) – Delay distribution proportionality factor.

  • rice_factor_mean (float, optional) – Mean of the rice factor K.

  • rice_factor_std (float, optional) – Standard deviation of the rice factor K.

  • cluster_shadowing_std (float, optional) – Cluster shadowing standard deviation in dB.

  • line_of_sight (bool, optional) – Is this model a line-of-sight model?

yaml_tag: Optional[str] = 'ClusterDelayLine'#

YAML serialization tag.

property line_of_sight: bool#

Does this model assume direct line of sight between the two devices?

Referred to as \(LOS\) within the standard.

Returns:

Line of sight indicator.

Return type:

bool

property delay_spread_mean: float#

Mean of the cluster delay spread.

The spread realization and its mean are referred to as \(\mathrm{DS}\) and \(\mu_{\mathrm{lgDS}}\) within the the standard, respectively.

Returns:

Mean delay spread in seconds.

Return type:

float

property delay_spread_std: float#

Standard deviation of the cluster delay spread.

The spread realization and its standard deviation are referred to as \(\mathrm{DS}\) and \(\sigma_{\mathrm{lgDS}}\) within the the standard, respectively.

Returns:

Delay spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

property aod_spread_mean: float#

Mean of the Azimuth Angle-of-Departure spread.

The spread realization and its mean are referred to as \(\mathrm{ASD}\) and \(\mu_{\mathrm{lgASD}}\) within the the standard, respectively.

Returns:

Mean angle spread in seconds

Return type:

float

property aod_spread_std: float#

Standard deviation of the Azimuth Angle-of-Departure spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ASD}\) and \(\sigma_{\mathrm{lgASD}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

property aoa_spread_mean: float#

Mean of the Azimuth Angle-of-Arriaval spread.

The spread realization and its mean are referred to as \(\mathrm{ASA}\) and \(\mu_{\mathrm{lgASA}}\) within the the standard, respectively.

Returns:

Mean angle spread in seconds

Return type:

float

property aoa_spread_std: float#

Standard deviation of the Azimuth Angle-of-Arrival spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ASA}\) and \(\sigma_{\mathrm{lgASA}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

property zoa_spread_mean: float#

Mean of the Zenith Angle-of-Arriaval spread.

The spread realization and its mean are referred to as \(\mathrm{ZSA}\) and \(\mu_{\mathrm{lgZSA}}\) within the the standard, respectively.

Returns:

Mean angle spread in seconds

Return type:

float

property zoa_spread_std: float#

Standard deviation of the Zenith Angle-of-Arrival spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ZSA}\) and \(\sigma_{\mathrm{lgZSA}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in seconds.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

property zod_spread_mean: float#

Mean of the Zenith Angle-of-Departure spread.

The spread realization and its mean are referred to as \(\mathrm{ZOD}\) and \(\mu_{\mathrm{lgZSD}}\) within the the standard, respectively.

Returns:

Mean angle spread in degrees

Return type:

float

property zod_spread_std: float#

Standard deviation of the Zenith Angle-of-Departure spread.

The spread realization and its standard deviation are referred to as \(\mathrm{ZOD}\) and \(\sigma_{\mathrm{lgZOD}}\) within the the standard, respectively.

Returns:

Angle spread standard deviation in degrees.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

property zod_offset: float#

Offset between Zenith Angle-of-Arrival and Angle-of-Departure.

The offset is referred to as \(\mu_{\mathrm{offset,ZOD}}\) within the standard.

Returns:

The offset in degrees.

Return type:

float

property rice_factor_mean: float#

Mean of the rice factor distribution.

The rice factor realization and its mean are referred to as \(K\) and \(\mu_K\) within the the standard, respectively.

Returns:

Rice factor mean in dB.

Return type:

float

property rice_factor_std: float#

Standard deviation of the rice factor distribution.

The rice factor realization and its standard deviation are referred to as \(K\) and \(\sigma_K\) within the the standard, respectively.

Returns:

Rice factor standard deviation in dB.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

property delay_scaling: float#

Delay scaling proportionality factor

Referred to as \(r_{\tau}\) within the standard.

Returns:

Scaling factor.

Return type:

float

Raises:

ValueError – If scaling factor is smaller than one.

property cross_polarization_power_mean: float#

Mean of the cross-polarization power.

The cross-polarization power and its mean are referred to as \(\mathrm{XPR}\) and \(\mu_{\mathrm{XPR}}\) within the the standard, respectively.

Returns:

Mean power in dB.

Return type:

float

property cross_polarization_power_std: float#

Standard deviation of the cross-polarization power.

The cross-polarization power and its standard deviation are referred to as \(\mathrm{XPR}\) and \(\sigma_{\mathrm{XPR}}\) within the the standard, respectively.

Returns:

Power standard deviation in dB.

Return type:

float

Raises:

ValueError – If the standard deviation is smaller than zero.

property num_clusters: int#

Number of clusters.

Referred to as \(M\) within the standard.

Returns:

Number of clusters.

Return type:

int

Raises:

ValueError – If the number of clusters is smaller than one.

property num_rays: int#

Number of rays per cluster.

Referred to as \(N\) within the standard.

Returns:

Number of rays.

Return type:

int

property cluster_delay_spread: float#

Delay spread within an individual cluster.

Referred to as \(c_{DS}\) within the standard.

Returns:

Delay spread in seconds.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

property cluster_aod_spread: float#

Azimuth Angle-of-Departure spread within an individual cluster.

Referred to as \(c_{ASD}\) within the standard.

Returns:

Angle spread in degrees.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

property cluster_aoa_spread: float#

Azimuth Angle-of-Arrival spread within an individual cluster.

Referred to as \(c_{ASA}\) within the standard.

Returns:

Angle spread in degrees.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

property cluster_zoa_spread: float#

Zenith Angle-of-Arrival spread within an individual cluster.

Referred to as \(c_{ZSA}\) within the standard.

Returns:

Angle spread in degrees.

Return type:

float

Raises:

ValueError – If spread is smaller than zero.

property cluster_shadowing_std: float#

Standard deviation of the cluster shadowing.

Referred to as \(\zeta\) within the the standard.

Returns:

Cluster shadowing standard deviation.

Return type:

float

Raises:

ValueError – If the deviation is smaller than zero.