Courses
Two self-directed weekend courses aimed at one goal: becoming genuinely proficient, in both theory and practice, at digital signal processing for embedded software / firmware engineering. Course 1 is the mathematical foundation, worked by hand. Course 2 is the bench: a fully lab-based course that spends that math building and measuring real-time DSP on real hardware. Course 1 is a mastered prerequisite for Course 2; its results are applied there, never re-taught.
Weekend rhythm: Saturday = reading + handwritten derivations (Course 1) or breadboard build + first measurements (Course 2). Sunday = deeper measurement/firmware + analysis + a staff-level note reconciling predicted vs. measured.
Note on AI use: The Course 2 lab write-ups and the Course 1 syllabus are drafted with AI assistance so every page has a consistent structure. The substance is mine: every proof is worked by hand on paper first and converted to LaTeX/KaTeX using AI for typesetting only, and every circuit, measurement, and line of code is produced and debugged by me. The goal is to learn the material, which only happens by producing the proofs and building the labs myself.
Course 1 — Mathematical & Theoretical Foundations
A 20-section course: the mathematical backbone under Course 2. It works through the highest-value chapters of the core textbooks, ordered by dependency — linear algebra, numerical linear algebra, real analysis, probability, convex optimization, complex analysis, and distribution theory / Fourier transforms — then builds signal processing proper on that foundation (digital filters, the FFT, adaptive filtering, spectral estimation, and the Kalman filter), and carries the whole apparatus into two dimensions and into sound: digital image processing (Gonzalez & Woods) and digital audio signal processing (Zölzer), closing on the convolutional neural networks that end both books. It’s a syllabus of section-by-section themes and readings; I work select problems from each section’s chapters by hand, tracked on the Books page.
Phase 1 · Sections 1–4 — Linear Algebra, Numerical Computing, and Analysis
Vector spaces, linear maps, and eigenstructure through Axler’s development; inner-product spaces, the spectral theorem, the SVD, the Jordan form, and determinants. Numerical linear algebra: norms, QR, least squares, conditioning, floating point, and stability. Real analysis: sequences, continuity, uniform convergence, differentiation, and the Riemann integral.
Phase 2 · Sections 5–8 — Probability and Convex Optimization
Probability foundations, random variables, expectation, and covariance. Limit theorems, Markov chains, and Bayesian/classical inference. Convex sets and functions and the operations that preserve them. Convex problems, duality, and unconstrained optimization: gradient descent and Newton’s method.
Phase 3 · Sections 9–10 — Complex Analysis, Distributions, and Fourier Transforms
Complex analysis: analytic functions, Cauchy’s theorem, Laurent series, poles, and residues, the machinery behind transfer functions and filter stability. Distribution theory: the Dirac delta and the Dirac comb, distributional derivatives, and the Fourier transform of tempered distributions, the rigorous foundation of sampling and the whole of DSP.
Phase 4 · Sections 11–14 — Digital and Statistical Signal Processing
Where the mathematics becomes signal processing. Real-time DSP fundamentals: sampling and quantization, fixed-point arithmetic and overflow, and the design and realization of FIR and IIR filters. Frequency analysis and the FFT, adaptive filtering and the LMS algorithm, and signal generation and tone detection. Then the signal treated as random: stationary random processes, spectral density and coherence, and the random and bias errors that bound any spectrum estimated from a finite record. Closing with recursive optimal estimation — state-space models and the Kalman filter, down to the square-root implementations that survive on a microcontroller.
Phase 5 · Sections 15–17 — Digital Image Processing
The one-dimensional signal processing of the earlier phases carried into two dimensions, through Gonzalez & Woods. The image as a sampled, quantized 2-D signal; spatial filtering (which is 2-D convolution) and histogram processing; frequency-domain filtering via the 2-D DFT and image restoration via the Wiener filter; then compression and its entropy coders, segmentation (edges, thresholding, clustering, watersheds), and feature extraction (PCA, SIFT). The theory behind Course 2’s image and video labs.
Phase 6 · Sections 18–20 — Digital Audio Processing and Learned Signal Processing
Digital audio signal processing through Zölzer, then the capstone that ends both books. Quantization, dither, and noise shaping; sample-rate conversion; AD/DA and delta-sigma modulation; then parametric equalizers and fast convolution, room simulation and reverberation, dynamic range control, and psychoacoustic audio coding. The course closes on the deep convolutional networks that end both the image and audio books — the learned signal processing behind Course 2’s edge-ML module.
Course 2 — Embedded DSP: From the Bench to Real-Time Firmware
A fully lab-based course connecting the mathematics of Course 1 to working firmware and a real bench. Eight core modules plus two bonus modules (~41 labs), each predicted by hand, built on a breadboard, measured on real instruments (WANPTEK PSU, Fluke 117, Siglent 100 MHz scope, FNIRSI LCR meter, Saleae Logic 8), and driven from an STM32 Cortex-M4F. Books: Oppenheim Signals and Systems, Lyons Understanding DSP, Hayes Statistical DSP, Kuo, Lee & Tian Real-Time Digital Signal Processing, Grewal & Andrews Kalman Filtering, and Bendat & Piersol Random Data.
Modules 0–2 · Bench, Scope, and Digital Timing
Power supplies, multimeters, and LCR measurement done safely and correctly. The oscilloscope: probe compensation, DC/ripple, and a first RC filter. Digital I/O and timing on the STM32: GPIO timing, timer-interrupt jitter, and UART decoding, all captured on the Saleae logic analyzer.
Modules 3–4 · Mixed-Signal I/O and Analog Conditioning
I²C bus bring-up, the MCP4725 DAC (voltage and waveform generation), the ADS1115 16-bit ADC, and safe 3.3 V ↔︎ 5 V level shifting. Then analog signal conditioning with the MCP6002 op-amp: voltage followers, non-inverting gain, clipping, and an active anti-alias low-pass filter.
Modules 5–7 · Acquisition, Real-Time DSP, and Robust Firmware
STM32 data acquisition: single-sample, timer-triggered, and DMA circular-buffer sampling, plus a live aliasing demonstration. Real-time DSP on the Cortex-M4F: FIR and IIR filters (with fixed-point stability), the FFT spectrum analyzer, PSD/noise-floor estimation, and Goertzel tone detection. Robust firmware: watchdog and fault handling, a FreeRTOS pipeline, and an end-to-end capstone.
Bonus Module 8 · Edge ML Signal Processing
The modern differentiator: learned DSP on edge accelerators. Real-time GPU spectrograms on the Jetson Orin Nano, an on-device keyword/tone classifier, a learned denoiser compared to the classical Wiener filter, vibration anomaly detection, and a latency/power benchmark across STM32 vs. Raspberry Pi 5 vs. Jetson.
Bonus Module 9 · Host-in-the-Loop Audio, Image & Video Processing
Real media, real files, verifiable results. The laptop streams a real audio/image/video file to the embedded target, which processes it in real time and streams it back for verification against a reference implementation: a WAV round-trip harness, streamed real-time audio filtering, STFT overlap-add effects, 2-D image convolution (blur/Sobel), and a real-time video-frame pipeline on the Pi 5 / Jetson.