>
HomeLTE 4GRRC — Radio Resource ControlMeasurements & Events
🗂️ RRC — Radio Resource ControlIntermediate

Measurements & Events (A1–A5, B1/B2) in LTE 4G

How RRC configures measurements and how events A1–A5 (intra-LTE) and B1/B2 (inter-RAT) trigger a MeasurementReport.

📚 3GPP-basedTS 36.331

A UE in LTE never hands itself over. It measures the serving cell and its neighbours, smooths those raw numbers into stable values, and reports to the eNB only when something worth acting on happens — the eNB alone makes the mobility decision. This page is about the machinery that tells the UE what to measure, when a measurement is worth reporting, and how the report travels back. That machinery is the measConfig IE, delivered inside an RRCConnectionReconfiguration, and the MeasurementReport it produces (TS 36.331).

Introduction

Connected-mode measurements are the RRC framework (TS 36.331) that feeds every handover decision in LTE. The eNB hands the UE a set of measurement objects, report configurations, and the links between them; the UE evaluates them continuously against the live radio and sends a MeasurementReport only when a configured condition fires. The physical quantities themselves — RSRP, RSRQ, RSSI — are defined in TS 36.214.

This machinery runs in RRC_CONNECTED, once the UE has a bearer and a C-RNTI, and it is the direct precursor to network-controlled mobility: intra-frequency and inter-frequency handover, inter-RAT fallback to 3G/2G, load-balancing, and redirection. Unlike idle-mode reselection — which the UE decides alone — here the UE only supplies evidence; the eNB owns the decision and issues the handover command.

Because the whole chain is a set of cooperating pieces — object (what) + report config (when) bound by a measId, stabilised by layer-3 filtering, delivered through measurement gaps — a mobility problem almost always localises to one piece: a wrong object frequency, an event threshold that never fires, a filter too heavy, or a gap never configured. Knowing which piece broke turns "handover isn't happening" into a specific parameter to check.

Why measurements are needed

💡

In plain words: think of the UE as a scout radioing back to headquarters. HQ (the eNB) can't see the terrain the scout is walking through, so it can't decide when to move them. Instead it gives the scout a standing order: "only call in when the hill ahead is clearly higher than the one you're on, and only after you've watched it stay higher for a full minute." The scout does the watching; HQ makes the call to move. That keeps the radio channel quiet and the decisions clean — no chatter about every little bump.

Concretely, before any handover the eNB needs radio evidence it cannot gather itself: how strong is the serving cell right now, and is any neighbour clearly better? The naive approach — stream raw samples continuously — would drown the uplink and still deliver noisy data. So LTE flips it: configure the UE to watch for specific conditions and speak up only when one is met and stays met. That keeps the air interface quiet, and it makes the mobility decision repeatable, because every report already represents a condition the network chose to care about.

What

A measurement framework in RRC (TS 36.331) where the eNB hands the UE a set of measurement objects, report configurations, and links between them, plus filtering and gap settings. The UE returns a MeasurementReport when a configured condition fires.

Why

Mobility decisions need current radio-quality data on both the serving cell and its neighbours. Event-triggered reporting delivers that evidence only when it matters — a neighbour gets strong, the serving cell gets weak — instead of flooding the network with periodic noise.

How

Three add/mod lists inside measConfig: measObjectToAddModList, reportConfigToAddModList, and measIdToAddModList. The last is the glue that binds an object to a report config, and alongside them sit quantityConfig and measGapConfig.

🎯

The core idea: a measObject (what to measure) plus a reportConfig (when to report) become a single measurement identity through a measId. Everything on this page hangs off that one binding, and the UE echoes the measId back so the eNB knows exactly which pairing fired.

measConfig — anatomy of the configuration

