The engineering handbook of the whole course on one page: every voice-relevant parameter with its live value, default, tuning range and rationale · the full KPI formula library with exact counters · ready-to-run moshell/kget scripts · and three complete optimization designs — ① Configuration, ② Voice-quality improvement, ③ Mute / one-way-call improvement — each written as an executable program: detect → decide → tune → verify → roll back.
No fake things. Every value in the “Live” columns is from the NYC tri-band node kget (25.Q3, 25,224 MOs); defaults are from the LTE RAN 25.Q4.4 MOM; policy values from the operator golden file (6,027 rows). Counter names are from the live PM inventory. Tune on your network only through the Module-8 trial protocol.
D1Configuration optimization design
Configuration optimization is a control loop, not an event: photograph → policy → deviation → verdict → change-process → re-photograph. The tables below are the loop's substance — the voice-critical parameter surface with live values and tuning guidance.
1.1 · The bearer & scheduler surface (QciProfilePredefined, Module 1+3)
MO.attribute
Live
MOM default
Range / step
Tuning rationale
qci1.priority
1
2 (per 23.203 order)
1–15
Deadline beats persistence: voice above SIP at congestion. Network-wide policy — never a per-KPI lever.
qci1.pdb
80 ms
100
50–300
Radio-leg slice of the 280 ms corridor. Lower = tighter scheduler deadline weighting; only with measured transport headroom.
qci1.pdbOffset
50 ms
0
0–100
Reserves corridor headroom: scheduler sees pdb−offset. Raise where transport legs are long (×2 operator calls).
qci1.aqmMode
MODE2
OFF
OFF/1/2
Deadline-respecting AQM for voice. Pair with pdbOffset — MODE2 drops only frames that cannot make the deadline.
qci5.aqmMode
OFF
OFF
—
Never drop SIP for latency: RLC AM retransmits anyway; you'd pay twice.
qci9.aqmMode
MODE1
OFF
—
Early-drop for TCP — loss is the signal TCP understands.
qci1.dscp
40
46 (EF common)
0–63
Voice marking — must match transport queue maps end-to-end (Design 3, cause 4).
qci5.dscp / qci9.dscp
26 / 10
—
0–63
Assured for SIP, best-effort intent for data. Verify with marked TWAMP, never assume.
1.2 · Admission & access (Module 2)
MO.attribute
Live
Default
Range
Tuning rationale
dlAdmDifferentiationThr
800
—
0–1000 ‰
Soft gate: low-ARP GBR refused. Lower = earlier protection, more refusals. Move only after a capacity calendar review.
dlAdmOverloadThr
850
950
0–1000 ‰
Hard wall — this operator stops 100 ‰ earlier than default: headroom for fading + mobility of admitted calls.
preemptInactTimerMin
15 s
4
0–60
Don't evict the briefly silent (a mute is not inactivity). Raise where pre-emption victims show recent voice.
paArpOverride (HPA seats)
20 + override 6
—
per cell
Reserved admission seats for priority ARP. Size to busy-hour priority population + margin.
acBarringFactor / Time
95 / 4 s (staged, AUTO)
—
0–95 / 4–512
Owned by Load-Based barring automation. Manual edits fight the robot — change the automation's inputs, not its outputs.
acBarringSkipForMmtelVoice
false
false
bool
The deliberate position: skipped attempts still cost PRACH/PDCCH and fail deeper. Flip only for event cells, with barring active.
pagingDiscardTimer / maxNoOfPagingRecords
3 / 7
—
1–10 / 1–16
Stale pages die; MME re-pages fresh. Idle-mode dials move whole tracking areas — least casual surface in the book.
1.3 · Latency & uplink (Module 3)
MO.attribute
Live
Default
Range
Tuning rationale
voltePreschedulingEnabled
false (staged)
false
bool
The latency weapon. Profile already tuned (next row). Activate where SR-to-grant dominates the UL delay tail.
Worst-case grant-request wait = half a voice frame. Longer periods eat the radio-leg budget invisibly.
noOfPucchSrUsers / CqiUsers
320 / 320
—
dim.
SR budget vs busy-hour connected UEs. Saturation = setup latency no downstream feature recovers (D1 case 3, M3 theory).
pucchOverdimensioning
50
0
0–100 %
Absorbs handover surges into the PUCCH region.
1.4 · Link robustness (Module 4)
MO.attribute
Live
Default
Range
Tuning rationale
TTI bundling (CXC4011253)
DEACTIVATED · golden: ACTIVATED
—
state
+4 dB UL for edge talkers, thresholds already tuned, arming-on-HO configured. The crown governance finding — resolve via trial, not assumption.
ulHarqVolteBlerTarget
5 %
10
1–30
Voice's own gambling policy: half the data working point. Verify on mean-HARQ ≤ 1.15; raise only if PUSCH efficiency is genuinely scarce (it isn't, for 30 kbps).
pdcchOuterLoop (init/up/down)
−70 / 6 / 20
—
0.1 dB units
Asymmetric: back off fast on NACK, creep back slow. Touch only with DCI-miss evidence per aggregation level.
pdcchPowerBoostMax
0 (armed)
0
0–6 dB
The loaded magazine. Raise one step on edge DCI-miss evidence; cost is PDSCH power budget.
pZeroNominalPusch / Pucch · alpha
−103 / −117 · 1
—
dBm · 0–1
The floor under everything. α=1 = full pathloss compensation (edge UEs shout; neighbors pay). Market decision, modeled first, never per-complaint.
enableServiceSpecificHARQ
true ×9
false
bool
Voice's own max-HARQ ladder. 7 rungs × 8 ms = 56 of the 80 ms PDB — exactly one ladder per frame.
1.5 · DRX & release (Module 5)
MO.attribute
Live
Default
Range
Tuning rationale
DrxProfile=1 longDrxCycle
SF40
—
SF10–SF2560
The 40 ms contract: two voice frames per wake, one full HARQ ladder of margin inside the PDB. The cycle is the latency contract — tune onDuration first.
Listen window / post-activity wake / HARQ patience. The retrans timer must outlast the HARQ RTT or edge ladders silently halve (M5 theory case 2).
shortDrxCycleTimer
0
—
0–16
One rhythm, no second gear — deliberate simplicity for the voice profile.
inactivityTimerOffset
35 s
0
0–60
Voice connections earn extra patience: post-call SIP/redial clusters in the next 25 s. Defended with the trace histogram, not folklore.
1.6 · Mobility (Module 6)
MO.attribute
Live
Default
Range
Tuning rationale
VoLTE quality detectors UL/DL
DISABLED, thresholds 5/6 · 4/10
—
ratio
Mobility on delivery quality, not signal — for strong-signal asymmetric deaths. Wake on autopsy evidence.
hoOptQci1
5 / 50 / 200
—
—
Voice's own self-optimization triplet. FREEZE on trial relations — the optimizer learns from statistics trials perturb.
sCellHandlingAtVolteCall
DECONF_UL_SUPPRESS_DL_SCELLS ×9
NO_ACTION
enum
CA stands down during calls: deconfigure UL SCells, suppress DL activation. The ×9 consistency is itself audited.
endcSplitAllowedMoVoice
false
—
bool
Voice never rides the split bearer: PDCP reordering jitter for capacity voice doesn't need.
srvccDelayTimer
0
0
0–10 s
SRVCC-at-setup caching: 0 on metro (geography is a parameter); corridor networks raise it.
1.7 · Integrity & codec (Module 7)
MO.attribute
Live
Default
Range
Tuning rationale
tReorderingUl/Dl (qci1)
60 ms
—
0–200
Sized to outlast the 7×8 ms HARQ ladder, barely. Shorter starves HARQ; longer just delays the inevitable discard.
RLC SN / PDCP SN (voice)
10 / 12 bit
—
—
Headers matter at 30-byte payloads. Never set voice to RLC AM — late frames are dead frames (the wrong-ruler case).
bitRateRecommendationEnabled
false
false
bool
The codec-rate loop (FAJ 121 5014, license-gated). Open on edge-concentrated loss evidence; downshifting is a quality feature.
dscpArpMap[15]
all −1
−1
−1–63
Per-ARP marking refinement, staged unused: emergency could mark differently.
The audit machine (run monthly · post-upgrade · pre-trial)
1. Photograph: kget on every node → parse to (MO class, attribute, struct member, instance, value). 2. Join the golden file on canonical keys; normalize enums and user-vs-internal forms. 3. Evaluate exceptions before flagging; audit stale exceptions in reverse. 4. Output three populations: matches · deviations · ungoverned (report it — policy gaps hide here). 5. Verdict each deviation: fix (drift → change process) / challenge (golden stale → file with evidence) / investigate (KPI-correlated → playbooks). Never silent mass reversion.
KPIThe KPI formula library
Exact counters, the formulas this course trusts, and the reading law attached (volume before ratio · definition before comparison · bins before aggregates).
Surface 1 of 3. Suspects: power, adaptation, interference.
DL in-node discard
pmPdcpPktDiscDlPelrQci[1] ÷ DL packets
Surface 2: queues/AQM/congestion — comes with timestamps (load calendar).
DL air loss
pmPdcpPktDiscDlPelrUuQci[1] ÷ DL packets
Surface 3: transmitted, never acknowledged — the radio truth-teller.
Leading indicator
mean HARQ transmissions per voice TB (per-QCI HARQ stats)
Moves days before loss. Amber at 1.3, red at 1.6 on this node's history.
SRVCC health
per-phase: preparation SR × execution SR
Prep failures = core/neighbor config; exec failures = radio timing at the edge.
Paging health
discards ÷ received (cell) + records-per-occasion distribution
The stealth accessibility killer: lost pages never become attempts.
SCRThe script library
moshell/AMOS against the live node. Read-only first — every set goes through change process with a backup (kget before, always).
## 0 · Photograph the node (the audit's input — run before ANY change)
moshell NODE
lt all // load full MO tree
kget // full config dump → archive dated copy
inv // HW/license inventory## 1 · The voice bearer surface in one pass
get qciprofilepredefined=qci1 // priority/pdb/pdbOffset/aqm/dscp/...
get . drx // DrxProfile timers (SF40/PSF10/PSF8/PSF2)
get . preschedulingprofile // 86B / 5ms / 200ms — staged
get . scellhandlingatvoltecall // expect DECONF_UL_SUPPRESS_DL_SCELLS ×9
get . ulharqvolteblertarget // expect 5
get . pdcchpowerboostmax // expect 0 (armed magazine)## 2 · Feature governance — the three truths per feature
get featurestate=.* featurestate // ACTIVATED / DEACTIVATED
get featurestate=.* licensestate // ENABLED?
get featurestate=.* servicestate // OPERABLE? — all three or it's decoration
lpr // license keys + expiry (the licensing pass)## 3 · KPI pull — the four questions, hourly bins
pmx . pmErabEstabAttAddedQci.1|pmErabEstabSuccAddedQci.1 -m 24 // can calls start
pmx . pmErabRelAbnormalEnbActQci.1|pmSessionTimeDrbQci.1 -m 24 // do they survive
pmx . pmPdcpPktLostUlQci.1|pmPdcpPktDiscDlPelrQci.1|pmPdcpPktDiscDlPelrUuQci.1 -m 24 // was it good (3 surfaces)
pmx . pmRrcConnEstabFailDynUeAdmCtrlMoVoice -m 24 // did machinery engage## 4 · A guarded change (example: the boost magazine, one step)
kget > pre-change-$(date).kget // backup FIRST
lset EUtranCellFDD=CELL pdcchPowerBoostMax 1 // one cell, one step
get EUtranCellFDD=CELL pdcchPowerBoostMax // verify the write// then: engagement counters within the hour, KPI delta vs control cells for a week,// rollback = lset back to 0 (rehearsed before the change, not after)
D2Voice-quality improvement design
A complete program, executed as a loop. Stage A — locate (which question fails: start / survive / sound / engage). Stage B — the matrix (symptom row → parameter column). Stage C — one change through the trial protocol.Stage D — verify on the formula library, leading indicators first.
Symptom (measured)
First parameter / feature lever
Second lever
Verify on
UL delay tail > PDB, SR-heavy cells
voltePreschedulingEnabled=true (profile staged)
SR period ↓ / Prioritized SR (already on)
UL delay %iles, SR volume, PUSCH cost
Edge UL loss, PHR≈0 UEs
TTI bundling trial (thresholds staged; golden says ACTIVATED)
Single-codeword for VoLTE (rank-1)
edge-bin pmPdcpPktLostUlQci[1], mean-HARQ
Loss + healthy CQI + DCI misses
pdcchPowerBoostMax 0→1 step
outer-loop floor review (−70/6/20)
DCI miss by aggregation level, drop delta
Mean-HARQ drifting up, loss still flat
interference hunt (the leading-indicator drill)
ulHarqVolteBlerTarget guard (keep 5)
mean-HARQ back ≤ 1.15
In-node DL discards stepping at busy hour
admission corridor review (800/850 calendar)
AQM MODE2+offset50 sanity (never AM, never qci5 drop)
One lever per population per window · neighbors are guard rails · engagement counters prove the machinery fired before any KPI is credited to it · accepted changes graduate into the golden file through process — or the next audit reverts your improvement as drift.
D3Mute & one-way-call improvement design
The trickster failure: signalling healthy, call connected, someone hears silence — mid-call mute, one-way audio, or clipped onsets. The control plane cannot see it; the design below can. Direction first, surface second, escalate with evidence.
3.1 · The six-cause tree
#
Cause
Detection (exact check)
Fix lever
1
UL air death (interference / power limit) — “they can't hear me”
pmPdcpPktLostUlQci[1] elevated on the complainer's cell; traces: UL SINR collapse at healthy DL (glass-tower asymmetry); PHR≈0
pmPdcpPktDiscDlPelrUuQci[1] on the listener's cell; CQI + DCI-miss pairing decides traffic vs control channel
Coverage/interference path, or boost magazine if control-side
3
RTP blackhole in transport/core (one direction's stream dies; radio surfaces clean)
All three loss surfaces clean both ends + complaint persists → marked TWAMP per segment; core media-path trace; firewall/NAT asymmetry review
Transport/core escalation with the radio exonerated by evidence — timestamps, not suspicion
4
DSCP demotion (voice queues behind bulk under load — intermittent mute at busy hour)
TWAMP 40-vs-10 differential collapses under load on one segment; in-node discards rise while air is clean
Restore transport queue maps; stand the differential canary as a permanent war-room tile
5
ROHC context damage (bursty mutes on one site, lossy backhaul)
Compression state counters: repeated IR fallbacks; backhaul microburst loss on TWAMP
Fix the transport segment — ROHC stays on; its resync is the symptom, not the disease
6
Sleep/release misfires (clipped first words after silence; calls “going quiet” then dropping)
Post-silence onset delay %iles ≫ one DRX cycle; adaptive DRX lengthening cycles during SID-only periods; preemptInactTimer evicting muted calls
Pin QCI-1 to DrxProfile 1 (scope adaptation to data) · preemptInactTimerMin=15 honored · drxRetransmissionTimer ≥ HARQ RTT
3.2 · The mute-call runbook (executable order)
## Step 1 — direction discipline (the complaint text tells you)"they can't hear me" → complainer's UPLINK → causes 1, 3, 4
"I can't hear them" → complainer's DOWNLINK → causes 2, 3, 4
"first words clipped" → onset latency → cause 6
"goes silent at rush hour" → load-correlated → cause 4 first
## Step 2 — surface check (one pmx, both ends' cells)
pmx CELL pmPdcpPktLostUlQci.1|pmPdcpPktDiscDlPelrQci.1|pmPdcpPktDiscDlPelrUuQci.1 -m 24
// surfaces dirty → radio path (causes 1/2/5/6): trace CQI+SINR at failure timestamps// surfaces CLEAN → transport path (causes 3/4): marked TWAMP per segment, under load## Step 3 — the burst dimension (the ear hears patterns)// isolated single frames = concealment absorbs (routine); 3+ consecutive = audible mute (urgent)## Step 4 — one fix from the tree, through the trial protocol; verify on the SAME check that found it## Step 5 — postmortem: would the dashboard see this faster next time? (tile or threshold added)
The two rules that save weeks
Never escalate a mute to transport without the surfaces printed — “radio exonerated by evidence” is what makes the transport team move. Never “fix” a mute by setting voice to RLC AM — the loss KPI will improve and the mute will get worse (frames arriving embalmed; the wrong-ruler case is module 7's law).