O-RAN Advance Course  /  Chapter 4 — U-Plane & Compression: IQ, BFP & the codecs
O-RAN R005 train · 2026
CHAPTER 4 · MODULE M4 · NARRATED VIDEO + LAB

Compress the signal.
Bit by bit.

The U-plane is your fronthaul bandwidth — raw IQ samples matched to their C-plane command by sectionId. Here we decode a real U-plane packet, read the udCompHdr (udIqWidth + udCompMeth), and run block floating point by hand on one PRB — one shared exponent, twelve shortened mantissas. Then the whole codec family (block scaling, μ-law, beamspace, modulation compression) and the efficiency levers. Verbatim from O-RAN WG4 CUS.0 v21 §8 + Annex A/D.

IQ16buncompressed
BFP9b1 exp · 12 mant
384→220bitsper PRB
5codecsudCompMeth 0–4
mod-compDLonly
ENkaraoke subs
O-RAN.WG4.CUS.0-R005-v21.00 §8 (U-plane, udCompHdr) · Annex A (A.1 BFP … A.6 selective RE) · Annex D (IQ packetization)
▶ VIDEO · CHAPTER 4 · NARRATED

The U-plane — IQ, block floating point & the codecs

The player screen is a live animation stage — the U-plane header assembles, the udCompHdr splits into udIqWidth and udCompMeth, a PRB of twelve IQ samples collapses to one shared exponent plus short mantissas, and the bit-count bar shrinks, exactly as the narration reaches each idea. Karaoke subtitles EN + Persian, fullscreen.

Chapter 2 · Open RAN Masterclass · functional splits & 7-2x
Open the pink line — down to the last bit
0:00 / 0:00
LAB · BFP BIT-LEVEL VISUALIZER
Compress a PRB yourself →
Set the mantissa width, watch the shared exponent get picked and the 384-bit PRB shrink — with the live compression ratio.
LAB · BFP BIT-LEVEL VISUALIZER · CUS.0 ANNEX A.1

Compress one PRB with block floating point

One PRB = 12 subcarriers = 12 complex samples = 24 I/Q values. Uncompressed at 16-bit = 384 bits. BFP stores one shared exponent (4 bits) + 24 shortened mantissas. Set the mantissa width and watch it shrink.

Algorithm (A.1):
① find the largest |sample| in the block → ② that sets one shared exponent → ③ store every sample as a short mantissa → ④ decompress = shift back.
0× smaller
0 bits/PRB vs 384 uncompressed
shared exponent0
mantissa bits0
udCompMeth0001 BFP
REFERENCE · U-PLANE MESSAGE · CUS.0 §8.3

A U-plane packet, field by field

The header answers when and which PRBs; the udCompHdr tells you how to read the samples before you read a single one.

PartFieldBitsMeaning
Radio
header
dataDirection1gNB Tx (DL) or Rx (UL)
payloadVersion3payload format version
filterIndex4which filter (e.g. PRACH)
frameId · subframeId · slotId · symbolId8·4·6·6exact symbol in time
SectionsectionId12matches the C-plane command
startPrbu / numPrbu10 / 8first PRB / how many PRBs
udCompHdr8udIqWidth(4) + udCompMeth(4) — not always present
PayloadudCompParam + IQ0/8/16 + …compression param, then the samples
GOLDEN RULE · §8.3.3.13
The udCompHdr is 8 bits: the top nibble is udIqWidth (bits per I and per Q), the bottom nibble is udCompMeth (the codec). A 9-bit sample does not align to a byte, so IQ is packed tightly (Annex D). Decode the udCompHdr first — read it wrong and every sample after it is garbage.
REFERENCE · udCompMeth CODECS · CUS.0 §8.3.3.13 + Annex A

The compression method — 4 bits, one family

The udCompMeth nibble selects the codec. Base methods 0–4; higher values combine a codec with selective RE sending.

udCompMethCodecIdeaAnnex
0000No compressionraw IQ at udIqWidth bits
0001Block floating point (BFP)one shared exponent + short mantissas per PRBA.1
0010Block scalingscale by a factor, not a power of twoA.2
0011μ-lawnon-linear companding (audio-style)A.3
0100Modulation compressionDL-only — uses the known constellationA.5
0101–1000+ selective RE sendingcodec combined with RE masksA.6
BEAMSPACE + WHY DL-ONLY
Beamspace compression (types I & II, Annex A.4) works in the beam domain for massive MIMO. Modulation compression is downlink only: only the O-DU knows exactly which constellation point it transmitted, so it can encode a sample in very few bits. On the uplink the O-RU has no such certainty — so it cannot apply it.
REFERENCE · EFFICIENCY LEVERS · CUS.0 §8.1.3 / §8.4 / Annex A.6

Beyond compression — three more levers

LeverWhat it doesClause
Selective RE sendinga mask marks active REs; only those samples are transmittedAnnex A.6
Data blankingwhole muted regions are simply not sent§8.4.2
Digital power scalingkeeps signal levels in the useful range (gain/power scaling)§8.1.3
THE FULL BUDGET
Real radios stack these: BFP (≈16→9 bit) × selective RE sending (skip empty REs) × blanking (skip muted regions). That is how a 100 MHz carrier that would need ~12 Gb/s of raw IQ (Chapter 2) is squeezed onto a 25 GbE link. Compression chooses your codec; these levers reclaim what compression cannot.

🛠 Engineer detail block — what you'll actually meet in the field

  • Decode the udCompHdr first. udIqWidth tells your dissector how many bits per I and per Q. Guess it wrong and every downstream sample is noise — the #1 U-plane capture mistake.
  • BFP is the default you will see. udCompMeth 0001, one 4-bit exponent per PRB in udCompParam, then packed mantissas. If a vendor claims "no compression," expect ~double the fronthaul.
  • Modulation compression is DL-only. If someone proposes it for uplink, that is a red flag — the O-RU cannot know the constellation point. Great DL savings, impossible UL.
  • Compression trades bandwidth for EVM. Fewer mantissa bits = smaller fronthaul = higher error vector magnitude. 9-bit BFP is the usual sweet spot; drop to 6-bit only if the link forces you.
  • sectionId still rules. Even here in the U-plane, the section is matched to its C-plane command by sectionId — the thread from Chapter 3 never lets go.
✓ QUIZ · 8 QUESTIONS · SHUFFLED EVERY LOAD

Chapter 4 quiz