5G/NR  -  Power Control

Power Control

In a big picture, the power control of 3G(WCDMA/HSPA) , 4G(LTE) and 5G(NR) are almost same. If you have a good understandings on power control concept and mechnisnm of 3G or 4G, you will not have much difficulties in understanding 5G power control. If you are not familiar with the power control concept and mechanism, I would suggest you to read LTE Power control page since I write a lot of basic concept in the page and then read this page. (It is not required, but it will be good to read 3G power control page as well).

As in 3G and 4G, in 5G as well Power Control happens in two different mode. One is Open Loop Control and the other is Closed Loop Control.

Simply put, Open Loop Control is a mechnism to determin PRACH transmission power and Closed Loop Control is a mechanism of PUCCH or PUSCH channel power while a UE is in communication (connection) stage.

In reality, it would be almost impossible for you to manually calculate the exact power as described in the specification unless you are the baseband and RF firmware engineer who need to implement the power control algorithm. There are so many parameters involved in this process.  What we can do is just to get some big picture of the algorithm and understand what kind of factors are involved.

# Main Factors for Power Control/Big Picture

Power Control details are more complicated than you may think. Math formula looks so complicated and 3GPP description is confusing. So if you jump into the 3GPP spec and math expression, you may easily get lost just by reading a few lines of the specification. You might have similar experience in studying LTE power control specification, but 5G got even worse :) meaning more complicated. But regardless of 4G or 5G, general idea and overall structure of power control formual are similar. Ideally I think I can summarize the equation for Tx Power (UE Tx Power) of any uplink channel can be summarized as below.

Tx Power = Target Rx Power set by gNB + PathLoss factor + MCS factor + RB factor + Power Control Command

A short description of each of the terms in this math expression are :

• Tx Power : The channel power of a Uplink physical channel to be transmitted. E.g, PRACH power, PUSCH power etc
• Target Base Rx Power set by gNB : This is a power that gNB require for the safe decoding for the received signal. E.g, preambleReceivedTargetPower for RACH, p0-norminalWithoutGrant for PUSCH. If this power is very high, in general the UE transmission power would be high and it may be easier for gNB to decode the received channel if there is only one UE. But since this value is applicable to many UEs connected to the gNB, every UE would transmit high power when the multiple UEs are connected. As a result, the interference among the transmitted signal from many different UEs get serious and eventually gNB would suffer more from decoding failure. Therefore, you should be careful about specifying this value.
• PathLoss factor : As the name implies, this is the factor coming from the pathloss between UE and gNB. Usually this value is obtained by taking the difference between the reference signal power(broadcast by SIB) and the measured power for the reference signal by UE side.
• MCS factor : As the name implies, this is the factor determined by the MCS value for the channel to be transmitted
• RB factor : this is the factor determined by the number of RB being used for the channel to be transmitted
• Power Control Command : this is the factor to be determined by specific value from gNB notified to UE

Next step is to figure out which of these factors gets involved in estimating the Tx Power of a specific physical channel (it implies that not all of these factors are used for every type of physical channel).

For example,

For PRACH transmission power, the value of each of the factors would be

• Target Base Rx Power set by gNB : Applied, determined by RRC
• PathLoss factor : Applied, determined by RRC and UE measurement
• MCS factor : 0 meaning No applied
• RB factor : 0 meaning No applied
• Power Control Command : 0 meaning No applied

For PUSCH transmission power, the value of each of the factors would be

• Target Base Rx Power set by gNB : Applied, determined by RRC
• PathLoss factor : Applied, determined by RRC and UE measurement
• MCS factor : Applied, determined by DCI
• RB factor : Applied, determined by DCI
• Power Control Command : Applied, determined by DCI

# How PRACH Power is determined ?

Main part of PRACH power is defined in 38.213-7.4 as follows and you need to refer to several other specification for complete understanding of the equation.

Before jumping to the details of PRACH power calculation, let's just take a big picture of the equation as explained previous section. Overall structure of the equation can be highlighted as follows and you should be able to get the high level understanding as below. If you have difficulties with interpretation of this, check out the explanation in previous section again.

With one step deeper ino the equation, it simply says

i) Calculate P_PRACH,target,f,c + PL_b,f,c

