Polar5GEncoder#
- class sionna.phy.fec.polar.Polar5GEncoder(k: int, n: int, channel_type: str = 'uplink', verbose: bool = False, *, precision: str | None = None, device: str | None = None, **kwargs)[source]#
Bases:
sionna.phy.fec.polar.encoding.PolarEncoder5G compliant Polar encoder including rate-matching following [3GPPTS38212] for the uplink scenario (UCI) and downlink scenario (DCI).
This block performs polar encoding for
kinformation bits and rate-matching such that the codeword length isn. This includes the CRC concatenation and the interleaving as defined in [3GPPTS38212].Note: block segmentation is currently not supported (I_seq=False).
We follow the basic structure from Fig. 6 in [Bioglio_Design].
For further details, we refer to [3GPPTS38212], [Bioglio_Design] and [Hui_ChannelCoding].
- Parameters:
k (int) – Defining the number of information bits per codeword.
n (int) – Defining the codeword length.
channel_type (str) – Can be
'uplink'or'downlink'.verbose (bool) – If True, rate-matching parameters will be printed.
precision (str | None) – Precision used for internal calculations and outputs. If None,
precisionis used.device (str | None) – Device for computation (e.g., ‘cpu’, ‘cuda:0’). If None,
deviceis used.
- Inputs:
bits – […, k], torch.float. Binary tensor containing the information bits to be encoded.
- Outputs:
cw – […, n], torch.float. Binary tensor containing the codeword bits.
Notes
The encoder supports the uplink Polar coding (UCI) scheme from [3GPPTS38212] and the downlink Polar coding (DCI) [3GPPTS38212], respectively.
For 12 <= k <= 19 the 3 additional parity bits as defined in [3GPPTS38212] are not implemented as it would also require a modified decoding procedure to materialize the potential gains.
Code segmentation is currently not supported and, thus,
nis limited to a maximum length of 1088 codeword bits.For the downlink scenario, the input length is limited to k <= 140 information bits due to the limited input bit interleaver size [3GPPTS38212].
For simplicity, the implementation does not exactly re-implement the DCI scheme from [3GPPTS38212]. This implementation neglects the all-one initialization of the CRC shift register and the scrambling of the CRC parity bits with the RNTI.
Examples
import torch from sionna.phy.fec.polar import Polar5GEncoder k, n = 100, 200 encoder = Polar5GEncoder(k, n) bits = torch.randint(0, 2, (10, k), dtype=torch.float32) codewords = encoder(bits) print(codewords.shape) # torch.Size([10, 200])
Attributes
- property enc_crc: sionna.phy.fec.crc.CRCEncoder#
CRC encoder block used for CRC concatenation.
Methods
- subblock_interleaving(u: numpy.ndarray) numpy.ndarray[source]#
Input bit interleaving as defined in Sec 5.4.1.1 [3GPPTS38212].
- Parameters:
u (numpy.ndarray) – 1D array to be interleaved. Length of
umust be a multiple of 32.- Outputs:
y – Interleaved version of
uwith same shape and dtype asu.
- channel_interleaver(c: numpy.ndarray) numpy.ndarray[source]#
Triangular interleaver following Sec. 5.4.1.3 in [3GPPTS38212].
- Parameters:
c (numpy.ndarray) – 1D array to be interleaved.
- Outputs:
c_int – Interleaved version of
cwith same shape and dtype asc.
- input_interleaver(c: numpy.ndarray) numpy.ndarray[source]#
Input interleaver following Sec. 5.4.1.1 in [3GPPTS38212].
- Parameters:
c (numpy.ndarray) – 1D array to be interleaved.
- Outputs:
c_apo – Interleaved version of
cwith same shape and dtype asc.