Uplink shared channel decoding
the information bits
trblkout decoded from the
input soft LLR codewords data
cwin. The UL-SCH
decoder includes channel deinterleaver, rate recovery, turbo decoding,
block concatenation and CRC calculations. The function also returns
the type-24A transport block CRC decoding result in
the HARQ process decoding state in
The initial HARQ process state can be input via the optional
The function is capable of processing both a single codeword or pairs
of codewords, contained in a cell array, for the case of spatial multiplexing
schemes transmitting two codewords. The type of the return variable
the same as input
a cell array containing one or two codewords,
a cell array of one or two transport blocks. If
a vector of soft data,
trblkout returns a vector
too. If decoding a pair of codewords, pairs of modulation schemes
and RV indicators are required to be defined in the associated parameter
fields below. This function only decodes the information bits, but
supports the presence of UCI data, CQI, RI, and HARQ-ACK, in the input
codeword. UCI should be demultiplexed then decoded separately.
Strictly speaking, because all the fields in structure
optional, it is legal for this parameter to be an empty structure.
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
NLayers is the total number. See UL-SCH Parameterization for
trblklen is an input vector (one or two
elements in length) defining the transport block lengths that the
input code blocks should be rate recovered and decoded to.
cwin is an input parameter containing the
floating point soft LLR data of the codewords to be decoded. It can
either be a single vector or a cell array containing one or two vectors.
If the latter, then all rate matching calculations assume that the
pair were transmitting on a single PUSCH, distributed across the total
number of layers defined in
chs, as per TS 36.211 .
statein is an optional input structure
array (empty or one or two elements) which can input the current decoder
buffer state for each transport block in an active HARQ process. If
not an empty array and it contains a non-empty field
this field should contain a cell array of vectors representing the
LLR soft buffer states for the set of code blocks at the input to
the turbo decoder i.e. after explicit rate recovery. The updated buffer
states after decoding are returned in the
in the output parameter
would normally be generated and recycled from the
previous calls to lteULSCHDecode as part of a sequence of HARQ transmissions.
trblkout is the output parameter containing
the decoded information bits. It is either a single vector or a cell
array containing one or two vectors, depending on the class and dimensionality
blkcrc is an output array (one or two elements)
containing the result of the type-24A transport block CRC decoding
for the transport blocks.
stateout, the final output parameter, is
a one element structure array containing the internal state of each
transport block decoder in the fields
stateout array would normally be reapplied
statein variable of subsequent
calls as part of a sequence of HARQ retransmissions.
Generate and decode 2 transmissions (RV=0 then RV=2) as part of a single codeword HARQ process for the A3-3 FRC.
Initialize one subframe of an FRC A3-3 transmission. Create a codeword with RV = 0. Turn logical bits into 'LLR' data. Initialize the decoder states for the first HARQ transmission. The returned
decState contains the decoder buffer state for each transport block for an active HARQ process.
nsf = 1;
frc = lteRMCUL('A3-3');
trBlkLen = frc.PUSCH.TrBlkSizes(nsf);
trBlkData = randi([0,1],trBlkLen,1);
frc.PUSCH.RV = 0; cw = lteULSCH(frc,frc.PUSCH,trBlkData);
cw(cw == 0) = -1;
decState = ; [rxTrBlk,~,decState] = lteULSCHDecode(frc,frc.PUSCH,trBlkLen,cw,decState);
Create a second retransmitted codeword with RV = 2. Turn logical bits into 'LLR' data. The previous transmission decoder buffer state,
decState, is used as part of the sequence of active HARQ transmissions.
frc.PUSCH.RV = 2; cWord = lteULSCH(frc,frc.PUSCH,trBlkData);
cWord(cWord == 0) = -1;
rxTrBlk = lteULSCHDecode(frc,frc.PUSCH,trBlkLen,cWord,decState);
ue — UE-specific settings
UE-specific settings, specified as a scalar structure with the
following fields. Because all the fields in structure
optional, this parameter can be an empty structure.
|Required or Optional
Cyclic prefix length.
0 (default), 1
Option to shorten the subframe by omitting the last symbol,
specified as 0 or 1. If
chs — UL-SCH related parameters
UL-SCH related parameters, specified as a scalar structure with the following fields.
|Required or Optional
Modulation scheme associated with each transport block, specified as a character vector, or if there are two blocks, as a cell array of character vectors or string array.
1 (default), 2, 3, 4
Number of transmission layers.
(total or per codeword)
0, 1, 2, 3
Redundancy version indicators, specified as a vector of 1 or 2 indicators.
nonnegative scalar integer
Number of coded channel quality information (CQI) symbols (Q’_CQI)
Nonnegative scalar integer
Number of coded symbols for RI (Q’_RI)
nonnegative scalar integer
Number of coded ACK symbols (Q'_ACK)
Number of turbo decoder iteration cycles
trblklen — Transport block length
Transport block length, specified as a numeric vector (one or two elements in length) defining the transport block lengths that the input code blocks should be rate recovered and decoded to.
cwin — Soft LLR codeword data
numeric column vector | cell array of one or two column vectors
Soft LLR codeword data, specified as a numeric column vector
or a cell array of one or two column vectors. This argument contains
the floating point soft LLR data of the codeword or codewords to be
decoded. It can either be a single vector or a cell array containing
one or two vectors. If a cell array, all rate matching calculations
assume that the pair were transmitting on a single PUSCH, distributed
across the total number of layers defined in
as specified in .
statein — Initial HARQ process state
optional | structure array
Initial HARQ process state, specified as a structure array. It can be empty or have one or two elements, which can input the current decoder buffer state for each transport block in an active HARQ process.
trblkout — Decoded information bits
numeric vector | cell array
Decoded information bits, returned as a numeric vector or cell
trblkout contains decoded transport data
blocks. It is either a single vector or a cell array containing one
or two vectors, depending on the class and dimensionality of
blkcrc — Type 24A transport block CRC decoding result
0 or 1
Type 24A transport block CRC decoding result, returned as 0 or 1.
stateout — HARQ process decoding state
structure | structure array
HARQ process decoding state, returned as a one-element structure array. It contains the internal state of each transport block decoder. It contains the following parameter fields.
LLR soft buffer states for the set of code blocks associated with a single transport block. The buffers are positioned at the input to the turbo decoder, or after explicit rate recovery.
Cell array of numeric vectors
Type-24B code block set CRC decoding results
Type-24A transport block CRC decoding error
One- or two-element numeric vector
 3GPP TS 36.211. “Evolved Universal Terrestrial Radio Access (E-UTRA); Physical Channels and Modulation.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network. URL: https://www.3gpp.org.
Introduced in R2014a