Physical uplink shared channel decoding


  • [cws,symbols] = ltePUSCHDecode(ue,chs,sym)
  • [cws,symbols] = ltePUSCHDecode(ue,chs,sym,hest,noiseest)
  • [cws,symbols] = ltePUSCHDecode(ue,chs,sym,hest,noiseest,alg)



[cws,symbols] = ltePUSCHDecode(ue,chs,sym) returns a 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 the Physical Uplink Shared Channel (PUSCH) complex symbols, sym, for UE-specific settings, ue, and channel transmission configuration structure or structure array, chs. It performs the inverse of the Physical Uplink Shared Channel (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.

sym is an M-by-P matrix or M-by-NU matrix. Where M is the number of symbols per antenna or layer, P is the number of transmission antennas, NTxAnts, and NU is the number of transmission layers, NLayers.

  • For a single-antenna transmission (NTxAnts = 1), both P and NU are 1: sym must be M-by-1 and contain the single-antenna PUSCH symbols for decoding.

  • When P is greater than 1 and sym is M-by-P: Decoding is performed using pseudoinverse-based deprecoding for spatial multiplexing.

  • When P is greater than 1 and sym is M-by-NU: sym is assumed to be deprecoded, so.decoding is performed without deprecoding. For example, by having performed channel estimation against the transmit layer DRS sequences and equalizing the received symbols using that channel estimate to yield sym.

    Note:   This function does apply deprecoding. when the need for deprecoding is ambiguous, such as when P>1 and P=NU.

[cws,symbols] = ltePUSCHDecode(ue,chs,sym,hest,noiseest) uses additional inputs (hest,noiseest). The channel estimate, hest, and the 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 PUSCH Symbols from FRC

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));
Warning: Using default value for parameter field ORI (0) 
Warning: Using default value for parameter field OACK (0) 
Warning: Using default value for parameter field QdRI (0) 
Warning: Using default value for parameter field QdACK (0) 

Note: The warning messages generated simply advise you that default values are available and being used for uninitialized parameters. To suppress warnings for defaulted lte parameter settings precede code with the command "lteWarning('off','DefaultValue')".

Input Arguments

collapse all

ue — UE-specific settingsstructure

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

Parameter FieldRequired or OptionalValuesDescription


Physical layer cell identity


Nonnegative scalar integer

Subframe number


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

Shorten subframe flag. If 1, the last symbol of the subframe is not used. It should be set if the current subframe contains a possible SRS transmission.

Data Types: struct

chs — Channel transmission configurationscalar structure | structure array

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

'QPSK', '16QAM', '64QAM'

Modulation format


1- or 2-column integer 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

sym — PUSCH symbolscomplex-valued numeric matrix

PUSCH symbols, specified as a complex-valued numeric matrix of size M-by-P or M-by-NU. Where M is the number of symbols per antenna or layer, P is the number of transmission antennas, NTxAnts, and NU is the number of transmission layers, NLayers.

Data Types: double
Complex Number Support: Yes

hest — Channel estimate3-D numeric array

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

noiseest — Noise estimatenumeric scalar

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

alg — Algorithmic configurationstructure

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

Parameter FieldRequired or OptionalValuesDescription

'On' (default), 'Off'

Flag to control whether output bits get weighted with channel state information (CSI) calculated during the equalization stage. If 'On', soft bits are weighted by CSI.

Data Types: struct

Output Arguments

collapse all

cws — Codewordscolumn vector | cell array of column vectors

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

symbols — Received constellation of symbolscomplex-valued column vector

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

Data Types: double


[1] 3GPP TS 36.211. "Physical Channels and Modulation." 3rd Generation Partnership Project; Technical Specification Group Radio Access Network; Evolved Universal Terrestrial Radio Access (E-UTRA). URL:

Introduced in R2013b

Was this topic helpful?