InnerLoopLinkAdaptation#

class sionna.sys.InnerLoopLinkAdaptation(phy_abstraction: sionna.sys.phy_abstraction.PHYAbstraction | None = None, bler_target: float = 0.1, fill_mcs_value: int = 0, precision: Literal['single', 'double'] | None = None, device: str | None = None)[source]#

Bases: sionna.phy.block.Block

Inner loop link adaptation (ILLA).

Computes the highest available modulation and coding scheme (MCS) whose associated transport block error rate (TBLER) does not exceed the specified bler_target:

\[\max \left\{ \text{MCS}: \ \text{TBLER}(\text{MCS}, \text{SINR}_{\text{eff}}) \le \text{BLER}_{\text{target}} \right\}\]

where \(\text{SINR}_{\text{eff}}\) is the effective SINR value provided as input. If no such MCS exists, the lowest available MCS index is returned. If a user is not scheduled, fill_mcs_value is returned.

Parameters:
  • phy_abstraction (sionna.sys.phy_abstraction.PHYAbstraction | None) – An instance of PHYAbstraction. If None, a default instance is created.

  • bler_target (float) – BLER target. Defaults to 0.1.

  • fill_mcs_value (int) – MCS value assigned to non-scheduled users. Defaults to 0.

  • precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None, precision is used.

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

Inputs:
  • sinr – […, num_ofdm_symbols, num_subcarriers, num_ut, num_streams_per_ut], torch.float | None (default). SINR for each OFDM symbol, subcarrier, user and stream. If None, then sinr_eff and num_allocated_re are both required.

  • sinr_eff – […, num_ut], torch.float | None (default). Estimated effective SINR for each user. If None, then sinr is required.

  • num_allocated_re – […, num_ut], torch.int32 | None (default). Number of allocated resources in a slot, computed across OFDM symbols, subcarriers and streams, for each user. If None, then sinr is required.

  • mcs_table_index – […, num_ut], torch.int32 | int (default: 1). MCS table index for each user. For further details, refer to the Note.

  • mcs_category – […, num_ut], torch.int32 | int (default: 0). MCS table category for each user. For further details, refer to the Note.

  • return_lowest_available_mcsbool (default: False). If True, the lowest MCS available in phy_abstraction BLER tables is returned for each user. Only used for internal purposes.

Outputs:

mcs_index – […, num_ut]. Highest available MCS whose BLER does not exceed the target, or the lowest available MCS if no such MCS exists, for each user.

Examples

import torch
from sionna.sys import PHYAbstraction, InnerLoopLinkAdaptation

bler_target = 0.1

# Initialize the PHY abstraction object
phy_abs = PHYAbstraction()

# Initialize the ILLA object
illa = InnerLoopLinkAdaptation(phy_abs, bler_target=0.1)

# Effective SINR for each user
sinr_eff = torch.tensor([0.1, 10, 100])
# N. allocated resource elements for each user
num_allocated_re = torch.tensor([20, 30, 30])

# Compute the MCS index for each user
mcs_index = illa(sinr_eff=sinr_eff,
                num_allocated_re=num_allocated_re,
                mcs_table_index=1,
                mcs_category=0)
print("Selected MCS index =", mcs_index)

Attributes

property phy_abstraction: sionna.sys.phy_abstraction.PHYAbstraction#

PHYAbstraction object used to compute TBLER (read-only).

property bler_target: torch.Tensor#

Get/set the BLER target for each user.