LMMSEPostEqualizationSINR#
- class sionna.phy.ofdm.LMMSEPostEqualizationSINR(resource_grid: sionna.phy.ofdm.resource_grid.ResourceGrid, stream_management: sionna.phy.mimo.stream_management.StreamManagement, precision: Literal['single', 'double'] | None = None, device: str | None = None, **kwargs)[source]#
Bases:
sionna.phy.ofdm.equalization.PostEqualizationSINRBlock that computes the SINR after LMMSE equalization.
The equalization matrix is the one computed by
lmmse_matrix().- Parameters:
resource_grid (sionna.phy.ofdm.resource_grid.ResourceGrid) – ResourceGrid to be used
stream_management (sionna.phy.mimo.stream_management.StreamManagement) – StreamManagement to be used
precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None,
precisionis used.device (str | None) – Device for tensor operations. If None,
deviceis used.
- Inputs:
h_eff – [batch_size, num_rx, num_rx_ant, num_tx, num_streams_per_tx, num_ofdm_symbols, num_effective_subcarriers], torch.complex. Effective channel after precoding as defined in (60).
no – [batch_size, num_rx, num_rx_ant, num_ofdm_symbols, num_effective_subcarriers] (or only the first n dims), torch.float. Noise variance.
h_eff_hat – None (default) | [batch_size, num_rx, num_rx_ant, num_tx, num_streams_per_tx, num_ofdm_symbols, num_effective_subcarriers], torch.complex. Estimated effective channel after precoding. If set to None, the actual channel realizations are used.
interference_whitening – bool (default=True). If set to True, also the interference from undesired streams (e.g., from other cells) is whitened.
- Outputs:
sinr – [batch_size, num_ofdm_symbols, num_effective_subcarriers, num_rx, num_streams_per_rx], torch.float. SINR after equalization.
Examples
import numpy as np import torch from sionna.phy.ofdm import ResourceGrid, LMMSEPostEqualizationSINR from sionna.phy.mimo import StreamManagement rg = ResourceGrid(num_ofdm_symbols=14, fft_size=64, subcarrier_spacing=30e3, num_tx=2, num_streams_per_tx=2) sm = StreamManagement(np.ones([1, 2]), 2) sinr_computer = LMMSEPostEqualizationSINR(rg, sm) batch_size = 16 h_eff = torch.randn(batch_size, 1, 4, 2, 2, 14, 64, dtype=torch.complex64) no = torch.ones(1) * 0.1 sinr = sinr_computer(h_eff, no) print(sinr.shape) # torch.Size([16, 14, 64, 1, 4])