Measurement Gaps in LTE 4G
How the UE is given gaps to measure other carriers/RATs — gap pattern 0 and 1 (6 ms every 40/80 ms) and the inter-frequency/inter-RAT measurement framework.
A typical LTE handset has one receiver. It cannot listen to your serving cell and retune to a completely different frequency at the same instant. So whenever the network wants the UE to measure carriers or radio technologies it cannot hear from where it is, the eNB hands it short, agreed windows of silence — measurement gaps — during which the UE drops all serving-cell traffic and goes hunting. This page is grounded in TS 36.331 (RRC) and TS 36.133 (requirements for radio resource management), and walks the whole chain from why a single-RF UE needs a gap, through exactly how the gap is configured and timed, to how the measurements it produces drive handover events.
Introduction
A measurement gap is a periodic, network-scheduled window — 6 ms long in LTE — during which a UE performs no serving-cell transmission or reception, so that its single receiver is free to retune and measure a cell on a different frequency or radio technology. It exists purely because of a hardware reality: a one-receiver device physically cannot be tuned to two carriers at once, so the network must carve out protected time rather than let the UE vanish at random.
Gaps sit at the heart of connected-mode mobility. In RRC_CONNECTED the eNB, not the UE, controls when the UE looks elsewhere. The gap is what makes inter-frequency and inter-RAT measurement possible at all; the neighbour levels gathered inside gaps are what feed the reporting events (A3/A4/A5, B1/B2) that ultimately trigger a handover. Without gaps, the UE could measure only the carrier it is already camped on.
Because gaps cost airtime — every 6 ms measuring is 6 ms not exchanging data — the network configures them deliberately, arms them when the serving signal weakens, and releases them when the hunt is over. Understanding the gap is therefore both a configuration skill (which pattern, which offset, delivered in which IE) and a debugging skill (why is a UE not reporting a neighbour it should be able to see?).
On this page
- Why a single-RF UE needs gaps
- Gap configuration — MeasGapConfig
- Gap Pattern 0 and Gap Pattern 1
- What happens on the air — a timeline
- The throughput cost, and when no gap is needed
- How gap measurements feed the reporting events
- Carrier aggregation considerations
- Reading gap configuration in the logs
- LTE ↔ NR
- Summary
Why a Single-RF UE Needs Gaps
In plain words: imagine you are on a phone call and someone asks, "is the other line ringing?" You only have one ear on the handset, so you have to pull it away, listen to the other line for a moment, then put it back. During that moment you miss whatever the first caller said. A measurement gap is the network agreeing in advance that the UE may pull the phone away from its ear for exactly 6 ms — so nobody is surprised when it goes briefly silent.
Radio measurements come in two flavours from the UE's point of view. Intra-frequency measurements are of neighbour cells on the same carrier the UE is already camped on — it can gather those in the normal course of receiving, because its receiver is already tuned there. Inter-frequency (a different LTE carrier) and inter-RAT (UMTS/WCDMA, GSM, or, in later releases, NR) measurements are the hard case: the neighbour lives on a different centre frequency, and a single-receiver UE has to physically retune its RF front end to look at it.
While the receiver is retuned elsewhere, it is deaf to the serving cell. It cannot decode PDCCH, cannot receive PDSCH, and must not transmit either — anything the eNB schedules to that UE during the window is simply lost. The network cannot allow that to happen at random, unknown moments, so it schedules the absences itself. In effect it tells the UE, "for these 6 ms, on this recurring cadence, you are excused — go and measure." That agreed, protected window is a measurement gap.
A periodic window (6 ms long) during which the UE performs no serving-cell transmission or reception, freeing its single receiver to retune and measure other frequencies or RATs. Configured by MeasGapConfig inside measConfig.
A one-receiver UE physically cannot receive the serving cell and a different carrier at once. Inter-frequency and inter-RAT measurements need retuning, so the eNB must carve out protected time rather than let the UE disappear unpredictably.
RRC sends measGapConfig with a gapOffset that selects a standardized pattern (Gap Pattern 0 or 1 from TS 36.133) and its timing offset. The eNB then schedules serving-cell traffic around the recurring 6 ms holes.
Rule of thumb: intra-frequency measurements usually need no gap (the UE is already on the right carrier). Inter-frequency and inter-RAT measurements need a gap because the receiver must retune away from the serving cell to reach them.
There is a subtlety worth stating up front. Whether a gap is needed is partly a UE-capability question, not purely a geometry question. Some UEs signal, via InterFreqBandInfo/needForGaps capability fields, that for particular band combinations they can measure a given inter-frequency carrier without interrupting the serving cell — for example when a second receive chain or a wide enough RF can cover both. Where the capability says no gap is required, the eNB simply does not configure one. The rest of this page assumes the common case: a single-RF UE that genuinely must go dark to look elsewhere.
Gap Configuration — MeasGapConfig
Gaps are configured through the measGapConfig field of the measConfig IE, delivered inside an RRCConnectionReconfiguration on SRB1 (DL-DCCH). It is a simple setup / release CHOICE: setup installs a gap pattern, release tears it down. The only real parameter carried under setup is gapOffset, and its type encodes two pieces of information at once — which pattern to use, and where in the radio frame the gap falls.
gapOffset is itself a CHOICE between gp0 and gp1: choosing gp0 selects Gap Pattern 0, choosing gp1 selects Gap Pattern 1. The integer value you assign is the gap offset itself, which fixes the exact SFN and subframe where each gap begins, so gaps land in a known, collision-free place relative to the frame boundary. Because the offset range differs with the pattern's period, gp0 takes a value 0–39 (one per subframe within the 40 ms period) and gp1 takes 0–79 (within the 80 ms period). The two patterns are not free-form; they are fixed rows in TS 36.133, so any UE and any eNB agree on exactly what "Pattern 0" and "Pattern 1" mean.
Concretely, the gap's start is derived from the offset by the relation the standard fixes between the pattern and the frame timing: a gap subframe occurs when the current system frame and subframe satisfy the pattern's periodicity counted from the configured gapOffset. In plain terms — the offset says "the first gap of each period starts here," and the period (MGRP) then repeats it. This lets the eNB place a UE's gaps where its own scheduler has the least to lose, and (with multiple UEs) stagger different UEs' gaps so they do not all vanish in the same subframes.
Where the 6 ms goes: of the MGL, a slice at each end is consumed by receiver retuning (RF settling), and the middle is the useful measurement time. That is why the gap is 6 ms rather than, say, 1 ms — a shorter window would be swallowed by retuning overhead with nothing left over to actually measure the target.
✅ Debugging steps
- Confirm the eNB actually sent a
measGapConfigwithsetup— a UE with only inter-frequencymeasObjectsbut no gap can never gather those measurements. - Check the
gapOffsetCHOICE (gp0vsgp1) and its integer value; verify it is within the legal range (0–39 forgp0, 0–79 forgp1). - Verify the UE acknowledged the reconfiguration with
RRCConnectionReconfigurationComplete— an unapplied config means no gaps on the air. - Confirm the scheduler is honouring the gap subframes — grants issued to that UE inside a gap subframe are wasted and desynchronise HARQ.
⚠ Common causes of failure
- No gap configured at all, so the UE never measures the inter-frequency/inter-RAT target and no A3/A4/A5/B1/B2 event can fire.
- Gap collides with other periodic uplink (SRS/CQI/PUCCH) or with critical DL, hurting throughput more than expected because placement (
gapOffset) was poorly chosen. - UE capability actually needed no gap (
needForGaps= not required), so the configured gap wastes airtime for nothing. MGRPtoo long (Pattern 1) for the mobility speed, so measurements converge too slowly and the handover fires late.
Gap Pattern 0 and Gap Pattern 1
Two quantities define each pattern. The Measurement Gap Length (MGL) is how long each individual gap lasts — 6 ms in both LTE patterns. The Measurement Gap Repetition Period (MGRP) is how often a gap recurs — 40 ms for Pattern 0 and 80 ms for Pattern 1. So Gap Pattern 0 is "6 ms every 40 ms" and Gap Pattern 1 is "6 ms every 80 ms." The 6 ms length is deliberately generous: it must cover retuning out, the measurement of the target carrier, and retuning back to the serving cell — all inside the one window.
| Gap pattern | MGL (gap length) | MGRP (repetition period) | Selected by | Typical use |
|---|---|---|---|---|
| Gap Pattern 0 | 6 ms | 40 ms | gapOffset = gp0 (0–39) | Faster neighbour discovery and tracking; more measurement opportunities, higher throughput cost (≈15% duty). |
| Gap Pattern 1 | 6 ms | 80 ms | gapOffset = gp1 (0–79) | Lighter overhead; gaps half as often, so serving throughput is better protected but measurements converge more slowly (≈7.5% duty). |
Note the duty cycle, which is the whole trade-off in one number. Pattern 0 spends 6 ms out of every 40 ms measuring — roughly 15% of the time the UE is unavailable to the serving cell. Pattern 1 spends 6 ms out of every 80 ms, roughly 7.5%. Pattern 0 finds and refreshes neighbour measurements about twice as fast; Pattern 1 costs the serving cell about half as much airtime. The measurement-period and reporting-delay requirements in TS 36.133 scale accordingly: with a longer MGRP the UE simply gets fewer samples per unit time, so the standard allows it correspondingly longer to deliver a valid cell measurement.
One gap, many targets: a single configured gap pattern serves all the frequencies and RATs on the UE's measurement object list. The UE time-shares its gap occasions across the targets it has been asked to measure — which is another reason the more frequent Pattern 0 helps when there are several carriers or RATs to keep an eye on.
What Happens on the Air — a Timeline
Picture the serving carrier as a stream of 1 ms subframes. Most of the time the UE is receiving and transmitting normally. Then a gap arrives: for 6 ms the UE goes quiet on the serving cell, retunes, measures the neighbour, and retunes back. With Pattern 0 this repeats every 40 ms; with Pattern 1, every 80 ms.
The eNB knows exactly when these holes occur — it configured them via the gapOffset — so its scheduler simply avoids allocating PDSCH/PUSCH to that UE during the gap subframes. TS 36.133 defines precisely how the gap interacts with the rest of the physical layer: HARQ processes that would fall in the gap are suspended and resumed around it, periodic reporting such as CQI/SRS that collides with the gap is dropped for those subframes, and DRX timers are handled so that nothing is silently lost. The point is that everything about the gap is deterministic on both sides.
✅ Debugging steps
- Cross-check the gap subframes computed from
gapOffsetagainst the subframes where the scheduler actually stopped granting — they must coincide. - Confirm HARQ processes overlapping the gap are suspended/resumed rather than timed out, and that no
PDSCHwas scheduled into a gap. - Verify dropped
CQI/SRSin gap subframes are treated as dropped (not as errors that trigger power control or link adaptation swings).
⚠ Common causes of failure
- Scheduler grants
PDSCH/PUSCHin a gap subframe — the UE never sees it, causing spurious HARQ NACKs/retransmissions. - Gap overlaps the UE's PRACH/SR occasion, delaying uplink access.
- UE and eNB disagree on gap timing because of an SFN mismatch after re-establishment, so measurements land in the wrong subframes.
The Throughput Cost, and When No Gap Is Needed
Gaps are not free. Every 6 ms the UE spends measuring is 6 ms it is not exchanging data with the serving cell, so per-UE throughput dips whenever gaps are active — noticeably more with Pattern 0 (≈15% duty) than with Pattern 1 (≈7.5%). Both downlink and uplink take the hit, because during the gap the UE neither receives PDSCH nor is allowed to transmit PUSCH/PUCCH. The eNB scheduler also has to work harder: it must route real traffic around the recurring holes for that specific UE while still serving everyone else normally.
Because of this cost, gaps are configured only when needed. If the UE has only intra-frequency neighbours to track, no gap is set up at all — it measures those without retuning, in the ordinary flow of reception. The eNB typically arms gaps when the serving signal has weakened enough that it is worth looking for somewhere better to go — frequently triggered by an A2 "serving becomes worse than threshold" event, which is the network's cue to start (or intensify) inter-frequency and inter-RAT measurements. When the neighbour hunt is finished, or the serving signal recovers (an A1 "serving better than threshold" event), the eNB can release the gap and hand the airtime straight back.
| Measurement | Neighbour is on… | Retune needed? | Gap needed? |
|---|---|---|---|
| Intra-frequency | the same carrier as serving | No | No (measured while receiving normally) |
| Inter-frequency | a different LTE carrier | Yes | Yes (unless UE capability says otherwise) |
| Inter-RAT | UMTS / GSM / NR | Yes | Yes |
Mental model: a gap is the eNB lending the UE its own ears for a moment. It only makes that loan when it needs the UE to look somewhere it otherwise cannot reach — and it takes the ears back as soon as the looking is done.
How Gap Measurements Feed the Reporting Events
Gaps produce raw measurements; those measurements only matter because they drive reporting events. The neighbour RSRP/RSRQ (or the RAT-specific equivalent) that the UE gathers inside its gaps is evaluated against the entry/exit criteria configured in reportConfig. When a criterion is satisfied for the duration of timeToTrigger, the UE fires a MeasurementReport on SRB1, which is what actually lets the eNB decide on a handover.
| Event | Measurement type | Meaning (plain) | Needs a gap? |
|---|---|---|---|
A3 | Inter-frequency (also intra) | Neighbour becomes an offset better than the serving cell. | Yes, for inter-freq neighbours. |
A4 | Inter-frequency | Neighbour becomes better than an absolute threshold. | Yes. |
A5 | Inter-frequency | Serving worse than threshold-1 AND a neighbour better than threshold-2. | Yes. |
B1 | Inter-RAT | Inter-RAT neighbour (UMTS/GSM/NR) better than a threshold. | Yes. |
B2 | Inter-RAT | Serving worse than threshold-1 AND inter-RAT neighbour better than threshold-2. | Yes. |
So the chain is: gap → measure neighbour → event (A3/A4/A5 or B1/B2) → MeasurementReport → handover decision. Without gaps, the inter-frequency and inter-RAT events could never gather the data they test. It is worth being precise about the division of labour: A1 and A2 concern the serving cell only and never need a gap (the UE is always listening to serving); they are the events that commonly arm and disarm gap-based measurement. A3/A4/A5 evaluate inter-frequency LTE neighbours; B1/B2 evaluate inter-RAT neighbours. The A5 and B2 events are the "both conditions" events — serving has degraded and a good target exists — and are the classic triggers for a coverage-driven handover or an inter-RAT redirection.
The offset that matters: because inter-frequency neighbours are measured on a different carrier, the network can apply a per-frequency offset (q-OffsetFreq) and per-cell offsets so that A3/A5 comparisons stay fair even when two carriers have different propagation or loading. The measurement itself comes from the gap; the offsets decide whether it counts as "better."
✅ Debugging steps
- Confirm the target frequency has a matching
measObjectand areportConfigbound by ameasId— a gap with no measurement object to point at gathers nothing useful. - Check the neighbour
RSRP/RSRQthe UE reports inside gaps against the event thresholds and offsets (a3-Offset,q-OffsetFreq, cell-individual offsets). - Verify
timeToTriggeris not so long that a fast-fading neighbour never sustains the condition.
⚠ Common causes of failure
- Gap present but no
measObject/measIdfor the target frequency, so nothing is measured despite the airtime cost. - Offsets/thresholds mis-set, so a genuinely better neighbour never crosses the entering condition.
- Neighbour never detected because the gap is too infrequent (Pattern 1) for the UE speed, so the measurement period in TS 36.133 is not met.
Carrier Aggregation Considerations
Carrier aggregation complicates the "when is a gap needed?" question, because a CA UE already spans several carriers at once. The key idea from TS 36.133 is that a carrier that is part of the UE's own aggregated set does not require a gap to be measured — the UE is already receiving it. So a frequency that is an inter-frequency neighbour for one UE may be an activated SCell for a CA UE, and for that CA UE it needs no gap at all.
Gaps become necessary again only when the CA UE must measure a carrier that is outside its configured/activated set — a genuine inter-frequency neighbour it is not currently aggregating, or an inter-RAT target. There is an important asymmetry: a measurement gap in LTE applies to all serving cells of the UE simultaneously. When the gap opens, every configured component carrier goes quiet together, because the single RF has retuned away. That is why gaps are comparatively expensive for a CA UE — the interruption is not to one carrier but to the whole aggregated pipe. Later releases introduced per-CC and per-UE gap flexibility to soften this, but the baseline behaviour is one gap, all cells dark.
SCell measurement: the UE reports whether it needs gaps to measure a particular carrier through its capability signalling, and this is evaluated per band combination. The eNB uses that to decide whether to add a carrier as an SCell (no gap) or keep measuring it via gaps (interruption to all CCs). The trade-off is directly a throughput one, so the network weighs it deliberately.
Reading Gap Configuration in the Logs
On the UE side, a measurement gap shows up as an ASN.1 decode of the RRCConnectionReconfiguration that installed it — specifically the measConfig → measGapConfig subtree. This is the single most useful thing to check first: is the gap actually there, which pattern is it, and where does it start?
Representative UE RRC log (ASN.1 decode) — illustrative, values vary by vendor/build:
| Field | Meaning | Example (from log) | Check |
|---|---|---|---|
measGapConfig | Presence/absence of a gap; setup installs one, release removes it. | setup | If absent while inter-freq/inter-RAT measObjects exist, the UE cannot measure them — the most common root cause. |
gapOffset (CHOICE) | Selects the pattern: gp0 → Pattern 0 (40 ms), gp1 → Pattern 1 (80 ms). | gp0 | Confirm the pattern matches the mobility need; Pattern 1 converges too slowly for fast UEs. |
gapOffset value | Integer offset that fixes the SFN/subframe where each gap begins. | 3 | Must be in range (0–39 for gp0); recompute the gap subframes and confirm the scheduler avoids them. |
carrierFreq | EARFCN of the frequency the gap is meant to let the UE measure. | 1850 | Must correspond to a real neighbour deployment; a wrong EARFCN measures empty spectrum. |
eventId / a3-Offset / timeToTrigger | The reporting event the gap measurements feed. | a3 / 3 / ms320 | If the gap works but no report fires, the offset/TTT is the suspect, not the gap. |
How to read it top-down: the measObject says what frequency, the reportConfig says what condition, the measId binds them, and measGapConfig says whether the UE is even allowed to go look. A missing or mis-scoped measGapConfig breaks the whole chain while every other IE looks perfectly correct.
A Note on NR
5G NR keeps the same core idea — a single RF still cannot be in two places at once — but generalises it. Instead of two fixed LTE patterns, NR defines per-FR gaps (a gap for FR1, a gap for FR2, or a single per-UE gap) so a UE need not go dark on both frequency ranges at once, and it pairs gaps with the SMTC (SS/PBCH Measurement Timing Configuration) window that tells the UE exactly when the target cell's SSBs appear — so the gap can be aimed precisely at the beacon rather than left open blindly, and NR also offers a richer set of gap lengths and periods than LTE's two rows.
LTE ↔ NR: LTE configures gaps in MeasGapConfig with just two fixed patterns (0/1), both MGL 6 ms, MGRP 40/80 ms, and one gap covers all serving cells. NR configures them in MeasGapConfig too, but with a table of MGLs and MGRPs, per-UE / per-FR gap scope, and an explicit SMTC so the UE measures only when SSBs are on air. LTE has no SMTC concept because its always-on CRS lets the UE measure any time it is tuned there; NR's SSBs are periodic, so gap and SMTC must be aligned.
Summary
A measurement gap is the network's deliberate, scheduled loan of the UE's single receiver: a 6 ms window in which the UE goes silent on the serving cell to retune and measure a carrier or RAT it otherwise cannot reach. LTE offers exactly two shapes — Gap Pattern 0 (6 ms / 40 ms, ≈15% duty, fast) and Gap Pattern 1 (6 ms / 80 ms, ≈7.5% duty, light) — selected and timed by the gapOffset CHOICE inside measGapConfig.
Intra-frequency needs no gap; inter-frequency and inter-RAT do (unless UE capability says otherwise). The measurements gaps produce feed the A3/A4/A5 (inter-freq) and B1/B2 (inter-RAT) events, whose MeasurementReport is what actually triggers a handover. When debugging "the UE won't hand over to a neighbour it should see," walk the chain in order: is there a measObject for that frequency, a reportConfig and measId binding it, and — crucially — a measGapConfig letting the UE go look? The missing link is usually the gap, and every other IE will look fine while it is absent.
Q. Why does an inter-frequency measurement need a gap but an intra-frequency one usually does not?
A. A single-receiver UE is already tuned to the serving carrier, so intra-frequency neighbours (same carrier) can be measured while receiving normally. An inter-frequency or inter-RAT neighbour is on a different frequency, so the receiver must retune away from the serving cell — during which it cannot receive serving data. The eNB grants a gap to protect that retune-and-measure window.
Q. What are the two LTE gap patterns, and what does gapOffset select?
A. Both patterns have a 6 ms MGL. Gap Pattern 0 repeats every 40 ms (MGRP); Gap Pattern 1 repeats every 80 ms. The gapOffset in measGapConfig is a CHOICE — gp0 selects Pattern 0, gp1 selects Pattern 1 — and its integer value also fixes the SFN/subframe offset where each gap begins.
Q. What does the UE actually do during the 6 ms gap, and what is the cost?
A. It performs no serving-cell TX or RX. It retunes its RF to the target frequency/RAT, measures the neighbour (RSRP/RSRQ, or the equivalent for UMTS/GSM/NR), then retunes back — all within the 6 ms, which is why the length allows retuning at both ends. The cost is throughput: about 15% of airtime with Pattern 0, 7.5% with Pattern 1.
Q. How do gap measurements end up causing a handover?
A. The neighbour levels the UE measures in its gaps are tested against the criteria in reportConfig. When an A3/A4/A5 (inter-freq) or B1/B2 (inter-RAT) condition holds for timeToTrigger, the UE sends a MeasurementReport, and the eNB uses that report to decide and command the handover.
Q. Does a CA UE need a gap to measure one of its own SCells?
A. No. A carrier that is part of the UE's configured/activated aggregated set is already being received, so no gap is needed to measure it. Gaps are only needed for carriers or RATs outside that set — and when a gap opens it silences all of the CA UE's serving cells at once.
Where measurement gaps connect
Gaps exist to feed the measurement machinery, and their output drives mobility. The neighbour data gathered in gaps is exactly what the reporting events evaluate, and the reselection and handover logic then act on. Follow these next.