Learning track

Beginner

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

10 lessons · about 7.3 hours of reading and exercises

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

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