5G/NR  -  PUCCH  

 

 

 

PUCCH / UCI in a Nutshell

 

  • What is this for ?  PUCCH is a Uplink Physical channel that is designed to carries UCI(Uplink Control Information)  
  • There are 5 different types of PUCCH defined in 3GPP, PUCCH Format 0,1,2,3,4. Each type is classified in terms of a few factors like the way of physical resource allocation, number of bits it can carries etc.
  • Format 0,1 is to carry the UCI bits <= 2 and Format 2,3,4 is to carry the UCI bits > 2.
  • Format 0, 2 are called short PUCCH because it can be only 1~2 OFDM symbols in length
  • Format 1,3,4 are called long PUCCH because it can be as long as 4~14 OFDM symbols in length
  • Format 0,1,2 are the most commonly used types
  • In LTE, PUCCH are usely placed at an extrem side of the channel bandwidth (i.e, at the RBs around start and end of the channel frequency) occupying the whole symbol length of a subframe. In 5G NR, PUCCH are placed in almost anywhere in a slot and usually takes up only a few symbols of a slot.
  • The physical resource of the PUCCH is configured by resourceSet and resource. Usually a list of resourceSets (multiple resource Set) for a UE and a list of resources (multiple resources) for each resource set.
  • Which resource sets to be used for each PUCCH transmission is determined internally based on the number of UCI bits to be carried and which resource (resource id) within the selected resource set is determined by DCI 1_x.

PUCCH / UCI in Detail

PUCCH is an uplink physical channel that carries UCI (Uplink Control Information). As DCI (Downlink Control Information) is carried by PDCCH, UCI is carried by PUCCH.  A big difference between DCI and UCI is that UCI can be carried either by PUCCH or PUSCH depending on situation whereas DCI can be carried only by PDCCH (not by PDSCH in any case).

UCI

The main purpose of PUCCH is to carry UCI (Uplink Control Information). Even though UCI can be taken as a part of PUCCH, I wrote a separate page here for UCI since it is a huge topics on its own (PUCCH is not the only channel that carries UCI, depending on cofiguration PUSCH also carries UCI. So it is reasonable to write a separate page for UCI)

Summary of PUCCH Formats

There are 5 different formats of PUCCH and which one of them is used is determined by how many bits of information should be carried and how many symbols are assigned, as summarized in the following table.

< Based on 38.211 - Table 6.3.2.1-1: PUCCH formats.>

Format Types

RP-180990

Lengh

of Symbols

Number

of bits

Descriptions (based on 38.300 - 5.3.3)

Format 0

1~2

<= 2

  •   Short PUCCH.
  •   with UE multiplexing (~12 UE) in the same PRB.
  •   Based on sequence selection.

Format 1

4~14

<= 2

  •   Long PUCCH.
  •   with multiplexing(~36 or 84 UEs) in the same PRB.
  •   time-multiplex the UCI and DMRS

Format 2

1~2

> 2

  •   Short PUCCH.
  •   with no multiplexing in the same PRB (1 UE).
  •   frequency multiplexes UCI and DMRS

Format 3

4~14

> 2

  •   Long PUCCH.
  •   with large UCI payloads and with no multiplexing (1 UE) capacity in the same PRB
  •   time-multiplex the UCI and DMRS

Format 4

4~14

> 2

  •   Long PUCCH.
  •   with moderate UCI payloads and with some multiplexing capacity(~ 2 or 4 UE) in the same PRB.

I think the description from 38.300 - 5.3.3 would give you another aspects of the description as below.   

    The short PUCCH format of up to two UCI bits is based on sequence selection, while the short PUCCH format of more than two UCI bits frequency multiplexes UCI and DMRS. The long PUCCH formats time-multiplex the UCI and DMRS. Frequency hopping is supported for long PUCCH formats and for short PUCCH formats of duration of 2 symbols. Long PUCCH formats can be repeated over multiple slots.

Following is the summary of PUCCH formats with more detailed parameter. For the overview of PUCCH parameters, I think this table would be enough but if you want to know of the detailed meaning of each of these parameters, you would need to go through the whole page.

Parameter

Format 0

Format 1

Format 2

Format 3

Format 4

UCI Bit Length

<= 2

<= 2

> 2

> 2

> 2

PUCCH Length

Short

Long

Short

Long

Long

UE Multiplexing in Same PRB

YES

(CS)

YES

(CS&OCC)

NO

NO

YES

(PreDFT OCC)

UCI/DMRS Multiplexing Method

N/A

TDM

FDM

TDM

TDM

