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.LSChannelEstimator

Least-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 in PUSCHDMRSConfig. 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 interpolator is not None. Available options are NearestNeighborInterpolator ("nn"), LinearInterpolator without ("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 by interpolation_type is used. Otherwise, the interpolator is used and interpolation_type is ignored. Defaults to None.

  • precision (str | None) – Precision used for internal calculations and outputs. If set to None, precision is 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.