Channel Interleaver for Polar Coder

Channel Interleaver is a low complexity version of Polar coded modulation (PCM). It improves the diversity gain for higher modulation order. The downlink broadcast and control channels always use QPSK modulation order hence does not require channel interleavers. It is an interleaver designed based on isoceles triangles whose sides are calculated based on the number of the target bits.

Channel Interleaver

The details about the input-output interface of the channel interleaver modules is provided below.

class toolkit5G.Ratematcher.PolarCoder.ChannelInterleaver[source]

This module implements the channel interleaver used by rate matcher of Polar codec detailed in section 5.4.1.3 of [3GPPTS38212Polar]. This module is enabled in 5G by setting \(\text{I}_\text{BIL}\) flag.

Parameters:

None

Input:

input_bits ([…,E], np.number) – Input bits to be interleaved.

Output:

[…,E], np.number – Interleaver bits.

Attributes:

interleavePattern ([E, 1], int where E is the number of bits passed as inputs for interleaving.) – Defines the Interleaving pattern as defined in section 5.4.1.3 of [3GPPTS38212Polar].

Raises:

ValueError – “[Error-ChannelInterleaver]: ‘input_bits’ should be NumPy array of numbers!”

Channel De-interleaver

The details about the input-output interface of the channel de-interleaver modules is provided below.

class toolkit5G.Ratematcher.PolarCoder.ChannelDeInterleaver[source]

This module implements the channel De-interleaver which is used to undo the effect of channel interleaver defined in section 5.4.1.3 of [3GPPTS38212Polar]. This module is enabled in 5G by setting \(\text{I}_\text{BIL}\) flag.

Parameters:

None

Input:

input_bits ([…,E], np.number) – Input bits to be de-interleaved.

Output:

[…,E], np.number – De-interleaver bits.

Attributes:

interleavePattern ([E, 1], int where E is the number of bits passed as inputs for de-interleaving.) – Defines the Interleaving pattern as defined in section 5.4.1.3 of [3GPPTS38212Polar].

Raises:

ValueError – “[Error-ChannelDeInterleaver]: ‘input_bits’ should be NumPy array of numbers!”