A casual guide to the OFDM transmitter — no heavy math, plenty of springs and echoes.

Wi-Fi at home. 4G on the highway. 5G downtown. Three different names, but under the hood they all run on the same workhorse: OFDM — Orthogonal Frequency Division Multiplexing. It’s the backbone of today’s wireless systems, and very likely 6G too.

In my new video lecture, I build an OFDM transmitter from scratch — casually, step by step, so even complete beginners can follow. This post is the written tour of that journey. Grab a coffee, and let’s build a transmitter together.

How does a radio wave carry information at all?

Everything in wireless starts with an electromagnetic wave. Think of it as a hum flying through the air. On its own, a hum says nothing. So how do we make it talk?

We twist two knobs. One knob controls the wave’s strength — its amplitude. The other controls its timing — its phase. The transmitter sets the knobs, the wave flies, and the receiver reads the knob positions and turns them back into information. That’s wireless communication in one sentence.

Cartoon sender and receiver with amplitude and phase knobs above a radio wave
Two knobs are all we get: amplitude and phase. Everything else is engineering.
You askSo we twist knobs on one side and read them on the other. Sounds easy. What’s the catch?
I answerThe catch is everything between us. The air is not a quiet hallway — it’s a canyon full of echoes.

Meet the villain: multipath

Shout “HELLO!” into a canyon. You hear your own voice come back — once, twice, each copy a little later and a little weaker. Radio waves do exactly this. They bounce off buildings, hills, and walls, and the receiver catches several delayed, weaker copies all added together. Engineers call this multipath propagation.

HELLO! direct path echo 1 (late, weaker) echo 2 (later, weakest) hello… hello……
One shout goes out — several delayed, weaker copies arrive. That is Multipath.
Transmitter, a building reflecting the signal, and a receiver adding two delayed copies of the wave
From the lecture: the receiver gets the direct wave plus delayed copies bounced off objects.

Let’s give everything between the transmitter and the receiver a name: the channel. Now here’s a hopeful thought. If the channel simply scaled the signal — one clean multiplication — the receiver could measure that multiplier and just undo it: divide the received signal by the scaling factor, and the message is recovered.

You askAnd how would the receiver know the multiplier?
I answerWe cheat, politely. The transmitter sends a pilot signal — a phrase the receiver already knows. The receiver compares what arrived with what was sent, and estimates the channel from the difference. Like a soundcheck before a concert.
The channel drawn as one simple multiplier, equal to the received pilot divided by the transmitted pilot
The dream: the whole messy channel squeezed into one simple multiplier — and the pilot trick that measures it.
You askWait. An echo delays the wave. A delay isn’t a multiplication… right?
I answerRight — until you switch glasses. Put on complex-number glasses, and a delay literally becomes a multiplication. This is the most beautiful trick in the whole story — and it’s exactly what we unpack next.

The spiral trick: why engineers love complex numbers

Instead of drawing the wave as a flat wiggle, write it as ej2πft and draw it in 3D. It becomes a spiral — a spring turning forward through time. Look at the spring from the front and you see the cos (the real part). Look from the top and you see the sine (the imaginary part). Same object, two shadows.

A 3D metallic spiral winding forward along a time axis, with real and imaginary axes at its base
The complex wave ej2πft: a spring moving forward in time.
Front view of the spiral: a cos wave on the real axis over time Top view of the spiral: a sine wave on the imaginary axis over time
Left: the front view — cos, the real part. Right: the top view — sine, the imaginary part.

Sound abstract? It shouldn’t. You’ve been walking past this exact shape your whole life:

Photo of a metal coil spring standing on a wooden plank Photo of a metal spiral staircase winding up the side of a building
Real-world spirals: a coil spring and a spiral staircase. Our signal is the same shape — drawn in math instead of metal.

Now delay that spring. Slide it back in time and watch it through a fixed picture frame. What do you see inside the frame? The same spring — just rotated. In the complex world, a delay is nothing but a rotation — a delay is simply a phase shift. In math clothes: rotating the spiral by an angle θ is the same as multiplying it by e. And scaling plus rotating is exactly what multiplying by one complex number does!

Two springs viewed through a picture frame, with the text: phase shift (delay) equals rotation
Delay = phase shift. The spring inside the frame just rotates.

