Main Content


Physical uplink shared channel decoding



[cws,symbols] = ltePUSCHDecode(ue,chs,sym) returns soft bit vector or cell array of soft bit vectors cws containing the received codeword estimates and received constellation of complex symbol vector symbols. The output results from decoding of physical uplink shared channel (PUSCH) complex symbols sym for UE-specific settings ue and channel transmission configuration chs.

The function performs the inverse of PUSCH processing. See TS 36.211, Section 5.3 [1] or ltePUSCH for details.

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. For details, see UL-SCH Parameterization.

If UCI control information, such as RI or HARQ-ACK, is present in the received complex PUSCH symbols, then this function performs the descrambling of the placeholder bits by establishing the correct locations with the help of the UCI-related parameters present in chs.

[cws,symbols] = ltePUSCHDecode(ue,chs,sym,hest,noiseest) also specifies channel estimate, hest and noise estimate noiseest. In this case, sym is an M-by-NRxAnts matrix, where M is the number of symbols per antenna and NRxAnts is the number of receive antennas. When ue.NTxAnts is greater than 1, the reception is performed using an MMSE equalizer, equalizing between transmitted and received layers. When ue.NTxAnts is 1, the reception is performed using MMSE equalization on the received antennas.

[cws,symbols] = ltePUSCHDecode(ue,chs,sym,hest,noiseest,alg) provides control over weighting the output soft bits with Channel State Information (CSI) calculated during the equalization stage using algorithmic configuration structure, alg.


collapse all

Decode the PUSCH modulation symbols contained in the output of a Fixed Reference Channel (FRC).

frc = lteRMCUL('A3-2');
trData = randi([0,1],frc.PUSCH.TrBlkSizes(1),1);
[waveform,reGrid] = lteRMCULTool(frc,trData);
puschIndices = ltePUSCHIndices(frc,frc.PUSCH);
rxCw = ltePUSCHDecode(frc,frc.PUSCH,reGrid(puschIndices));

Input Arguments

collapse all

UE-specific settings, specified as a structure having the following fields.

Parameter FieldRequired or OptionalValuesDescription


Physical layer cell identity


0 (default), nonnegative scalar integer

Subframe number


0 (default), scalar integer

Radio network temporary identifier (RNTI) value (16 bits)


'Normal' (default), 'Extended'

Cyclic prefix length.


1 (default), 2, 4

Number of transmission antennas.


0 (default), 1

Option to shorten the subframe by omitting the last symbol, specified as 0 or 1. If 1, the last symbol of the subframe is not used. For subframes with possible SRS transmission, set Shortened to 1 to maintain a standard compliant configuration.

Data Types: struct

Channel transmission configuration, specified as a scalar structure or a structure array. chs is the PUSCH channel-specific structure having these fields. If UCI is present in the transmitted PUSCH to be decoded, the optional fields, ORI, OACK, QdRI, and QdACK,must be configured in the chs structure.

Parameter FieldRequired or OptionalValuesDescription
ModulationRequired'QPSK', '16QAM', '64QAM', or '256QAM'

Modulation format


Integer column vector or two-column matrix

Physical Resource Block (PRB) indices, specified as a column vector or two-column matrix, corresponding to the slot wise resource allocations for this PUSCH.

If a column vector is provided for PRBSet, the resource allocation is the same in both slots of the subframe. The two-column matrix can be used to specify differing PRBs for each slot in a subframe. The PRB indices are zero-based.


1 (default), 2, 3, 4

Number of transmission layers.

The following field is required only when ue.NTxAnts is set to 2 or 4. Acceptable values for PMI depend upon ue.NTxAnts and NLayers.

Numeric scalar (0...23)

0 (default)

Scalar precoder matrix indication (PMI) to be used during precoding



0 (default)

Number of uncoded RI bits


nonnegative scalar integer, 0 (default)

Number of uncoded HARQ-ACK bits.



0 (default)

Number of coded RI symbols in UL-SCH, specified as an integer. Optional. (Q'_RI)


nonnegative scalar integer

0 (default)

Number of coded HARQ-ACK symbols in UL-SCH (Q'_ACK), specified as an integer. Optional.

Data Types: struct

PUSCH symbols, specified as a complex-valued matrix of size M-by-P, where M is the number of symbols per antenna or layer and P is the number of transmission antennas.

Data Types: double
Complex Number Support: Yes

Channel estimate, specified as a 3-D numeric array of size M-by-NRxAnts-by-NTxAnts. Where M is the number of symbols per antenna, NRxAnts is the number of receive antennas, and NTxAnts is the number of transmit antennas ports, given by ue.NTxAnts.

Data Types: double

Noise estimate, specified as a numeric scalar. This argument is an estimate of the noise power spectral density per RE on received subframe. The lteULChannelEstimate function provides such an estimate.

Data Types: double

Algorithmic configuration, specified as a structure having the following field.

Parameter FieldRequired or OptionalValuesDescription

'On' (default), 'Off'

Flag provides control over weighting the soft values that are used to determine the output values with the channel state information (CSI) calculated during the equalization process. If 'On', soft values are weighted by CSI.

Data Types: struct

Output Arguments

collapse all

Codewords, returned as a column vector or a cell array of column vectors. The soft bit vectors contain the received codeword estimates.

Data Types: double

Received constellation of symbols, received as a complex-valued column vector.

Data Types: double


[1] 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:

Version History

Introduced in R2013b