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 multiple PUCCH formats (0, 1, 2, 3, 4), each optimized for different amounts of UCI bits and different time–frequency resources. These formats differ mainly in:

  • The number of OFDM symbols used,
  • The number of bits carried,
  • Whether or not they use orthogonal cover codes (OCC),
  • Whether or not they use transform precoding,
  • How the sequences are generated or spread across the assigned PRBs.

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 Base Sequence Generation

PUCCH Baseband Sequence Generation refers to how the physical uplink control channel (PUCCH) waveform is formed in baseband before being transmitted over the air.

It covers

  • (i) how the bits are scrambled and modulated;
  • (ii) how the reference or sequence signals are generated (for PUCCH formats 0, 1, 3, and 4);
  • (iii) how symbol spreading is done (for formats 1, 2, 3, 4); and
  • (iv) how everything is then mapped onto the allocated resource elements. Below is a step-by-step explanation, focusing on the key ideas of sequence generation for each PUCCH format.

In PUCCH formats 0, 1, 3, and 4, the waveform is built around a Zadoff–Chu-like complex sequence ru,v(α,δ)(n). Here:

  • u (group index) may change per slot according to group hopping.
  • v (sequence index) can also be varied if sequence hopping is enabled.
  • α (cyclic shift) can be updated on a symbol-by-symbol basis to introduce cyclic shift hopping.

The sequence ru,v(α,δ)(n) can be generated or hopped using pseudo-random initializations that depend on the cell identity (NIDcell) or a higher-layer configured ID. This approach helps ensure good autocorrelation and cross-correlation properties among different UEs and different PUCCH transmissions.

Group and sequence hopping

Hopping in the PUCCH (Physical Uplink Control Channel) context refers to the mechanism of dynamically altering parameters to improve performance and mitigate interference in the uplink. The hopping mechanism consists of two main components: group hopping and sequence hopping.

Group hopping modifies the frequency group used by the uplink signal, reducing interference and ensuring more robust communication. The value of the hopping group, denoted as fgh, depends on the configuration parameters set by the network, such as the hoppingId or the cell identity NcellID. If group hopping is disabled, fgh is set to zero.

Sequence hopping involves altering the base sequence of the uplink signal to ensure diversity and enhance resilience against fading. The sequence hopping component, represented by fss, is derived from the network configuration. The hopping sequence depends on whether group hopping is enabled, disabled, or set to neither.

The hopping behavior is summarized by the formula:

u = (fgh + fss) mod 30

In this equation, the effective hopping parameter u combines the group hopping and sequence hopping values to determine the uplink resource allocation dynamically. This ensures efficient utilization of the available spectrum while minimizing interference.

Additionally, a frequency hopping index, nhop, plays a role in determining intra-slot hopping behavior. When frequency hopping is disabled, nhop is set to zero. When enabled, nhop alternates between zero for the first hop and one for the second hop within a slot.

The formula for determining the hopping value is:

u = (fgh + fss) mod 30

Here, the behavior depends on the value of pucch-GroupHopping, which can be set to 'neither', 'enable', or 'disable'. The following describes each scenario:

 

pucch-GroupHopping = 'neither'

When pucch-GroupHopping is set to 'neither', it indicates that no group hopping or sequence hopping is enabled. In this configuration: This configuration effectively disables both group and sequence hopping, resulting in static behavior where no dynamic hopping is applied. The values of the parameters are derived from either the RRC configuration or the cell identity, ensuring deterministic operation in the absence of hopping.

  • fgh = 0
  • fss = nID mod 30
  • nID = hoppingId in RRC if configured
  • nID = NcellID if hoppingId in RRC is not configured
  • v = 0

Following is the high level description of the parameter setting for this condition

  • Group Hopping Parameter (fgh): The value of the group hopping parameter is set to 0, meaning no group hopping is applied.
  • Sequence Hopping Parameter (fss): This is determined by the formula nID mod 30, where:
    • nID is either the hoppingId provided in the RRC configuration if it is explicitly configured.
    • If hoppingId is not configured in the RRC, nID defaults to the cell identity NcellID.
  • Additional Parameter (v): The parameter v is set to 0, which indicates that there is no further adjustment or modification to the hopping behavior.

 

pucch-GroupHopping = 'enable'

When pucch-GroupHopping is set to 'enable', the configuration activates group hopping in PUCCH (Physical Uplink Control Channel).

The configuration for PUCCH (Physical Uplink Control Channel) Group Hopping when set to 'enable' introduces frequency hopping, allowing sequences to span multiple frequency groups. This improves diversity and robustness against interference.

