IEEE Signal Processing Society logo.
IEEE SPS @ UF

SPS Curriculum: 87 workshops for IEEE SPS @ UF

A public, GPL-3.0 library of Jupyter workshops (258 sessions of 30-40 minutes across 12 topics) that runs from real analysis to DSP, machine learning, GPU and FPGA systems, quantum, and a full-system capstone, with every notebook opening in Colab. 70 are verified; 17 are drafts awaiting verification.

Status · 87 workshops / 258 sessions as of July 2026: 70 verified, 17 drafts pending verification; taught through IEEE SPS @ UF since 2024.

Overview

The teaching library behind the IEEE Signal Processing Society chapter at UF: 87 Jupyter workshops in 12 topics, cut into 30-40 minute sessions, with key numerical claims in the 70 verified workshops checked against an independent oracle.

SPS Curriculum is the workshop repository I maintain for the IEEE Signal Processing Society (SPS) student chapter at the University of Florida. It started in August 2024 as a few uploaded notebooks and, in a concentrated build-out in July 2026, became a complete curriculum: 87 teaching notebooks in 12 topic directories, each partitioned into 30-40 minute sessions sized for a live meeting. The house rule that shapes everything is verification: a key number in a notebook has to match something I did not hand-derive, and a workshop that has not yet passed that bar says so in a banner.

What does it take to make 87 teaching notebooks trustworthy enough that a student who missed the meeting can follow one alone, and an instructor who did not write it can teach it?

What it is

SPS Curriculum is the teaching repository for the IEEE Signal Processing Society (SPS) student chapter at the University of Florida, where the workshops have been taught since 2024. As of July 2026 it holds 87 teaching notebooks organized into 12 topic directories and partitioned into 258 sessions of 30-40 minutes each, the length of one chapter meeting. The whole thing is GPL-3.0, and every notebook opens in Google Colab from a badge in its first cell, so a free browser session is the only requirement.

Of the 87 workshops, 70 are marked Available: they execute clean under a pinned environment and their key numbers have been checked. The other 17 are Drafts: complete, but carrying an in-notebook warning banner until an instructor verifies the mathematics or runs the code on hardware I do not have. Those 17 are unverified, and nothing on this page should be read as a claim that they work. The repository grew from a handful of uploaded notebooks in 2024 to its current shape in a concentrated build-out during July 2026, and it has been quiet since the last commit on 2026-07-28.

The topic map

The topics feed one another: Mathematics and Programming at the base, DSP and Machine Learning in the middle, Time Series and the GPU, FPGA, and radio systems tracks above, and a Capstone that composes the rest into one pipeline. START_HERE.md turns the graph into five guided paths (DSP, machine learning, making things fast, pure mathematics, and putting it all together), each a chain of specific workshops. Workshop counts per topic:

Mathematics (18 workshops, 57 sessions)
A six-notebook real-analysis track (real numbers, topology, sequences and series, measure theory, random variables, independence), plus linear algebra for signals, optimization, estimation theory, Hilbert spaces and Fourier, information theory, complex analysis, numerical linear algebra, concentration and learning theory, stochastic processes, convex optimization II, random matrix theory, and manifold optimization.
DSP (19 workshops, 65 sessions)
Foundations 1 and 2, filter design, statistical signal processing, arrays and beamforming, audio, images as 2-D DSP, compressed sensing, digital and MIMO communications, real-time DSP, graph signal processing, channel coding, sparse coding, ICA, time-frequency, cyclostationarity, radar, and sigma-delta quantization.
Machine Learning (19 workshops, 54 sessions)
ANN to CNN to scaling, training dynamics, LLMs from the ground up, representation learning, diffusion (twice), kernel methods and RKHS, compression, uncertainty, reinforcement learning, optimal transport, causal inference, modern architectures, variational inference, interpretability, federated learning, and TinyML (draft).
Time Series (8 workshops, 20 sessions)
Adaptive filtering (affine projection and Kalman), RLS, beyond Kalman (EKF, UKF, particle filters), ARIMA, RNNs, state-space models from Kalman to S4 to Mamba, and online learning with regret bounds.
GPU Systems (7 workshops, 18 sessions)
Numba and CuPy, performance engineering with the roofline model, distributed training with a live all-reduce, and four GPU-only drafts (RAPIDS, hardware-accelerated computing, CUDA in C++, Triton).
Programming (4, 11 sessions) and Host Programming (4, 11 sessions)
C, data structures in C, Python, MATLAB (draft); operating systems, databases, Git and collaboration, containers (draft).
DL for Physics (3, 6 sessions), FPGA (2, 6 sessions), SDR (1, 3), Quantum (1, 3), Capstone (1, 4)
PyTorch, Transformers, and physics-informed neural networks; FPGA and HLS (both drafts); software-defined radio (draft); quantum computing for signal processors; and the full-system capstone.
Figure 1 — The 12 topics arranged foundations → systems → applications, with the five START_HERE learning paths drawn as routes through them.

How a workshop is built

