Closed-Loop Power Control (CLPC) in 5G NR
Open-loop power control gets the UE’s transmit power roughly right on its own. Closed-loop power control is the network correcting that estimate in real time, one small TPC command at a time.
Where open-loop power control is a calculation the UE runs entirely by itself, closed-loop power control (CLPC) is the opposite: it is the network actively watching the UE's received signal and sending explicit Transmit Power Control (TPC) commands to nudge that power up or down. The name comes from the feedback loop this closes — the gNB measures the effect of its last command and can issue the next one based on that outcome, the way any closed control loop works.
Introduction
Closed-Loop Power Control layers real-time corrections on top of the open-loop baseline covered on the Open-Loop Power Control page. Where open loop answers "roughly what power should this UE transmit at, given its path loss?", closed loop answers "given how the last few transmissions actually landed, should we nudge that up or down?" — and it does this via an explicit command from the gNB, carried in the same DCI that grants the UE its uplink resource.
TPC commands: the 2-bit field
Every uplink grant (DCI format 0_0/0_1) carries a 2-bit TPC command field. Two bits give four possible values, and 3GPP maps them to power step sizes rather than absolute powers:
| TPC field value | Accumulated mode δ (dB) | Absolute mode δ (dB) |
|---|---|---|
| 0 | −1 | −4 |
| 1 | 0 | −1 |
| 2 | 1 | 1 |
| 3 | 3 | 4 |
Notice accumulated mode's steps are small and roughly symmetric (−1/0/+1/+3 dB) — each command is a gentle nudge, meant to be applied on top of the running total from every previous command. Absolute mode's steps are larger and less symmetric, because each command in that mode is a fresh instruction, not an increment.
The f(i) accumulation term
The closed-loop contribution to the full PUSCH power formula is the term f(i), and in the default accumulated mode it updates recursively:
In words: the closed-loop power at transmission i equals the closed-loop power at the previous transmission, plus whatever δ step the most recent applicable TPC command specified. This is exactly why it's called "accumulated" — every command adds to a running total that persists across the whole connection (until reset by an RRC reconfiguration or a specific accumulation-reset signal), rather than each command standing alone.
Accumulated vs absolute mode
The choice between the two modes is RRC-configured (tpc-Accumulation) and each suits a different situation:
| Accumulated mode | Absolute mode | |
|---|---|---|
| How each command is applied | Added to the running total from all previous commands | Replaces the closed-loop term outright — the command IS the new value |
| Resilience to a missed command | Robust — a missed command just means one less small nudge; the loop self-corrects over subsequent commands | Fragile — a missed command means the UE is briefly at the wrong power until the next one arrives, since nothing "carries forward" |
| Typical use | Default / most deployments | Scenarios needing fast, precise convergence, e.g. after a handover or a big channel change, where waiting for accumulation to catch up is too slow |
Two independent closed loops
For UEs configured with multiple antenna panels or transmitting on multiple SRS resource sets, the network can run two independent closed-loop processes in parallel, distinguished by a closedLoopIndex (0 or 1) carried alongside the TPC command. Each index accumulates its own f(i) separately, so power corrections tuned for one transmit path don't bleed into the other — relevant mainly for more advanced UL MIMO configurations where the two paths can see genuinely different channel conditions.
Closed loop for PUCCH and SRS
PUSCH is the primary case discussed above, but PUCCH (carrying uplink control information) and SRS each get their own closed-loop power control terms too, following the same accumulated-f(i) shape but with independently configured P0/α baselines and their own TPC command stream — since PUCCH's reliability requirements (it often carries HARQ ACK/NACK itself) are different enough from PUSCH's that tying them to the same power trajectory wouldn't make sense.
Worked Example
A UE's closed-loop accumulator f(i) starts at 0 dB after the last RRC reconfiguration (accumulation reset). The network is running accumulated mode.
- Grant 1: TPC field = 2 (δ = +1 dB). f(1) = 0 + 1 = +1 dB.
- Grant 2: the transmission at f(1) was decoded cleanly with margin to spare; TPC field = 1 (δ = 0 dB, hold steady). f(2) = 1 + 0 = +1 dB.
- Grant 3: a NACK came in — signal was weaker than expected; TPC field = 3 (δ = +3 dB). f(3) = 1 + 3 = +4 dB.
- Grant 4: now comfortably decoded, even a little too strong; TPC field = 0 (δ = −1 dB). f(4) = 4 − 1 = +3 dB.
At every step, this +3 dB (or whatever f(i) currently is) is added on top of whatever the open-loop P0 + α×PL calculation produced — closed loop never replaces open loop in accumulated mode, it corrects around it.
Summary
Closed-loop power control is the gNB's real-time correction layer on top of the UE's own open-loop estimate: small TPC commands (2 bits, mapped to dB steps) that either accumulate into a running total (accumulated mode — the default, resilient to a missed command) or replace the term outright (absolute mode — faster convergence, less forgiving). Advanced UL MIMO configurations can run two such loops independently via closedLoopIndex, and PUCCH/SRS each get their own closed-loop term separate from PUSCH's.
Q. What's the practical risk of accumulated mode vs absolute mode?
A. In accumulated mode, a missed TPC command just means one less small nudge — the loop is self-correcting over subsequent commands. In absolute mode, a missed command leaves the UE at the wrong power until the next one arrives, since each command replaces the value outright rather than adding to a running total.
Q. Why do the accumulated-mode TPC steps (−1/0/+1/+3 dB) look asymmetric?
A. The larger +3 dB up-step lets the loop react quickly to a sudden bad transmission (a NACK), while the smaller, more gradual down-steps avoid overcorrecting and oscillating once the link is healthy again — similar in spirit to OLLA's asymmetric up/down steps in link adaptation.
Q. When would a network prefer absolute mode over accumulated mode?
A. Right after an event that invalidates the previous accumulated history — like a handover or a large, sudden channel change — where waiting for several small accumulated steps to converge is too slow, and a single command that sets the power outright gets there faster.