starting PRB/PRB offset

PRB-Id

PRB-Id

PRB-Id

PRB-Id

PRB-Id

nrofPRBs

1

1

1~16

1~16

1

intraSlotFrequencyHopping

enabled

enabled

enabled

enabled

enabled

secondHopPRB

PRB-Id

PRB-Id

PRB-Id

PRB-Id

PRB-Id

startingSymbolIndex

0~13

0~10

0~13

0~10

0~10

nrofSymbols

1~2

4~14

1~2

4~14

4~14

initialCyclicShift

0~11

0~11

N/A

N/A

N/A

timeDomainOCC

N/A

0~6

N/A

N/A

N/A

occ-Length

N/A

N/A

N/A

N/A

2,4

occ-Index

N/A

N/A

N/A

N/A

0,1,2,3

interslotFrequencyHopping

N/A

enabled

enabled

enabled

enabled

additionalDMRS

N/A

true

true

true

true

maxCodeRate

N/A

 

 

 

 

nrofSlots

N/A

2,4,8

2,4,8

2,4,8

2,4,8

pi2BPSK

N/A

enabled

enabled

enabled

enabled

simultaneousHARQ_ACK_CSI

N/A

true

true

true

true

Some background of adopting this kind of design is briefly described in V-B of this paper as follows

    Unlike LTE PUCCH that is located at the edges of the carrier bandwidth and is designed with fixed duration and timing, NR PUCCH is flexible in its time and frequency allocation. That allows supporting UEs with smaller bandwidth capabilities in an NR carrier and efficient usage of available resources with respect to coverage and capacity. NR PUCCH design is based on 5 PUCCH formats. PUCCH formats 0 and 2, a.k.a. short PUCCHs, use 1 or 2 OFDM symbols while PUCCH formats 1, 3 and 4, a.k.a. long PUCCHs, can use 4 to 14 OFDM symbols. PUCCH formats 0 and 1 carry UCI payloads of 1 or 2 bits while other formats are used for carrying UCI payloads of more than 2 bits. In PUCCH formats 1, 3 and 4, symbols with DMRS are time division multiplexed with UCI symbols to maintain low low peak-to-average-power-ratio (PAPR) while in format 2, DMRS is frequency-multiplexed with data-carrying subcarriers. Multi-user multiplexing on the same time and frequency resources is supported only for PUCCH format 0, 1, and 4 by means of different cyclic shifts or OCC when applicable.

Which format to use ?

  •   Obviously the first criteria would be how many UCI bits you need to carry. As you see in the table above, there are two groups to chose for this critera. When the UCI bits is 2 or lower, you can use Format 0 or 1. When the UCI bits are greater 3 or higher, you can use format 2,3,4.
  •   Then next criteria would be about the possibility of UE multiplexing in the same PRB. Format 0,1,4 allows the multiplexing and format 2,3 does not allow the multiplexing.
  •   Then another criteria you can think of would be the robustness in various radio channel condition. In general, sequence based PUCCH would be more robust than the DMRS based one. Even with the same format, the robustness would vary depending on the number of bit length or number of DMRS as shown in Physical Uplink Control Channel Design for 5G NewvRadio

How to Determine PUCCH location ?

Following is the illustration for the description on 38.213 - 9.2.1 PUCCH Resource Sets. As you see in the following illustration, some parameters applies to all PUCCH format but some parameters applies to only specific formats as below.

How to define PUCCH baseband signal ?

As in LTE PUCCH(format 1,1a,1b, format 2,2a,2b and format 3), the baseband generation process for NR PUCCH is also very complicated. As you know, all the purpose of PUCCH is just to send a few bits to gNB. I've been thinking on why we need this kind of complicated way just to send a few bits.

Actually PUCCH is not the only one that is designed in such a complicated way. Every channel processing in cellular technology is complicated. Main reason behind this complexity is for reliability of the delivery of the contents and for some channels we put some additional complication for handling multiple users with very limited physical resources.

Anyway, I don't think I can explain fully about the design concept of PUCCH baseband generation in plain words and I don't want to pretend that I myself knows about the full detail.

Full understanding on this process will be required only for a few physical layer development engineer and those engineer would not need this type of notes since they've already had bettern knowledge than I just by reading 3GPP documents.

The main purpose of writing this note is to make a cheat sheet for overall PUCCH baseband process and figure out the link between RRC parameter and baseband process. Even if I don't completely understand the process, at least I can say 'Hmm... this RRC parameter seems to be related to this part of the baseband process'.

PUCCH baseband process is made up of roughly three steps :