Every notebook follows the same skeleton from STYLE_GUIDE.md, so a reader always knows where they are and an instructor can pick one up cold. The archetypes differ underneath (a theory notebook runs motivation → definitions → theorem and proof → payoff; an application notebook grows one working system across sessions and benchmarks it), but the shell is shared:

Badge and pitch
An Open-in-Colab badge is the very first cell, followed by attribution to the chapter and a one-paragraph pitch: what you will be able to do afterward.
Motivation, then prerequisites
Section 0 says why the topic exists before section 1 lists what to know and links the prerequisite workshops.
Numbered sessions
A marker cell at each 30-40 minute boundary states the goal, what it builds on, and what it feeds into, matching the topic README's session table.
Intuition before rigor
A short plain-language cell precedes every proof, derivation, or dense definition; the rigorous cell that follows stays rigorous.
Debriefs
After every code cell that produces a result, a markdown cell reads the output back: the actual number, what it proves, where it breaks down.
Teacher notes
A collapsed block per session, written for a colleague who knows the subject but has never taught it: timing, what to draw on the board first, the misconception students arrive with, a question to hand back to the room, and what to do if the demo misbehaves.
Where next
The conclusion recaps and links to the workshops that pick up where this one stops.

Key numbers have an oracle

The rule I care about most is in CONTRIBUTING.md: key numerical claims are checked against an independent oracle, something the author did not hand-derive. That means a closed form, a reference solver, a planted ground truth, or an exhaustive brute force. Commit messages record these checks; the quantum Fourier transform circuit is compared to the DFT matrix, a Viterbi decoder is matched against brute-force maximum-likelihood decoding, and ADMM and FISTA are run to agreement on the same problem. This applies to the 70 verified workshops; the 17 drafts have not had that pass yet. If a demo's numbers contradict its prose, the experiment or the prose gets fixed; they never ship disagreeing.

The corollary is that failures get narrated rather than hidden. During the July 2026 narration pass I found that the Manifold Optimization workshop's first demo did not do what its plot title claimed: Riemannian descent toward the smallest eigenvector of a Wishart matrix had stalled roughly 52 times above its target, because the small eigenvalues of that matrix cluster together (the Marchenko-Pastur law from the Random Matrix Theory workshop) and the relative spectral gap that sets the convergence rate is near zero. On 2026-07-24 I flagged it as an honest failure with that diagnosis. On 2026-07-28 I fixed it properly by running the identical three-step recipe on two matrices, the original that stalls and one with a deliberately isolated eigenvalue that converges to machine precision, verified against NumPy's eigh. The lesson became the workshop's best one: Riemannian optimization fixes the constraint, not the conditioning.

The advanced ring and the capstone

On 2026-07-22 a second ring of 32 advanced workshops landed on top of the foundations. The flagships are State-Space Models from Kalman to S4 to Mamba (modern sequence models as adaptive filtering rebranded), Reinforcement Learning, Graph Signal Processing with graph neural networks, Online Learning and Regret, and Channel Coding. Around them sit Random Matrix Theory, Optimal Transport, Mechanistic Interpretability, Federated Learning with differential privacy, Quantum for Signal Processors, and Performance Engineering with the roofline model, plus a distributed-training workshop that runs a live all-reduce.

The Capstone composes the whole curriculum into one system over four sessions: build a synthetic IQ world with planted ground truth, detect bursts with an STFT and median-CFAR detector (the notebook finds all 55 planted bursts), string the detections into a Kalman track that steers a downmixer, then classify with a CNN and write the verdicts to a queryable SQL ledger. Every stage is a workshop the student has already taken, and the synthetic capture can be swapped for an RTL-SDR recording.

Student blanks and the recording plan

Workshops taught live ship a fill-in-the-blank student copy: the same notebook with code cells emptied where students write and the teacher notes removed. There are 72 of these, 68 generated for Fall 2026. A script re-derives each blank's prose from its parent so a student never reads last term's narration; it is run by hand (dry-run by default), and after the July revisions it reports zero blanks out of sync.