The measConfig IE is the complete instruction sheet the eNB sends to configure UE measurements. It is not one flat blob; it is a small set of cooperating parts, each an add/modify/remove list so the eNB can incrementally reconfigure a UE without resending everything. When the UE receives a measConfig inside an RRCConnectionReconfiguration, it merges each list into its stored measurement configuration (its VarMeasConfig) and then evaluates the results continuously.

Four things travel together. The objects (measObjectToAddModList) name the frequency layers to watch. The report configs (reportConfigToAddModList) define the conditions and the reporting behaviour. The measurement identities (measIdToAddModList) pair one object with one report config. And two cross-cutting settings apply to the whole configuration: quantityConfig (the layer-3 filtering) and measGapConfig (the gaps that let a single-receiver UE go off-frequency). There are matching ...RemoveList variants for each list so the eNB can tear entries down.

Component of measConfigCarriesRole
measObjectToAddModListMeasObjectEUTRA / MeasObjectUTRA / MeasObjectGERAN / MeasObjectCDMA2000, each with a measObjectIdOne frequency layer to watch (E-UTRA or inter-RAT)
reportConfigToAddModListReportConfigEUTRA or ReportConfigInterRAT, each with a reportConfigIdThe trigger condition and how/when to report
measIdToAddModListMeasIdToAddMod = measId + measObjectId + reportConfigIdBinds one object to one report config — the measurement identity
quantityConfigQuantityConfigEUTRA (and per-RAT variants) with filterCoefficientLayer-3 filtering of rsrp/rsrq before events are evaluated
measGapConfigGap pattern (gp0/gp1) and offset, or releasePeriodic gaps so the UE can retune to measure off-frequency
s-MeasureServing-cell RSRP thresholdBelow it the UE bothers measuring neighbours; above it it may skip them
📘

Spec: measConfig and all its sub-lists are defined in TS 36.331. The UE keeps the merged result in the internal variable VarMeasConfig and the per-measId event state in VarMeasReportList. Add/mod lists mean a reconfiguration only needs to carry what changed.

measObject — what to measure

Every measurement starts with an object that names a piece of spectrum. For LTE that object is a MeasObjectEUTRA, and it answers "which carrier frequency should I watch, and how wide?" Each entry in measObjectToAddModList is tagged with a measObjectId. Its key fields are carrierFreq (the E-UTRA carrier as an EARFCN) and allowedMeasBandwidth (how many resource blocks the UE is allowed to average over — 6, 15, 25, 50, 75, or 100 RB). It also carries neighCellConfig, two-bit information about the MBSFN and TDD configuration of neighbour cells on that frequency so the UE knows how to interpret what it measures there.

Beyond those, a MeasObjectEUTRA can carry a neighbour cell list (cellsToAddModList) with per-cell cellIndividualOffset values, a blacklist (blackCellsToAddModList) of cells the UE must not report, and a frequency-wide offsetFreq. Measuring the serving carrier is intra-frequency; a second MeasObjectEUTRA at a different carrierFreq makes it inter-frequency. The clean mental model: one measObjectId equals one frequency layer to be watched.

Neighbours on another radio technology each need their own object type. A MeasObjectUTRA names a 3G UTRAN carrier (its carrierFreq is a UARFCN), a MeasObjectGERAN names a set of 2G GSM ARFCNs with a band indicator, and a MeasObjectCDMA2000 names a CDMA2000 (1xRTT / HRPD) carrier by band class and frequency. These inter-RAT objects are what make coverage-driven fallback to legacy networks possible, and they are always paired with a ReportConfigInterRAT carrying B1 or B2, never an A-series event.

📘

Spec: MeasObjectEUTRA defines carrierFreq, allowedMeasBandwidth and neighCellConfig for E-UTRA measurement; inter-RAT layers use MeasObjectUTRA / MeasObjectGERAN / MeasObjectCDMA2000. Each object is only ever referenced through its measObjectId.