This three steps applies to all PUCCH formats (Format 0,1,2,3,4) but depending on PUCCH format a little different parameters(see here) are used during this process and some format would require some extra steps in addition to this common part.

< PUCCH Baseband Sequence Generation >

< Group and sequence hopping >

< Cyclic Shift >

< PUCCH Format 0 Baseband Sequence >

< PUCCH Format 1 Baseband Sequence >

 

<  38.211 - Table 6.3.2.4.1-1: Number of PUCCH symbols and the corresponding   >

 

< 38.211 - Table 6.3.2.4.1-2: Orthogonal sequences for PUCCH format 1  >

< PUCCH Format 2 Baseband Sequence >

< PUCCH Format 3 Baseband Sequence >

< PUCCH Format 4 Baseband Sequence >

 

< Baseband Parameters for PUCCH Format >

RRC Parameters

Related PUCCH Format

Description

PUCCH-F0-F1-initial-cyclic-shift

Format 0 / 1

The index of the cyclic shift = {0,1,...11}

PUCCH-F1-time-domain-OCC

Format 1

The index of the orthogonal cover code

dataScramblingIdentityPUSCH

Format 2 / 3 / 4

Initialization of scrambling

PUCCH-F4-preDFT-OCC-index

Format 4

The index of the orthogonal cover code = {0,1,2,3}

PUCCH-F4-preDFT-OCC-length

Format 4

The length of the orghogonal cover code = {2,4}

Frequeny Hopping

It is possible to enable or disable PUCCH using RRC Parameter PUCCH-frequency-hopping. It is configured by following Rrc parameters.

 

PUCCH-Resource ::=                              SEQUENCE {

    pucch-ResourceId                                PUCCH-ResourceId,

    startingPRB                                     PRB-Id,

    intraSlotFrequencyHopping                       ENUMERATED { enabled } OPTIONAL,   -- Need R

    secondHopPRB                                    PRB-Id      OPTIONAL,   -- Need R

        ....

}

 

Followings are some of the examples of frequency hopping. For more diverse and accurate examples, refer to this note with Matlab 5G Toolbox.

Modulation

QPSK or BPSK is used depending on cases as below.

  • Long PUCCH with 2 or more bits of information : QPSK
  • Short PUCCH with more than 2 bits of information : QPSK
  • Long PUCCH with 1 bit information : BPSK

Channel Coding

Various types of Channel coding is applied to UCI(Uplink Control Information) depending on the number of bits to be carried.

UCI size including CRC, if present

Channel Code

1

Repetition code

2

Simplex Code

3-11

Reed Muller Code

> 11

Polar Code

UCI / PUSCH Multiplexing

Is it allowed to transmit UCI and PUSCH at the same time ? This (transmition of UCI and PUSCH at the same time) is called Multiplexing and the UCI/PUSCH multiplexing is supported. This multiplexing happens in the way described as follows (38.300 - 5.3.3)

  • UCI carrying HARQ-ACK feedback with 1 or 2 bits is multiplexed by puncturing PUSCH;
  • In all other cases UCI is multiplexed by rate matching PUSCH.

What is PUCCH Resource and what constitues it ?

As described above, there are various parameters to define a specific PUCCH. The set of parameters for defining a specific PUCCH is called 'PUCCH Resource'. The list of parameters that are used to define a PUCCH Resource are as follows.

  • startingPRB/PRB offset
  • intraSlotFrequencyHopping
  • secondHopPRB
  • First symbol (Starting Symbol)/startingSymbolIndex
  • Number of symbols/nrofSymbols
  • initial CS indexes(initialCyclicShift)
  • Number of PRBs/nrofPRBs
  • timeDomainOCC
  • occ-Length
  • occ-Index
  • interslotFrequencyHopping
  • additionalDMRS
  • maxCodeRate
  • nrofSlots
  • pi2BPSK
  • simultaneousHARQ_ACK_CSI

Not every PUCCH format uses all of these parameters. Depending on PUCCH format, a PUCCH uses different set of parameters. Following table shows which parameter is used for which PUCCH format.

Parameter

Applicable PUCCH Format

starting PRB/PRB offset

Common to All format(Format 0, Format 1, Format 2Format 3, Format 4)

intraSlotFrequencyHopping

Common to All format(Format 0, Format 1, Format 2, Format 3, Format 4)

secondHopPRB

Common to All format(Format 0, Format 1, Format 2, Format 3, Format 4)

startingSymbolIndex

Common to All format(Format 0, Format 1, Format 2, Format 3, Format 4)

nrofSymbols