Recording is a plan, not a result. RECORDING.md fixes a format (one session = one video, one topic = one playlist, each video mirroring the notebook's hook, session card, intuition, rigor, demo payoff, and recap), and VIDEO_PLAN.md is generated from the session markers: 211 sessions are recordable now and 47 more unlock as draft banners clear. No video has been recorded yet.

Where it stands

As of July 2026: 87 workshops, 258 sessions, 70 verified-executed and 17 unverified drafts. The validator reports a clean scan of 181 files with teacher notes on 258 of 258 sessions and debriefs on 300 of 300 result cells, and every one of the 159 notebooks (teaching plus blanks) carries a Colab badge. The Fall 2026 student blanks are generated.

The open work is verification, not writing. The 17 drafts need either an expert proof-read (measure theory, random variables, independence, Hilbert spaces, complex analysis, concentration, stochastic processes) or hardware I do not have (MATLAB, Docker for the containers workshop, an FPGA toolchain, a GPU for RAPIDS, hardware-accelerated computing, CUDA C++, and Triton, an RTL-SDR dongle, a microcontroller for TinyML). Clearing a banner is the first contribution CONTRIBUTING.md asks for. After that comes recording.

FAQ

Who is it for?

Chapter meetings first: each session is sized for one 30-40 minute live meeting, with teacher notes so someone other than me can run it. Self-study second: every notebook opens in Colab, and START_HERE.md gives five guided paths. Contributors third: the drafts are explicitly open for verification.

Is the material public?

Yes. The repository is GPL-3.0 on GitHub, and every notebook's first cell is an Open-in-Colab badge, so there is nothing to install. Workshops that want a GPU note that Colab's free GPU runtime is enough.

What does Available versus Draft mean?

Available means the notebook executed top to bottom on a fresh kernel under the pinned requirements and its key numbers were checked against an independent oracle. Draft means it is complete but unverified: it carries a warning banner until an instructor checks the proofs or runs it on hardware I lack. 70 are Available, 17 are Draft.

Did you write all of it?

85 of the 87 teaching notebooks. The Introduction to PyTorch and Introduction to Transformers workshops, and their 2025 student blanks, were written by a chapter contributor.

Are there videos?

Not yet. The format and a generated plan for 211 recordable sessions exist; recording has not started.

What I built

  • 85 of the 87 teaching notebooks, from a six-notebook real-analysis track through DSP, time series, machine learning, GPU systems, quantum, and a capstone; the PyTorch and Transformers workshops are by a chapter contributor.
  • A style guide (STYLE_GUIDE.md) that fixes the skeleton of every notebook: Colab badge, pitch, motivation, prerequisites, numbered 30-40 minute sessions, an intuition cell before every proof, a debrief after every result, and a collapsed teacher-notes block per session.
  • A repository validator (tools/validate.py) that checks links, anchors, draft banners, Colab badges, and narration coverage, and can execute any notebook top to bottom on a fresh kernel against a pinned requirements.txt.
  • 72 fill-in-the-blank student copies (68 of them for Fall 2026) whose prose is re-derived from the parent notebook by tools/sync_blanks.py, which currently reports zero blanks out of sync.
  • Guided learning paths (START_HERE.md), a roadmap (ROADMAP.md), a contributing guide, and a generated recording plan (VIDEO_PLAN.md) built from the session markers.
  • A narration pass in July 2026 that took teacher-note coverage from zero to 258 of 258 sessions and result-cell debriefs from roughly one in five to 300 of 300.

How it works

  • Each workshop is one notebook, cut in place by session-marker cells (goal, builds-on, feeds-into) that match a session table in the topic README.
  • Notebooks are tagged Theory (proofs and derivations), Application (runnable code on real or synthetic data), or a hybrid that alternates the two; the README table shows 16, 28, and 43 of each.
  • Every result-producing code cell is followed by a debrief that names the actual number, says what it proves, and says where it breaks down.
  • Key numerical claims are checked in-notebook against an independent oracle: a closed form, a reference solver, a planted ground truth, or an exhaustive brute force.
  • A workshop that executes clean under the pinned environment is marked Available; one that needs hardware I lack (MATLAB, Docker, an FPGA toolchain, a GPU, an RTL-SDR dongle, a microcontroller) or an expert proof-read is marked Draft and carries a warning banner until an instructor signs off.
  • Every notebook's first cell is an Open-in-Colab badge pointing at its own path on main, so nothing requires a local install.

Organizations connected to this work

Organization names and marks are the trademarks of their respective owners. Their appearance here does not imply endorsement of this site or its contents.

Snapshot

Track
IEEE SPS @ UF · curriculum · 12 topics
Status
87 workshops / 258 sessions as of July 2026: 70 verified, 17 drafts pending verification; taught through IEEE SPS @ UF since 2024.
Focus
87 workshops258 sessions70 verified / 17 draftsOpen in ColabGPL-3.0

Stack

  • Python
  • Jupyter
  • NumPy
  • SciPy
  • Matplotlib
  • PyTorch
  • Google Colab
  • C and MATLAB
  • Mermaid

Collaborators

  • A chapter contributor wrote the PyTorch and Transformers workshops

Glossary

Session
A 30-40 minute slice of a workshop notebook, marked in place and matched to a row in the topic README, sized for one live chapter meeting.
Independent oracle
Something the author did not hand-derive that a numerical claim is checked against: a closed form, a reference solver, a planted ground truth, or an exhaustive brute force.
Debrief
The markdown cell after a result-producing code cell that names the actual number, says what it proves, and says where it breaks down.
Draft banner
An in-notebook warning on a complete workshop that has not yet been verified, either because its proofs await an expert read or its code needs hardware the author lacks.
Student blank
A copy of a live-taught workshop with code cells emptied for students to fill in and teacher notes removed; its prose is re-derived from the parent by a script.
CFAR
Constant false alarm rate detection: a threshold set relative to the local noise estimate so the false-alarm rate stays fixed as the noise level changes.