ii) Compare the calculated power(P_PRACH,target,f,c + PL_b,f,c) with P_CMAX,f,c

iii) If the calculated power(P_PRACH,target,f,c + PL_b,f,c) is greater than P_CMAX,f,c, use P_CMAX,f,c. If the calculated poewr is lower than P_CMAX,f,c, then use the calculated power.

Sound simple ? Yes, it only SOUND Simple.. not really simple because the calculation of P_PRACH,target,f,c is pretty complicated as explained in this page and it involves many lower layer parameters which is not readily open to you.

• P-EMAX,c : determined by p-Max in RRC message
• P_PowerClass : specified in the following table.

## Power Class and Max Power

Power Class (P_PowerClass) and the Mas power allowed for the power class varies depending on Freuqency range (FR1 or FR2) and each specific band. Check out this note for the details.

## Determination of referenceSignalPower

The description in this section is largely based on 38.213 - 7.4. As you might have guessed, ss-PBCH-BlockPower is fundamental reference signal for every cases. Only in some special cases CSI RS Power (PowerControlOffsetSS) is used.

Case 1 : In one of the following condition

• PRACH  is not in response to a detection of a PDCCH order by the UE
• PRACH  is in response to a detection of a PDCCH order by the UE that triggers a contention based random access procedure
• PRACH  is associated with a link recovery procedure where a corresponding index q_new is associated with a SS/PBCH block
• Then,

referenceSignalPower is determined by ss-PBCH-BlockPower

Case 2  : In one of the following condition

• PRACH is in response to a detection of a PDCCH order by the UE that triggers a noncontention based RACH procedure and depends the DL RS that the DM-RS of the PDCCH order is quasicollocated.
•

Then,

referenceSignalPower is determined by ss-PBCH-BlockPower

Case 3  : In one of the following condition

• PRACH is in response to a detection of a PDCCH order by the UE that triggers a noncontention based RACH procedure and the UE is configured resources for a periodic CSI-RS reception or the PRACH transmission is associated with a link recovery procedure where a corresponding index q_new is associated with a periodic CSI-RS configuration.
•

Then,

referenceSignalPower is determined by ss-PBCH-BlockPower and powerControlOffsetSS

, where powerControlOffsetSS (in RRC) is an offset of CSI-RS transmission power relative to SS/PBCH block transmission power.

if powerControlOffsetSS is not provided by RRC, UE assumes that this value is 0 dB

PREAMBLE_RECEIVED_TARGET_POWER is determined by following equation (38.321 - 5.1.3)

+ DELTA_PREAMBLE

+ (PREAMBLE_POWER_RAMPING_COUNTER 1) PREAMBLE_POWER_RAMPING_STEP

• preambleReceivedTargetPower is a RRC parameter in RACH-ConfigGeneric,
• PREAMBLE_POWER_RAMPING_STEP is specified by the RRC Parameter powerRampingStep
• DELTA_PREAMBLE is determined by pre-defined tables as shown below.
• PREAMBLE_POWER_RAMPING_COUNTER starts from 1 and gets incremented by 1 everytime PRACH is retransmited until it reaches the RRC parameter preambleTransMax.

< 38.321 V15.3.0 - Table 7.3-1: DELTA_PREAMBLE values for long preamble formats. >

< 38.321 V15.3.0 - Table 7.3-2: DELTA_PREAMBLE values for short preamble formats. >

## Example of RRC Configuration :

This is an example of SIB1 configuration with IEs highlighted in red which are related te PRACH transmission power determination.

• preambleReceivedTargetPower (-110): This parameter is crucial in the context of 5G power control during the initial access process. It specifies the target power level for the PRACH. The UE adjusts its transmit power so that the preamble is received by the base station (gNodeB) above this target power level. This adjustment is essential for the UE to successfully initiate communication while managing power efficiently and minimizing interference.
• powerRampingStep (dB4): This parameter is directly involved in the power control mechanism during the random access procedure. If the initial preamble transmission is not successful (i.e., the UE does not receive a response from the gNodeB), the UE will increase its transmit power for the next preamble attempt. The 'dB4' value indicates that the power ramping step size is 4 dB. Each subsequent preamble transmission will be increased by this step size until a response is received or a maximum number of attempts is reached.
• ss-PBCH-BlockPower (-36): This is the power at which gNB transmit the reference signal (SSB block power). UE estimate PL (Path Loss) based on this power and the reference power that is measured by UE

