PUSCHLSChannelEstimator#
- class sionna.phy.nr.PUSCHLSChannelEstimator(resource_grid, dmrs_length: int, dmrs_additional_position: int, num_cdm_groups_without_data: int, interpolation_type: str = 'nn', interpolator=None, precision: str | None = None, device: str | None = None, **kwargs)[source]#
Bases:
sionna.phy.ofdm.channel_estimation.LSChannelEstimatorLeast-squares (LS) channel estimation for NR PUSCH transmissions.
After LS channel estimation at the pilot positions, the channel estimates and error variances are interpolated across the entire resource grid using a specified interpolation function.
The implementation is similar to that of
LSChannelEstimator. However, it additionally takes into account the separation of streams in the same CDM group as defined inPUSCHDMRSConfig. This is done through frequency and time averaging of adjacent LS channel estimates.- Parameters:
resource_grid – ResourceGrid to be used.
dmrs_length (int) – Length of DMRS symbols. Must be 1 or 2. See
PUSCHDMRSConfig.dmrs_additional_position (int) – Number of additional DMRS symbols. Must be 0, 1, 2, or 3. See
PUSCHDMRSConfig.num_cdm_groups_without_data (int) – Number of CDM groups masked for data transmissions. Must be 1, 2, or 3. See
PUSCHDMRSConfig.interpolation_type (str) – The interpolation method to be used. It is ignored if
interpolatoris not None. Available options areNearestNeighborInterpolator("nn"),LinearInterpolatorwithout ("lin") or with averaging across OFDM symbols ("lin_time_avg"). Defaults to"nn".interpolator – Interpolator such as
LMMSEInterpolator, or None. In the latter case, the interpolator specified byinterpolation_typeis used. Otherwise, theinterpolatoris used andinterpolation_typeis ignored. Defaults to None.precision (str | None) – Precision used for internal calculations and outputs. If set to None,
precisionis used.device (str | None) – Device for computation.
- Inputs:
y – [batch_size, num_rx, num_rx_ant, num_ofdm_symbols, fft_size], torch.complex. Observed resource grid.
no – [batch_size, num_rx, num_rx_ant] or only the first n>=0 dims, torch.float. Variance of the AWGN.
- Outputs:
h_ls – [batch_size, num_rx, num_rx_ant, num_tx, num_streams_per_tx, num_ofdm_symbols, fft_size], torch.complex. Channel estimates across the entire resource grid for all transmitters and streams.
err_var – Same shape as
h_ls, torch.float. Channel estimation error variance across the entire resource grid for all transmitters and streams.
Examples
from sionna.phy.nr import PUSCHConfig, PUSCHTransmitter, PUSCHLSChannelEstimator config = PUSCHConfig() transmitter = PUSCHTransmitter(config) estimator = PUSCHLSChannelEstimator( transmitter.resource_grid, dmrs_length=1, dmrs_additional_position=0, num_cdm_groups_without_data=1 )
Methods
- estimate_at_pilot_locations(y_pilots: torch.Tensor, no: torch.Tensor) Tuple[torch.Tensor, torch.Tensor][source]#
LS channel estimation at pilot locations with CDM processing.
- Parameters:
y_pilots (torch.Tensor) – Observed signals for the pilot-carrying resource elements. Shape: [batch_size, num_rx, num_rx_ant, num_tx, num_streams, num_pilot_symbols]
no (torch.Tensor) – Variance of the AWGN.