EESM#
- class sionna.sys.EESM(load_beta_table_from: str = 'default', sinr_eff_min_db: float = -30.0, sinr_eff_max_db: float = 30.0, precision: Literal['single', 'double'] | None = None, device: str | None = None)[source]#
Bases:
sionna.sys.effective_sinr.EffectiveSINRComputes the effective SINR from input SINR values across multiple subcarriers and streams via the exponential effective SINR mapping (EESM) method.
Let \(\mathrm{SINR}_{u,c,s}>0\) be the SINR experienced by user \(u\) on subcarrier \(c=1,\dots,C\), and stream \(s=1,\dots,S_c\). If
per_streamis False, it computes the effective SINR aggregated across all utilized streams and subcarriers for each user \(u\):\[\mathrm{SINR}^{\mathrm{eff}}_u = -\beta_u \log \left( \frac{1}{CS} \sum_{c=1}^{C} \sum_{s=1}^{S_c} e^{-\frac{\mathrm{SINR}_{u,c,s}}{\beta_u}} \right), \quad \forall\, u\]where \(\beta>0\) is a parameter depending on the Modulation and Coding Scheme (MCS) of user \(u\).
If
per_streamis True, it computes the effective SINR aggregated across subcarriers, for each user \(u\) and associated stream \(s\):\[\mathrm{SINR}^{\mathrm{eff}}_{u,s} = -\beta_u \log \left( \frac{1}{C} \sum_{c=1}^{C} e^{-\frac{\mathrm{SINR}_{u,c,s}}{\beta_u}} \right), \quad \forall\, u,s.\]- Parameters:
load_beta_table_from (str) – File name from which the tables containing the values of \(\beta\) parameters are loaded. If
'default', uses the built-in table.sinr_eff_min_db (float) – Minimum effective SINR value [dB]. Useful to avoid numerical errors. Defaults to -30.
sinr_eff_max_db (float) – Maximum effective SINR value [dB]. Useful to avoid numerical errors. Defaults to 30.
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. Post-equalization SINR in linear scale for different OFDM symbols, subcarriers, users and streams. If one entry is zero, the corresponding stream is considered as not utilized.
mcs_index – […, num_ut], torch.int32. Modulation and coding scheme (MCS) index for each user.
mcs_table_index – […, num_ut], torch.int32 (default: 1). MCS table index for each user.
mcs_category – […, num_ut], torch.int32 (default: None). MCS table category for each user.
per_stream – bool (default: False). If True, then the effective SINR is computed on a per-user and per-stream basis and is aggregated across different subcarriers. If False, then the effective SINR is computed on a per-user basis and is aggregated across streams and subcarriers.
- Outputs:
sinr_eff – ([…, num_ut, num_streams_per_ut] | […, num_ut]), torch.float. Effective SINR in linear scale for each user and associated stream. If
per_streamis True, thensinr_effhas shape[..., num_ut, num_streams_per_ut], andsinr_eff[..., u, s]is the effective SINR for streamsof useruacross all subcarriers. Ifper_streamis False, thensinr_effhas shape[..., num_ut], andsinr_eff[..., u]is the effective SINR for useruacross all streams and subcarriers.
Notes
If the input SINR is zero for a specific stream, the stream is considered unused and does not contribute to the effective SINR computation.
Examples
import torch from sionna.phy import config from sionna.sys import EESM from sionna.phy.utils import db_to_lin batch_size = 10 num_ofdm_symbols = 12 num_subcarriers = 32 num_ut = 15 num_streams_per_ut = 2 # Generate random MCS indices mcs_index = torch.randint(0, 27, (batch_size, num_ut)) # Instantiate the EESM object eesm = EESM() # Generate random SINR values sinr_db = torch.rand(batch_size, num_ofdm_symbols, num_subcarriers, num_ut, num_streams_per_ut) * 35 - 5 sinr = db_to_lin(sinr_db) # Compute the effective SINR for each receiver sinr_eff = eesm(sinr, mcs_index, mcs_table_index=1, per_stream=False) print(sinr_eff.shape) # torch.Size([10, 15]) # Compute the per-stream effective SINR for each receiver sinr_eff_per_stream = eesm(sinr, mcs_index, mcs_table_index=2, per_stream=True) print(sinr_eff_per_stream.shape) # torch.Size([10, 15, 2])
Attributes
- property beta_table: Dict#
dict (read-only): Maps MCS indices to the corresponding parameters, commonly called \(\beta\), calibrating the Exponential Effective SINR Map (EESM) method. It has the form
beta_table['index'][mcs_table_index][mcs].
- property beta_tensor: torch.Tensor#
[n_tables, n_mcs] (read-only): Tensor corresponding to
self.beta_table.
- property beta_table_filenames: List[str]#
str | list of str: Get/set the absolute path name of the JSON file containing the mapping between MCS and EESM beta parameters, stored in
beta.
Methods
- validate_beta_table() bool[source]#
Validates the EESM beta parameter dictionary
self.beta_table.- Outputs:
is_valid – True if
self.beta_tablehas a valid structure.- Raises:
ValueError – If the structure is invalid.