{

message c1:systemInformationBlockType1: {

cellSelectionInfo {

q-RxLevMin -70,

q-QualMin -20

},

cellAccessRelatedInfo {

...

},

connEstFailureControl {

...

},

servingCellConfigCommon {

frequencyInfoDL {

...

},

genericParameters {

...

},

pdcch-ConfigCommon setup: {

...

},

pdsch-ConfigCommon setup: {

...

}

},

bcch-Config {

...

},

pcch-Config {

...

}

},

frequencyInfoUL {

...

},

genericParameters {

...

},

rach-ConfigCommon setup: {

rach-ConfigGeneric {

prach-ConfigurationIndex 160,

msg1-FDM one,

msg1-FrequencyStart 3,

zeroCorrelationZoneConfig 15,

preambleTransMax n7,

powerRampingStep dB4,

ra-ResponseWindow sl20

},

ra-ContentionResolutionTimer sf64,

prach-RootSequenceIndex l139: 1,

msg1-SubcarrierSpacing kHz30,

restrictedSetConfig unrestrictedSet

},

pusch-ConfigCommon setup: {

pusch-TimeDomainAllocationList {

{

k2 7,

mappingType typeA,

startSymbolAndLength 27

},

{

k2 4,

mappingType typeA,

startSymbolAndLength 27

},

{

k2 5,

mappingType typeA,

startSymbolAndLength 27

}

},

p0-NominalWithGrant -84

},

pucch-ConfigCommon setup: {

pucch-ResourceCommon 11,

pucch-GroupHopping neither,

p0-nominal -90

}

},

timeAlignmentTimerCommon infinity

},

ssb-PositionsInBurst {

...

},

ssb-PeriodicityServingCell ms20,

tdd-UL-DL-ConfigurationCommon {

...

},

ss-PBCH-BlockPower -36

},

ue-TimersAndConstants {

...

}

}

}

# How msg3 Power is determined ?

msg3 Power is determined by following equation. As shown here, msg3 Power is based on msg1 Power(PRACH Power) with some offset values on top of it. It implies that msg3 power is also controlled by Open Loop Power Control mechanism like msg1(PRACH). This is based on 38.213-7.1.1

# How PUSCH Power is determined ?

Before jumping to the details of PRACH power calculation, let's just take a big picture of the equation as explained previous section. Overall structure of the equation can be highlighted as follows and you should be able to get the high level understanding as below. If you have difficulties with interpretation of this, check out the explanation in previous section again.

Detailed description on PUSCH power calculation is depicted as below. Some highlights are :

• Calculated TX power increases as Po_PUSCH power increases
• Calculated TX power increases as the scheduled number of RB increases
• Calculated TX power increases as the estimated pathloss increases and the impact of pathloss is affected by the scaling factor alpha
• Calculated TX power increases or decreases according to TPC command

< 38.213 - Table 7.1.1-1: Mapping of TPC Command Field in a DCI format scheduling a PUSCH transmission, or in DCI format 2_2 with CRC scrambled by TPC-PUSCH-RNTI, or in DCI format 2_3, to absolute and accumulated δ_PUSCH,b,f,c values or δ_SRS,b,f,c values >

< 38.213 - Table 7.2.1-1: Mapping of TPC Command Field in a DCI format to accumulated δ_PUCCH,b,f,c values >

## Example of RRC Configuration :

This is an example of SIB1 and RRC Setup configuration with IEs highlighted in red which are related te PUSCH transmission power determination.

• p0-NominalWithGrant (-84): This parameter is a key component in the formula used for calculating the uplink transmission power on the PUSCH. It serves as a baseline or reference power level from which adjustments are made based on various factors like path loss, UE power capability, and additional power control commands from the network.
• ss-PBCH-BlockPower (-36): This is the power at which gNB transmit the reference signal (SSB block power). UE estimate PL (Path Loss) based on this power and the reference power that is measured by UE
• p0-AlphaSets: This section likely contains a set of alpha values and corresponding p0 values.
• The alpha value is used to scale the effect of path loss in the power control formula, influencing how much the UE's transmission power should increase or decrease with varying path loss.
• Different sets of alpha and p0 values allow for different power control strategies under various network conditions or for different types of UEs.
• pathlossReferenceRSToAddModList: This refers to a list of reference signal measurements used to calculate the path loss.
• Each entry in the list (like "pusch-PathlossReferenceRS-Id 0") corresponds to a specific reference signal used for measuring path loss. The network can use these measurements to more accurately determine the current radio conditions experienced by the UE.
• sri-PUSCH-MappingToAddModList: A list of SRI-PUSCH-PowerControl elements among which one is selected by the SRI field in DCI