Common to All format(Format 0, Format 1, Format 2, Format 3, Format 4)

initialCyclicShift

Format 0, Format 1

nrofPRBs

Format 2, Format 3

timeDomainOCC

Format 1

occ-Length

Format 4

occ-Index

Format 4

interslotFrequencyHopping

Format 1, Format 2, Format 3, Format 4 (See PUCCH-FormatConfig)

additionalDMRS

Format 1, Format 2, Format 3, Format 4 (See PUCCH-FormatConfig)

maxCodeRate

Format 2, Format 3, Format 4 (See PUCCH-FormatConfig)

nrofSlots

Format 1, Format 2, Format 3, Format 4 (See PUCCH-FormatConfig)

pi2BPSK

Format 1, Format 2, Format 3, Format 4 (See PUCCH-FormatConfig)

simultaneousHARQ_ACK_CSI

Format 1, Format 2, Format 3, Format 4 (See PUCCH-FormatConfig)

How does UE figure out which resource to apply ?

In previous section, we learned a lot of parameters are involved in defining a specific PUCCH. Then how the gNB transfer those information to UE ? In other words, how UE can figure out what kind of pucch format and parameters should be used for at the specific moment of PUCCH transmission ?

How the PUCCH Resource allocation is determined ?

There are two different ways of defining PUCCH Resource List(Table). One is to use the table predefined in 3GPP specification and the other one is to arbitrarily defined table using RRC message.

you may get a brief but nicely described big picture of PUCCH resource allocation from  V-B of this paper as follows :

    For UCI transmission including HARQ-ACK bits, a UE may be configured with up to 4 PUCCH resource sets based on the UCI size.

    • The first set can only be used for a maximum of 2 HARQ-ACK bits (with a maximum of 32 PUCCH resources)
    • other sets are applicable for more than 2 bits of UCI (each with a maximum of 8 PUCCH resources).

    A UE determines the set based on the UCI size, and further indicates a PUCCH resource in the set based on a 3-bit field in DCI (complemented with an implicit rule for the first set with more than 8 resources)

 

< Case 1 > Using the predefined table : Before PUCCH-Config in RRC

This case is used in a specific case as stated below (38.213-9.2.1). It means that this table is used when there is no PUCCHResourceSet defined in PUCCH-Config in RRC. There are two RRC messages that would carry PUCCH-Config. One is RRCSetup and the other one is RRCReconfiguration in case of SA or RRCConnectionReconfiguration in case of NSA. So if PUCCH-Config is configured in RRCSetup, this table is used for only a few steps before RRCSetup message. If PUCCH-Config is not configured in RRCSetup, this table is used for pretty long time until the rrc procedure reaches RRCReconfiguration.

    If a UE does not have dedicated PUCCH resource configuration, provided by higher layer parameter PUCCHResourceSet in PUCCH-Config, a PUCCH resource set is provided by higher layer parameter pucch-ResourceCommon in SystemInformationBlockType1 through an index to a row of Table 9.2.1-1 for transmission of HARQ-ACK information on PUCCH in an initial active UL BWP of N_size_BWP PRBs provided by SystemInformationBlockType1

 

<38.213 v15.3 - Table 9.2.1-1: PUCCH resource sets before dedicated PUCCH resource configuration >

 

When this table is used, only one of these items (resource) can be used for a specific cell and the specific resource to be used for the cell is configured by PUCCH-ConfigCommon.pucch-ResourceCommon in SIB1 as shown below.

 

    PUCCH-ConfigCommon ::= SEQUENCE {

         pucch-ResourceCommon               INTEGER (0..15) OPTIONAL, -- Need R

         pucch-GroupHopping                    ENUMERATED { neither, enable, disable },

         hoppingId                                   INTEGER (0..1023) OPTIONAL, -- Need R

         p0-nominal                                 INTEGER (-202..24) OPTIONAL, -- Need R

         ...

    }

 

As you see, pucch-ResourceCommon can specify a number between 0 and 15 which indicate the table Index in 38.213 Table 9.2.1-1.

For example, if pucch-ResourceCommon = 1. Following PUCCH configuration (resource) is used

    PUCCH Format = Format 0

    FirstSymbol = 12

    Number of Symbols = 2

    PRB Offset = 0

    Set of Initial CS Indexes = {0,4,8}

 

You may notice that 38.213 Table 9.2.1-1 defines the pucch format and time domain resource allocation but it does not specify the exact frequency domain resource allocation. The frequency domain resource allocation is determined by a little bit complicated algorithm as illustrated below based on 38.213-9.2.1. Simply put, the frequency domain resource is determined by DCI and PDCCH CCE location.

 

 

