Repository navigation
Course: DSP and radio on an FPGA -- fixed point, filters, FFT, BPSK (9x3, hardware track) #1490
Copy link
Copy link
Open
Labels
Description
Parent epic: #1476
Course id: dsp-and-radio
Audience: hardware engineers (RTL / FPGA / ASIC).
Prerequisites: Course 1 (FPGA); Course arithmetic-circuits modules 1-4 recommended.
Why this course
FPGAs earn most of their revenue in signal processing: radio, radar, instrumentation, 5G. The repo already has a BPSK spec with a Barker-13 sync word and fixed-point requantization. A DSP course broadens the audience from AI to communications engineers.
What already exists in the repo (grounding)
fpga/bpsk.t27(BARKER13_BITS; its0bliteral currently crashesconstsOf)numeric/requant_boundary.t27,fpga/mac.t27,fpga/memory.t27- Missing: FIR, IIR/CIC, FFT, NCO specs
Decomposition: 9 modules x 3 lessons
Module 1 -- fixed-point: numbers for DSP
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 1 | q-formats |
Qm.n notation, range and resolution | NEW dsp/fixed_point.t27 |
Q-format explorer |
| 2 | overflow-and-saturation |
wrap vs saturate | numeric/requant_boundary.t27 |
saturation demo |
| 3 | rounding-noise |
quantization noise and SNR per bit | NEW dsp/fixed_point.t27 |
SNR vs bits |
Module 2 -- sampling: signals in time
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 4 | nyquist |
sampling theorem and aliasing | NEW dsp/sampling.t27 |
alias visualizer |
| 5 | decimation |
decimation and interpolation | NEW dsp/sampling.t27 |
rate-change diagram |
| 6 | signals-in-trits |
what changes with ternary samples | ternary/packed_trit.t27 |
ternary quantizer |
Module 3 -- fir: finite impulse response
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 7 | convolution |
taps and convolution | NEW dsp/fir.t27 |
convolution stepper |
| 8 | fir-architecture |
direct, transposed, systolic FIR | NEW dsp/fir.t27 |
architecture switcher with DSP counts |
| 9 | symmetric-fir |
using symmetry and the DSP pre-adder | NEW dsp/fir.t27 |
DSP savings |
Module 4 -- iir-and-cic: recursive and multiplier-free filters
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 10 | iir |
IIR biquads and stability | NEW dsp/iir.t27 |
pole-zero plot |
| 11 | cic |
CIC decimators: no multipliers | NEW dsp/cic.t27 |
CIC response |
| 12 | filter-choice |
FIR vs IIR vs CIC on an FPGA | NEW dsp/fir.t27 |
comparison table |
Module 5 -- fft: frequency domain
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 13 | dft-to-fft |
from DFT to radix-2 FFT | NEW dsp/fft.t27 |
butterfly diagram |
| 14 | fft-hardware |
streaming vs burst FFT architectures | NEW dsp/fft.t27 |
resource comparison |
| 15 | twiddles-and-scaling |
twiddle ROM and block floating point | NEW dsp/fft.t27 |
scaling demo |
Module 6 -- oscillators: making tones
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 16 | nco |
numerically controlled oscillator | NEW dsp/nco.t27 |
NCO frequency dial |
| 17 | cordic-nco |
CORDIC-based sine generation | NEW arith/cordic.t27 |
sine purity |
| 18 | mixing |
mixing and frequency shift | NEW dsp/nco.t27 |
spectrum view |
Module 7 -- modulation: bits on a carrier
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 19 | bpsk |
binary phase shift keying | fpga/bpsk.t27 |
constellation |
| 20 | symbol-shaping |
pulse shaping and raised cosine | NEW dsp/fir.t27 |
eye diagram |
| 21 | qpsk-and-beyond |
QPSK, QAM: more bits per symbol | NEW dsp/qam.t27 |
constellation switcher |
Module 8 -- synchronization: finding the signal
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 22 | barker-13 |
Barker-13 and its autocorrelation | fpga/bpsk.t27 |
correlation peak |
| 23 | timing-recovery |
symbol timing recovery | NEW dsp/sync.t27 |
timing error plot |
| 24 | carrier-recovery |
Costas loop for phase | NEW dsp/sync.t27 |
phase lock animation |
Module 9 -- radio-capstone: a link end to end
| # | Lesson id | What the reader learns | Spec | Widget idea |
|---|---|---|---|---|
| 25 | tx-chain |
the full transmit chain | fpga/bpsk.t27 |
chain diagram |
| 26 | rx-chain |
the full receive chain | fpga/bpsk.t27 |
chain diagram |
| 27 | capstone |
BPSK loopback on the board with bit error rate | fpga/bpsk.t27 |
BER curve from a real run |
Specs that do not exist yet (write in gHashTag/t27 first)
-
dsp/fixed_point.t27 -
dsp/sampling.t27 -
dsp/fir.t27 -
dsp/iir.t27 -
dsp/cic.t27 -
dsp/fft.t27 -
dsp/nco.t27 -
dsp/qam.t27 -
dsp/sync.t27
Honesty notes and traps
- Many specs are new; this course is the largest spec-authoring effort in the epic. Consider shipping it after the arithmetic course, which supplies CORDIC.
- RF output needs a DAC/ADC the boards may not have; the capstone is a digital loopback unless hardware is added, and the page must say so.
Acceptance criteria
-
specs/course/<id>.t27+<id>-ru.t27exist, registered inspecs/course/courses.t27, built bycourse-from-spec.mjs(recipe:specs/course_recipe/course-27.t27). - Exactly 9 modules x 3 lessons = 27 lessons; every lesson names one widget and one spec.
- Every lesson spec compiles AND its
testblocks pass in the reader's browser (blocked by the browser-runner issue), or the lesson says plainly that it is a recordedtricast and links the recording. - Every number on a page comes from real tool output named in the widget's
DATA_SOURCES(yosys / nextpnr / board run / spec test). No invented figures. - Board named on every hardware page (Wukong
xc7a200tfgg676vs AX7203xc7a200tfbg484vs Arty A7 / XC7A100T). - Black-and-white share cards and SEO pages generated for all 27 lessons (EN + RU).
- The course PR carries a blog post: EN
body+ RUruBody. - Lessons that need a spec that does not exist yet are listed as sub-tasks (spec first in
gHashTag/t27, then copied here).
Blocked by: #1477 (browser test runner) for every lesson whose spec uses calls, locals or struct fields in tests.
Reactions are currently unavailable
Activity