When pucch-GroupHopping is set to 'enable', it ensures that the uplink signal spans different frequency groups to enhance interference resilience and provide diversity in transmission. The formula for fgh incorporates multiple variables, including hopping-related parameters and a summation over predefined ranges, making it flexible and adaptive to the system's configuration. fss and cinit are derived from system identifiers, ensuring unique and non-colliding sequence configurations for different cells.

  • fgh = (Σ7m=0 2m c(8(2nsfμ + nhop) + m))) mod 30
  • fss = nID mod 30
  • cinit = ⌊nID/30⌋
  • v = 0

The parameters for this configuration are as follows:

  • Frequency group hopping factor (fgh):
    • fgh is computed using a summation-based formula:
    • fgh = (Σ7m=0 2m c(8(2nsfμ + nhop) + m))) mod 30

    This calculation involves:

    Summation over 8 terms: Each term is weighted by 2m, where m ranges from 0 to 7.

    c(x): Represents a pseudo-random sequence generator function, which depends on:

      8 · (2nsfμ + nhop) + m, where:

      • nsfμ is the slot index within a subframe for the given numerology μ.
      • nhop is the hopping index (can be 0 or 1 based on frequency hopping configuration).

    The result is taken modulo 30 to ensure the parameter fits within the range for group hopping.

  • Sequence shift factor (fss): Hopping Parameter
    • fss = nID mod 30
      • nID is the hopping ID configured in the RRC (Radio Resource Control).
      • If not explicitly configured, nID defaults to the cell ID (NIDcell).
  • Initial value for the sequence (cinit):
    • cinit = ⌊nID / 30⌋
      • This is used as the initial value for the pseudo-random sequence generation function.
  • Frequency hopping index (v):
    • The index v is set to 0.
    • In this case, v = 0, which implies no further modifications or shifts in the hopping sequence.

 

pucch-GroupHopping = 'disable'

When pucch-GroupHopping is set to 'disable', the hopping mechanism is simplified.

  • fgh = 0
  • fss = nID mod 30
  • v = c(2nsfμ + nhop)
  • cinit = 25 ⌊nID/30⌋ + (nID mod 30)

Following is the descriptions about each parameter settings

  • Group Hopping Parameter (fgh):

    The group hopping parameter is set to 0, meaning no group hopping is applied.

  • Sequence Hopping Parameter (fss):

    Calculated as:

    fss = nID mod 30

    Where:

    • nID is the hopping ID configured in the RRC (Radio Resource Control).
    • If not explicitly configured, nID defaults to the cell ID (NIDcell).
  • Additional Parameter (v):

    Derived as:

    v = c(2nsfμ + nhop)

    Where:

    • nsfμ is the slot index within a subframe for the given numerology \(μ\).
    • nhop is the hopping index (0 or 1 based on frequency hopping configuration).
  • Initialization Parameter (cinit):

    Derived as:

    cinit = 25 ⌊ nID/30 ⌋ + (nID mod 30)

    This is used as the initial value for the pseudo-random sequence generation function.

 

Frequency Hopping Index:

  • nhop = 0 if PUCCH-Resource.intraSlotFrequencyHopping = disabled
  • nhop = 0 for the first hop, and nhop = 1 for the second hop if PUCCH-Resource.intraSlotFrequencyHopping = enabled

 

Cyclic Shift 

Cyclic Shift in PUCCH is a critical parameter used in 5G NR to enable multiple User Equipments (UEs) to transmit over the same resources without causing interference. It applies a phase rotation to the base sequence, enabling efficient resource multiplexing. The cyclic shift ensures orthogonality and supports multiple UEs on the same PUCCH resource. It avoids conflicts by applying dynamic phase rotations using the parameters defined above.

Below is a detailed explanation:

The formula for cyclic shift (αl) is:

