Goal
Go from bits to symbols and recover the data when there are timing and frequency errors.
Prerequisites: Parts 04–06, 10–11. We complete carrier recovery after we study loops in Part 13.
Future lessons
- ASK/FSK/PSK: data transmission by a change of amplitude, frequency or phase; BPSK/QPSK/QAM, the signal constellation, bit rate and symbol rate.
- Raised-cosine and root-raised-cosine pulse shaping, the matched filter and intersymbol interference (ISI).
- Recovery of the symbol decision times and of the reference carrier; the Costas loop.
- FSK/MSK and how the architecture relates to FT8/WSPR, without a mandatory implementation of the full protocol.
Lab plan
- Build BPSK/QPSK with known timing and frequency; plot the constellation and the eye diagram.
- Add a timing error, a frequency error and white Gaussian noise one at a time; measure the bit error rate (BER).
- After Part 13, connect the synchronization loops and compare acquisition with the steady state.
- Compare the spectra of pulse shaping and of FSK/MSK.
We do the experiments in Python with NumPy, SciPy and Matplotlib. We keep the parameters, units and plots. The base models use float64 and complex128; we add bit-depth limits in separate experiments.
Completion criteria
- I can tell the difference between the tasks of the matched filter, symbol synchronization and carrier recovery.
- I measure the BER from known bits and count the acquisition time separately.
Result for the main project
A teaching digital modem with controlled channel distortions.