Where we are going
Learn to design the DSP chain of an HF transceiver, explain each block, and check design decisions with measurements. We work in Python first. We move to fixed-point, streaming and FPGA only with a tested model.
SignalSpectrumFiltersI/Q · RX/TXTransceiver
18 parts of the course
We go to the next step when we can predict the result of an experiment and explain it in our own words. We build the final Python transceiver step by step. It does not need an FPGA.
01Signals, sampling and quantizationUnderstand how a continuous signal becomes a sequence of digital samples.02Complex numbers and I/QLearn to read a complex sample as a pair of coordinates and as a vector.03Fourier, DFT and FFTLearn to read a spectrum and to take into account the effect of a finite record length.04Linear systems, convolution, FIR and IIRUnderstand how a filter works through its impulse response and its measurable characteristics.05Changing the sample rate: multirate DSPLearn to change the sample rate and keep aliasing and spectral images under control.06Mixers, NCO and DDCBuild a tunable digital chain that shifts a radio signal to a band near zero.07Demodulation of CW, AM, FM and SSBRecover the message from I/Q and compare demodulation methods.08The Hilbert transform and the analytic signalUnderstand how to build a complex signal without negative frequencies and use it for SSB.09The transmit chain: TX, DUC and DACBuild a digital transmit chain and a model that converts samples into a continuous signal.10Modulation and polar representationConnect amplitude, phase and instantaneous frequency to the transmitted message.11Noise, dynamic range and nonlinearityEstimate the limits of a transceiver caused by noise, strong signals and nonlinearity.12Digital modulation and synchronizationGo from bits to symbols and recover the data when there are timing and frequency errors.13Feedback: AGC, PLL and ALCLearn to control level and phase and take into account how fast the feedback reacts.14Fixed-point arithmeticSelect the word lengths and scaling from the measured error.15Streaming and real-time operationGo from a full array to consecutive blocks and keep the processing state.16From Python to FPGAMove verified blocks to a hardware description and compare them with the Python reference.17A full Python model of an HF transceiverCombine the receiver and transmitter blocks and verify the requirements with measurements.18Architecture analysis of QMX/uSDXUse schematics and code to explain how real transceivers work and compare them with your own model.
How a session works
Intuition → the necessary math → Python experiment → conclusion. We save the parameters and plots, and compare the prediction with the result. The first models use float64 and complex128. We add bit-depth limits separately.