{

message c1:systemInformationBlockType1: {

cellSelectionInfo {

q-RxLevMin -70,

q-QualMin -20

},

cellAccessRelatedInfo {

...

},

connEstFailureControl {

...

},

servingCellConfigCommon {

frequencyInfoDL {

...

},

genericParameters {

...

},

pdcch-ConfigCommon setup: {

...

},

pdsch-ConfigCommon setup: {

...

}

},

bcch-Config {

...

},

pcch-Config {

...

}

},

frequencyInfoUL {

...

},

genericParameters {

...

},

rach-ConfigCommon setup: {

rach-ConfigGeneric {

prach-ConfigurationIndex 160,

msg1-FDM one,

msg1-FrequencyStart 3,

zeroCorrelationZoneConfig 15,

preambleTransMax n7,

powerRampingStep dB4,

ra-ResponseWindow sl20

},

ra-ContentionResolutionTimer sf64,

prach-RootSequenceIndex l139: 1,

msg1-SubcarrierSpacing kHz30,

restrictedSetConfig unrestrictedSet

},

pusch-ConfigCommon setup: {

pusch-TimeDomainAllocationList {

{

k2 7,

mappingType typeA,

startSymbolAndLength 27

},

{

k2 4,

mappingType typeA,

startSymbolAndLength 27

},

{

k2 5,

mappingType typeA,

startSymbolAndLength 27

}

},

p0-NominalWithGrant -84

},

pucch-ConfigCommon setup: {

pucch-ResourceCommon 11,

pucch-GroupHopping neither,

p0-nominal -90

}

},

timeAlignmentTimerCommon infinity

},

ssb-PositionsInBurst {

...

},

ssb-PeriodicityServingCell ms20,

tdd-UL-DL-ConfigurationCommon {

...

},

ss-PBCH-BlockPower -36

},

ue-TimersAndConstants {

...

}

}

}

{

message c1: rrcSetup: {

rrc-TransactionIdentifier 0,

criticalExtensionsrrcSetup: {

..

},

masterCellGroup {

...

},

mac-CellGroupConfig {

...

},

physicalCellGroupConfig {

..

},

spCellConfig {

spCellConfigDedicated {

pdcch-Config setup: {

...

},

pdsch-Config setup: {

...

}

},

...

},

pusch-Config setup: {

...

pusch-PowerControl {

msg3-Alpha alpha1,

p0-NominalWithoutGrant -84,

p0-AlphaSets {

{

p0-PUSCH-AlphaSetId 0,

p0 0,

alpha alpha1

}

},

{

pusch-PathlossReferenceRS-Id 0,

referenceSignal ssb-Index: 0

}

},

{

sri-PUSCH-PowerControlId 0,

sri-PUSCH-PathlossReferenceRS-Id 0,

sri-P0-PUSCH-AlphaSetId 0,

sri-PUSCH-ClosedLoopIndex i0

}

}

},

...

uci-OnPUSCH setup: {

betaOffsets semiStatic: {

betaOffsetACK-Index1 9,

betaOffsetACK-Index2 9,

betaOffsetACK-Index3 9,

betaOffsetCSI-Part1-Index1 7,

betaOffsetCSI-Part1-Index2 7,

betaOffsetCSI-Part2-Index1 7,

betaOffsetCSI-Part2-Index2 7

},

scaling f1

}

},

...

},

pusch-ServingCellConfig setup: {

}

},

pdcch-ServingCellConfig setup: {

},

pdsch-ServingCellConfig setup: {

nrofHARQ-ProcessesForPDSCH n16

},

...

}

}

},

tag-Id 0

}

}

}

}

}

}

# RRC Parameters involved in Power Control

