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

Determination of PREAMBLE_RECEIVED_TARGET_POWER

PREAMBLE_RECEIVED_TARGET_POWER is determined by following equation (38.321 - 5.1.3)

    PREAMBLE_RECEIVED_TARGET_POWER

    = preambleReceivedTargetPower (in RRC)

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

          downlinkConfigCommon {

            frequencyInfoDL {

              ...

            },

            initialDownlinkBWP {

              genericParameters {

                ...

              },

              pdcch-ConfigCommon setup: {

                ...

              },

              pdsch-ConfigCommon setup: {

                ...

              }

            },

            bcch-Config {

              ...

            },

            pcch-Config {

              ...

            }

          },

          uplinkConfigCommon {

            frequencyInfoUL {

              ...

            },

            initialUplinkBWP {

              genericParameters {

                ...

              },

              rach-ConfigCommon setup: {

                rach-ConfigGeneric {

                  prach-ConfigurationIndex 160,

                  msg1-FDM one,

                  msg1-FrequencyStart 3,

                  zeroCorrelationZoneConfig 15,

                  preambleReceivedTargetPower -110,

                  preambleTransMax n7,

                  powerRampingStep dB4,

                  ra-ResponseWindow sl20

                },

                ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,

                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 >

PO_PUSCH,b,f,c(j)

The formula PO_PUSCH,b,f,c(j) represents the transmit power for a PUSCH  transmission and is determined by the sum of two components:

PO_PUSCH,b,f,c(j) = PO_NOMINAL,PUSCH,f,c(j) + PO_UE_PUSCH,b,f,c(j)

    , where

    • PO_NOMINAL,PUSCH,f,c(j):
      • A nominal power offset value.
      • Defined for carrier f of serving cell c.
      • Can depend on higher-layer parameters, such as p0-NominalWithGrant or p0-NominalWithoutGrant, depending on whether it is a grant-free or grant-based configuration.
    • PO_UE_PUSCH,b,f,c(j):
      • UE-specific power offset value for PUSCH transmission.
      • Determined by higher-layer configurations, including parameters like p0-PUSCH-Alpha, p0-PUSCH-Alpha2, or related configurations in RRC signaling.

    This value is further adjusted based on the transmission scenario, random access procedures, or specific grant types, as defined in 38.213 and 38.214.

     

p0-NominalWithGrant

p0-NominalWithGrant is a parameter used in the uplink power control mechanism in 5G to determine the baseline transmit power for PUSCH  transmissions when the UE is scheduled via a grant (DCI format).

It essentially serves as a starting point or baseline power level that the UE uses to compute its PUSCH transmit power, considering additional factors such as pathloss, bandwidth,MCS, and dynamic power control commands.

  • p0−NominalWithGrant is the foundation of the transmit power calculation.
  • The gNB configures this value to ensure the UE's uplink signal is received at the target power level.

p0-PUSCH-Alpha,p0-PUSCH-Alpha2

p0−PUSCH−Alpha and p0−PUSCH−Alpha2 are parameters used in the calculation of the uplink power control for Physical PUSCH transmissions. They allow the gNB to fine-tune how much the UE compensates for the pathloss when transmitting on the PUSCH.

  • Specifies a nominal transmit power baseline and a pathloss compensation factor (Alpha) for the PUSCH transmission.
  • It is used when the UE is scheduled by the gNB depending on the number of SRS resource set.

Parameter

Usage

Pathloss Reference

Compensation Factor (α)

p0-PUSCH-Alpha

Single SRS resource set

First SRS resource set

Configured by p0-PUSCH-Alpha

p0-PUSCH-Alpha2

Second SRS resource set (if provided)

Second SRS resource set

Configured by p0-PUSCH-Alpha2

10log10(2μ · MRB,b,f,cPUSCH(i))

This term adjusts the transmit power of the UE based on:

  • Bandwidth size (RBs): Larger bandwidth (more RBs) requires more transmit power.
  • SCS configuration: Higher SCS values correspond to larger resource block sizes(resource block size in terms of physical frequency bandwidth), requiring compensation in power calculation.

Followings are the breakdown of this term

  • 2μ: μ is the subcarrier spacing (SCS) configuration, and 2μ accounts for the number of resource blocks (RBs) scaled based on the SCS value. For example:
    • μ = 0: SCS = 15 kHz → 20 = 1
    • μ = 1: SCS = 30 kHz → 21 = 2
    • μ = 2: SCS = 60 kHz → 22 = 4
    • μ = 3: SCS = 120 kHz → 23 = 8
  • MPUSCHRB,b,f,c(i): Represents the number of resource blocks (RBs) allocated for the PUSCH transmission in uplink bandwidth part b of carrier f, serving cell c, in the ith transmission occasion. This is determined by the scheduling grant from the gNB.
  • 10 log10: Converts the product of 2μ · MPUSCHRB,b,f,c(i) into a logarithmic scale (dB). The result reflects the contribution of the bandwidth and resource allocation to the power calculation in decibels.

αb,f,c(j) PLb,f,c(qd)

This term combines the pathloss (PL) and compensation factor (a) to calculate the portion of pathloss included in the power control and it adjusts UE transmission power to ensure gNB receives the signal at the desired power level.

  • αb,f,c(j):
    • Represents the pathloss compensation factor.
    • A scaling parameter determining how much of the pathloss (PL) is compensated during power control.
    • Value ranges between 0 and 1:
      • α = 0: No pathloss compensation.
      • α = 1: Full pathloss compensation.
    • Varies based on the scheduling grant or power control command from the gNB.
  • PLb,f,c(qd):
    • Represents the pathloss experienced in the communication link.
    • Pathloss is the signal power attenuation as it propagates from transmitter to receiver, measured in dB.
    • Components:
      • b: Bandwidth part.
      • f: Frequency.
      • c: Serving cell.
      • qd: Quantized delay or time instance for pathloss calculation.

ΔTF,b,f,c(i)

This term represents the transport format power offset in the context of uplink power control. This offset is applied to account for variations in power requirements due to different transport formats.

The factors affecting the transport format are

  • Modulation and Coding Scheme (MCS) table.
  • Number of resource blocks.
  • Power control parameters.

fb,f,c(i,l)

This term represents the power adjustment by TPC (Transmit Power Control) command.

  • PUSCH Power Control Adjustment State (fb,f,c(i,l)):
    • It is derived from:
      • fb,f,c(i - i0, l): The adjustment state from the last transmission.
      • m=0|DL|-1 δPUSCH,b,f,c(m,l): The cumulative power control commands (δPUSCH) received via TPC (Transmit Power Control) for the current scheduling interval.

Adjustment by TPC:

    • δPUSCH,b,f,c(m,l) indicates the transmit power control commands provided by the gNB to refine the UE's uplink transmission power.
  •  

    Special Consideration for Msg3 PUSCH

    msg3 is the first PUSCH after PRACH which does not have any previous PUSCH. So there is a little bit of aditional considerations in terms of estimating PUSCH transmission power.

    The Msg3 PUSCH (the first PUSCH after PRACH, which does not have any previous PUSCH) has special considerations for PO_PUSCH,b,f,c(j):

    Type-1 Random Access Procedure

    • j = 0
    • PO_UE_PUSCH,b,f,c(0) = 0
    • PO_NOMINAL,PUSCH,f,c(0) = PO_PRE + ΔPREAMBLE,Msg3, where:
      • PO_PRE is provided by preambleReceivedTargetPower (as per TS 38.321).
      • ΔPREAMBLE,Msg3 is provided by msg3-DeltaPreamble or deltaPreamble.
      • If msg3-DeltaPreamble and deltaPreamble are not provided, ΔPREAMBLE,Msg3 = 0 dB.

    Type-2 Random Access Procedure

    • j = 0
    • PO_UE_PUSCH,b,f,c(0) = 0
    • PO_NOMINAL,PUSCH,f,c(0) = PO_PRE + ΔMsgA_PUSCH, where:
      • PO_PRE is provided by msgA-preambleReceivedTargetPower, or by preambleReceivedTargetPower if msgA-preambleReceivedTargetPower is not provided.
      • ΔMsgA_PUSCH is provided by msgA-DeltaPreamble or deltaPreamble.
      • If msgA-DeltaPreamble and deltaPreamble are not provided, ΔMsgA_PUSCH = ΔPREAMBLE,Msg3.

    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 {

            downlinkConfigCommon {

              frequencyInfoDL {

                ...

              },

              initialDownlinkBWP {

                genericParameters {

                  ...

                },

                pdcch-ConfigCommon setup: {

                  ...

                },

                pdsch-ConfigCommon setup: {

                  ...

                }

              },

              bcch-Config {

                ...

              },

              pcch-Config {

                ...

              }

            },

            uplinkConfigCommon {

              frequencyInfoUL {

                ...

              },

              initialUplinkBWP {

                genericParameters {

                  ...

                },

                rach-ConfigCommon setup: {

                  rach-ConfigGeneric {

                    prach-ConfigurationIndex 160,

                    msg1-FDM one,

                    msg1-FrequencyStart 3,

                    zeroCorrelationZoneConfig 15,

                    preambleReceivedTargetPower -110,

                    preambleTransMax n7,

                    powerRampingStep dB4,

                    ra-ResponseWindow sl20

                  },

                  ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,

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

            radioBearerConfig {

              ..

            },

            masterCellGroup {

              ...

              },

              mac-CellGroupConfig {

                ...

              },

              physicalCellGroupConfig {

                ..

              },

              spCellConfig {

                spCellConfigDedicated {

                  initialDownlinkBWP {

                    pdcch-Config setup: {

                      ...

                    },

                    pdsch-Config setup: {

                      ...

                    }

                  },

                  firstActiveDownlinkBWP-Id 0,

                  uplinkConfig {

                       ...

                      },

                      pusch-Config setup: {

                        ...

                        pusch-PowerControl {

                          msg3-Alpha alpha1,

                          p0-NominalWithoutGrant -84,

                          p0-AlphaSets {

                            {

                              p0-PUSCH-AlphaSetId 0,

                              p0 0,

                              alpha alpha1

                            }

                          },

                          pathlossReferenceRSToAddModList {

                            {

                              pusch-PathlossReferenceRS-Id 0,

                              referenceSignal ssb-Index: 0

                            }

                          },

                          sri-PUSCH-MappingToAddModList {

                            {

                              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

                        }

                      },

                      ...

                    },

                    firstActiveUplinkBWP-Id 0,

                    pusch-ServingCellConfig setup: {

                    }

                  },

                  pdcch-ServingCellConfig setup: {

                  },

                  pdsch-ServingCellConfig setup: {

                    nrofHARQ-ProcessesForPDSCH n16

                  },

                  ...

                      }

                    }

                  },

                  tag-Id 0

                }

              }

            }

          }

        }

      }

    How PUCCH Power is determined ?

    Before jumping into every details of PUCCH power calculation, let's first look at the overall structure of the equation. The structure is very similar to PUSCH power control, but there are a few important differences. PUCCH does not have the pathloss compensation factor alpha in the equation and it has PUCCH-format dependent offsets and UCI-payload dependent transport format offset.

    PUCCH transmission power is determined by following equation based on 38.213 clause 7.2.1.

      PPUCCH,b,f,c(i,qu,qd,l) = min { PCMAX,f,c(i), PO_PUCCH,b,f,c(qu) + 10log10(2μ · MRB,b,f,cPUCCH(i)) + PLb,f,c(qd) + ΔF_PUCCH(F) + ΔTF,b,f,c(i) + gb,f,c(i,l) }

    Some highlights are :

    • Calculated TX power is capped by UE maximum configured output power PCMAX,f,c(i).
    • Calculated TX power increases as PO_PUCCH increases.
    • Calculated TX power increases as the number of RBs assigned to PUCCH increases.
    • Calculated TX power increases as the estimated downlink pathloss increases.
    • Different PUCCH formats can have different power offsets by deltaF-PUCCH-f0 through deltaF-PUCCH-f4.
    • Calculated TX power can increase according to the amount of UCI bits carried by the PUCCH.
    • Calculated TX power increases or decreases according to TPC command.

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

    PO_PUCCH,b,f,c(qu)

    PO_PUCCH,b,f,c(qu) is the target base receive power for PUCCH at gNB side. It is composed of a cell/common nominal part and an optional UE-specific part.

    PO_PUCCH,b,f,c(qu) = PO_NOMINAL,PUCCH + PO_UE_PUCCH(qu)

    • PO_NOMINAL,PUCCH is provided by p0-nominal in PUCCH-ConfigCommon. If p0-nominal is not provided, the value is 0 dBm.
    • PO_UE_PUCCH(qu) is selected from P0-PUCCH values configured in p0-Set. Each entry has p0-PUCCH-Id and p0-PUCCH-Value.
    • If PUCCH-SpatialRelationInfo is configured and activated, the UE uses the p0-PUCCH-Id associated with the activated spatial relation.
    • If the UE does not get a UE-specific mapping, the UE uses the minimum p0-PUCCH-Id value in p0-Set.

    p0-nominal

    p0-nominal is the common PUCCH power baseline. In the example log, p0-nominal -90 means that the common nominal target component for PUCCH is -90 dBm before adding UE-specific P0, bandwidth factor, pathloss, format offset, UCI related offset and TPC command.

    p0-Set / p0-PUCCH-Value

    p0-Set is a list of UE-specific PUCCH P0 offsets. If the list is configured, each p0-PUCCH-Value can be selected by PUCCH-SpatialRelationInfo, which also provides the pathloss reference and closed loop index.

    10log10(2μ · MRB,b,f,cPUCCH(i))

    This term adjusts the transmit power according to the PUCCH bandwidth.

    • 2μ represents the SCS configuration. For example, μ = 0 for 15 kHz, μ = 1 for 30 kHz, μ = 2 for 60 kHz and μ = 3 for 120 kHz.
    • MRB,b,f,cPUCCH(i) is the bandwidth of the PUCCH resource assignment expressed in number of RBs for the PUCCH transmission occasion.
    • 10log10 converts the resource bandwidth factor into dB scale.

    PLb,f,c(qd)

    PLb,f,c(qd) is the downlink pathloss estimate calculated by the UE from a configured reference signal. Unlike PUSCH, there is no alpha scaling factor in the PUCCH equation, so the pathloss term is applied directly.

    • The reference signal can be SSB or CSI-RS configured in PUCCH-PathlossReferenceRS.
    • If PUCCH-SpatialRelationInfo is provided, it can map the active PUCCH spatial relation to a pucch-PathlossReferenceRS-Id.
    • If dedicated PUCCH pathloss reference information is not provided, the UE follows the default reference signal rules defined in 38.213. In many initial configurations this effectively uses an SSB based estimate.

    ΔF_PUCCH(F)

    ΔF_PUCCH(F) is a format dependent power offset. It is configured by following RRC parameters in PUCCH-PowerControl.

    PUCCH Format

    RRC Parameter

    If Not Provided

    Format 0

    deltaF-PUCCH-f0

    0 dB

    Format 1

    deltaF-PUCCH-f1

    0 dB

    Format 2

    deltaF-PUCCH-f2

    0 dB

    Format 3

    deltaF-PUCCH-f3

    0 dB

    Format 4

    deltaF-PUCCH-f4

    0 dB

    ΔTF,b,f,c(i)

    ΔTF,b,f,c(i) is the transport format power adjustment for PUCCH. This term is mainly determined by PUCCH format, number of symbols, number of resource elements and number of UCI bits.

    PUCCH format 0 or format 1

    • ΔTF,b,f,c(i) = 10log10(NrefPUCCH / NsymbPUCCH(i)) + ΔUCI(i)
    • For format 0, NrefPUCCH = 2 and ΔUCI(i) = 0.
    • For format 1, NrefPUCCH = Nsymbslot. If the PUCCH carries multicast HARQ-ACK according to the second HARQ-ACK reporting mode, ΔUCI(i) = 0; otherwise ΔUCI(i) = 10log10(OUCI(i)).

    PUCCH format 2, format 3 or format 4

    • When the number of UCI bits is 11 or smaller, ΔTF,b,f,c(i) = 10log10(K1 · (nHARQ-ACK(i) + OSR(i) + OCSI(i)) / NRE(i)), where K1 = 6.
    • When the number of UCI bits is larger than 11, ΔTF,b,f,c(i) = 10log10(2BPRE(i) · K2 - 1), where K2 = 2.4.
    • BPRE(i) = (OACK(i) + OSR(i) + OCSI(i) + OCRC(i)) / NRE(i).
    • NRE(i) is the number of resource elements available for UCI on the scheduled PUCCH resource.

    gb,f,c(i,l)

    This term represents the closed loop power adjustment state for PUCCH. It is controlled by TPC commands from gNB.

    • The TPC command can be included in a DCI format associated with the PUCCH transmission.
    • The TPC command can also be provided by DCI format 2_2 with CRC scrambled by TPC-PUCCH-RNTI.
    • If twoPUCCH-PC-AdjustmentStates is not configured, the UE uses one adjustment state, l = 0.
    • If two PUCCH adjustment states are configured, the closed loop index can be selected by PUCCH-SpatialRelationInfo or by the relevant activation command.
    • The accumulated delta values follow 38.213 Table 7.2.1-1 shown above.

    Example of RRC Configuration :

    This is an example of SIB1 and RRC Setup configuration with IEs related to PUCCH transmission power determination. The common part shown here is from the provided gNB log C:\temp\LTM\gnb-ltm-default.log.log. The dedicated pucch-PowerControl example shows how optional UE-specific parameters would map to the equation.

    • p0-nominal (-90): Common nominal PUCCH target power. It contributes to PO_PUCCH.
    • ss-PBCH-BlockPower (-36): SSB transmit power used by the UE when estimating pathloss from SSB.
    • p0-Set: UE-specific PUCCH P0 values. The selected p0-PUCCH-Value is added to p0-nominal.
    • pathlossReferenceRSs: List of reference signals used for PUCCH pathloss calculation.
    • spatialRelationInfoToAddModList: Maps a PUCCH spatial relation to pathloss reference, P0 entry and closed loop index.
    • deltaF-PUCCH-f0..f4: Format dependent PUCCH power offsets.

      {

        message c1:systemInformationBlockType1: {

          servingCellConfigCommon {

            uplinkConfigCommon {

              initialUplinkBWP {

                pucch-ConfigCommon setup: {

                  pucch-ResourceCommon 11,

                  pucch-GroupHopping neither,

                  p0-nominal -90

                }

              }

            },

            ss-PBCH-BlockPower -36

          }

        }

      }

      {

        message c1: rrcSetup: {

          criticalExtensions rrcSetup: {

            masterCellGroup {

              spCellConfig {

                spCellConfigDedicated {

                  uplinkConfig {

                    initialUplinkBWP {

                      pucch-Config setup: {

                        spatialRelationInfoToAddModList {

                          {

                            pucch-SpatialRelationInfoId 1,

                            referenceSignal ssb-Index: 0,

                            pucch-PathlossReferenceRS-Id 0,

                            p0-PUCCH-Id 1,

                            closedLoopIndex i0

                          }

                        },

                        pucch-PowerControl {

                          deltaF-PUCCH-f0 0,

                          deltaF-PUCCH-f1 0,

                          p0-Set {

                            { p0-PUCCH-Id 1, p0-PUCCH-Value 0 }

                          },

                          pathlossReferenceRSs {

                            { pucch-PathlossReferenceRS-Id 0, referenceSignal ssb-Index: 0 }

                          }

                        }

                      }

                    }

                  }

                }

              }

            }

          }

        }

      }

    Examples

     

    Example 01 : Power Control during RACH Process

    This example shows how power control related information appears during the initial RACH procedure and the first few scheduled UL/DL transmissions after RACH. The main reference is the UE-side trace log C:\temp\LTM\ue-export.log, because uplink power is estimated at the UE side and this log includes the UE-side transmit power field p. I intentionally include not only RRC messages but also PHY/MAC lines for PRACH, RAR, PDCCH, PDSCH, PUSCH and PUCCH because power control is affected by all of these layers.

    The main points to watch are :

    • PRACH uses open loop power control. The UE chooses PRACH transmit power from the RACH configuration such as preambleReceivedTargetPower and powerRampingStep, plus the estimated pathloss.
    • RAR provides a MAC-level UL grant for Msg3 and includes tpc_command. This directly affects the first PUSCH after PRACH.
    • PDCCH carries DCI for DL assignment or UL grant. The DCI lines after RACH show tpc_command, pucch_rsc, harq_feedback_timing and k2, which affect PUCCH/PUSCH power and timing.
    • PUSCH lines show the actual uplink scheduled transmission, including RB allocation and modulation/coding information.
    • PUCCH lines show ACK/SR/CSI transmission resources selected by RRC/DCI.
    • PHR reports the UE power headroom and configured maximum power information after the UE is connected.

    In this example, the UE uses the measured downlink pathloss to estimate the uplink transmit power for PRACH, Msg3 PUSCH, PUCCH and the following PUSCH. The arithmetic below shows the 38.213-style formula first, then plugs in the measured values and shows the resulting transmit power as the p value in the corresponding PHY line. The measured pathloss is PL=82 dB, estimated from ss-PBCH-BlockPower=8 dBm and SS-RSRP=-74 dBm.

    High Level Signaling Flow : Power Control during RACH Process

    #

    Direction

    Protocol

    Message / Log

    Power Control Meaning

    1

    Cell config

    RRC / Common

    RACH / PUSCH / PUCCH common parameters

    Defines PRACH target power, power ramping step, PUSCH nominal power and PUCCH nominal power.

    1A

    UE measurement

    PHY / SSB

    SS-RSRP measurement

    UE estimates pathloss from SIB1 ss-PBCH-BlockPower and measured SS-RSRP.

    2

    UE -> gNB

    PHY / PRACH

    PRACH preamble

    Open-loop PRACH is estimated by the UE. With measured PL=82 dB, the transmit power is p=-28.00.

    3

    gNB -> UE

    MAC / PHY DL

    RAR on PDCCH/PDSCH

    RAR contains TA, UL grant and tpc_command=3 for the Msg3 PUSCH.

    4

    UE -> gNB

    PHY / MAC / RRC

    Msg3 PUSCH + RRCSetupRequest

    First PUSCH after PRACH; power is affected by RAR grant/TPC and Msg3 power-control rules.

    5

    gNB -> UE

    RRC

    RRCSetup

    Configures PUCCH resources, scheduling request resources and PUSCH closed-loop reference parameters.

    6

    gNB -> UE

    MAC / PDCCH / PDSCH

    Contention Resolution + DL grant

    DL DCI has tpc_command=1, pucch_rsc=0 and HARQ feedback timing, determining the following PUCCH ACK.

    7

    UE -> gNB

    PHY / PUCCH

    PUCCH ACK/SR/CSI

    PUCCH resource and format come from RRC/DCI; the UE log shows which PUCCH resource is transmitted.

    8

    UE -> gNB

    PHY / MAC / RRC

    RRCSetupComplete + PUSCH + PHR

    UL DCI has tpc_command=1. The scheduled PUSCH carries SRB1/MAC data and a PHR showing power headroom and Pcmax.

    Step 1 : SIB1 provides common power-control parameters before PRACH

    Before PRACH, the UE reads SIB1 and gets common uplink and RACH power-control parameters. In this example, the most important values for the RACH procedure are p-Max 10, preambleReceivedTargetPower -110, powerRampingStep dB4, p0-NominalWithGrant -90, p0-nominal -90 and ss-PBCH-BlockPower 8.

    Power arithmetic

    • SSB reference power : ss-PBCH-BlockPower = 8 dBm. This is used with the UE measured SS-RSRP in the next step to estimate pathloss.
    • Maximum UE power cap : PCMAX = p-Max = 10 dBm.
    • First PRACH target : PPRACH,target = preambleReceivedTargetPower + (preamble counter - 1) × powerRampingStep = -110 + (1 - 1) × 4 = -110 dBm.
    • PUSCH common baseline : PO_NOMINAL,PUSCH = -90 dBm.
    • PUCCH common baseline : PO_NOMINAL,PUCCH = -90 dBm.
    00:00:00.000 [RRC] DL - BCCH-DL-SCH-NR: systemInformationBlockType1
    {
      message c1: systemInformationBlockType1: {
        ...
        servingCellConfigCommon {
          downlinkConfigCommon {
            ...
            initialDownlinkBWP {
              ...
              pdcch-ConfigCommon setup: {
                ...
                ra-SearchSpace 1
              },
              pdsch-ConfigCommon setup: { ... }
            }
          },
          uplinkConfigCommon {
            frequencyInfoUL {
              scs-SpecificCarrierList {
                { offsetToCarrier 0, subcarrierSpacing kHz30, carrierBandwidth 51 }
              },
              p-Max 10
            },
            initialUplinkBWP {
              genericParameters {
                locationAndBandwidth 13750,
                subcarrierSpacing kHz30
              },
              rach-ConfigCommon setup: {
                rach-ConfigGeneric {
                  prach-ConfigurationIndex 160,
                  msg1-FDM one,
                  msg1-FrequencyStart 0,
                  zeroCorrelationZoneConfig 15,
                  preambleReceivedTargetPower -110,
                  preambleTransMax n7,
                  powerRampingStep dB4,
                  ra-ResponseWindow sl20
                },
                ssb-perRACH-OccasionAndCB-PreamblesPerSSB one: n8,
                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 2, mappingType typeA, startSymbolAndLength 27 }
                },
                p0-NominalWithGrant -90
              },
              pucch-ConfigCommon setup: {
                pucch-ResourceCommon 11,
                pucch-GroupHopping neither,
                p0-nominal -90
              }
            },
            timeAlignmentTimerCommon infinity
          },
          ssb-PositionsInBurst {
            inOneGroup '80'H
          },
          ssb-PeriodicityServingCell ms20,
          tdd-UL-DL-ConfigurationCommon {
            referenceSubcarrierSpacing kHz30,
            pattern1 {
              dl-UL-TransmissionPeriodicity ms5,
              nrofDownlinkSlots 7,
              nrofDownlinkSymbols 6,
              nrofUplinkSlots 2,
              nrofUplinkSymbols 1
            }
          },
          ss-PBCH-BlockPower 8
        },
        ue-TimersAndConstants { ... }
      }
    }

    Step 1A : UE estimates downlink pathloss from SS-RSRP

    After reading the SSB/PBCH and SIB1, the UE can estimate downlink pathloss from the configured SSB transmit power and the measured SS-RSRP. In this example, assume the UE measures SS-RSRP=-74 dBm.

    Power arithmetic

    • Formula : PL = ss-PBCH-BlockPower - SS-RSRP.
    • Plug in numbers : PL = 8 - (-74) = 82 dB.
    • Pathloss used for the following steps : PL = 82 dB.
    20:10:28.560 [PHY] DL 0001 00    -   94.00 SSB/PBCH measurement ss-PBCH-BlockPower=8 ss-rsrp=-74.0 PL=82.0

    Step 2 : UE transmits PRACH preamble

    The PRACH line is the first visible UL transmission. PRACH transmit power is selected by open-loop control using the RACH target power and the measured pathloss.

    Power arithmetic

    • Formula : PPRACH = min(PCMAX, preambleReceivedTargetPower + PL + Δpreamble + ramping).
    • Plug in numbers : PPRACH = min(10, -110 + PL + 0 + 0) = min(10, PL - 110) dBm.
    • Use example pathloss : with PL=82 dB, PPRACH = min(10, 82 - 110).
    • Formula estimate : PPRACH = -28.00 dBm.
    20:10:28.578 [PHY] UL 0001 00    -   96.19 PRACH: sequence_index=2 prb=0:12 symb=2:12 epre=-5.2 p=-28.00

    Step 3 : gNB sends RAR and provides Msg3 UL grant / TPC

    After detecting PRACH, the gNB sends Random Access Response. This is delivered on DL using PDCCH and PDSCH. The RAR carries ta=5, an ul_grant and tpc_command=3. This TPC command is important because it is applied to the Msg3 PUSCH power calculation.

    Power arithmetic

    • Formula : PMsg3 = min(PCMAX, PO_PRE + ΔPREAMBLE,Msg3 + 10log10(2μMRB) + αPL + ΔTF + f).
    • RAR TPC : tpc_command=3 in the RAR UL grant maps to 0 dB for the Msg3 RAR TPC adjustment.
    • RB factor : μ=1 for 30 kHz SCS and the RAR grant schedules one RB for Msg3, so 10log10(21×1) = 3.01 dB.
    • Plug in numbers : PMsg3 = min(10, -110 + 0 + 3.01 + 1×82 + 0 + 0) = min(10, -24.99) dBm.
    • Formula estimate : PMsg3 = -24.99 dBm.
    • Estimated p field : the corresponding Msg3 PUSCH line in Step 4 is shown with p=-24.99, matching the formula estimate.
    20:10:28.587 [PHY] DL 0001 00 010d   97.13 PDCCH: ss_id=1 cce_index=0 al=4 dci=1_0
            rb_alloc=0x2e
            time_domain_rsc=0
            vrb_to_prb_map=0
            mcs=2
            tb_scaling=0
    20:10:28.588 [PHY] DL 0001 00 010d   97.13 PDSCH: harq=si prb=35:2 symb=1:13 CW0: tb_len=11 mod=2 rv_idx=0 cr=0.19 crc=OK snr=36.1 epre=-75.2
    20:10:28.588 [MAC] DL    - 00 RAR: rapid=2
            rapid=2
              ta=5
              ul_grant:
                hopping_flag=0
                riv=0x30
                time_domain_rsc=2
                mcs=4
                tpc_command=3
                csi_request=0
              tc-rnti=0x4628
    20:10:28.588 [MAC] -  0001 00 ta=5 ul_grant=0x30246 tc_rnti=0x4628

    Step 4 : UE sends Msg3 PUSCH carrying RRCSetupRequest

    Msg3 is transmitted on PUSCH using the UL grant from RAR. In the UE log, Msg3 appears as a PUSCH with prb=48. This PUSCH carries the CCCH RRCSetupRequest.

    Power arithmetic

    • Formula : PMsg3 = min(PCMAX, PO_PRE + ΔPREAMBLE,Msg3 + 10log10(2μMRB) + αPL + ΔTF + f).
    • Plug in numbers : PMsg3 = min(10, -110 + 0 + 3.01 + 82 + 0 + 0) = min(10, -24.99) dBm.
    • Formula estimate : PMsg3 = -24.99 dBm.
    • Estimated p field : the displayed Msg3 PUSCH line uses p=-24.99, matching the formula estimate.
    20:10:28.572 [RRC] UL 0001 00 CCCH-NR: RRC setup request
            {
              message c1: rrcSetupRequest: {
                rrcSetupRequest {
                  ue-Identity randomValue: '001101111110000011110111001011101110010'B,
                  establishmentCause mo-Signalling,
                  spare '0'B
                }
              }
            }
    20:10:28.588 [MAC] UL 0001 00 LCID:52 len=6 PAD:len=1
            CCCH
    20:10:28.588 [PHY] UL 0001 00 4628   97.18 PUSCH: harq=0 prb=48 symb=0:14 CW0: tb_len=9 mod=2 rv_idx=0 cr=0.30 retx=0 p=-24.99

    Step 5 : RRCSetup configures PUCCH/PUSCH resources used after RACH

    The RRCSetup message configures the connected-mode UL resources. For power control, the important part is the combination of PUCCH resources, SR resource, PUSCH power control and pathloss reference. The PUSCH power-control block contains msg3-Alpha alpha1, p0 0, alpha alpha1, SSB-based pathloss reference and closed-loop index.

    Power arithmetic

    • Connected-mode PUSCH formula : PPUSCH = min(PCMAX, PO_PUSCH + 10log10(2μMRB) + αPL + ΔTF + f).
    • PUSCH plug in numbers for a later 29-RB UL grant : PPUSCH = min(10, (-90+0) + 10log10(21×29) + 1×82 + 0 + f) = min(10, 9.63 + f) dBm.
    • PUSCH final result with later DCI tpc_command=1 : tpc_command=1 maps to 0 dB accumulated adjustment, so f=0 and the formula estimate is PPUSCH = 9.63 dBm.
    • PUCCH format 1 formula : PPUCCH = min(PCMAX, PO_PUCCH + 10log10(2μMRB) + PL + ΔF + ΔTF + g).
    • PUCCH format 1 plug in numbers : PPUCCH,F1 = min(10, -90 + 10log10(21×1) + 82 + 0 + 0 + g) = min(10, -4.99 + g) dBm.
    20:10:28.594 [RRC] DL 0001 00 CCCH-NR: RRC setup
    {
      message c1: rrcSetup: {
        ...
        spCellConfig {
          spCellConfigDedicated {
            uplinkConfig {
              initialUplinkBWP {
                pucch-Config setup: {
                  resourceSetToAddModList { ... },
                  resourceToAddModList {
                    { pucch-ResourceId 0, startingPRB 50, secondHopPRB 0, format format1: { nrofSymbols 14, ... } },
                    ...
                    { pucch-ResourceId 8, startingPRB 1, secondHopPRB 49, format format4: { nrofSymbols 14, ... } },
                    ...
                    { pucch-ResourceId 12, startingPRB 50, secondHopPRB 0, format format1: { initialCyclicShift 9, nrofSymbols 14, timeDomainOCC 2 } }
                  },
                  format1 setup: { },
                  format4 setup: {
                    maxCodeRate zeroDot25,
                    simultaneousHARQ-ACK-CSI true
                  },
                  schedulingRequestResourceToAddModList {
                    { schedulingRequestResourceId 1, schedulingRequestID 0, periodicityAndOffset sl40: 8, resource 12 }
                  },
                  dl-DataToUL-ACK { 8, 7, 6, 5, 4, 12, 11 }
                },
                pusch-Config setup: {
                  ...
                  pusch-PowerControl {
                    msg3-Alpha alpha1,
                    p0-AlphaSets {
                      { p0-PUSCH-AlphaSetId 0, p0 0, alpha alpha1 }
                    },
                    pathlossReferenceRSToAddModList {
                      { pusch-PathlossReferenceRS-Id 0, referenceSignal ssb-Index: 0 }
                    },
                    sri-PUSCH-MappingToAddModList {
                      { sri-PUSCH-PowerControlId 0, sri-PUSCH-PathlossReferenceRS-Id 0, sri-P0-PUSCH-AlphaSetId 0, sri-PUSCH-ClosedLoopIndex i0 }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }

    Step 6 : Contention resolution and DL DCI set up PUCCH ACK power behavior

    The contention resolution MAC CE is followed by a DL PDCCH/PDSCH. The DCI includes tpc_command=1, pucch_rsc=0 and harq_feedback_timing=3. These determine the following HARQ-ACK PUCCH resource/timing and apply closed-loop PUCCH power control.

    Power arithmetic

    • TPC formula : g(i) = g(i-i0) + δPUCCH.
    • Plug in numbers : tpc_command=1 maps to δPUCCH=0 dB, so g(i) = g(i-i0) + 0. For the first connected-mode PUCCH in this example, use g=0.
    • Formula estimate : PPUCCH,F1 = min(10, -90 + 3.01 + 82 + 0 + 0 + 0) = -4.99 dBm.
    • Estimated p field : the following HARQ-ACK PUCCH line is shown with p=-4.99, matching the formula estimate.
    20:10:28.593 [PHY] DL 0001 00 4628    98.5 PDCCH: ss_id=1 cce_index=0 al=4 dci=1_0
            rb_alloc=0x2f
            time_domain_rsc=0
            mcs=6
            ndi=1
            rv_idx=0
            harq_process=0
            dai=0
            tpc_command=1
            pucch_rsc=0
            harq_feedback_timing=3
    20:10:28.594 [PHY] DL 0001 00 4628    98.5 PDSCH: harq=0 prb=13:24 symb=1:13 k1=4 CW0: tb_len=317 mod=2 rv_idx=0 cr=0.44 retx=0 crc=OK snr=37.1 epre=-75.0
    20:10:28.594 [PHY] UL 0001 00 0000    98.9 PUCCH: format=1 prb=0 prb2=50 symb=0:14 cs=0 occ=0 ack=1 p=-4.99
    20:10:28.594 [MAC] DL 0001 00 UECRI:137e0f72ee46 LCID:0 len=301 PAD:len=5
            UE Contention Resolution Identity: 137e0f72ee46

    Step 7 : UE sends PUCCH ACK/SR/CSI after RRCSetup

    After the DL assignment, UE transmits PUCCH for HARQ-ACK. Shortly after that, SR and CSI PUCCH transmissions also appear. These lines show the actual PUCCH format, PRB/frequency hopping information and the estimated transmit power.

    Power arithmetic

    • ACK/SR PUCCH format 1 formula : PPUCCH,F1 = min(PCMAX, PO_PUCCH + 10log10(2μMRB) + PL + ΔF1 + ΔTF + g).
    • ACK/SR plug in numbers : PPUCCH,F1 = min(10, -90 + 3.01 + 82 + 0 + 0 + 0) = -4.99 dBm.
    • CSI PUCCH format 4 formula : PPUCCH,F4 = min(10, -90 + 3.01 + PL + 0 + ΔTF,CSI + 0).
    • CSI transport factor : for csi=1001111, OCSI=7 bits and OUCI≤11, so ΔTF,CSI = 10log10(6×7/NRE) = 10log10(42/NRE).
    • CSI formula estimate : PPUCCH,F4 = min(10, -4.99 + 10log10(42/NRE)) dBm. If only the log-visible 1 RB × 14 symbols upper-bound is used, NRE≈168 and PPUCCH,F4-11.01 dBm.
    • Estimated p field : the ACK, SR and CSI PUCCH lines below are shown with formula-derived p values.
    20:10:28.594 [PHY] UL 0001 00 0000    98.9 PUCCH: format=1 prb=0 prb2=50 symb=0:14 cs=0 occ=0 ack=1 p=-4.99
    20:10:28.613 [PHY] UL 0001 00 4628   100.8 PUCCH: format=1 prb=50 prb2=0 symb=0:14 cs=9 occ=2 sr=1 p=-4.99
    20:10:28.613 [PHY] UL 0001 00 4628   100.9 PUCCH: format=4 prb=49 prb2=1 symb=0:14 occ=0 csi=1001111 p=-11.01
    20:10:28.649 [PHY] UL 0001 00 4628  103.19 PUCCH: format=1 prb=50 prb2=0 symb=0:14 cs=1 occ=0 ack=1 p=-4.99

    Step 8 : UL DCI schedules connected-mode PUSCH and UE reports PHR

    The next UL grant is carried by DCI 0_1 on PDCCH. It includes tpc_command=1 and k2=4. The scheduled PUSCH carries MAC control elements including BSR and PHR. The PHR line gives direct visibility into UE power status: PH: 38 (63) and Pcmax: 40. The RRCSetupComplete message is generated immediately before this UL grant and is then carried through SRB1/RLC/PDCP/MAC.

    Power arithmetic

    • Formula : PPUSCH = min(PCMAX, PO_PUSCH + 10log10(2μMRB) + αPL + ΔTF + f).
    • Plug in numbers : MRB=29, μ=1, PO_PUSCH=-90, α=1, PL=82, ΔTF=0 and tpc_command=1 gives f=0. Therefore PPUSCH = min(10, -90 + 10log10(21×29) + 82 + 0 + 0) = min(10, 9.63) dBm.
    • Formula estimate : PPUSCH = 9.63 dBm.
    • Estimated p field : the displayed PUSCH line uses p=9.63, matching the formula estimate.
    • PHR cross-check : the MAC CE reports PH: 38 (63) and Pcmax: 40. This reports the UE power-headroom state and configured maximum power information.
    20:10:28.594 [RRC] UL 0001 00 DCCH-NR: RRC setup complete
    20:10:28.618 [PHY] DL 0001 00 4628  100.15 PDCCH: ss_id=2 cce_index=6 al=2 dci=0_1 k2=4
            rb_alloc=0x4b3
            time_domain_rsc=1
            mcs=0
            ndi=1
            rv_idx=0
            harq_process=0
            dai=3
            tpc_command=1
            antenna_ports=0
            srs_request=0
            dmrs_seq_init=0
            ul_sch_indicator=1
    20:10:28.618 [PDCP] UL 0001 SRB1 SN=0
    20:10:28.618 [RLC] UL 0001 SRB1 D/C=1 P=1 SI=00 SN=0
    20:10:28.618 [MAC] UL 0001 00 LCID:1 len=36 SBSR:lcg=0 bs=0 SE PHR:ph=63 pc=40 PAD:len=89
            Short BSR:
              LCG ID: 0 Buffer Size: 0 (0)
            Single Entry PHR:
              P: 0 PH: 38 (63)
              MPE or DPC or R: 0 Pcmax: 40
    20:10:28.618 [PHY] UL 0001 00 4628  100.19 PUSCH: harq=0 prb=20:29 symb=0:14 CW0: tb_len=133 mod=2 rv_idx=0 cr=0.12 retx=0 p=9.63

    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 {

        downlinkConfigCommon                DownlinkConfigCommonSIB,

        uplinkConfigCommon                  UplinkConfigCommonSIB   OPTIONAL,   -- Need R

        supplementaryUplink                 UplinkConfigCommonSIB   OPTIONAL,   -- Need R

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

        preambleReceivedTargetPower      INTEGER (-200..-74),

        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}

        dmrs-UplinkForPUSCH-MappingTypeA            SetupRelease { DMRS-UplinkConfig }

        dmrs-UplinkForPUSCH-MappingTypeB            SetupRelease { DMRS-UplinkConfig }

        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

       pathlossReferenceRSToAddModList    SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSs))

                                                   OF PUSCH-PathlossReferenceRS    OPTIONAL,

       pathlossReferenceRSToReleaseList   SEQUENCE (SIZE (1..maxNrofPUSCH-PathlossReferenceRSs))

                                                   OF    PUSCH-PathlossReferenceRS-Id OPTIONAL,

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

       deltaMCS                           ENUMERATED {enabled}       OPTIONAL, -- Need S

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

                                                   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

       }

    }

     

    PUSCH-PathlossReferenceRS-Id ::= INTEGER (0..maxNrofPUSCH-PathlossReferenceRSs-1)

     

    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 {

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

       }

    }

    YouTube

    Reference