|
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
- Summary PUCCH Formats
- Which format to use ?
- How to Determine PUCCH location ?
- How to define PUCCH baseband signal ?
- PUCCH Base Sequence Generation
- Group and sequence hopping
- Cyclic Shift
- PUCCH Format 0 Baseband Sequence
- PUCCH Format 1 Baseband Sequence
- PUCCH Format 2 Baseband Sequence
- PUCCH Format 3 Baseband Sequence
- PUCCH Format 4 Baseband Sequence
- Baseband Parameters for PUCCH Format
- Frequeny Hopping
- PUCCH Resource Element Mapping Examples
- Format 0
- Format 1 : Ex 01
- Format 1 : Ex 02
- Format 2 : Ex 01
- Format 3 : Ex 01
- Format 3 : Ex 02
- Format 3 : Ex 03
- Format 3 : Ex 04
- Format 4 : Ex 01
- Format 4 : Ex 02
- Format 4 : Ex 03
- Format 4 : Ex 04
- Modulation
- Channel Coding
- UCI / PUSCH Multiplexing
- What is PUCCH Resource and what constitues it ?
- How does UE figure out which resource to apply ?
- How the PUCCH Resource allocation is determined ?
- < Case 1 > Using the predefined table : Before PUCCH-Config in RRC
- < Case 2 > Using the table defined in RRC message : After PUCCH-Config in RRC
- Examples
- RRC Parameters
- Amarisoft Tech-Academy Tutorial
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 |
|
|
Format 1 |
|
4~14 |
<= 2 |
|
|
Format 2 |
|
1~2 |
> 2 |
|
|
Format 3 |
|
4~14 |
> 2 |
|
|
Format 4 |
|
4~14 |
> 2 |
|
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,
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.
- number of PRBs : Applies to only PUCCH format 2 and 3 (See PUCCH-format2, PUCCH-format3 in RRC) .
- starting PRB : Applies to all PUCCH Format (See PUCCH-Resource in RRC)
- starting symbol : Applies to all PUCCH format, but range of values varies depending the format( See PUCCH-format0, PUCCH-format1, PUCCH-format2, PUCCH-format3, PUCCH-format4)
- number of symbols : Applies to all PUCCH format, but range of values varies depending the format( See PUCCH-format0, PUCCH-format1, PUCCH-format2, PUCCH-format3, PUCCH-format4)

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.
PUCCH formats 0, 1, 3, and 4 use sequences r(α, δ)u,v(n) given by clause 38.211-5.2.2 with δ = 0, where the sequence group u and the sequence number v depend on the sequence hopping in clause 38.211-6.3.2.2.1, and the cyclic shift α depends on the cyclic shift hopping in clause 6.3.2.2.2.

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:
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.
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
- 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).
- 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.
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:
The result is taken modulo 30 to ensure the parameter fits within the range for group hopping.
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.
- 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
- 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 |
- m0 = 0 (default setting).
- 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 |
- 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).
Orthogonal Sequence Index (n):
- 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).
Cyclic Shift Index (m0):
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.

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

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))]
- BPSK (for Mbit = 1):
- r(α,δ)u,v(n): Base sequence determined by cell-specific parameters.
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).
< 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:
-
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.
-
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.
-
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.
-
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.
-
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.
Subcarrier Allocation for Spreading:
Dependence on Hopping Mode:
PUCCH Length and Symbol Structure:
Orthogonal Spreading and Multiplexing:
Diversity and Robustness:
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:
0refers to the first subcarrier.6refers 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.
- The sequence
- Mapping Across Subcarriers:
-
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].
- User 1 uses
- Each user’s sequence ensures orthogonal separation, preventing interference.
- Suppose four users are transmitting on the same PRB:
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 2, Format 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 |
|
|
nrofPRBs |
|
|
timeDomainOCC |
|
|
occ-Length |
|
|
occ-Index |
|
|
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 :
- 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).
For UCI transmission including HARQ-ACK bits, a UE may be configured with up to 4 PUCCH resource sets based on the UCI size.
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)
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.

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.
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
}
}
........
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
...
}
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}
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)
- 강의8 5G NR UL Physical Channel (SRS, PUCCH, PUSCH) - Sean Mobile




