Main Content

nrULSCHInfo

Get uplink shared channel (UL-SCH) information

Description

info = nrULSCHInfo(tbs,tcr) returns a structure containing the uplink shared transmission (UL-SCH) information for an input transport block size tbs and target code rate tcr. The UL-SCH information includes the cyclic redundancy check (CRC) attachment, code block segmentation (CBS), and channel coding. When you use this syntax, the function provides the UL-SCH coding information and does not handle the uplink control information (UCI) multiplexing on the physical uplink shared channel (PUSCH), because the information of PUSCH resources is not known.

example

info = nrULSCHInfo(pusch,tcr,tbs,oack,ocsi1,ocsi2) returns a structure, which contains the UL-SCH information related to the encoding process and UCI multiplexing, for the PUSCH configuration pusch, target code rate tcr, and transport block size tbs. The oack input is the hybrid automatic repeat request acknowledgment (HARQ-ACK) payload length. The ocsi1 input is the channel state information (CSI) part 1 payload length. The ocsi2 input is the CSI part 2 payload length.

The function performs the multiplexing process on one of these options:

  • UL-SCH data and UCI data (HARQ-ACK, CSI part 1, and CSI part 2)

  • UCI data (HARQ-ACK, CSI part 1, and CSI part 2) only

example

Examples

collapse all

Show UL-SCH information before rate matching for an input transport block of length 8456 and target code rate 517/1024. The displayed UL-SCH information shows:

  • The transport block has 312 <NULL> filler bits per code block.

  • The number of bits per code block, after CBS, is 4576.

  • The number of bits per code block, after low-density parity-check (LDPC) coding, is 13,728.

tBlkLen = 8456;
targetCodeRate = 517/1024;
nrULSCHInfo(tBlkLen,targetCodeRate)
ans = struct with fields:
        CRC: '24A'
          L: 24
        BGN: 1
          C: 2
        Lcb: 24
          F: 312
         Zc: 208
          K: 4576
          N: 13728
     GULSCH: []
       GACK: 0
      GCSI1: 0
      GCSI2: 0
    GACKRvd: 0
      QdACK: 0
     QdCSI1: 0
     QdCSI2: 0

Create a PUSCH object with a default configuration.

pusch = nrPUSCHConfig;

Set the beta offsets of the UCI types in the PUSCH configuration. Set the UCI scaling factor.

pusch.BetaOffsetACK = 10;  % Beta offset factor for HARQ-ACK
pusch.BetaOffsetCSI1 = 10; % Beta offset factor for CSI part 1
pusch.BetaOffsetCSI2 = 10; % Beta offset factor for CSI part 2
pusch.UCIScaling = 1;      % Scaling factor

Set the target code rate for the shared channel transmission.

tcr = 517/1024; % Target code rate

Set the payload lengths of the data, HARQ-ACK, CSI part 1, and CSI part 2.

tbs = 8456; % Payload length of UL-SCH data (transport block size)
oack = 6;   % Payload length of HARQ-ACK
ocsi1 = 40; % Payload length of CSI part 1
ocsi2 = 10; % Payload length of CSI part 2

Obtain the bit capacity information of the data and UCI.

info = nrULSCHInfo(pusch,tcr,tbs,ocsi1,ocsi2,oack)
info = struct with fields:
        CRC: '24A'
          L: 24
        BGN: 1
          C: 2
        Lcb: 24
          F: 312
         Zc: 208
          K: 4576
          N: 13728
     GULSCH: 15032
       GACK: 906
      GCSI1: 178
      GCSI2: 108
    GACKRvd: 0
      QdACK: 453
     QdCSI1: 89
     QdCSI2: 54

Input Arguments

collapse all

Transport block size associated with the codewords in the UL-SCH transmission, specified as a nonnegative integer or a two-element vector of nonnegative integers for two codewords. When you specify this input as a nonnegative integer and there are two codewords, the specified value applies to both codewords. A value of 0 indicates no transport block or no UL-SCH transmission on the PUSCH.

Data Types: double

Target code rate for the codewords in the UL-SCH transmission, specified as a scalar in the range (0, 1) or a two-element vector of numeric values in the range (0, 1) for two codewords. When you specify this input as a scalar and there are two codewords, the specified scalar applies to both codewords.

Data Types: double

PUSCH configuration parameters, specified as an nrPUSCHConfig object. This function uses only these nrPUSCHConfig object properties:

Payload length of the HARQ-ACK bits, specified as a nonnegative integer. A value of 0 indicates no HARQ-ACK transmission.

Data Types: double

Payload length of the CSI part 1 bits, specified as a nonnegative integer. A value of 0 indicates no CSI part 1 transmission.

Data Types: double

Payload length of the CSI part 2 bits, specified as a nonnegative integer. A value of 0 indicates no CSI part 2 transmission. Nominally, the CSI part 2 is present only when CSI part 1 is present.

Data Types: double

Output Arguments

collapse all

UL-SCH information, returned as a structure containing these fields. For two codewords, CRC is returned only for the first codeword and all other fields are returned as a 1-by-2 vector (since R2024a).

FieldsValuesDescription
CRC

'16', '24A'

CRC polynomial selection for the first codeword

L

0, 16, 24

Number of CRC bits

BGN

1, 2

LDPC base graph selection

C

Positive integer

Number of code blocks

Lcb

0, 24

Number of parity bits per code block

F

Nonnegative integer

Number of <NULL> filler bits per code block

Zc

Positive integer

Lifting size selection

K

Nonnegative integer

Number of bits per code block after CBS

N

Nonnegative integer

Number of bits per code block after LDPC coding

GULSCH

Nonnegative integer

Number of coded and rate matched UL-SCH data bits

GACK

Nonnegative integer

Number of coded and rate matched HARQ-ACK bits

GCSI1

Nonnegative integer

Number of coded and rate matched CSI part 1 bits

GCSI2

Nonnegative integer

Number of coded and rate matched CSI part 2 bits

GACKRvd

Nonnegative integer

Number of reserved bits for HARQ-ACK

QdACK

Nonnegative integer

Number of coded HARQ-ACK symbols per layer (Q'ACK)

QdCSI1

Nonnegative integer

Number of coded CSI part 1 symbols per layer (Q'CSI1)

QdCSI2

Nonnegative integer

Number of coded CSI part 2 symbols per layer (Q'CSI2)

References

[1] 3GPP TS 38.212. “NR; Multiplexing and channel coding.” 3rd Generation Partnership Project; Technical Specification Group Radio Access Network.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2019a

expand all