< Case 2 > Using the table defined in RRC message : After PUCCH-Config in RRC

PUCCH Resource table is defined in RRC message(e.g, RRCSetup(NR), RRCReconfiguration(NR), RRCConnectionReconfiguration(LTE for NR Addition). One example of creating the PUCCH resource allocation table is shown below. Basically it has a structure and steps as follows.

    Step 1 : Define all the possible PUCCH Format resource a gNB would use in the IE resourceToAddModList

    Step 2 : Define one or multipe Set of resources by combining the elements of resourceSetToAddModList

From the resource allocation table constructed as above, how a specific resource is picked up for UCI transmission at a specific moment. It can be determined by the two step procedure as below.

    Step 1 : Select a PUCCH Resource Set from ResourceSetToAddModList based on UCI bit length

    Step 2 : Select a specific resource from the resourceList within the selected resource set based on DCI

Following is an illustration showing the Step 1 (PUCCH Resource Set Selection)

Following is an illustration showing the Step 2 (PUCCH Resource Selection)

Examples

These examples are from Amarisoft Network Simulator.

 

Example 1 :

    pucch_Config

       setup

          resourceSetToAddModList

             pucch-ResourceSetID  = 0

             resourceList

                {

                   0, // these are the pucch-ResourceId defined in resourceToAddModList.

                   1, // you can make any combination of the list here

                   2, //   example : {0,1,2,3,4,5,6,7}

                   3, //   example : {0,1,2,3,0,1,2,3}

                   4, //   example : {0,0,0,0,0,0,0,0}

                   5,

                   6,

                   7

                }

            maxPayloadMinus1

          resourceToAddModList

             {

                pucch-ResourceId = 0

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 0

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

            {

                pucch-ResourceId = 1

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 1

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

            {

                pucch-ResourceId = 2

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 3

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

            {

                pucch-ResourceId = 3

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 7

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

             {

                pucch-ResourceId = 4

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 0

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

            {

                pucch-ResourceId = 5

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 1

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

            {

                pucch-ResourceId = 6

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 3

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

            {

                pucch-ResourceId = 7

                startingPRB = 0

                intraSlotFrequencyHopping = Omitted

                secondHopPRB = 0

                format = format0

                   format 0

                      {

                         initialCyclicShift = 7

                         nrofSymbols = 1

                         startingSymbolIndex = 13

                      }

            }

         ........

 

Example 2 :

    uplinkConfig {

      initialUplinkBWP {

        pucch-Config setup: {

          resourceSetToAddModList {

            {

              pucch-ResourceSetId 0,

              resourceList {

                0,

                1,

                2,

                3,

                4,

                5,

                6,

                7

              }

            },

            {

              pucch-ResourceSetId 1,

              resourceList {

                8,

                9,

                10,

                11,

                12,

                13,

                14,

                15

              }

            }

          },

          resourceToAddModList {

            {

              pucch-ResourceId 0,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 0,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 0

              }

            },

            {

              pucch-ResourceId 1,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 4,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 0

              }

            },

            {

              pucch-ResourceId 2,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 8,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 0

              }

            },

            {

              pucch-ResourceId 3,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 0,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 1

              }

            },

            {

              pucch-ResourceId 4,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 4,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 1

              }

            },

            {

              pucch-ResourceId 5,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 8,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 1

              }

            },

            {

              pucch-ResourceId 6,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 0,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 2

              }

            },

            {

              pucch-ResourceId 7,

              startingPRB 0,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 50,

              format format1: {

                initialCyclicShift 4,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 2

              }

            },

            {

              pucch-ResourceId 8,

              startingPRB 50,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 0,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n0,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 9,

              startingPRB 50,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 0,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n1,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 10,

              startingPRB 50,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 0,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n2,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 11,

              startingPRB 50,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 0,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n3,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 12,

              startingPRB 1,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 49,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n0,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 13,

              startingPRB 1,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 49,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n1,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 14,

              startingPRB 1,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 49,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n2,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 15,

              startingPRB 1,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 49,

              format format4: {

                nrofSymbols 14,

                occ-Length n4,

                occ-Index n3,

                startingSymbolIndex 0

              }

            },

            {

              pucch-ResourceId 16,

              startingPRB 49,

              intraSlotFrequencyHopping enabled,

              secondHopPRB 1,

              format format1: {

                initialCyclicShift 8,

                nrofSymbols 14,

                startingSymbolIndex 0,

                timeDomainOCC 0

              }

            }

          },

          format1 setup: {

          },

          format4 setup: {

            maxCodeRate zeroDot25

     },

RRC Parameters

Based on 38.331 v15.3

 

PUCCH-Config ::=        SEQUENCE {

    resourceSetToAddModList         SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceSets)) OF

                                             PUCCH-ResourceSet             OPTIONAL,   -- Need N

    resourceSetToReleaseList        SEQUENCE (SIZE (1..maxNrofPUCCH-ResourceSets)) OF

                                             PUCCH-ResourceSetId           OPTIONAL,   -- Need N

    resourceToAddModList            SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF

                                             PUCCH-Resource               OPTIONAL,   -- Need N

    resourceToReleaseList           SEQUENCE (SIZE (1..maxNrofPUCCH-Resources)) OF

                                             PUCCH-ResourceId             OPTIONAL,   -- Need N

    format1                         SetupRelease { PUCCH-FormatConfig }  OPTIONAL,   -- Need M

    format2                         SetupRelease { PUCCH-FormatConfig }  OPTIONAL,   -- Need M

    format3                         SetupRelease { PUCCH-FormatConfig }  OPTIONAL,   -- Need M

    format4                         SetupRelease { PUCCH-FormatConfig }  OPTIONAL,   -- Need M

    schedulingRequestResourceToAddModList   SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF

                                   SchedulingRequestResourceConfig     OPTIONAL, -- Need M

    schedulingRequestResourceToReleaseList  SEQUENCE (SIZE (1..maxNrofSR-Resources)) OF

                                   SchedulingRequestResourceId         OPTIONAL, -- Need M

 

    multi-CSI-PUCCH-ResourceList   SEQUENCE (SIZE (1..2)) OF PUCCH-ResourceId  OPTIONAL,-- Need M

    dl-DataToUL-ACK                SEQUENCE (SIZE (8)) OF INTEGER (0..15)   OPTIONAL,   -- Need M

    spatialRelationInfoToAddModList    SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos)) OF

                                       PUCCH-SpatialRelationInfo   OPTIONAL,   -- Need N

    spatialRelationInfoToReleaseList   SEQUENCE (SIZE (1..maxNrofSpatialRelationInfos)) OF

                                       PUCCH-SpatialRelationInfoId OPTIONAL,   -- Need N

 

    pucch-PowerControl                 PUCCH-PowerControl   OPTIONAL,   -- Need M

    ...

}