✅ Debugging steps

  • Confirm each MeasObjectEUTRA's carrierFreq (EARFCN) actually matches the target layer you expect the UE to move to — a wrong EARFCN means the UE watches empty spectrum.
  • Check allowedMeasBandwidth is wide enough for a stable RSRP/RSRQ estimate and consistent with the neighbour's real bandwidth.
  • Verify the intended neighbour is not sitting in blackCellsToAddModList, and that any cellIndividualOffset is the sign you intend.
  • For inter-RAT, confirm the object type matches the target RAT (MeasObjectUTRA/GERAN/CDMA2000) and is paired with a B-series report config, not an A-series one.

⚠ Common causes of failure

  • Wrong or missing carrierFreq, so the object points at the wrong layer and no neighbour is ever measured.
  • The target neighbour blacklisted or excluded by neighCellConfig, silently dropping it from reports.
  • An unintended cellIndividualOffset/offsetFreq biasing a neighbour out of contention.
  • Inter-RAT object paired with an A-series event (or vice-versa), so the pairing never triggers.

reportConfig — when and how to report

An object tells the UE where to look. A report config tells it what condition makes a measurement worth sending, and what the report should contain. Each entry in reportConfigToAddModList is a ReportConfigEUTRA (intra-LTE) or a ReportConfigInterRAT (inter-RAT), identified by a reportConfigId. The first choice inside it is triggerType: event (report when a condition is met) or periodical (report on a timer regardless of any threshold, used mainly for network-controlled measurement logging and for reporting the strongest cells).

For an event-triggered config you specify an eventId — A1, A2, A3, A4, A5 for intra-LTE, or B1, B2 for inter-RAT — each carrying its own thresholds or offset. Around the event sit the two anti-ping-pong knobs and the leave behaviour:

  • hysteresis — a margin added to the condition so the UE does not flip-flop around the boundary. It widens the gap between the entering and leaving thresholds.
  • timeToTrigger (timeToTrigger) — the condition must stay true continuously for this long (e.g. 40, 100, 320, 640 ms) before the UE actually reports.
  • reportOnLeave — send an extra report when the leaving condition becomes satisfied, so the eNB learns the event has ended.

Independent of the event, the config sets triggerQuantity (whether the event is evaluated on rsrp or rsrq), reportQuantity (what the report includes — sameAsTriggerQuantity or both), and the repetition behaviour: reportInterval (how often to repeat once triggered, from ms120 up to minutes) and reportAmount (how many reports to send — 1, 2, 4, …, 64, or infinity). maxReportCells caps how many neighbours a single report may list. The table below groups these.

Field in ReportConfigEUTRAValues (examples)What it controls
triggerTypeevent / periodicalCondition-driven vs timer-driven reporting
eventIdA1–A5 (or B1/B2)Which entering/leaving condition applies
hysteresis0–15 (0.5 dB steps)Margin separating entering from leaving
timeToTrigger0…5120 msHow long the condition must persist
triggerQuantityrsrp / rsrqWhich quantity the event is evaluated on
reportQuantitysameAsTriggerQuantity / bothWhich quantities the report carries
reportInterval / reportAmountms120…min60 / 1…infinityRepeat cadence and count once triggered
maxReportCells1–8Max neighbours listed per report
🎯

Two clocks, one purpose: hysteresis works in the amplitude domain and timeToTrigger works in the time domain, but both exist to suppress ping-pong. A momentary fade that is deep enough to cross a raw threshold still has to be deep enough to beat hysteresis and last longer than timeToTrigger before it costs a report.

The events: A1–A5 and B1–B2

The event is the heart of a report config. Each event has an entering condition and a mirror-image leaving condition, and hysteresis is applied so the two never coincide. The A-series compares E-UTRA cells; the B-series brings in an inter-RAT neighbour. Learn what each one is for, not just its inequality, because the network picks events by intent.

