Rank Adaptation

Rank adaptation in 5G MIMO (Multiple Input Multiple Output) systems refers to the dynamic adjustment of the number of spatial streams or transmit/receive antennas used for communication based on the channel conditions and system requirements. In simpler terms, it involves determining the optimal number of antennas or spatial streams to utilize for transmitting and receiving data in a MIMO system.

Key aspects of rank adaptation in 5G MIMO systems include:

  • Channel Conditions: Rank adaptation takes into account the quality of the wireless channel between the transmitter (base station) and receiver (user equipment). By monitoring channel characteristics such as signal-to-noise ratio (SNR), channel fading, and interference levels, the system can determine the appropriate rank or number of spatial streams to use for optimal communication.

  • Spatial Multiplexing: MIMO systems exploit spatial diversity by transmitting multiple data streams simultaneously over multiple antennas. Rank adaptation adjusts the number of spatial streams to maximize data throughput while maintaining reliable communication under varying channel conditions. In favorable channel conditions, higher ranks with more spatial streams can be used for increased data rates, while in challenging conditions, lower ranks may be more suitable for improved reliability.

  • Spectral Efficiency: Rank adaptation aims to maximize spectral efficiency by selecting the optimal rank configuration that achieves the highest data rate per unit of bandwidth. By dynamically adjusting the number of spatial streams, the system can adapt to changing channel conditions and traffic demands, thereby optimizing the utilization of available spectrum resources.

  • Feedback Mechanisms: Rank adaptation relies on feedback mechanisms, such as channel state information (CSI) feedback from the receiver to the transmitter, to provide information about the channel conditions and enable adaptive transmission strategies. Based on the feedback, the transmitter can adjust the rank configuration to maximize performance and efficiency.

Overall, rank adaptation in 5G MIMO systems plays a critical role in optimizing system performance by dynamically adjusting the spatial multiplexing configuration to match the prevailing channel conditions, traffic requirements, and quality of service (QoS) constraints. By effectively utilizing spatial diversity, rank adaptation helps achieve higher data rates, improved reliability, and enhanced spectral efficiency in wireless communication systems.

class toolkit5G.Scheduler.RankAdaptation(sigma, threshold=0.75, SNRdB=0, SNRdBmin=None, isRankIndicatorSubcarrierSpecific=False)[source]

This module estimates the number of layers (\(N_L\)) that can be supported for PDSCH transmission.

  • sigma (numpy array) – Defines the singular values from SVD of the channel. The rank is selected based on the eigen/singular values of the MIMO channel. This implementation accepts the sigma in following dimensions

    • (rank,): 1D array to support flat faded channel or channel for a single subcarrier of OFDM where rank is minimum of the number of antennas at transmitter and receiver denoted by rank \(= \text{min}\{N_t, N_r\}\).

    • (numSubcarriers, rank): 2D array to support flat faded multi-user channels or frequency selective OFDM channel where numSubcarriers will be number of users or number of subcarrier respectively.

    • (numBatches, numSubcarriers, rank): to support multi-batch/multi-user frequency selective channel.

  • threshold (float) – Defines the fraction of energy level to be captured by the selected rank where fraction is defined as \(\frac{\sum_{i=0}^{i=N_L} sigma[i]^2}{\sum_{i=0}^{i=rank} sigma[i]^2}\). The \(N_L\) denotes the number of layers selected for PDSCH/data transmission. The default value for this parameter is 0.75. This parameter is relevant only for “threshold-based” method

  • SNRdB (float) – Defines the preprocessing signal to noise ratio (SNR) in dB. It is computed as \(10\times log(\frac{P_t}{N_0})\). Default value is 0. This parameter is relevant only for “decodability-based” method.

  • SNRdBmin (float) – Defines the minimum SNR/SINR (in dB) required to decode the PDSCH data. This parameter depends on the modulation order and code rate (MCS) parameter. Default value is None. This parameter is relevant only for “decodability-based” method.

  • isRankIndicatorSubcarrierSpecific (boolean) – Defines a flag which controls the estimation of the number of layers (\(N_L\)). If this flag is True then the \(N_L\) is estimated for every subcarrier otherwise will return one \(N_L\) which suits all the subcarriers.


method (string) –

Defines the method used for rank estimation. Current implementation supports two methods {“threshold-based”, “decodability-based”}. Default value is “threshold-based”.

  • “threshold-based” method has lower complexity but results in poor performance.

  • “decodability-based” method` selects the maximum rank that can support a given modulation order. This methods considers the state of the link (sigma) and transmit parameter (SNRdB, SNRdBmin) while estimating the rank.


numpy array – returns the number of layers (\(N_L\)). The shape of the output is detailed below.


The isRankIndicatorSubcarrierSpecific flag influences the shape of the output as follows:

  • If isRankIndicatorSubcarrierSpecific is True, the shape of output will be:

    • scalar indicating number of layers if shape of input is (rank,).

    • (numSubcarriers,) indicating number of layers (\(N_L\)) for each subcarrier if shape of input is (numSubcarriers, rank).

    • (numBatches, numSubcarriers) indicating number of layers (\(N_L\)) for each subcarrier and each batch if shape of input is (numBatches, numSubcarriers, rank).

  • If isRankIndicatorSubcarrierSpecific is False, the shape of output will be:

    • scalar indicating number of layers if shape of input is (rank,).

    • scalar indicating number of layers common for all the subcarriers if shape of input is (numSubcarriers, rank).

    • (numBatches,) indicating number of layers (\(N_L\)) common for each subcarrier but specific to each batch if shape of input is (numBatches, numSubcarriers, rank).


ValueError – [Error-RankAdaptation]: ‘method’ can be either ‘decodability-based’ or ‘threshold-based’!