maxNrofPUCCH-ResourceSets = 4

maxNrofPUCCH-Resources = 127

resourceSetToAddModList  : List of PUCCH-ResourceSet

resourceToAddModList   :  Lists for adding  PUCCH resources applicable for the UL BWP and serving cell in which the PUCCH-Config is defined. The resources defined herein are referred to from other parts of the configuration to determine which resource the UE shall use for which report.  

format1  : Parameters that are common for all PUCCH resources of format 1

format2  : Parameters that are common for all PUCCH resources of format 2

format3  : Parameters that are common for all PUCCH resources of format 3

format4  : Parameters that are common for all PUCCH resources of format 4

dl-DataToUL-ACK : List of timiing for given PDSCH to the DL ACK. In this version of the specification only the values [0..8] are applicable. Corresponds to L1 parameter 'Slot-timing-value-K1'

spatialRelationInfoToAddModList : Configuration of the spatial relation between a reference RS and PUCCH. Reference RS can be SSB/CSI-RS/SRS. If the list has more than one element, MAC-CE selects a single element. Corresponds to L1 parameter 'PUCCH-SpatialRelationInfo'

PUCCH-FormatConfig ::=                  SEQUENCE {

    interslotFrequencyHopping               ENUMERATED {enabled}  OPTIONAL,   -- Need R

    additionalDMRS                          ENUMERATED {true}     OPTIONAL,   -- Need R

    maxCodeRate                             PUCCH-MaxCodeRate     OPTIONAL,   -- Need R

    nrofSlots                               ENUMERATED {n2,n4,n8}   OPTIONAL,   -- Need S

    pi2PBSK                                 ENUMERATED {enabled}    OPTIONAL,   -- Need R

    simultaneousHARQ-ACK-CSI                ENUMERATED {true}       OPTIONAL    -- Need R

}

 

PUCCH-MaxCodeRate ::=         ENUMERATED {zeroDot08, zeroDot15, zeroDot25, zeroDot35,

                                          zeroDot45, zeroDot60, zeroDot80}

 