EventEntering conditionTypical use
A1Serving becomes better than a thresholdStop measurement gaps / cancel inter-freq measuring once serving recovers
A2Serving becomes worse than a thresholdStart gaps / prepare handover; trigger blind redirection or RRC release
A3Neighbour becomes better than serving by an offsetClassic intra-frequency (and equal-priority inter-freq) handover
A4Neighbour becomes better than a thresholdLoad-balancing handover; coverage-triggered inter-freq
A5Serving worse than Thresh1 AND neighbour better than Thresh2Handover only when the serving cell is genuinely failing
B1Inter-RAT neighbour becomes better than a thresholdCoverage-based handover to UTRAN / GERAN / CDMA2000
B2Serving worse than Thresh1 AND inter-RAT neighbour better than Thresh2Fallback to 3G/2G when LTE coverage is failing

A3 is the workhorse for intra-frequency handover. Its entering condition compares the neighbour to the serving cell after applying offsets and hysteresis:

Mn + Ofn + OcnHys > Ms + Ofs + Ocs + Off

Where Mn is the neighbour measurement result, Ofn and Ocn are the frequency-specific offsetFreq and cell-specific cellIndividualOffset for the neighbour, Hys is the hysteresis, Ms is the serving-cell measurement, Ofs/Ocs are the serving frequency/cell offsets, and Off is the event's a3-Offset. In plain terms: the neighbour must beat the serving cell by more than the offset plus hysteresis, and stay that way for timeToTrigger. The leaving condition flips the inequality and adds hysteresis on the other side, so a neighbour that dips back only marginally does not clear the event.

🎯

A3 vs A5: A3 is relative — neighbour versus serving. A5 is absolute on both sides — serving must drop below a5-Threshold1 and a neighbour must rise above a5-Threshold2 at the same time. A5 is chosen when you want handover only when the serving cell is genuinely failing, so you never hand off a still-healthy connection just because a neighbour edged ahead.

The B-series mirrors this for inter-RAT. B1 is the inter-RAT analogue of A4 (a legacy neighbour crosses an absolute threshold), and B2 is the analogue of A5 (serving is failing and a legacy neighbour is strong enough to catch the UE). Because inter-RAT measurement is expensive, B-series events are almost always gated behind an A2 that starts the measurement gaps in the first place.

✅ Debugging steps

  • Identify which event should drive the intended move (A3 for intra-freq / equal-priority, A4/A5 for coverage or load, B1/B2 for inter-RAT) and confirm that event is actually configured.
  • Plug the trace's filtered Mn/Ms into the event inequality with the real a3-Offset/thresholds, hysteresis, and offsets — check whether the entering condition is even reachable.
  • Confirm the condition held continuously for timeToTrigger; a condition that keeps resetting never reports.
  • For B1/B2, verify the gating A2 fired first so gaps exist — without gaps the inter-RAT neighbour is never measured.

⚠ Common causes of failure

  • a3-Offset or A5 thresholds set so tight the event never enters (no handover) or so loose it ping-pongs.
  • timeToTrigger too long for a fast mover, so the UE loses the serving cell before the report is sent.
  • Wrong triggerQuantity (evaluating on RSRP when the problem is RSRQ/load, or vice-versa).
  • B-series event with no gating A2, so measurement gaps never start and the inter-RAT neighbour stays invisible.

measId — the glue

You now have objects (what) and report configs (when), but they live in separate lists and nothing happens until you connect them. That connection is the measId. Each entry in measIdToAddModList is a MeasIdToAddMod carrying exactly three things: a measId, a measObjectId, and a reportConfigId. It says: "watch this object with this report config, and call the pairing this measId." Only now does the UE have a complete, self-contained measurement identity it can start evaluating.

🎯

Say it out loud: the measId is the glue — one measurement object plus one report config become one measurement identity. The same object can be reused under several measIds (A3 and A5 on the same neighbour layer), and the same report config can be reused across frequencies. The measId is also what the UE echoes back in the report, so the eNB knows precisely which pairing fired.

