A multi-language DSP modem implementation and validation suite covering QPSK modulation, RRC filtering, channel modeling, synchronization, and forward error correction.
| Directory | Language | Purpose |
|---|---|---|
python/ |
Python | Reference implementation, notebooks, and test vector generation |
matlab/ |
MATLAB/Octave | Algorithm prototyping and visualization |
cpp/ |
C++ | High-performance implementation |
c/ |
C | Embedded-target implementation |
test_vectors/ |
— | Golden reference I/Q data and expected outputs |
reports/ |
— | Generated plots: BER curves, constellations, spectra, eye diagrams |
tools/ |
Python | Utility scripts for vector generation and cross-language comparison |
docs/ |
— | Architecture, roadmap, and validation strategy |
cd python
pip install -r requirements.txt
pytest tests/cd cpp
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
ctest --test-dir buildpython tools/generate_vectors.py --modulation qpsk --snr 10 --out test_vectors/This project is the foundation of an upcoming book that walks through building this entire DSP modem system from scratch — no black boxes, no hand-waving.
The book covers every layer of the stack:
- Signal theory — complex baseband, Nyquist criteria, spectral shaping
- Modulation — Gray-coded QPSK, 8-PSK, and 16-QAM symbol mapping
- Pulse shaping — root-raised cosine filter design and matched filtering
- Channel modeling — AWGN, phase noise, and frequency offset impairments
- Synchronization — timing recovery (Mueller-Müller, Gardner) and carrier phase lock (Costas loop)
- Error correction — forward error correction fundamentals and BER validation
- Multi-language implementation — the same algorithms built in Python, MATLAB/Octave, C++, and C for embedded targets
- Verification methodology — test vectors, golden references, and cross-language comparison
The goal is that a reader can follow along and reproduce every result in this repository, understanding not just how each block works but why it is designed that way.
Stay tuned — updates will be tracked in
docs/.
- QPSK (primary target)
- 8-PSK, 16-QAM (planned)
- Gray-coded symbol mapping
- Root-raised cosine (RRC) matched filtering
- AWGN / phase noise / frequency offset channel models
- Mueller-Müller and Gardner timing error detectors
- Costas loop carrier phase recovery
- BER vs Eb/N0 validation against theory