αl = (2π/NRBSC) · ((m0 + mcs + ncs(nμs,f, l, l')) mod NRBSC)

    Where:

    • NRBSC: Number of resource blocks.
    • m0: Initial cyclic shift parameter, varies based on PUCCH format.
    • mcs: Sequence cyclic shift, determined by HARQ-ACK values or RRC signaling.
    • ncs: Additional cyclic shift calculated dynamically as:
      ncs(nμs,f, l, l') = Σm=07 2m c(8Nslotsymbnμs,f + 8l + m)
        • c(x): Pseudo-random sequence generator based on cinit, derived as cinit = nID.
        • nID: Hopping ID configured in RRC or derived from NcellID.

Followings are specific parameters for each PUCCH formats

PUCCH Format 0:

  •   m0 = initialCyclicShift configured in RRC signaling.
  •   HARQ-ACK determines sequence cyclic shift (mcs) based on following tables

The tables presented correspond to the cyclic shift parameters for HARQ-ACK values in PUCCH (Physical Uplink Control Channel) configurations. These tables are essential for determining how sequence cyclic shifts are applied to PUCCH resources in 5G systems. The selection of the cyclic shift depends on the HARQ-ACK values, ensuring the integrity and proper alignment of control information during uplink communication. The shifts (m<sub>CS</sub>) effectively modulate the uplink signal to manage multiple users and configurations efficiently.

< 38.213-Table 9.2.3-3 Mapping of values for one HARQ-ACK information bit to sequences for PUCCH format 0>

HARQ-ACK Value

0

1

Sequence cyclic shift

mCS = 0

mCS = 6

< 38.213-Table 9.2.3-4 Mapping of values for two HARQ-ACK information bits to sequences for PUCCH format 0>

HARQ-ACK Value

{0, 0}

{0, 1}

{1, 1}

{1, 0}

Sequence cyclic shift

mCS = 0

mCS = 3

mCS = 6

mCS = 9

 

PUCCH Format 1 and 3:

  •   m0 = 0 (default setting).

 

PUCCH Format 4:

  •   Cyclic shift index (m0) depends on orthogonal sequence index (n) and is defined in following table

This table provides the cyclic shift indices (m0) for different orthogonal sequence indices (n) in the context of PUCCH format 4

< 38.211-Table 6.4.1.3.3.1-1: Cyclic shift index for PUCCH format 4 >

Orthogonal sequence index n

Cyclic shift index m0

NPUCCH,4SF = 2

NPUCCH,4SF = 4

0

0

0

1

6

6

2

-

3

3

-

9

    Orthogonal Sequence Index (n):

    • Indicates the specific sequence index used for orthogonal coding in PUCCH format 4.
    • Takes values from 0 to 3.
    • Specified by RRC IE (occ-Index).

    Cyclic Shift Index (m0):

      • Represents the amount of cyclic shift applied to the sequence.
      • Dependent on the value of NPUCCH,4SF, which defines the number of slots per subframe for PUCCH format 4.
      • Shown for two configurations of NPUCCH,4SF:
        • NPUCCH,4SF = 2: Two slots per subframe.
        • NPUCCH,4SF = 4: Four slots per subframe.
      • Specified by RRC IE (occ-length).

PUCCH Format 0 Baseband Sequence

The formula represents the PUCCH Format 0 Baseband Sequence, used in LTE for transmitting control information such as acknowledgments, scheduling requests, or channel quality indicators.

Expression Overview:

The sequence is represented as:

x(l ⋅ NscRB + n) = ru,v(α, δ)(n)

Here, the index l determines the OFDM symbol index, while n is the subcarrier index within a resource block.

Components:

  • l: Represents the OFDM symbol number in a slot, indicating whether the symbol is for single-symbol or double-symbol PUCCH transmission.
  • NscRB: Denotes the number of subcarriers per resource block (RB).
  • ru,v(α, δ)(n): Represents the Zadoff-Chu sequence used for modulation. This sequence ensures low peak-to-average power ratios (PAPR) and robust signal quality.

Index Ranges:

  • n: Subcarrier index, ranging from 0 to NscRB - 1, indicating positions within a resource block.
  • l: Determines the sequence structure for single-symbol or double-symbol PUCCH:
    • l = 0: Used for single-symbol transmission.
    • l = 0, 1: Used for double-symbol transmission.

Single vs. Double Symbol Transmission:

  • For single-symbol PUCCH, only the first OFDM symbol in a slot is used (l = 0).
  • For double-symbol PUCCH, both the first and second OFDM symbols in a slot are used (l = 0, 1).

PUCCH Format 1 Baseband Sequence  

PUCCH Format 1 introduces unique features compared to other PUCCH formats, particularly in the sequence generation process:

Unlike most other PUCCH formats that directly use the Zadoff-Chu sequence for sequence generation, PUCCH Format 1 applies an orthogonal spreading code (wi(m)) on top of the Zadoff-Chu sequence (r(α,δ)u,v(n)).

In orther words, while most other formats rely solely on the Zadoff-Chu sequence for their properties (e.g., constant amplitude, low cross-correlation), PUCCH Format 1 goes a step further by introducing spreading codes and frequency hopping for added robustness and user multiplexing. This makes it particularly suitable for scenarios requiring higher UCI bit capacity and interference mitigation.

  • PUCCH Format 1 employs both modulation and spreading for robust UCI transmission.
  • The orthogonal sequences ensure multiple users or control channels can coexist without interference.
  • Frequency hopping (intra-slot hopping) adds diversity to improve reliability in fading environments.
  • The tables provide reference mappings for implementation based on the subcarrier and symbol configurations.

 

<  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  >

Modulated Sequence

The modulated sequence is calculated as:

y(n) = d(0) · r(α,δ)u,v(n)

    , where

    • d(0): Represents the modulation symbol:
      • BPSK (for Mbit = 1): d(0) = 1/√2 [(1 - 2b(0)) + j(1 - 2b(0))]
      • QPSK (for Mbit = 2): d(0) = 1/√2 [(1 - 2b(0)) + j(1 - 2b(1))]
    • r(α,δ)u,v(n): Base sequence determined by cell-specific parameters.

Spreaded Sequence

The spreaded sequence is calculated as:

z(m' · NRBsc/NPUCCH,1SF,m' + m · NRBsc + n) = wi(m) · y(n)

    , where

    • wi(m): Orthogonal spreading code for PUCCH Format 1.
    • m: Index for slot symbols.
    • m': Frequency hopping parameter:
      • m' = 0: No intra-slot frequency hopping.
      • m' = 1: Intra-slot frequency hopping enabled.
    • n: Subcarrier index (n = 0, 1, ..., NRBsc - 1).

Tables Overview

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

This table maps the number of PUCCH symbols (NPUCCH,1symb) to the corresponding values of NPUCCH,1SF,m', considering intra-slot hopping:

  • No intra-slot hopping (m' = 0): The values remain consistent for single-symbol allocation.
  • Intra-slot hopping (m' = 1): The values vary slightly due to hopping.

The parameter NPUCCH,1SF,m' has a specific practical meaning in the context of PUCCH Format 1 and relates to the number of subcarriers and their allocation for physical uplink control channel transmission. Its practical meaning can be described as follows:

NOTE : What is Practical Meaning of NPUCCH,1SF,m':

    Subcarrier Allocation for Spreading:

    • NPUCCH,1SF,m' determines the number of subcarriers allocated for spreading the PUCCH Format 1 sequence. It defines how many resource elements are used within a given time and frequency grid.

    Dependence on Hopping Mode:

    • The value of m' affects NPUCCH,1SF,m', and it indicates whether intra-slot frequency hopping is enabled:

      • m' = 0: No intra-slot hopping; the subcarriers remain fixed throughout the slot.
      • m' = 1: Intra-slot hopping is enabled, and subcarriers are changed mid-slot, providing additional diversity.

    PUCCH Length and Symbol Structure:

    • NPUCCH,1SF,m' is closely tied to the PUCCH symbol length NPUCCH,1symb. Different lengths of PUCCH symbols correspond to different values of NPUCCH,1SF,m'. This impacts how the control information is spread across the available symbols and subcarriers.

    Orthogonal Spreading and Multiplexing:

    • NPUCCH,1SF,m' plays a role in defining the orthogonal spreading sequences wi(m) applied to the baseband sequence. A larger value of NPUCCH,1SF,m' enables more orthogonal sequences, allowing for multiplexing of multiple UEs within the same resource block.

    Diversity and Robustness:

    • By varying NPUCCH,1SF,m', the system can optimize the balance between diversity and spectral efficiency:

      • Lower values are more suited for simpler transmissions with fewer UEs.
      • Higher values are beneficial for improving interference robustness and supporting more UEs.

    Practical Use:

      In scenarios where multiple UEs are transmitting uplink control information simultaneously, the parameter NPUCCH,1SF,m' determines how many subcarriers and spreading sequences are available. It directly affects:

      • How the resources are divided among UEs.
      • How robust the transmission is against fading and interference.

      This parameter is therefore crucial in the configuration and optimization of PUCCH Format 1 transmissions in real-world LTE/NR deployments.

      Example : meaning of NPUCCH,1SF,m', = 4

        • NPUCCH,1SF,m' indicates the number of orthogonal codes used for spreading the signal in PUCCH Format 1. For example, if NPUCCH,1SF,m' = 4, it means that 4 orthogonal codes are applied.
        •   Each orthogonal code spans the 12 subcarriers of the single PRB (Physical Resource Block), which corresponds to the 12 subcarriers within the allocated PRB.
        •   These orthogonal codes ensure that multiple UEs (User Equipments) or control signals can share the same PRB while maintaining orthogonality to prevent interference.

        Key Points:

        • Length of Orthogonal Code: The length of each orthogonal code matches the number of subcarriers in the PRB, which is 12. So, each orthogonal code spans the 12 subcarriers within the PRB.
        • Role of NPUCCH,1SF,m': If NPUCCH,1SF,m' = 4, it means there are 4 unique orthogonal codes generated and used for spreading. These codes are applied to the modulated signal y(n) to create the spread sequence z(m'). This ensures that up to 4 different users (or signals) can share the same PRB without interference.
        • Practical Meaning: In practical terms, NPUCCH,1SF,m' = 4 indicates a multiplexing capability of 4 orthogonal users or control signals on the same PRB, with the signal energy spread across the 12 subcarriers using orthogonal codes.

        Summary :

        • PUCCH Format 1 uses orthogonal spreading codes to spread its signal across the 12 subcarriers of a single PRB.
        •   If NPUCCH,1SF,m' = 4, it means 4 orthogonal codes are used, with each code spanning 12 subcarriers.

 

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

Orthogonal spreading codes in the table from 3GPP 38.211 are used for PUCCH format 1 to enable multiple users to share the same physical resource block (PRB) efficiently while minimizing interference.

Structure of the Table:

  • Columns (i = 0, 1, ..., 6): Represent phase-shift indices for the orthogonal sequences. These indices dictate the specific phase offset applied to a sequence.
  • Rows (NPUCCH,1SF,m' = 1, ..., 7): Correspond to different numbers of orthogonal codes.
    • If NPUCCH,1SF,m' = 1, only one orthogonal code is used.
    • If NPUCCH,1SF,m' = 4, four orthogonal codes are used.
  • Each cell in the table provides the specific values for the sequence code, derived from cyclic permutations of indices.

Purpose of Orthogonal Codes:

  • These codes are cyclically permuted to maintain orthogonality between different sequences. This ensures that even if multiple users occupy the same PRB, their transmissions do not interfere with one another.

    Example:

    • Consider NPUCCH,1SF,m' = 4.
    • This indicates that four orthogonal codes are being used, each of length 12 (the number of subcarriers in a single PRB).
    • The cyclic permutations of indices define four unique sequences. These sequences allow up to four users to transmit simultaneously on the same PRB without interference.

Cyclic Permutations:

  • Each sequence is derived by cyclically shifting the phase indices. This mechanism spreads the signal energy across time and frequency, providing robust separation.

By employing this mechanism, the network achieves efficient resource utilization while preserving the integrity of individual user signals.

    Example : This sequence, [0 6 5 4 3 2 1], can be interpreted as follows in the context of orthogonal spreading codes:

    • Orthogonal Sequence:
      • This sequence represents an orthogonal spreading code used in PUCCH (Physical Uplink Control Channel) Format 1.
      • The numbers [0, 6, 5, 4, 3, 2, 1] are indices that define a specific permutation or cyclic order.
    • Purpose:
      • Orthogonal sequences like this one are designed to maintain minimal interference among different users sharing the same physical resource block (PRB).
      • The sequence ensures orthogonality with other sequences in the same row.
    • Usage:
      • This sequence might be used in the PUCCH to modulate data across subcarriers within a single resource block.
      • It spreads the transmitted signal energy across multiple subcarriers while ensuring the signal remains orthogonal to other signals using different sequences.
    • Interpretation:
      • Mapping Across Subcarriers:
        • Each number in the sequence corresponds to a subcarrier index within the PRB.
        • For example:
          • 0 refers to the first subcarrier.
          • 6 refers to the seventh subcarrier.
          • And so on.
        • The sequence defines how signal components are distributed across these subcarriers.
      • Cyclic Nature:
        • The sequence [0 6 5 4 3 2 1] is likely derived from a cyclic permutation of a base sequence.
        • This cyclic pattern ensures unique code generation while preserving orthogonality.
    • Practical Example:
      • Suppose four users are transmitting on the same PRB:
        • User 1 uses [0 6 5 4 3 2 1].
        • User 2 might use [6 5 4 3 2 1 0].
        • User 3 might use [5 4 3 2 1 0 6].
      • Each user’s sequence ensures orthogonal separation, preventing interference.

    This sequence ensures efficient utilization of spectrum resources while minimizing signal interference in a multi-user uplink scenario.

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 i) : Define all the possible PUCCH Format resource a gNB would use in the IE resourceToAddModList

    Step ii) : 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)