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.BlockInner 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_valueis 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,
precisionis used.device (str | None) – Device for computation. If None,
deviceis 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_effandnum_allocated_reare both required.sinr_eff – […, num_ut], torch.float | None (default). Estimated effective SINR for each user. If None, then
sinris 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
sinris 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_mcs – bool (default: False). If True, the lowest MCS available in
phy_abstractionBLER 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.