So when the canyon adds many delayed, scaled copies of our spiral together, the result is — drum roll — still the same spiral, with a new amplitude and a new phase. In other words, the spiral shape is a survivor: scale it, rotate it, add any number of delayed copies — what comes out is always the same spiral shape (engineers would say it is invariant). The whole villainous channel collapses into one complex multiplier. The receiver estimates it with a pilot and undoes it. Villain tamed.

Two delayed spirals in a picture frame adding up to the same spiral, next to the matching math: A1 e to the j theta 1 plus A2 e to the j theta 2, bracketed together as the channel, times e to the j 2 pi f t
Springs and math, side by side: the delayed copies add up to the same spiral — and the whole bracket is one complex number, the channel.
You askWait — you added two spirals and got the same spiral back? That feels too good to be true. Is there a catch?
I answerSharp instinct — there is exactly one. Every spiral in the pile must turn at the same frequency: the f in ej2πft. Our echoes qualify automatically — a delay slides the spring in time, but it never changes how fast the spring turns. Add spirals with different frequencies, though, and the magic collapses: the sum is a weird wobbling shape, not a spiral at all. Keep that in your pocket — it becomes important when we meet subcarriers later.
You askBut antennas can’t transmit imaginary numbers!
I answerCorrect — we only transmit the real part, the front view of the spring. But that real wave still carries the full story: its strength tells us the spiral’s radius, its timing tells us the rotation. The receiver can rebuild the whole spiral from it.

That’s why I like to call the complex domain a hidden engine. Real signal goes in, the math becomes wonderfully easy inside this complex engine, real signal comes out. The airwaves never know we used imaginary numbers.

The complex domain drawn as an engine between a real input and a real output
The complex domain: a hidden engine doing our calculations.

From bits to waves: QAM in one minute

Freeze the spiral, and the whole thing can be represented as a single point on a 2D plane: the point’s distance from the origin is the amplitude, and its angle is the phase. Now the fun part — we place information on the wave by choosing points: different bit groups correspond to different points — that is, different spirals, each with its own amplitude and phase. Group your bits, say four at a time, and let each group pick one specific point. Bits become geometry. This mapping is called QAM modulation (I have a whole post and video on it, so I’ll stay brief here).

Bit group 1101 pointing to a constellation point with amplitude and phase arrows, and a dashed arrow leading from the point to the corresponding 3D spiral
Bits pick a point; the point sets the spiral’s amplitude and phase.

One last ingredient. Every transmitter carries a local oscillator — a tiny circuit that hums out a steady, very fast wave, whose job is to lift our signal up to radio frequency. The transmitter chain so far: group the bits → map them to QAM symbols → multiply by the local oscillator’s wave → transmit the real part. Done. That’s a working single-carrier transmitter.

Constellation points converted to waveforms and multiplied with a local oscillator spiral
QAM symbols become waveforms, then ride the local oscillator up to radio frequency.

The echo strikes back: cyclic prefix

One problem left. We send symbols back-to-back, and the canyon’s late echoes of symbol 1 smear into symbol 2. That’s Inter-Symbol Interference (ISI). We could leave a silent gap between symbols — but silence is wasted airtime.

OFDM does something smarter. It copies a short piece from the end of each symbol and pastes it at the start. This copy is the cyclic prefix. The receiver simply ignores it, so the previous symbol’s echoes crash harmlessly into the prefix instead of the useful data. Think of it as a crumple zone on a car — sacrificial by design.

Two OFDM symbols where the tail of each symbol is copied and pasted to its front as a cyclic prefix
Cyclic prefix: copy the tail, paste it up front, let the echoes hit that instead.

Why stop at one wave? Subcarriers and the “O” in OFDM

Sending one symbol at a time is like shipping one parcel per truck. To go faster, OFDM sends thousands of subcarriers in parallel, each carrying its own QAM symbol.

You askThousands of waves at once? Won’t they interfere with each other?
I answerNot if we space them cleverly. The rule is beautifully simple: the subcarrier spacing must be the inverse of the useful symbol duration. Then every subcarrier fits a whole number of cycles inside one symbol, and each neighbor fits exactly one cycle more (can you prove it?). They pass through each other like ghosts — that’s orthogonality, the “O” in OFDM.
Two subcarriers spaced 15 kHz apart, with useful symbol duration of 66 microseconds
4G’s numbers: 15 kHz spacing ⇒ a useful symbol duration of 1/15kHz ≈ 66 µs.

