BlockageModelA#

class sionna.phy.channel.tr38901.BlockageModelA(scenario: SystemLevelScenario, self_blocking: str, num_non_self_blockers: int = 4, precision: str | None = None, device: str | None = None)[source]#

Bases: sionna.phy.object.Object

Stochastic blockage model A from 3GPP TR 38.901.

This model implements the add-on blockage procedure from Section 7.6.4.1 of [TR38901V1920]. It generates rectangular angular blocking regions around each UT and returns the corresponding blockage attenuation for the cluster arrival angles. The LOS/NLOS state of a link is not changed by this model.

For non-self-blocking regions, the loss for a cluster with azimuth angle of arrival \(\phi_\mathrm{AOA}\) and zenith angle of arrival \(\theta_\mathrm{ZOA}\) is

\[L_\mathrm{dB} = -20 \log_{10}\left( 1 - (F_{A_1}+F_{A_2})(F_{Z_1}+F_{Z_2}) \right)\]

if \(|\phi_\mathrm{AOA}-\phi_k|<x_k\) and \(|\theta_\mathrm{ZOA}-\theta_k|<y_k\), and zero otherwise. The terms \(F_{A_1}\), \(F_{A_2}\), \(F_{Z_1}\), and \(F_{Z_2}\) follow Eq. (7.6-23) with the signs from Table 7.6.4.1-3 of [TR38901V1920]. A compliant Model A realization also includes one self-blocking region. An additional 30 dB loss is added for clusters inside the selected portrait or landscape region from Table 7.6.4.1-1. The explicit "none" mode omits this region and is a non-standard extension.

The non-self-blocker centre angles are generated as all-correlated uniform random variables over BS links, following Section 7.6.3.4 of [TR38901V1920]. The specified exponential correlation \(\rho_u\) is imposed with a Gaussian copula whose latent correlation is \(\rho_g=2\sin(\pi\rho_u/6)\). Their spatial correlation distance is 10 m for outdoor UMi, UMa, and RMa UTs, 5 m for O2I UTs, and 5 m for InH UTs, as specified by Table 7.6.4.1-4.

Model A is not available for InF because Tables 7.6.4.1-2 and 7.6.4.1-4 provide neither blocker distributions nor spatial-correlation distances for InF. Use BlockageModelB with explicit blocker geometry for indoor-factory channels.

The optional, on-demand temporal variability of blockage described by TR 38.901 is currently not supported. Blockage attenuation does not evolve over the time samples of a generated channel realization.

Parameters:
  • scenario (SystemLevelScenario) – System-level TR 38.901 scenario.

  • self_blocking (str) – Self-blocking mode. Must be "portrait" or "landscape" for a compliant Model A realization. The explicit value "none" disables self-blocking as a non-standard extension.

  • num_non_self_blockers (int) – Number of non-self-blocking regions. The default value of 4 follows Section 7.6.4.1 of [TR38901V1920].

  • precision (str | None) – Precision used for internal calculations. If None, the scenario precision is used.

  • device (str | None) – Device for computation. If None, the scenario device is used.

Inputs:
  • aoa – Cluster azimuth angles of arrival [degree], shape [batch size, num_bs, num_ut, num_clusters].

  • zoa – Cluster zenith angles of arrival [degree], shape [batch size, num_bs, num_ut, num_clusters].

  • los_aoa – Optional LOS azimuth angles of arrival [degree], shape [batch size, num_bs, num_ut].

  • los_zoa – Optional LOS zenith angles of arrival [degree], shape [batch size, num_bs, num_ut].

Outputs:
  • cluster_loss_db – Blockage attenuation [dB] for each cluster, shape [batch size, num_bs, num_ut, num_clusters].

  • los_loss_db – Blockage attenuation [dB] for the deterministic LOS component, or None if los_aoa or los_zoa is None.

Methods

allocate_topology_tensors(batch_size: int, num_bs: int, num_ut: int) None[source]#

Pre-allocate topology-dependent blockage buffers.

Model A samples one blocker realization per UT and shares it across base stations. num_bs is retained for the common channel-allocation interface but does not determine a buffer dimension here.

Parameters:

Attributes

property num_non_self_blockers: int#

Number of non-self-blocking regions.

property requires_ray_angles: bool#

False because model A computes one loss per cluster.

reset_topology() None[source]#

Reset topology-dependent blockage buffers.

property self_blocking: str#

Self-blocking mode. One of "none", "portrait", or "landscape". The "none" mode is non-standard.

topology_updated_callback() None[source]#

Sample topology-dependent blockage parameters.