38.331 v15.3.0

FrequencyInfoUL-SIB ::=           SEQUENCE {

frequencyBandList               MultiFrequencyBandListNR-SIB     OPTIONAL,   -- Cond FDD-OrSUL

absoluteFrequencyPointA         ARFCN-ValueNR             OPTIONAL,   -- Cond FDD-OrSUL

scs-SpecificCarrierList         SEQUENCE (SIZE (1..maxSCSs)) OF SCS-SpecificCarrier,

p-Max                           P-Max         OPTIONAL,   -- Need S

frequencyShift7p5khz            ENUMERATED {true}  OPTIONAL,   -- Cond FDD-OrSUL-Optional

...

}

ServingCellConfigCommonSIB ::=      SEQUENCE {

n-TimingAdvanceOffset               ENUMERATED { n0, n25560, n39936 }   OPTIONAL, -- Need S

ssb-PositionsInBurst                    SEQUENCE {

inOneGroup                          BIT STRING (SIZE (8)),

groupPresence                       BIT STRING (SIZE (8))                                       OPTIONAL -- Cond Above6GHzOnly

},

ssb-PeriodicityServingCell          ENUMERATED {ms5, ms10, ms20, ms40, ms80, ms160},

tdd-UL-DL-ConfigurationCommon       TDD-UL-DL-ConfigCommon    OPTIONAL, -- Cond TDD

ss-PBCH-BlockPower                  INTEGER (-60..50),

...

}

RACH-ConfigGeneric ::=          SEQUENCE {

prach-ConfigurationIndex         INTEGER (0..255),

msg1-FDM                         ENUMERATED {one, two, four, eight},

msg1-FrequencyStart              INTEGER (0..maxNrofPhysicalResourceBlocks-1),

zeroCorrelationZoneConfig        INTEGER(0..15),

preambleTransMax                 ENUMERATED {n3,n4,n5,n6,n7,n8,n10,n20,n50,n100,n200},

powerRampingStep                 ENUMERATED {dB0, dB2, dB4, dB6},

ra-ResponseWindow                ENUMERATED {sl1, sl2, sl4, sl8, sl10, sl20, sl40, sl80}

}

NZP-CSI-RS-Resource ::= SEQUENCE {

nzp-CSI-RS-ResourceId                 NZP-CSI-RS-ResourceId,

resourceMapping                       CSI-RS-ResourceMapping,

powerControlOffset                   INTEGER (-8..15),

powerControlOffsetSS                  ENUMERATED{db-3, db0, db3, db6},

scramblingID ScramblingId,

periodicityAndOffset                  CSI-ResourcePeriodicityAndOffset

qcl-InfoPeriodicCSI-RS                TCI-StateId OPTIONAL, -- Cond Periodic

...

}

PUSCH-ConfigCommon ::= SEQUENCE {

groupHoppingEnabledTransformPrecoding       ENUMERATED {enabled} OPTIONAL,

pusch-TimeDomainAllocationList              PUSCH-TimeDomainResourceAllocationList

msg3-DeltaPreamble                          INTEGER (-1..6)

p0-NominalWithGrant                         INTEGER (-202..24)

...

}

PUSCH-Config ::= SEQUENCE {

dataScramblingIdentityPUSCH                 INTEGER (0..1023) OPTIONAL,

txConfig                                    ENUMERATED {codebook, nonCodebook}

pusch-PowerControl                          PUSCH-PowerControl

frequencyHopping                            ENUMERATED {intraSlot, interSlot}

frequencyHoppingOffsetLists                 SEQUENCE (SIZE (1..4)) OF

INTEGER (1.. maxNrofPhysicalResourceBlocks-1)

resourceAllocation                          ENUMERATED { resourceAllocationType0,

resourceAllocationType1,

dynamicSwitch},

pusch-TimeDomainAllocationList              SetupRelease {

PUSCH-TimeDomainResourceAllocationList

}

pusch-AggregationFactor                     ENUMERATED { n2, n4, n8 }

mcs-Table                                   ENUMERATED {qam256, qam64LowSE}

mcs-TableTransformPrecoder                  ENUMERATED {qam256, qam64LowSE}

transformPrecoder                         ENUMERATED {enabled, disabled}

codebookSubset                              ENUMERATED {fullyAndPartialAndNonCoherent,

partialAndNonCoherent,

nonCoherent}

maxRank                                     INTEGER (1..4)

rbg-Size                                    ENUMERATED { config2}

uci-OnPUSCH                                 SetupRelease { UCI-OnPUSCH }

tp-pi2BPSK                                  ENUMERATED {enabled}

...

}

