HARQ-ACK channel decoding
performs block decoding on soft input data
blkerr] = lteACKDecode(
in, assumed to be
encoded using the procedure defined for HARQ-ACK in Section 184.108.40.206 of , for PUSCH channel transmission configuration
chs. The decoded output,
out, is a
vector of length
OACK, the number of uncoded HARQ-ACK bits
NBundled is 0, TDD ACK-NACK descrambling is
Multiple codewords can be parameterized by two different forms
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
chs.NLayers is the total number. See UL-SCH Parameterization for
The block decoding is performed separately on each soft input
data codeword using a maximum likelihood (ML) approach, assuming that
been demodulated and equalized to best restore the originally transmitted
The HARQ-ACK decoder performs different types of block decoding depending upon the number of
uncoded HARQ-ACK bits to be recovered (
OACK less than 3 bits, the decoder assumes the bits are
encoded using the procedure defined in TS 36.212 , Section 220.127.116.11.
For decoding between 3 and 11 HARQ-ACK bits, the decoder assumes the bits are block encoded using the procedure defined in TS 36.212 , Section 18.104.22.168.4. For decoding between 12 and 22 bits, the decoder performs the inverse procedure described in TS 36.212 , Section 22.214.171.124.5. For decoding more than 22 bits, the decoder performs rate-matching, tail-biting Viterbi decoding, and 8-bits CRC decoding, which is the inverse procedure described in Section 126.96.36.199.
Decode HARQ-ACK Channel
Show the block decoding of 3 coded HARQ-ACK information bits.
Create input and initialize channel structure. Encode bits and turn logical bits into soft data compatible with log-likelihood ratio check. Use
pskmod with an initial phase offset of to align mapping with LTE codebook.
Perform HARQ-ACK bit encoding and modulation.
in = [1;0;1]; chs = struct('Modulation','QPSK','QdACK',2,'OACK',length(in)); encodedBits = lteACKEncode(chs,in); encodedBits = pskmod(double(encodedBits),2,pi());
Pass transmitted encoded bits through an AWGN channel with a 20 dB signal-to-noise ratio. Show a
scatterplot of the noisy received HARQ-ACK softbits.
rxBits = awgn(encodedBits,20); scatterplot(rxBits)
Decode the received softbits. Compare the decoded bits with the input bits to show the bits have been recovered with no error.
decodedBits = lteACKDecode(chs,rxBits)
decodedBits = 3x1 logical array 1 0 1
ans = logical 1
chs — PUSCH-specific channel transmission configuration
scalar structure | structure array
PUSCH-specific channel transmission configuration, specified as a structure or a structure array, which contains the following parameter fields.
|Parameter Field||Required or Optional||Values||Description|
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.
nonnegative scalar integer, 0 (default)
Number of uncoded HARQ-ACK bits.
The HARQ-ACK decoder performs different
types of block decoding depending on the number of
uncoded HARQ-ACK bits to be recovered
1 (default), 2, 3, 4
Number of transmission layers.
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.
out — Decoded HARQ-ACK channel
numeric column vector
Decoded HARQ-ACK channel output, returned as an
blkerr — Block error
Block error, returned as a logical scalar. If the number of transmitted
bits is 22 or fewer,
blkerr is a logical value that reports if a
decoding error has occurred.
 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: https://www.3gpp.org.