Main Content

lteSLSCHDecode

Sidelink shared channel decoding

Description

trblkout,blkcrc,stateout = lteSLSCHDecode(ue,trblklen,cwin) returns a column vector of information bits,trblkout, decoded from the soft log-likelihood ratio (LLR) codeword data vector cwin for the specified UE settings structure and transport block length. Additional outputs contains the result from a block cyclic redundancy check, blkcrc and a structure containing the HARQ process decoding state, stateout.

The SL-SCH decoder processing includes PUSCH deinterleaving, rate recovery, turbo decoding, block concatenation, and CRC calculations. The SL-SCH decoder performs the inverse of the sidelink shared channel processing defined in TS 36.212 [1], Section 5.4.2. For more information, see Sidelink Shared Transport Channel Processing.

example

[trblkout,blkcrc,stateout] = lteSLSCHDecode(ue,trblklen,cwin,statein) accepts an input structure specifying the initial HARQ process state that is used in support of HARQ soft combining.

The stateout array is normally reapplied via the statein argument of subsequent lteSLSCHDecode function calls, as part of a fixed sequence of HARQ retransmissions used by the SL-SCH. When a transport block is transmitted, it is always sent four times on four consecutive PSSCH subframes using the fixed RV sequence of {0,2,3,1}. The consecutive PSSCH subframes are selected from a subset of the PSSCH subframe pool. The statein and stateout variables allow this set of transmissions to be soft combined.

example

Examples

collapse all

Encode and decode an information block using the SL-SCH transport channel.

Create a UE settings structure. Generate a 100-bit transport block and SL-SCH codeword.

ue = struct('CyclicPrefixSL','Normal','Modulation','16QAM','RV',0);
trblk = randi([0 1],100,1);
cw = lteSLSCH(ue,5760,trblk);

Decode the SL-SCH codeword.

rxtrblk = lteSLSCHDecode(ue,length(trblk),cw);

Encode and decode an information block using the SL-SCH transport channel, and display the CRC error result.

Create a UE settings structure. Generate a 100-bit transport block and SL-SCH codeword.

ue = struct('CyclicPrefixSL','Normal','Modulation','16QAM','RV',0);
trblk = randi([0 1],100,1);
cw = lteSLSCH(ue,5760,trblk);

Decode the SL-SCH codeword and check for block errors.

[rxtrblk,err] = lteSLSCHDecode(ue,length(trblk),cw);
err
err = logical
   0

The decoded transport block has no errors.

Use soft combining while decoding the sequence of four transmissions used to send every transport block on the SL-SCH. The rate matching and noise level are set so that successful decoding of the block requires multiple transmissions.

Initialize parameters

  • Create a UE settings structure for the SL-SCH.

  • Generate a transport block of 100 random bits.

  • Create a local variable specifying an SL-SCH bit capacity of 288.

  • Define the fixed redundancy version sequence used by the HARQ process.

  • Clear the HARQ process decoding state.

ue = struct('CyclicPrefixSL','Normal','Modulation','QPSK');
trblk = randi([0 1],100,1);
bitcapacity = 288;
rvseq = [0 2 3 1];
decstate = [];

Transmit and recover the SL-SCH transport block

  • Send the transport block four times.

  • Display result of decoding successive transmissions.

for i = 1:4
    % Encode information bits with the next RV value.
    ue.RV = rvseq(i);
    cw = lteSLSCH(ue,bitcapacity,trblk);
    
    % Modulate the codeword and add noise.
    sym = awgn(lteSymbolModulate(cw,ue.Modulation),-4,'measured');
    softdata = lteSymbolDemodulate(sym,ue.Modulation);
    
    % Decode the current transmission and combine with decoding state.
    [rxtrblk,err,decstate] = lteSLSCHDecode(ue,length(trblk), ...
        softdata,decstate);
    X = ['Decoding error ', num2str(err), ' for transmission #', ...
        num2str(i), ' with RV ', num2str(ue.RV)];
    disp(X)
end
Decoding error 1 for transmission #1 with RV 0
Decoding error 1 for transmission #2 with RV 2
Decoding error 0 for transmission #3 with RV 3
Decoding error 0 for transmission #4 with RV 1

The soft-combined data is recovered without error on the third transmission.

Input Arguments

collapse all

User equipment settings, specified as a parameter structure containing these fields:

Sidelink mode, specified as 'D2D' or 'V2X'.

Data Types: char | string

Cyclic prefix length, specified as 'Normal' or 'Extended'.

Data Types: char | string

Modulation type, specified as 'QPSK' or '16QAM'.

Data Types: char | string

Redundancy version indicator, specified as an integer scalar or vector with element values from 0 to 3.

