BWP Switching & Adaptation in 5G NR
How the active Bandwidth Part changes — the DCI BWP indicator, the bwp-InactivityTimer, and RRC-based switching for power saving and load.
A UE does not have to breathe through the whole carrier at once. A Bandwidth Part (BWP) is a contiguous slice of one carrier — a run of PRBs with its own numerology and channel configuration — and the UE keeps exactly one active in each direction. Bandwidth adaptation is the art of switching among the configured BWPs: sit narrow to save battery when little is happening, jump wide the instant traffic arrives, and drift back to narrow when it dries up. This page is grounded in TS 38.213 (physical-layer procedures), TS 38.321 (MAC), TS 38.331 (RRC configuration) and TS 38.133 (switch-delay requirements).
Introduction
A Bandwidth Part is the mechanism that decouples the carrier the cell operates from the bandwidth a given UE is actually working over at this instant. The cell can be 100 MHz wide in FR1 or 400 MHz in FR2, but the UE tunes to, and only processes, one active DL BWP and one active UL BWP per serving cell at a time. Everything the UE does on the air — monitoring PDCCH, receiving PDSCH, transmitting PUSCH/PUCCH/SRS — happens inside that active BWP.
BWP switching lives in the connected-mode lifecycle, right where the scheduler meets power management. Once the UE is in RRC_CONNECTED with dedicated config, the network is constantly deciding how much bandwidth the UE should be listening across: wide when a burst is flowing, narrow when the link is idle. That decision is executed as a BWP switch — by DCI, by an inactivity timer, by RRC reconfiguration, or implicitly during access.
Because a switch is a distinct, observable event with a small number of triggers, most "BWP" tickets — the UE went deaf after a burst, throughput never ramped, an SCell never woke — localise to which trigger fired (or failed to) and whether the switch delay was respected. That is exactly why walking the triggers one by one pays off.
On this page
Why BWP switching is needed
In plain words: think of the carrier as a very wide desk and the UE as someone reading under a desk lamp. You don't light the whole desk to read one page — you keep a small pool of light where you're working and only flood the desk when you spread out a big project. BWP switching slides and resizes that pool of light so the UE spends power only on the bandwidth it is actually using right now.
Concretely, two problems force the mechanism to exist. First, power: forcing a UE to receive across an entire 100/400 MHz carrier every slot would drain its battery for no reason during the long quiet stretches that dominate real traffic. Second, capability and flexibility: not every UE supports the full carrier bandwidth, and different services want different numerologies. A BWP solves both — it is a contiguous block of PRBs on one carrier with its own subcarrier spacing, cyclic prefix and control resources, and the UE only lives on the active one.
A contiguous subset of a carrier's PRBs with its own numerology and dedicated config. The UE has exactly one active DL BWP and one active UL BWP per serving cell at any instant, chosen from those configured.
Power and flexibility. A narrow BWP means less baseband to run and fewer PRBs to monitor, saving energy in the quiet moments; a wide BWP means capacity when the UE is busy. Different BWPs can also carry different numerologies, so one carrier can serve mixed services.
RRC configures up to four DL and four UL BWPs per serving cell. The network then moves the UE among them — by DCI, by an inactivity timer, by RRC reconfiguration, or implicitly at initial access — so the active bandwidth follows the traffic.
What a BWP Is
5G carriers can be enormous — up to 100 MHz in FR1 and 400 MHz in FR2. Forcing a UE to receive across that entire span every slot would drain its battery for no reason, and would also assume every UE supports the full carrier bandwidth, which many do not. A BWP fixes both problems at once: it is a contiguous block of PRBs, defined on a single carrier, carrying its own subcarrier spacing, cyclic prefix and control resources. The UE only tunes to, and only processes, the currently active BWP — the rest of the carrier is, for that UE at that moment, invisible.
Crucially, each configured BWP is a self-contained radio world. Every entry carries its own locationAndBandwidth (where it sits and how wide it is), its own subcarrierSpacing and cyclicPrefix, and its own dedicated channel configuration: PDCCH-Config (the CORESETs and search spaces the UE monitors), PDSCH-Config for downlink data, and on the uplink PUSCH-Config, PUCCH-Config and SRS-Config. Because control, data and feedback are all bound per BWP, switching the active BWP does not merely retune the frequency window — it swaps the entire set of resources the UE lives on. A CORESET valid on one BWP simply does not exist on another.
Core idea: the carrier is fixed and wide, but the UE's attention is a movable window. Bandwidth adaptation slides that window narrow or wide to trade power against throughput — and because each BWP has its own numerology and control, the window is really a whole configuration, not just a frequency range.
How BWPs Are Configured
BWPs are configured per serving cell inside the RRC serving-cell config. The downlink BWPs live in a BWP-Downlink list and the uplink BWPs in a BWP-Uplink list, each entry carrying a bwp-Id, a generic part (BWP: locationAndBandwidth, subcarrierSpacing, cyclicPrefix) and a dedicated part (BWP-DownlinkDedicated / BWP-UplinkDedicated) holding the channels that live on it. A small set of identity fields then decides which BWP is active and when the UE moves between them.
| Parameter | Where | Role |
|---|---|---|
initialDownlinkBWP / initialUplinkBWP | ServingCellConfigCommon / dedicated | The initial BWP the UE uses before dedicated config — where it did SSB/RACH and read broadcast. Its bwp-Id is 0. |
firstActiveDownlinkBWP-Id / firstActiveUplinkBWP-Id | ServingCellConfig | Which configured BWP becomes active right after the RRCReconfiguration is applied — the starting point once dedicated config takes hold. |
defaultDownlinkBWP-Id | ServingCellConfig | The BWP the inactivity timer falls back to. If not configured, the fallback is the initial DL BWP (bwp-Id 0). |
bwp-InactivityTimer | ServingCellConfig | Per-cell timer that returns the UE to the default DL BWP after a spell with no scheduling. |
dormantBWP-Id | ServingCellConfig (Rel-16) | A special DL BWP with no PDCCH monitoring configured — used on SCells for fast, low-power standby (see below). |
Two subtleties are worth internalising. First, the numbering: the initial BWP is always bwp-Id 0, and dedicated BWPs take IDs 1 to 4, so a cell can present the initial BWP plus up to four dedicated ones. Second, the dormant BWP, added in Release 16, is a downlink BWP on which the UE performs CSI measurements and reporting but does not monitor PDCCH. Moving an SCell into its dormant BWP lets the network keep the cell's channel state fresh — so it can be re-activated instantly — while paying almost none of the power cost of active PDCCH monitoring. It is a middle gear between fully active and fully deactivated.
Some precision on the fields you will actually see in RRC. locationAndBandwidth is a single INTEGER encoded as an RIV (resource-indication value) over a 275-PRB reference, jointly coding the start PRB and the number of contiguous PRBs. subcarrierSpacing is one of the numerology enumerations (kHz15, kHz30, kHz60, kHz120…), and cyclicPrefix is normal by default (extended only at 60 kHz). bwp-Id is an INTEGER 0–4. The bwp-InactivityTimer is an enumeration of millisecond values (for example ms2, ms3, ms4… up to the low-second range) — treat these as an enumerated ladder from TS 38.331 rather than a free integer.
One at a time: although up to four BWPs are configured per direction per cell, only one DL and one UL BWP are active at any moment on that cell. Switching is precisely the act of changing which configured BWP is the active one — it never means running two in parallel.
The Four Switching Triggers
There are four ways the active BWP changes, running from most dynamic to most static. Knowing which trigger fired tells you how fast the change is and what state carries over. Each is broken out below with its own debugging and failure notes, because in the field a "BWP problem" is almost always one specific trigger misbehaving.
1. DCI-based (dynamic)
The scheduling DCI carries a 2-bit Bandwidth part indicator field, present in UL format DCI 0_1 and DL format DCI 1_1. Those two bits map to a bwp-Id through a small standardised association (with up to four configured BWPs the mapping is direct). If the field names a BWP different from the current active one, the UE switches to it as part of executing that same DCI — the very assignment or grant the DCI carries is then applied on the new BWP. This is the fast path: one DCI both switches and schedules, so a data burst can arrive on a wide BWP with no separate signalling round-trip. Note it is the scheduling formats that carry the field: the fallback formats DCI 0_0 / DCI 1_0 have no BWP indicator and cannot switch.
Precision to keep straight: the switching DCI 1_1 (DL) / DCI 0_1 (UL) is scrambled with the C-RNTI and is decoded in a UE-specific search space (USS) inside a CORESET of the currently active BWP — because you can only be told to switch by a message you can already read. The scheduled PDSCH/PUSCH that rides the same DCI lands on the new BWP, timed by k0 (DL) / k2 (UL) chosen large enough to clear the switch delay.
✅ Debugging steps
- Confirm the scheduling DCI is actually a
DCI 1_1/DCI 0_1(not a fallback1_0/0_0) — only the non-fallback formats carry theBandwidth part indicator. - Decode the 2-bit indicator and confirm it maps to the intended
bwp-Id; verify the target BWP is actually configured in the UE'sBWP-Downlink/BWP-Uplinklist. - Check the scheduling offset (
k0/k2) leaves at least the reported BWP switch delay between the DCI and the scheduled channel. - Confirm the switching DCI was sent in a search space/CORESET on the BWP the UE was already monitoring.
⚠ Common causes of failure
- Network sent a fallback format (
DCI 1_0/0_0) expecting a switch — those formats have no BWP field, so nothing switches. - Indicator points at a
bwp-Idthat is not configured, so the UE ignores the switch or behaves as an error case. - Scheduled
PDSCH/PUSCHplaced inside the switch-delay window — the UE is mid-retune and misses it. - UE missed the switching DCI itself (poor DL / CCE blocking), so it stays on the old BWP while the gNB assumes the new one.
2. Timer-based (autonomous fallback)
When the UE is on a non-default DL BWP, the bwp-InactivityTimer runs. It is started — and restarted — by scheduling activity: any DL assignment or UL grant on the active BWP resets it. If it expires, meaning nothing has been scheduled for the configured span, the UE autonomously falls back to the BWP named by defaultDownlinkBWP-Id, which is typically the narrow, low-power BWP. No DCI is needed; the UE moves itself. This is the main power-saving lever, and it is why the default BWP is usually the smallest one.
✅ Debugging steps
- Check the configured
bwp-InactivityTimervalue and confirm it is running only while the UE is on a non-default BWP. - In the trace, verify each DL assignment / UL grant on the active BWP restarts the timer — a burst with gaps should keep it alive.
- On unexpected fallback, look for the scheduling gap that let the timer expire; on no fallback, confirm a
defaultDownlinkBWP-Idis actually configured. - Confirm the fallback target matches
defaultDownlinkBWP-Id(or the initial DL BWP,bwp-Id0, when no default is set).
⚠ Common causes of failure
- Timer too short for the traffic pattern — the UE keeps dropping to narrow mid-session, capping throughput.
- Timer too long — the UE lingers wide during idle, wasting battery (the fallback never bites).
defaultDownlinkBWP-Idnot configured, so fallback lands on the initial BWP with a different (often unexpected) config.- Interaction with DRX mis-tuned — the UE narrows and sleeps out of step, so a wake-up finds it on the wrong BWP.
3. RRC reconfiguration (semi-static)
An RRCReconfiguration can change the BWP set entirely, or point firstActiveDownlinkBWP-Id / firstActiveUplinkBWP-Id at a different BWP; the change takes effect when the reconfiguration is applied. This path is slow — it involves signalling and processing — but it is how the network reshapes the whole configuration, not just picks among existing BWPs.
✅ Debugging steps
- Confirm the
RRCReconfigurationwas received and acknowledged (RRCReconfigurationComplete) before expecting the new BWP set. - Check
firstActiveDownlinkBWP-Id/firstActiveUplinkBWP-Idin the message and confirm the UE becomes active on exactly that BWP after applying it. - Verify the new BWP entries carry complete dedicated config (
PDCCH-Config,PDSCH-Config, etc.) — a half-configured BWP leaves the UE with no control to monitor.
⚠ Common causes of failure
- Reconfiguration fails or is not applied, so the UE stays on the old BWP set (possible reconfiguration failure / re-establishment).
firstActiveDownlinkBWP-Idpoints at a BWP without a monitorable CORESET, leaving the UE unable to receive scheduling.- Mismatched DL/UL first-active IDs on a TDD carrier, breaking the paired-switch assumption.
4. Initial access / random access (implicit)
Before dedicated config the UE simply uses the initial BWP, where it performed cell search and RACH. During random access the UL BWP used for the preamble and Msg3 is tied to the active BWP, and if the active BWP lacks the RACH resources the UE switches to the initial BWP to run the procedure. There is no explicit "switch" command here; the BWP the UE lands on is dictated by the procedure and the config.
✅ Debugging steps
- Confirm the active UL BWP actually has
rach-ConfigCommon/PRACH resources; if not, verify the UE switched to the initial BWP for the RACH attempt. - Check that after access completes the UE moves to
firstActiveDownlinkBWP-Idas configured.
⚠ Common causes of failure
- Active BWP has no PRACH resources and no valid initial BWP fallback, so RACH cannot run at all.
- Confusion between the initial BWP (used for access) and the first-active BWP (used after setup), leaving the UE on an unexpected bandwidth post-access.
Pairing to remember: DCI switches you up to a wider BWP when work arrives; the bwp-InactivityTimer switches you down to the narrow default when work dries up. RRC reshapes the set; initial access just says where you begin.
| Switch method | Trigger | Direction / speed | Latency character |
|---|---|---|---|
| DCI-based | Bandwidth part indicator (2 bit) in DCI 0_1 / DCI 1_1 | Any-to-any, per-slot fast | One switch delay (TS 38.133); scheduling folded in |
| Timer-based | bwp-InactivityTimer expiry | Non-default → default DL BWP | Switch delay after expiry; autonomous, no DCI |
| RRC-based | RRCReconfiguration (new first-active BWP or new set) | Semi-static reshaping | Signalling + RRC processing delay (ms-scale) |
| Initial / RA | Setup, or RACH needing initial BWP | Implicit, to initial/first-active BWP | Governed by the access procedure |
| Trigger | Physical channel / carrier | DCI format | RNTI (CRC scramble) | Search space |
|---|---|---|---|---|
| DCI DL switch | Switch DCI on PDCCH; data on PDSCH (new BWP) | DCI 1_1 | C-RNTI | UE-specific SS on the old (active) BWP |
| DCI UL switch | Switch DCI on PDCCH; data on PUSCH (new BWP) | DCI 0_1 | C-RNTI | UE-specific SS on the old (active) BWP |
| SCell dormancy | PDCCH on the scheduling cell | DCI 1_1 (dormancy bitmap use) | C-RNTI | UE-specific SS on the scheduling cell |
| Timer / RRC / RA | — (no scheduling DCI carries the switch) | — | — | — |
Switching Over Time — A Picture
Picture one wide carrier with two configured DL BWPs: a narrow default (BWP₁) and a wide one (BWP₂). The UE rests on the narrow default to save power. Traffic arrives, a DCI with the Bandwidth part indicator pointing at BWP₂ switches the UE wide and schedules its data in the same breath. Each subsequent grant restarts the bwp-InactivityTimer. When traffic stops, the timer counts down and, on expiry, the UE returns itself to BWP₁.
Reading a BWP switch in the logs
A switch is a discrete event in the UE MAC/PHY trace: the DCI that carried the indicator, the old and new bwp-Id, and the slot at which the active BWP flips. Timer-driven fallbacks show up as an inactivity-timer expiry followed by the same flip toward the default BWP, with no DCI attached.
Representative UE MAC/PHY log — illustrative, values vary by vendor/build:
| Field | Meaning | Example (from log) | Check |
|---|---|---|---|
cause | Which of the four triggers drove the switch. | DCI / INACTIVITY | Confirm it matches what the network intended; an unexpected INACTIVITY means a scheduling gap opened. |
dci_format | DCI format that carried the Bandwidth part indicator. | 1_1 | Must be 1_1 (DL) / 0_1 (UL); a fallback 1_0/0_0 cannot switch. |
bwp_ind | The 2-bit indicator field value. | 01 | Maps to the target bwp-Id; verify the target is configured. |
old_bwp_id / new_bwp_id | Active BWP before and after the switch. | 0 → 2 | New BWP must exist in the UE's configured list and carry full dedicated config. |
k0 / switch_delay_slots | Scheduling offset vs. the required switch delay. | k0=4, delay 3 | k0 must be ≥ the switch delay, else the scheduled channel lands mid-retune. |
default_bwp_id | Fallback target for the inactivity timer. | 1 | Must equal defaultDownlinkBWP-Id (or initial BWP 0 if unset). |
dormant_bwp_id | SCell dormant BWP entered. | 3 | PDCCH off, CSI on; confirms warm standby, not full deactivation. |
Switching Delay and Scheduling Restriction
Switching is not free. The UE needs time to retune its RF front-end, reload the new BWP's numerology and reconfigure baseband, and during that interval it can neither reliably receive nor transmit. TS 38.133 captures this as a BWP switch delay requirement, and it distinguishes two capability categories — broadly a Type 1 and a Type 2 — reflecting how quickly a given UE implementation can complete the switch. The actual delay in each category also depends on the numerology (the slot length of the target BWP) and on the trigger. Treat these as capability- and numerology-dependent values drawn from that spec rather than a single fixed microsecond figure.
| Category (TS 38.133) | Meaning | Depends on |
|---|---|---|
| Type 1 | The faster switch-delay class a UE may report | UE capability; target SCS / slot length |
| Type 2 | The slower (more relaxed) switch-delay class | UE capability; target SCS / slot length |
| Trigger dependence | DCI-triggered vs timer- or RRC-triggered switches carry their own delay accounting | Which of the four triggers fired |
The practical consequence is a scheduling restriction around the switch. During the switch-delay window the UE is not expected to transmit or receive on either the old or the new BWP, so the scheduler must leave that gap clear. A DCI that triggers a DL switch is received on the old BWP, and its scheduled PDSCH must be placed far enough after the DCI that the switch has completed — the network respects the UE's reported delay when choosing the scheduling offset (for example the k0 / k2 timing). Get this wrong and the UE would be told to receive data it is physically mid-retune to reach.
Two further per-BWP behaviours follow the active BWP across a switch. CSI reporting is configured per BWP (through the BWP's CSI-MeasConfig resources), so after a switch the UE reports channel state on the new BWP's resources; measurements tied to the old BWP simply do not carry over. Likewise SRS is per-BWP via SRS-Config, so uplink sounding resumes on the new UL BWP's sounding resources. And because PDCCH-Config — the CORESETs and search spaces — is per BWP, the UE's control monitoring moves wholesale to the new BWP: the DCI that commanded the switch had to be received on the BWP the UE was already monitoring, because you cannot be told to switch by a message you could only read after switching.
✅ Debugging steps
- Read the UE's reported BWP switch-delay capability (Type 1/Type 2) and the target BWP's SCS, then confirm the scheduler's
k0/k2offset covers it. - Around every switch, verify no
PDSCH/PUSCHis scheduled inside the delay window on either the old or the new BWP. - After a switch, confirm CSI reports and SRS resume on the new BWP's resources, not the old ones.
⚠ Common causes of failure
- Scheduling offset shorter than the reported switch delay — the first post-switch transmission is lost.
- Stale CSI: the scheduler acts on the old BWP's channel state after a switch, picking a wrong MCS on the new BWP.
- SRS gap after switching leaves the UL scheduler blind on the new BWP until sounding resumes.
Practical consequence: because switching costs a retune gap and resets per-BWP CSI/SRS/PDCCH resources, the network switches deliberately — wide for a burst, narrow for the lull — and always schedules the post-switch transmission after the reported switch delay, never inside it.
TDD Pairing, and BWPs Across Carriers
On a TDD carrier the downlink and uplink share the same frequency, so their BWPs are not independent. The DL and UL BWPs that share a bwp-Id are treated as a pair, and they switch together: a DCI that moves the DL BWP moves the paired UL BWP with it. This keeps the UE's single RF chain coherent — it would make no sense to receive on one part of the band and transmit on another when the two directions time-share the same spectrum. On an FDD carrier, by contrast, DL and UL sit on separate frequencies with separate RF, so their BWPs can be switched more independently, each with its own indicator and its own inactivity behaviour on the DL side.
BWP switching also composes with carrier aggregation. Each serving cell — the PCell and every SCell — has its own BWP configuration and its own active BWP, switched on that cell. This is where the Release-16 dormant BWP earns its keep. Rather than fully deactivating an SCell (which loses its channel state and makes re-activation slow) or leaving it fully active (which burns power on PDCCH monitoring), the network can move the SCell into its dormantBWP-Id: the UE keeps measuring and reporting CSI on that cell but stops monitoring its PDCCH. Entering and leaving the dormant BWP is driven by a dedicated DCI (a special use of DCI 1_1's bitmap on the scheduling cell), so a burst of SCell traffic can be served almost immediately — the channel estimate is already warm. It is the fast-standby gear for aggregated cells.
| Context | DL/UL relationship | Note |
|---|---|---|
| TDD carrier | Paired DL & UL BWP switch together (same bwp-Id) | Single RF chain time-shares the band |
| FDD carrier | DL and UL BWPs switch independently | Separate DL/UL frequencies and RF |
| SCell (CA) | Own active BWP per cell; can enter dormant BWP | Dormant = CSI kept, no PDCCH; fast re-activation |
✅ Debugging steps
- On a TDD carrier, confirm a DL switch carried the paired UL BWP with it (same
bwp-Id); a lone DL switch is a config error. - For CA, track each serving cell's active BWP independently — a PCell switch says nothing about an SCell's state.
- On SCell dormancy, confirm CSI reporting continues while
PDCCHmonitoring stops; a dormant SCell that stops reporting CSI defeats the fast-wake purpose.
⚠ Common causes of failure
- TDD DL/UL BWP IDs configured so they cannot pair, breaking the joint switch.
- SCell fully deactivated instead of dormant — channel state goes cold and re-activation is slow.
- Dormancy DCI on the scheduling cell missed, so the SCell never wakes when traffic arrives.
The Power-Saving Story and DRX
Put the pieces together and BWP adaptation becomes a battery strategy. Configure a narrow default BWP, set a sensible bwp-InactivityTimer, and the UE naturally spends its quiet time on a small bandwidth that is cheap to monitor and cheap to keep warm. The instant real traffic appears, a DCI switches it to a wide BWP for high throughput; when the burst ends and the timer lapses, it drifts back to narrow without any signalling. The default BWP being narrow is not an accident — it is the whole point of the fallback.
This dovetails with DRX (Discontinuous Reception). DRX decides when the UE must wake to monitor PDCCH at all; BWP adaptation decides how much bandwidth it monitors while awake. Together they attack the two big drains — how often you listen and how wide you listen — so a UE can be both asleep more of the time and cheaper to run while awake. The two mechanisms even interlock in detail: the DRX active-time and the bwp-InactivityTimer both react to scheduling, and the network tunes them together so the UE narrows its bandwidth and then sleeps, rather than fighting between the two. On the SCell side, the dormant BWP plays the same tune at the cell level — keeping the channel warm without the monitoring cost.
LTE ↔ NR: LTE has no Bandwidth Part concept — a UE monitors the whole configured carrier bandwidth, and power saving relies mostly on DRX. NR introduces the BWP as a first-class object with its own numerology and control, plus dynamic per-slot DCI switching, an autonomous inactivity-timer fallback, and (Rel-16) the dormant BWP for SCells. So where LTE trades power only through the DRX duty cycle, NR adds a second axis — the width of what the UE listens to — that simply did not exist before.
Two knobs, one goal: DRX = duty cycle of listening; BWP adaptation = width of listening; dormant BWP = warm standby of extra carriers. All three exist to spend radio power only when there is traffic to justify it.
Summary
The fastest way to reason about — or root-cause — bandwidth adaptation is to identify which of the four triggers moved (or should have moved) the active BWP. DCI (DCI 1_1/0_1 with the 2-bit Bandwidth part indicator, C-RNTI, UE-specific search space) switches the UE up to a wide BWP and schedules in the same DCI; the bwp-InactivityTimer autonomously switches it down to defaultDownlinkBWP-Id when scheduling stops; RRCReconfiguration reshapes the set or the first-active BWP; and initial access / RACH just dictate where the UE begins.
Every switch costs a switch delay (TS 38.133, Type 1/Type 2, numerology-dependent) during which the UE can neither transmit nor receive, so the scheduler always places the post-switch PDSCH/PUSCH after that gap and CSI/SRS/PDCCH resources move wholesale to the new BWP. On TDD the paired DL/UL BWPs switch together; across carriers each cell switches its own BWP, and the Rel-16 dormant BWP keeps SCells warm at almost no monitoring cost. Read log-in-hand: check the switch cause, the DCI format and indicator, the old/new bwp-Id, and that k0/k2 clears the switch delay — the first field that does not line up is your root cause.
Q. How many BWPs can be configured, and how many are active at once?
A. Up to four DL and four UL BWPs per serving cell can be configured by RRC (plus the initial BWP at bwp-Id 0), but only one DL and one UL BWP are active on that cell at any instant. Switching changes which configured BWP is the active one.
Q. Which DCI field switches the BWP, how big is it, and in which formats?
A. The Bandwidth part indicator, a 2-bit field present in DCI 1_1 (downlink) and DCI 0_1 (uplink), scrambled with C-RNTI and decoded in a UE-specific search space on the currently active BWP. Its value maps to a bwp-Id; if that differs from the current active BWP, the UE switches and applies the same DCI's assignment/grant on the new BWP. The fallback formats DCI 0_0/1_0 cannot switch.
Q. What does the bwp-InactivityTimer do, and where does the UE go on expiry?
A. It runs while the UE is on a non-default DL BWP and is restarted by any scheduling activity. On expiry (no recent activity) the UE autonomously falls back to defaultDownlinkBWP-Id — usually the narrow, low-power BWP — saving battery. If no default is configured, it falls back to the initial DL BWP.
Q. Why is there a scheduling gap around a BWP switch?
A. The UE needs a BWP switch delay (TS 38.133, Type 1/Type 2 categories, numerology-dependent) to retune RF and reconfigure baseband. During that window it cannot reliably transmit or receive, so the network schedules the post-switch PDSCH/PUSCH after the delay (via k0/k2), never inside it.
Q. On a TDD carrier, do DL and UL BWPs switch separately?
A. No. On TDD the DL and UL BWPs sharing a bwp-Id are paired and switch together, because the single RF chain time-shares the band. On FDD, with separate DL/UL frequencies, they can switch independently.
Q. What is a dormant BWP and why use it?
A. A Rel-16 DL BWP (dormantBWP-Id) on which the UE keeps doing CSI measurement/reporting but stops PDCCH monitoring. Used on SCells for low-power standby with a warm channel estimate, so the cell can be re-activated almost instantly (via a DCI 1_1 dormancy indication on the scheduling cell) when traffic returns.
Where BWP switching connects
BWPs sit on top of the resource grid, are moved by the scheduler's DCI, and team up with DRX and carrier aggregation to save power.