PUSCHReceiver#
- class sionna.phy.nr.PUSCHReceiver(pusch_transmitter, channel_estimator=None, mimo_detector=None, tb_decoder=None, return_tb_crc_status: bool = False, stream_management=None, input_domain: str = 'freq', l_min: int | None = None, precision: str | None = None, device: str | None = None, **kwargs)[source]#
Bases:
sionna.phy.block.BlockThis block implements a full receiver for batches of 5G NR PUSCH slots sent by multiple transmitters. Inputs can be in the time or frequency domain. Perfect channel state information can be optionally provided. Different channel estimators, MIMO detectors, and transport decoders can be configured.
The block combines multiple processing blocks into a single block. Blocks with dashed lines are optional and depend on the configuration.
If the
input_domainequals “time”, the inputs \(\mathbf{y}\) are first transformed to resource grids with theOFDMDemodulator. Then channel estimation is performed, e.g., with the help of thePUSCHLSChannelEstimator. Ifchannel_estimatoris chosen to be “perfect”, this step is skipped and the input \(\mathbf{h}\) is used instead. Next, MIMO detection is carried out with an arbitraryOFDMDetector. The resulting LLRs for each layer are then combined to transport blocks with the help of theLayerDemapper. Finally, the transport blocks are decoded with theTBDecoder.- Parameters:
pusch_transmitter – Transmitter used for the generation of the transmit signals.
channel_estimator – Channel estimator to be used. If None, the
PUSCHLSChannelEstimatorwith linear interpolation is used. If “perfect”, no channel estimation is performed and the channel state informationhmust be provided as additional input. Defaults to None.mimo_detector – MIMO detector to be used. If None, the
LinearDetectorwith LMMSE detection is used. Defaults to None.tb_decoder – Transport block decoder to be used. If None, the
TBDecoderwith its default settings is used. Defaults to None.return_tb_crc_status (bool) – If True, the status of the transport block CRC is returned as additional output. Defaults to False.
stream_management – Stream management configuration to be used. If None, it is assumed that there is a single receiver which decodes all streams of all transmitters. Defaults to None.
input_domain (str) – Domain of the input signal. Defaults to “freq”.
l_min (int | None) – Smallest time-lag for the discrete complex baseband channel. Only needed if
input_domainequals “time”. 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. If None, the default device is used.
- Inputs:
y – [batch size, num_rx, num_rx_ant, num_ofdm_symbols, fft_size], torch.complex or [batch size, num_rx, num_rx_ant, num_time_samples + l_max - l_min], torch.complex. Frequency- or time-domain input signal.
no – [batch_size, num_rx, num_rx_ant] or only the first n>=0 dims, torch.float. Variance of the AWGN.
h – [batch size, num_rx, num_rx_ant, num_tx, num_tx_ant, num_ofdm_symbols, num_subcarriers], torch.complex or [batch size, num_rx, num_rx_ant, num_tx, num_tx_ant, num_time_samples + l_max - l_min, l_max - l_min + 1], torch.complex. Perfect channel state information in either frequency or time domain (depending on
input_domain) to be used for detection. Only required ifchannel_estimatorequals “perfect”.
- Outputs:
b_hat – [batch_size, num_tx, tb_size], torch.float. Decoded information bits.
tb_crc_status – [batch_size, num_tx], torch.bool. Transport block CRC status.
Examples
>>> pusch_config = PUSCHConfig() >>> pusch_transmitter = PUSCHTransmitter(pusch_config) >>> pusch_receiver = PUSCHReceiver(pusch_transmitter) >>> channel = AWGN() >>> x, b = pusch_transmitter(16) >>> no = 0.1 >>> y = channel([x, no]) >>> b_hat = pusch_receiver(y, no)
Attributes
- property resource_grid#
OFDM resource grid underlying the PUSCH transmissions