Learn wireless communications, in order

Four tracks, each lesson building on the last. Every lesson states its objectives, shows a diagram or chart, gives code that actually runs on simulated or recorded signals, and ends with an exercise.

All lessons are free to read until 31 Jan 2027. No account, no sign-up.

Beginner

10 lessons

From “what is a radio?” to decoding a simulated signal.

What is a radio link

The parts of every radio link from bits to antenna and back, what the carrier frequency changes, why bandwidth matters, and a first working use of decibels

30 min · concepts

Complex baseband and IQ samples

Why radios represent signals as I and Q, how mixing moves a signal to and from the carrier, what sampling rate a complex signal needs, and what a negative frequency is

40 min · python, numpy

Decibels and link budgets

Decibel arithmetic in dB, dBm, dBW and dBi, the Friis transmission equation, free-space path loss checked against ITU-R P.525, and a link budget calculator in numpy

40 min · python, numpy

Noise, SNR and capacity

Where the −174 dBm/Hz thermal noise floor comes from, how noise figure and cascaded stages set receiver sensitivity, and what Shannon capacity says about bandwidth and power

40 min · python, numpy

Digital modulation and bit error rate

Map bits to BPSK, QPSK and 16-QAM symbols with Gray coding, detect them in noise, and measure bit error rate against Eb/N0 by Monte Carlo simulation compared with theory

45 min · python, numpy, scipy

Pulse shaping and matched filters

Why rectangular pulses waste spectrum, how raised-cosine and root-raised-cosine pulses avoid intersymbol interference, and why the receiver filter must match the transmit pulse

45 min · numpy, scipy

Fading channels

Multipath, Rayleigh and Rician fading, Doppler and coherence time, delay spread and coherence bandwidth, and how two-antenna diversity changes the BER curve, all simulated in numpy against theory

50 min · numpy, scipy

OFDM from scratch

Build a complete OFDM link in numpy, with IFFT modulation, a cyclic prefix, a multipath channel, pilot-based channel estimation and one-tap equalisation, and measure its bit error rate against theory

55 min · numpy, scipy

Your first GNU Radio flowgraph

Build a headless GNU Radio 3.10 flowgraph in Python that sends QPSK through root-raised-cosine filters and noise, demodulates it and counts bit errors, and see how it maps to GNU Radio Companion

50 min · gnuradio, numpy, scipy

Recording and reading IQ files

Raw IQ sample formats from cf32 to cu8, SigMF metadata, writing and reading a synthetic capture in numpy, finding a burst in its spectrogram, and recording from a real SDR with SoapySDR

45 min · numpy, scipy, soapysdr

Intermediate

0 lessons

Channels, OFDM, MIMO and your first software-defined radio.

Lessons for this track are being written. The beginner track is the place to start.

Advanced

0 lessons

5G NR physical layer, beamforming, synchronisation and RF impairments.

Lessons for this track are being written. The beginner track is the place to start.

Expert

0 lessons

Research frontier: massive MIMO, ISAC, RIS, AI-native air interfaces and sub-THz.

Lessons for this track are being written. The beginner track is the place to start.