In 4G, the spacing is 15 kHz, so the useful symbol lasts about 66 microseconds — and hundreds of subcarriers sit side by side to fill wide bandwidths: a 10 MHz 4G channel, for example, packs 600 of them. This same trick powers far more than cellular: Wi-Fi has used OFDM since 802.11a in 1999, and digital TV broadcasting (DVB-T) rides on it too.

You askIf every operator uses OFDM, won’t they all collide?
I answerNo — each operator’s local oscillator hums at a different carrier frequency, so their signals live in different neighborhoods of the spectrum. Everything before the oscillator is called baseband — and it barely needs to care which carrier frequency comes later. Everything after is passband. That’s why the same baseband chip design works for any operator.
Two operators with identical baseband processing but different local oscillator frequencies in the passband
Same baseband recipe, different passband kitchens.

Jargon translator: the time–frequency grid

A resource block of waveforms, 12 subcarriers tall and one slot of 14 symbols wide, with arrows showing the slot and the 1 ms subframe
A resource block: 12 subcarriers tall, one slot (14 symbols) wide — and a subframe is always 1 ms.

Now you can decode the vocabulary you’ll hear everywhere in wireless. Picture a grid: frequency runs vertically (subcarriers), time runs horizontally (symbols).

  • Resource Element (RE) — one subcarrier over one symbol. It carries exactly one QAM symbol. The smallest pixel of the picture.
  • Slot — 14 symbols in a row.
  • Resource Block (RB) — 12 subcarriers over one slot. This is the convenient chunk the network assigns to your phone.
  • Subframe — always 1 ms of time. Frame — always 10 ms.

Here’s the neat coincidence in 4G: one symbol (cyclic prefix + 66 µs useful part) times 14 comes out to almost exactly 1 ms. So in 4G, one subframe holds exactly one slot. Keep that in mind — it’s about to break, beautifully, in 5G.

Finally: what is numerology?

5G asked a bold question: why should the subcarrier spacing be locked at 15 kHz forever? So it unlocked the dial. 5G supports spacings of 15, 30, 60, 120, even 240 kHz — each option is called a numerology (µ), and the spacing is simply 15 kHz × 2µ, as defined in the 3GPP standard TS 38.211.

Remember the rule: symbol duration is the inverse of the subcarrier spacing. Double the spacing, and the symbol duration halves — and since a slot is just 14 symbols in a row, the slot duration halves right along with it. But the subframe is always 1 ms. So more slots squeeze into each subframe:

1 ms subframe (always the same width!) 15 kHz 4G & 5G (µ=0) 1 fat slot 30 kHz 5G (µ=1) 2 slots 60 kHz 5G (µ=2) 4 slots 120 kHz 5G mmWave (µ=3) 8 slots 240 kHz 5G mmWave (µ=4) 16 slots Wider subcarrier spacing → shorter slots → more scheduling chances every millisecond.
Numerology in one picture: same 1 ms subframe, sliced ever finer.
µSpacingSlot lengthSlots per subframe
015 kHz1 ms1
130 kHz0.5 ms2
260 kHz0.25 ms4
3120 kHz0.125 ms8
4240 kHz0.0625 ms16

Why bother? Shorter slots mean the network gets more scheduling chances per millisecond — great for low-latency applications like gaming or industrial control. And up in the millimeter-wave bands, a wider subcarrier spacing also keeps the subcarriers robust against frequency wobble. There is a tradeoff, though: shorter symbols come with a proportionally shorter cyclic prefix — a smaller crumple zone — so they can absorb only short echoes. That’s why the fast numerologies (higher µ) typically serve short distances, while the slow ones (lower µ) stretch to wide-area coverage. Numerology is 5G’s tempo dial: slow and steady for wide coverage, fast and snappy when milliseconds matter.

The whole transmitter in one breath

  • Group information bits → map them to QAM symbols
  • Place symbols on orthogonal subcarriers → add the cyclic prefix
  • Arrange everything on the time–frequency grid — that’s the baseband
  • Multiply by the carrier, transmit the real part — that’s the passband
  • The receiver just runs the movie backwards

And that’s it — the signal is on its way! I skipped plenty of implementation details for clarity — for those, my What is OFDM? post and its video are the place to go. Let me know your thoughts in the comments. Until next time — happy learning!


Leave a Reply

Your email address will not be published. Required fields are marked *