interslotFrequencyHopping : Enabling inter-slot frequency hopping when PUCCH Format 1, 3 or 4 is repetead over multiple slots. The field is not applicable for format 2

additionalDMRS : Enabling 2 DMRS symbols per hop of a PUCCH Format 3 or 4 if both hops are more than X symbols when FH is enabled (X=4). Enabling 4 DMRS sybmols for a PUCCH Format 3 or 4 with more than 2X+1 symbols when FH is disabled (X=4). Corresponds to L1 parameter 'PUCCH-F3-F4-additional-DMRS'. The field is not applicable for format 1 and 2.  

maxCodeRate : Max coding rate to determine how to feedback UCI on PUCCH for format 2, 3 or 4. Corresponds to L1 parameter 'PUCCH-F2-maximum-coderate', 'PUCCH-F3-maximum-coderate' and 'PUCCH-F4-maximum-coderate' . The field is not applicable for format 1.

nrofSlots : Number of slots with the same PUCCH F1, F3 or F4. When the field is absent the UE applies the value n1. Corresponds to L1 parameter 'PUCCH-F1-number-of-slots', 'PUCCH-F3-number-of-slots' and 'PUCCH-F4-number-of-slots'. The field is not applicable for format 2.

pi2PBSK : Enabling pi/2 BPSK for UCI symbols instead of QPSK for PUCCH. Corresponds to L1 parameter 'PUCCH-PF3-PF4-pi/2PBSK'. The field is not applicable for format 1 and 2.

simultaneousHARQ-ACK-CSI : Enabling simultaneous transmission of CSI and HARQ-ACK feedback with or without SR with PUCCH Format 2, 3 or 4. Corresponds to L1 parameter 'PUCCH-F2-Simultaneous-HARQ-ACK-CSI', 'PUCCH-F3-Simultaneous-HARQ-ACK-CSI' and 'PUCCH-F4-Simultaneous-HARQ-ACK-CSI'. When the field is absent the UE applies the value OFF. The field is not applicable for format 1.

PUCCH-SpatialRelationInfo ::=               SEQUENCE {

    pucch-SpatialRelationInfoId                 PUCCH-SpatialRelationInfoId,

    referenceSignal                             CHOICE {

        ssb-Index                                   SSB-Index,

        csi-RS-Index                                NZP-CSI-RS-ResourceId,

        srs                                         SRS-ResourceId

    },

    pucch-PathlossReferenceRS-Id                PUCCH-PathlossReferenceRS-Id,

    p0-PUCCH-Id                                 P0-PUCCH-Id,

    closedLoopIndex                             ENUMERATED { i0, i1 }

}

 

PUCCH-SpatialRelationInfoId ::=             INTEGER (1..maxNrofSpatialRelationInfos)

 

PUCCH-ResourceSet ::=                       SEQUENCE {

    pucch-ResourceSetId                         PUCCH-ResourceSetId,

    resourceList                                SEQUENCE (SIZE (8..maxNrofPUCCH-ResourcesPerSet))

                                                          OF PUCCH-ResourceId,

    maxPayloadMinus1                            INTEGER (4..256)  OPTIONAL    -- Need R

}

 

maxNrofPUCCH-ResourcesPerSet ::= 4

PUCCH-ResourceSetId ::=                         INTEGER (0..maxNrofPUCCH-ResourceSets-1)

 

PUCCH-Resource ::=                              SEQUENCE {

    pucch-ResourceId                                PUCCH-ResourceId,

    startingPRB                                     PRB-Id,

    intraSlotFrequencyHopping                       ENUMERATED { enabled } OPTIONAL,   -- Need R

    secondHopPRB                                    PRB-Id      OPTIONAL,   -- Need R

 

    format             CHOICE {

        format0               PUCCH-format0,     - Cond InFirstSetOnly

        format1               PUCCH-format1,     - Cond InFirstSetOnly

        format2               PUCCH-format2,     - Cond NotInFirstSet

        format3               PUCCH-format3,     - Cond NotInFirstSet

        format4               PUCCH-format4      - Cond NotInFirstSet

    }

}

 

PUCCH-ResourceId ::=                            INTEGER (0..maxNrofPUCCH-Resources-1)

 

PUCCH-format0 ::=                               SEQUENCE {

    initialCyclicShift                              INTEGER(0..11),

    nrofSymbols                                     INTEGER (1..2),

    startingSymbolIndex                             INTEGER(0..13)

}

 

PUCCH-format1 ::=                               SEQUENCE {

    initialCyclicShift                              INTEGER(0..11),

    nrofSymbols                                     INTEGER (4..14),

    startingSymbolIndex                             INTEGER(0..10),

    timeDomainOCC                                   INTEGER(0..6)

}

 