This many-to-many flexibility is the quiet power of the framework. One neighbour frequency (measObjectId) might feed an A1, an A2, an A3, and an A5 config simultaneously, each under its own measId. When the eNB wants to stop watching for one condition, it removes a single measId via measIdToRemoveList without disturbing the object or the report config, which other identities may still be using.

✅ Debugging steps

  • For the missing handover, confirm a MeasIdToAddMod actually binds the intended measObjectId to the intended reportConfigId — an object and a report config both present but never paired do nothing.
  • Check the measId the UE echoes in MeasurementReport matches the pairing you expect fired.
  • Verify a reconfiguration did not remove the needed measId via measIdToRemoveList while leaving the object/report config in place.

⚠ Common causes of failure

  • Object and report config configured but never linked by a measId, so the UE evaluates nothing.
  • A measId pointing at the wrong measObjectId or reportConfigId (e.g. A5 wired to the serving layer).
  • Accidental removal of a measId in an incremental reconfiguration, silently disabling that pairing.

RSRP, RSRQ and layer-3 filtering

Everything above assumes the UE has a stable number to compare. It does not, natively — the physical layer produces noisy per-sample estimates that would trigger events on ordinary fading dips. Two things fix this: well-defined measurement quantities (RSRP and RSRQ) and a layer-3 filter that smooths them before any event logic ever sees them.

RSRP (Reference Signal Received Power) is the linear average, in watts, of the power contributions of the resource elements that carry cell-specific reference signals, within the measurement bandwidth — an absolute signal-strength measure. RSRQ (Reference Signal Received Quality) is defined as N × RSRP / RSSI, where N is the number of resource blocks over which RSSI is measured and RSSI is the total wideband received power (signal + interference + noise). RSRP tells you how strong your cell is; RSRQ tells you how clean it is relative to everything else on the band, which is why RSRQ falls under load even when RSRP holds steady.

QuantityDefinitionReads asBest for
RSRPLinear average power of the cell-specific reference-signal REs (per RE)Absolute strength, typ. −44 to −140 dBmCoverage, path loss, cell ranking by power
RSRQN × RSRP / RSSI over N resource blocksRelative quality, typ. −3 to −19.5 dBLoad / interference sensitivity, tie-breaking
RSSITotal wideband received power (signal + interference + noise)Denominator of RSRQ (not reported alone)Capturing how busy / noisy the band is

Both are then smoothed by quantityConfig. The quantityConfig IE (a QuantityConfigEUTRA for the E-UTRA case, with per-RAT siblings) carries the layer-3 filterCoefficient applied to rsrp and rsrq before events are evaluated. The filter is a first-order IIR: each new physical-layer-reported value is blended with the running average.

Fn = (1 − a)·Fn−1 + a·Mn, with a = (1/2)k/4

Here k is filterCoefficient and Mn the latest layer-1 value. A larger k means heavier smoothing and slower response; a smaller k tracks the radio more closely; fc0 effectively disables filtering. The filtered value Fn is exactly what feeds Mn and Ms in the event conditions of the previous section — so filter coefficient and event thresholds must be tuned together. Set k too high and the UE reacts to a fast-moving neighbour too late; too low and it ping-pongs on fading. This filter is one measurement stage; the physical layer already applies its own internal averaging beneath it.

📘

Spec: RSRP, RSRQ and RSSI are defined in TS 36.214; the layer-3 filter and filterCoefficient live in the quantityConfig of TS 36.331. Filtering happens once, centrally, and applies to every event evaluated on that quantity.

Gaps, the A3 timeline, and the report

There is one hardware wrinkle for LTE: to measure a carrier the UE is not camped on — any inter-frequency or inter-RAT layer — the UE must retune its single receiver away from the serving cell. It cannot receive and measure at the same time. The eNB therefore configures measGapConfig, a periodic pattern (gp0 at 40 ms period or gp1 at 80 ms period, each a 6 ms gap) during which no serving-cell scheduling happens so the UE can go and measure. This is exactly why A2 is used to start gaps when serving quality drops, and A1 to stop them once serving recovers — measuring off-frequency costs throughput, so you only pay for it when you might actually need to move.