Example: [0 2 3 1], indicates the RV sequence order for transmission on the PSSCH.

Data Types: double

Number of turbo decoder iteration cycles, specified as an integer scalar from 1 to 30.

Data Types: double

Data Types: struct

Transport block length, specified as a positive integer scalar. trblklen defines the decoded transport block length.

Data Types: double

LLR codeword data, specified as a soft bit vector.

Data Types: double

Decoder buffer state, specified as a structure. Use statein to input the current decoder buffer state for the transport block in an active HARQ process. statein can be an empty structure or a structure array with one or two elements. If nonempty, statein.CBSBuffers should contain a cell array of vectors representing the log-likelihood ratio (LLR) soft buffer states for the set of code blocks at the input to the turbo decoder, after explicit rate recovery. The updated buffer states after decoding are returned in the CBSBuffers field of stateout.

The statein array is normally generated and recycled from the stateout of previous calls to lteSLSCHDecode, as part of the fixed sequence of SL-SCH HARQ (re)transmissions.

The statein structure contains this field:

LLR soft buffer states, specified as a cell array of numeric vectors. CBSBuffers contains the LLR soft buffer states for the set of code blocks associated with a single transport block. The LLR soft buffer states are positioned at the input to the turbo decoder. The states are available after the explicit rate recovery.

Data Types: cell

Data Types: struct

Output Arguments

collapse all

Decoded information bits, returned as a column vector. The trblkout information bits are decoded from the soft log-likelihood ratio (LLR) codeword data vector, cwin.

CRC failure check of block, returned as true or  false.

  • blkcrc = false indicates that the subframe was recovered with no block errors.

  • blkcrc = true indicates a block error.

Internal state of decoder, returned as a structure containing these fields:

LLR soft buffer states, returned as a cell array of integer vectors. CBSBuffers contains the LLR soft buffer states for the set of code blocks associated with a single transport block. The LLR soft buffer states are positioned at the input to the turbo decoder. The states are available after the explicit rate recovery.

Data Types: cell

CRC decoding results of type-24B code block set, returned as an integer array or empty array.

Data Types: double

CRC decoding error in type-24A transport block, returned as a logical.

  • BLKCRC = 0 indicates that the subframe was recovered with no block errors.

  • BLKCRC = 1 indicates a block error.

Data Types: logical

More About

collapse all

Sidelink Shared Transport Channel Processing

The sidelink shared channel (SL-SCH) transport channel processing includes type-24A CRC calculation, code block segmentation (including type-24B CRC attachment, if present), turbo encoding, rate matching with redundancy version (RV), code block concatenation, and PUSCH interleaving. lteSLSCH generates this transport channel codeword as specified by TS 36.212, Section 5.4.2.

The SL-SCH transport channel codeword carrying the information bits of a single transport block is transmitted on the physical sidelink shared channel. Use the ltePSSCH and ltePSSCHIndices functions to generate the modulated symbols and populate the resource grid for transmission.

The length of the codeword output by lteSLSCH represents the bit capacity of the physical channel. For PSSCH, the input codeword length is Mbits = NRE × Nbps, where Nbps is the number of bits per symbol. The PSSCH modulation is either QPSK (2 bits per symbol) or 16QAM (4 bits per symbol). The number of PSSCH resource elements (NRE) in a subframe is NRE = NPRB × NREperPRB × NSYM and includes symbols associated with the sidelink SC-FDMA guard symbol.

  • NPRB is the number of physical resource blocks (PRB) used for transmission.

  • NREperPRB is the number of resource elements in a PRB. Each PRB has 12 resource elements.

  • NSYM is the number of SC-FDMA symbols in a PSSCH subframe, including symbols associated with the sidelink SC-FDMA guard symbol. NSYM is 12 for D2D normal cyclic prefix or 10 for D2D extended cyclic prefix and V2X.

For D2D sidelink, the SL-SCH codeword carrying the information bits of a single transport block is always transmitted four times on four consecutive PSSCH subframes using the fixed RV sequence, RV = 0,2,3,1. The transmission subframes are selected from a subset of the PSSCH subframe pool. There is no HARQ feedback involved in the process. For V2X, there can be either one or two transmissions of a transport block using the RV sequence, RV = 0,2. For more information on the SL-SCH transmission and the sidelink HARQ process, see TS 36.321, Section 5.14.2.2.

References

[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: https://www.3gpp.org.

[2] 3GPP TS 36.321. “Evolved Universal Terrestrial Radio Access (E-UTRA); Medium Access Control (MAC) protocol Specification.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network. URL: https://www.3gpp.org.

Version History

Introduced in R2016b