PUCCH-format2 ::=                               SEQUENCE {

    nrofPRBs                                        INTEGER (1..16),

    nrofSymbols                                     INTEGER (1..2),

    startingSymbolIndex                             INTEGER(0..13)

}

 

PUCCH-format3 ::=                               SEQUENCE {

    nrofPRBs                                        INTEGER (1..16),

    nrofSymbols                                     INTEGER (4..14),

    startingSymbolIndex                             INTEGER(0..10)

}

 

PUCCH-format4 ::=                               SEQUENCE {

    nrofSymbols                                     INTEGER (4..14),

    occ-Length                                      ENUMERATED {n2,n4},

    occ-Index                                       ENUMERATED {n0,n1,n2,n3},

    startingSymbolIndex                             INTEGER(0..10)

}

 

SchedulingRequestResourceConfig ::=    SEQUENCE {

    schedulingRequestResourceId              SchedulingRequestResourceId,

    schedulingRequestID                      SchedulingRequestId,

    periodicityAndOffset                     CHOICE {

        sym2                                    NULL,                       

        sym6or7                                 NULL,                       

        sl1                                     NULL,      -- Recurs in every slot

        sl2                                     INTEGER (0..1),

        sl4                                     INTEGER (0..3),

        sl5                                     INTEGER (0..4),

        sl8                                     INTEGER (0..7),

        sl10                                    INTEGER (0..9),

        sl16                                    INTEGER (0..15),

        sl20                                    INTEGER (0..19),

        sl40                                    INTEGER (0..39),

        sl80                                    INTEGER (0..79),

        sl160                                   INTEGER (0..159),

        sl320                                   INTEGER (0..319),

        sl640                                   INTEGER (0..639)

    }         OPTIONAL,   -- Need M

    resource                                    PUCCH-ResourceId     OPTIONAL    -- Need M

}

 

PUCCH-PowerControl ::=      SEQUENCE {

    deltaF-PUCCH-f0            INTEGER (-16..15)      OPTIONAL,   -- Need R

    deltaF-PUCCH-f1            INTEGER (-16..15)      OPTIONAL,   -- Need R

    deltaF-PUCCH-f2            INTEGER (-16..15)      OPTIONAL,   -- Need R

    deltaF-PUCCH-f3            INTEGER (-16..15)      OPTIONAL,   -- Need R

    deltaF-PUCCH-f4            INTEGER (-16..15)      OPTIONAL,   -- Need R

    p0-Set                     SEQUENCE (SIZE (1..maxNrofPUCCH-P0-PerSet)) OF

                                  P0-PUCCH            OPTIONAL, -- Need M

    pathlossReferenceRSs       SEQUENCE (SIZE (1..maxNrofPUCCH-PathlossReferenceRSs)) OF

                                  PUCCH-PathlossReferenceRS OPTIONAL, -- Need M

    twoPUCCH-PC-AdjustmentStates     ENUMERATED {twoStates} OPTIONAL, -- Need R

    ...

}

 

P0-PUCCH ::=                            SEQUENCE {

    p0-PUCCH-Id                             P0-PUCCH-Id,

    p0-PUCCH-Value                          INTEGER (-16..15)

}

 

P0-PUCCH-Id ::=                         INTEGER (1..8)

 

PUCCH-PathlossReferenceRS ::=           SEQUENCE {

    pucch-PathlossReferenceRS-Id                PUCCH-PathlossReferenceRS-Id,

    referenceSignal                             CHOICE {

        ssb-Index                                   SSB-Index,

        csi-RS-Index                                NZP-CSI-RS-ResourceId

    }

}

 

PUCCH-PathlossReferenceRS-Id ::=  INTEGER (0..maxNrofPUCCH-PathlossReferenceRSs-1)

 

PUCCH-ConfigCommon ::= SEQUENCE {

     pucch-ResourceCommon               INTEGER (0..15) OPTIONAL, -- Need R

     pucch-GroupHopping                    ENUMERATED { neither, enable, disable },

     hoppingId                                   INTEGER (0..1023) OPTIONAL, -- Need R

     p0-nominal                                 INTEGER (-202..24) OPTIONAL, -- Need R

     ...

}

Reference

[1] Physical Uplink Control Channel Design for 5G New Radio  

[2] 5G NR UCI | Uplink Control Information (UCI) in 5G NR

[3] Physical Uplink Control Channel Design for 5G NewvRadio     

YouTube (Korean)