Link Adaptation

Link adaptation (LA) optimizes the performance of a single wireless link bydynamically adjusting transmission parameters to match time-varying channelconditions.
The objective is to maximize the achieved throughput while maintaining thetransport block error rate (TBLER) sufficiently low.Typically, this is simplified to maintaining the TBLER close to apredefined target, designed to balance throughput andlatency.
The main challenge lies in handling noisy and sparse SINRfeedback, which is used to estimate the channel quality.
For a usage example of link adaptation in Sionna, we refer to theLink Adaptationnotebook.
- classsionna.sys.InnerLoopLinkAdaptation(phy_abstraction,bler_target=0.1,fill_mcs_value=0)[source]
Class for inner loop link adaptation (ILLA). It computes the highestavailable modulation and coding scheme (MCS) whoseassociated 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 providedas input.If no such MCS exists, the lowest available MCS index is returned. If a useris not scheduled,
fill_mcs_valueis returned.- Parameters:
phy_abstraction (
PHYAbstraction) – An instance ofPHYAbstractionbler_target (float (default: 0.1)) – BLER target
fill_mcs_value (int (default: 0)) – MCS value assigned to non-scheduled users
- Input:
sinr ([…, num_ofdm_symbols, num_subcarriers, num_ut, num_streams_per_ut],tf.float |None (default)) – SINR for each OFDM symbol, subcarrier, user and stream.IfNone, then
sinr_effandnum_allocated_reare bothrequired.sinr_eff ([…, num_ut],tf.float |None (default)) – Estimated effective SINR for each user.IfNone, then
sinris required.num_allocated_re ([…, num_ut],tf.int32 |None (default)) – Number of allocated resources in a slot, computed across OFDM symbols,subcarriers and streams, for each user.IfNone, then
sinris required.mcs_table_index ([…, num_ut],tf.int32 |int (default: 1)) – MCS table index for each user. For further details, refer to theNote.
mcs_category ([…, num_ut],tf.int32 |int (default: 0)) – MCS table category for each user. For further details, refer to theNote.
return_lowest_available_mcs (bool (default:False)) – IfTrue, the lowest MCS available in
phy_abstractionBLER tablesis returned for each user. Only used for internal purposes.
- Output:
mcs_index ([…, num_ut]) – Highest available MCS whose BLER does not exceed the target, or thelowest available MCS if no such MCS exists, for each user
Example
fromsionna.sysimportPHYAbstraction,InnerLoopLinkAdaptationbler_target=0.1# Initialize the PHY abstraction objectphy_abs=PHYAbstraction()# Initialize the ILLA objectilla=InnerLoopLinkAdaptation(phy_abs,bler_target=0.1)# Effective SINR for each usersinr_eff=tf.Variable([0.1,10,100])# N. allocated resource elements for each usernum_allocated_re=tf.Variable([20,30,30])# Compute the MCS index for each usermcs_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.numpy())%SelectedMCSindex=[31627]
- propertybler_target
Get/set the BLER target for each user
- Type:
tf.float
- classsionna.sys.OuterLoopLinkAdaptation(phy_abstraction,num_ut,bler_target=0.1,delta_up=1.0,batch_size=None,sinr_eff_init=1.0,sinr_eff_init_fill=1.0,offset_min=-20.0,offset_max=20.0)[source]
Class for outer-loop link adaptation (OLLA).The modulation and coding scheme (MCS) index for a user is determined as thehighest index whose corresponding transport block error rate (TBLER) remainsbelow the specified
bler_target.The SINR value used for TBLER computation is given by the last effectiveSINR feedback,\(\text{SINR}_{\text{eff}}\) [dB], reduced by an offsetvalue,\(\Delta_{\mathrm{offset}}\):\[\max \left\{ \text{MCS}: \ \text{TBLER}(\text{MCS}, \text{SINR}_{\text{eff}}-\Delta_{\text{offset}}) \le \text{BLER}_{\text{target}} \right\}\]The value of\(\Delta_{\text{offset}}\) is adjusted depending on the HARQ feedback[Pedersen05]:
\[\begin{split}\Delta_{\mathrm{offset}} = \left\{\begin{array}{l} \Delta_{\mathrm{offset}} - \Delta_{\mathrm{down}} \quad \text{if HARQ=ACK} \\ \Delta_{\mathrm{offset}} + \Delta_{\mathrm{up}} \quad \text{if HARQ=NACK}\end{array}\right.\end{split}\]where the relationship between\(\Delta_{\mathrm{up}}\) and\(\Delta_{\mathrm{down}}\) is given by[Sampath97]:
\[\frac{\Delta_{\mathrm{up}}}{\Delta_{\mathrm{down}}} = \frac{1 - \mathrm{BLER}_{\mathrm{target}}}{\mathrm{BLER}_{\mathrm{target}}}.\]- Parameters:
phy_abstraction (
PHYAbstraction) – An instance ofPHYAbstractionnum_ut (int) – Number of user terminals
bler_target (float (default: 0.1)) – BLER target value, within 0 and 1
delta_up (float (default: 1.)) – Increment applied to the SINR offset [dB] when a NACK is received for auser
batch_size (list |int |None (default)) – Batch size or shape. It accounts for multiple users for which linkadaptation is performed simultaneously. IfNone, the batch size isset to [].
sinr_eff_init ([…, num_ut],tf.float |float (default: 1.)) – Initial value of effective SINR for each user. Non-positive values aretreated as missing and replaced by
sinr_eff_init_fill.Iffloat, the same value is assigned to all users.sinr_eff_init_fill (float (default: 1.)) – Value replacing non-positive
sinr_eff_initvaluesoffset_min (float (default: -20.)) – Minimum SINR [dB] offset value
offset_max (float (default: 20.)) – Maximum SINR [dB] offset value
- Input:
num_allocated_re ([…, num_ut],tf.int32) – Number of allocated resources in the upcoming slot, computed across OFDMsymbols, subcarriers and streams, for each user
harq_feedback ([…, num_ut], -1 | 0 | 1) – If 0 (1, resp.), then a NACK (ACK, resp.) is received. If -1, feedbackis missing.
sinr_eff ([…, num_ut],tf.float |None (default)) – Estimated effective SINR for each user. Non-positive values are treated asmissing.
mcs_table_index ([…, num_ut],tf.int32 |int (default: 1)) – MCS table index for each user. For further details, refer to theNote.
mcs_category ([…, num_ut],tf.int32 |int (default: 0)) – MCS table category for each user. For further details, refer to theNote.
- Output:
mcs_index ([…, num_ut]) – Selected MCS index for each user
- propertybler_target
Get/set the BLER target for each user
- Type:
tf.float
- propertydelta_down
Decrement applied to the SINR offset when anACK is received for a user. Computed as
delta_up*bler_target/(1-bler_target).- Type:
float (read-only)
- propertydelta_up
Get/set the increment applied to the SINR offset when aNACK is received for a user
- Type:
float
- propertyoffset
Effective SINR [dB] offset for each user
- Type:
[…, num_ut],tf.float (read-only)
- propertyoffset_max
Get/set the maximum
offsetvalue- Type:
tf.float
- propertyoffset_min
Get/set the minimum
offsetvalue- Type:
tf.float
- reset(sinr_eff_init=1.0,sinr_eff_init_fill=0.1)[source]
Resets the values of
sinr_eff_db_lastandoffset
- propertysinr_eff_db_last
Get/set the last observed effective SINR[dB] value for each user
- Type:
[…, num_ut],tf.float
Note
The concepts of MCS table index, category, code block and transport blocksare inspired by but not necessarily tied to 3GPP standards.It is assumed that:
Each MCS category has multiple table indices, each defining the mappingbetween MCS indices and their corresponding modulation orders and coding rates.Such relationships are defined by
sinr_effective_fun;The transport block, which serves as main data unit, is divided into multiplecode blocks. The number and size of these code blocks are computed by
transport_block_fun.
Yet, if neithersinr_effective_fun nortransport_block_fun is provided,this class aligns with 3GPP TS 38.214 ([3GPP38214]),specifically Section 5.1.3 (PUSCH) and Section 6.1.4 (PDSCH).In this case, the MCS category refers to PDSCH (category = 1) and PUSCH (0).Valid tableindices are {1, 2} for PUSCH and {1, 2, 3, 4} for PDSCH.For more information, refer toTBConfig.
- References:
- [Pedersen05]
K. I. Pedersen, G. Monghal, I. Z. Kovacs, T. E. Kolding, A.Pokhariyal, F. Frederiksen, P. Mogensen. “Frequency domain schedulingfor OFDMA with limited and noisy channel feedback,” IEEEVehicular Technology Conference (VTC), pp. 1792-1796, Sep. 2007.
[Sampath97]A. Sampath K. P. Sarath, J. M. Holtzman. “Onsetting reverse link target SIR in a CDMA system.” 1997 IEEE 47th VehicularTechnology Conference. Technology in Motion. Vol. 2. IEEE, 1997.