Now put the trigger together as a timeline. The diagram below shows the classic A3 case: the neighbour curve rising until it crosses the serving curve plus the offset, the condition then held for timeToTrigger, with hysteresis as the band that stops noise from re-triggering.

RSRP time serving cell (M_s) neighbour cell (M_n) serving + a3-Offset + Hys timeToTrigger A3 entering condition met MeasurementReport sent
Figure 1. Event A3: the neighbour must exceed serving plus a3-Offset plus hysteresis, and stay above for timeToTrigger, before the UE sends a MeasurementReport.

When timeToTrigger expires with the condition still true, the UE builds a MeasurementReport carrying a measResults IE. Inside it: the measId that fired (so the eNB knows which pairing), the serving-cell result via measResultPCell, and measResultNeighCells listing each reported neighbour by physCellId with its rsrpResult and rsrqResult. The number of neighbours is capped by maxReportCells, and which quantities appear depends on reportQuantity. After the first triggered report the UE keeps reporting every reportInterval up to reportAmount times, so the eNB receives a short stream rather than a single snapshot — and then typically issues the handover command.

Reading a MeasurementReport in the logs

The report is where the whole framework becomes visible: the measId tells you which object/report-config pairing fired, and the encoded results are what the eNB acts on. rsrpResult/rsrqResult are reported as quantised indices (RSRP 0–97, RSRQ 0–34), not dBm/dB — you convert them back to read the RF.

Representative log — illustrative, values vary by vendor/build:

UL-DCCH / MeasurementReport measResults measId : 3 (bound to measObjectId=2 [EARFCN 1850], reportConfigId=1 [event A3]) measResultPCell rsrpResult : 32 (~ -108 dBm) rsrqResult : 12 (~ -13.5 dB) measResultNeighCells : measResultListEUTRA [0] physCellId : 207 rsrpResult : 48 (~ -92 dBm) rsrqResult : 20 (~ -9.5 dB) --> A3: neighbour (PCI 207) > serving + a3-Offset + Hys, held for timeToTrigger
FieldMeaningExampleCheck
measIdWhich measurement identity (object + report config) fired.3Must map to the object/report-config you intended; wrong measId = wrong pairing triggered.
measResultPCellServing-cell (PCell) filtered result.rsrp=32Confirms the serving level the event was evaluated against; sanity-check vs coverage.
physCellIdPCI of each reported neighbour.207Must be the intended handover target and not a blacklisted/PCI-confused cell.
rsrpResultQuantised neighbour RSRP index (0–97).48 (~ -92 dBm)Convert and confirm it truly beats serving by a3-Offset+hysteresis.
rsrqResultQuantised neighbour RSRQ index (0–34).20 (~ -9.5 dB)Present only if reportQuantity=both; use for load/interference-driven decisions.
neighbour countEntries in measResultNeighCells.1Capped by maxReportCells; a truncated list can hide a better target.

✅ Debugging steps

  • Confirm the MeasurementReport was actually sent (UL-DCCH) — if not, the trigger never fired; go back to the event and filter settings.
  • Decode the measId and verify it maps to the object/report config you expect; convert rsrpResult/rsrqResult to dBm/dB and re-check the event inequality.
  • For inter-freq/inter-RAT targets, confirm measGapConfig was configured and the gap pattern (gp0/gp1) is active — no gaps means no off-frequency measurement.
  • Check the eNB acted on the report (handover command / RRCConnectionReconfiguration with mobilityControlInfo); a report with no action is a network-side decision problem.

⚠ Common causes of failure

  • No measurement gaps configured, so an inter-frequency/inter-RAT neighbour is never measured and never reported.
  • Event fired but the eNB has no X2/S1 handover relation to the reported PCI, so no command follows.
  • PCI confusion — two neighbours share a physCellId, so the eNB prepares the wrong cell.
  • maxReportCells too small, hiding the genuinely best neighbour behind a stronger-but-unsuitable one.

