Main Content


HARQ-ACK channel encoding



out = lteACKEncode(chs,in) returns the coded HARQ-ACK information bits after performing block coding defined for HARQ-ACK in TS 36.212 [1], Section The input argument, in, is a vector or cell array containing the HARQ-ACK information bits. The output argument, out, is the encoded bits in the same form.

Multiple codewords can be parameterized by two different forms of the chs structure. Each codeword can be defined by separate elements of a 1-by-2 structure array, or the codeword parameters can be combined together in the fields of a single scalar, or 1-by-1, structure. Any scalar field values apply to both codewords and a scalar NLayers is the total number. See UL-SCH Parameterization for further details.

Since the HARQ-ACK bits are carried on all defined codewords, a single input results in a cell array of encoded outputs if multiple codewords are parameterized. This allows for easy integration with the other toolbox functions.

The HARQ-ACK coder performs different types of block coding depending upon the number of HARQ-ACK bits in vector in. If in consists of one element, it uses TS 36.212 [1], Table If in consists of two elements, it uses TS 36.212 [1], Table [1] for encoding. The placeholder bits, x and y in the referenced tables, are represented by –1 and –2, respectively.

Similarly, for between 3 and 11 bits, the HARQ-ACK encoding is performed as described in TS 36.212 [1], Section For 12 to 22 bits, the encoding is performed as described in TS 36.212 Section For more than 22 bits, the HARQ-ACK coder performs the procedure described in Section, which consists of 8-bit CRC attachment, tail-biting convolutional coding, and rate matching to the output length deduced from the QdACK and Modulation parameters in chs.


collapse all

Encode a HARQ-ACK information bit for one codeword with 16QAM modulation.

ackbit = 1;
chs.Modulation = '16QAM';
chs.QdACK = 1;
out1 = lteACKEncode(chs,ackbit)
out1 = 4x1 int8 column vector


Encode a HARQ-ACK information bit for two codewords with differing modulation schemes.

ackbit = 1;
chs.Modulation = {'16QAM' '64QAM'};
chs.NLayers = 2;
chs.QdACK = 1;
out2 = lteACKEncode(chs,ackbit)
out2=1×2 cell array
    {4x1 int8}    {6x1 int8}

Input Arguments

collapse all

PUSCH-specific channel transmission configuration, specified as a structure or a structure array, which contains the following parameter fields.

Parameter FieldRequired or OptionalValuesDescription

nonnegative scalar integer

Number of coded HARQ-ACK symbols for ACK or NACK (Q’_ACK)


'QPSK', '16QAM', '64QAM', or '256QAM'

Modulation type, specified as a character vector, cell array of character vectors, or string array. If blocks, each cell is associated with a transport block.


1 (default), 2, 3, 4

Number of transmission layers, total or per codeword


0 (default), 1, …, 9

TDD HARQ-ACK bundling scrambling sequence index. When set to 0, the function disables the TDD HARQ-ACK bundling scrambling. Therefore, it is off by default.

HARQ-ACK information bits, specified as a logical vector or a cell array of logical vectors.

Data Types: logical | double | cell

Output Arguments

collapse all

Encoded HARQ-ACK information bits, returned as either an integer column vector or a cell array of integer column vectors. The encoded bits are in the same form as the input bits. Therefore, if the PUSCH-specific parameter structure, chs, defines multiple codewords, out is a cell array.

Data Types: int8 | cell


[1] 3GPP TS 36.212. “Evolved Universal Terrestrial Radio Access (E-UTRA); Multiplexing and channel coding.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network. URL:

Version History

Introduced in R2014a

expand all