PUSCH-PowerControl ::= SEQUENCE {

tpc-Accumulation                   ENUMERATED { disabled } OPTIONAL, -- Need S

msg3-Alpha                         Alpha   OPTIONAL, -- Need S

p0-NominalWithoutGrant             INTEGER (-202..24) OPTIONAL, -- Need M

p0-AlphaSets                       SEQUENCE (SIZE (1..maxNrofP0-PUSCH-AlphaSets))

OF P0-PUSCH-AlphaSet OPTIONAL, -- Need M

OF PUSCH-PathlossReferenceRS    OPTIONAL,

OF    PUSCH-PathlossReferenceRS-Id OPTIONAL,

twoPUSCH-PC-AdjustmentStates       ENUMERATED {twoStates}    OPTIONAL, -- Need S

deltaMCS                           ENUMERATED {enabled}       OPTIONAL, -- Need S

OF SRI-PUSCH-PowerControl OPTIONAL, -- Need N

sri-PUSCH-MappingToReleaseList     SEQUENCE (SIZE (1..maxNrofSRI-PUSCH-Mappings))

OF SRI-PUSCH-PowerControlId OPTIONAL -- Need N

}

P0-PUSCH-AlphaSet ::= SEQUENCE {

p0-PUSCH-AlphaSetId                P0-PUSCH-AlphaSetId,

p0                                 INTEGER (-16..15) OPTIONAL, -- Need S

alpha                              Alpha OPTIONAL -- Need S

}

Alpha ::= ENUMERATED {alpha0, alpha04, alpha05, alpha06, alpha07, alpha08, alpha09, alpha1}

P0-PUSCH-AlphaSetId ::= INTEGER (0..maxNrofP0-PUSCH-AlphaSets-1)

PUSCH-PathlossReferenceRS ::= SEQUENCE {

pusch-PathlossReferenceRS-Id       PUSCH-PathlossReferenceRS-Id,

referenceSignal CHOICE {

ssb-Index                       SSB-Index,

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

}

}

SRI-PUSCH-PowerControl ::= SEQUENCE {

sri-PUSCH-PowerControlId           SRI-PUSCH-PowerControlId,

sri-PUSCH-PathlossReferenceRS-Id   PUSCH-PathlossReferenceRS-Id,

sri-P0-PUSCH-AlphaSetId            P0-PUSCH-AlphaSetId,

sri-PUSCH-ClosedLoopIndex          ENUMERATED { i0, i1 }

}

SRI-PUSCH-PowerControlId ::= INTEGER (0..maxNrofSRI-PUSCH-Mappings-1)

BetaOffsets ::= SEQUENCE {

betaOffsetACK-Index1           INTEGER(0..31) OPTIONAL, -- Need S

betaOffsetACK-Index2           INTEGER(0..31) OPTIONAL, -- Need S

betaOffsetACK-Index3           INTEGER(0..31) OPTIONAL, -- Need S

betaOffsetCSI-Part1-Index1     INTEGER(0..31) OPTIONAL, -- Need S

betaOffsetCSI-Part1-Index2     INTEGER(0..31) OPTIONAL, -- Need S

betaOffsetCSI-Part2-Index1     INTEGER(0..31) OPTIONAL, -- Need S

betaOffsetCSI-Part2-Index2     INTEGER(0..31) OPTIONAL -- Need S

}

PUCCH-Config ::=        SEQUENCE {

PUCCH-ResourceSet             OPTIONAL,   -- Need N

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

PUCCH-ResourceSetId           OPTIONAL,   -- Need N

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

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

PUCCH-SpatialRelationInfo   OPTIONAL,   -- Need N

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

PUCCH-SpatialRelationInfoId OPTIONAL,   -- Need N

pucch-PowerControl                 PUCCH-PowerControl   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

OF PUCCH-PathlossReferenceRS OPTIONAL, -- Need M

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

...

}

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

}

}