Summary

LTE measurements are the evidence pipeline for network-controlled mobility, and they debug best piece by piece. The measConfig inside an RRCConnectionReconfiguration merges three lists into the UE's VarMeasConfig: objects (what layer, by carrierFreq), report configs (which event and thresholds), and measIds (the glue binding one object to one report config). Two cross-cutting settings shape the whole thing: quantityConfig's layer-3 filterCoefficient stabilises RSRP/RSRQ before any event sees them, and measGapConfig carves out the gaps a single-receiver UE needs to measure off-frequency.

The events encode intent — A1/A2 manage gaps, A3 is the relative intra-frequency workhorse, A4/A5 handle coverage and load, B1/B2 fall back to legacy RATs. When the condition holds for timeToTrigger, the UE sends a MeasurementReport echoing the measId and the measResultPCell/measResultNeighCells the eNB acts on. When a handover does not happen, localise it: wrong object frequency, an event that can't enter, a filter too heavy, a missing gap, an unbound measId, or a report the eNB can't act on. Each points at one specific parameter.

Q&A Interview quickfire

Q. What are the parts of measConfig, and which one is the glue?

A. Objects (measObjectToAddModList), report configs (reportConfigToAddModList), and identities (measIdToAddModList), plus quantityConfig and measGapConfig. The glue is the measId: a MeasIdToAddMod binds one measObjectId and one reportConfigId into a single identity the UE echoes back.

Q. What do timeToTrigger and hysteresis do?

A. Both suppress ping-pong. hysteresis adds an amplitude margin separating the entering and leaving conditions so boundary noise does not flip the state; timeToTrigger requires the condition to hold continuously for a set time before reporting, filtering out momentary spikes.

Q. What is the difference between A3 and A5?

A. A3 is relative — neighbour better than serving by a3-Offset. A5 is dual-absolute — serving below a5-Threshold1 AND a neighbour above a5-Threshold2 at once. A5 avoids handing off a healthy serving cell.

Q. How do RSRP and RSRQ differ, and why filter them?

A. RSRP is absolute reference-signal power (strength); RSRQ is N × RSRP / RSSI (quality relative to total received power, so it drops under load). The layer-3 filterCoefficient smooths both with a first-order IIR so events fire on trends, not fading dips.

Q. Why does A2 start measurement gaps and A1 stop them?

A. The UE has one receiver and cannot measure another frequency while receiving the serving cell, so inter-freq/inter-RAT measurement needs gaps that cost throughput. A2 (serving weak) fires when off-frequency neighbours might be needed, so gaps start; A1 (serving strong again) fires when they are not, so gaps stop.

🔀

LTE ↔ NR: the framework carries over almost intact — NR keeps the same object/report-config/measId structure and the same A1–A5/B1–B2 events, now inside MeasConfig delivered in RRCReconfiguration. The big additions are beam-level measurement (SS/PBCH-block and CSI-RS based SS-RSRP/SS-RSRQ/SS-SINR, with per-beam results consolidated by nrofSS-BlocksToAverage and absThreshSS-BlocksConsolidation) and two new event families: A6 (neighbour better than SCell by an offset, for carrier aggregation) and the conditional-handover triggers CondEvent A3/A5, where the UE executes a pre-provisioned handover itself once the condition holds. NR also generalises measurement gaps into per-UE and per-FR gap patterns rather than LTE's single gp0/gp1.

Where this leads

You now have the trigger engine: measConfig configures objects and reports, the measId glues them, layer-3 filtering stabilises the numbers, and a MeasurementReport delivers the evidence. Next, follow that report into the mobility decision and the signalling that carries it out.

Handover OverviewX2 HandoverPHY Measurements & RSRP/RSRQ