Coursework
Electrical Engineering
EENG 519Estimation Theory & Kalman Filtering
A graduate course on getting useful information out of raw sensor data when the signal is uncertain, with navigation, localization, and mapping as common uses. It covers random signals, the discrete-time Kalman filter and when it is optimal, filter divergence, and nonlinear estimation. My final project ran an EKF and a UKF on a model of the EMBR damper.
- Project
- Damper state estimation
EENG 417Modern Control Design
Control design built around observers, from the first open-loop experiments to the final implementation. It covers frequency-domain feedback design, sensitivity and fundamental limits, state space realization, and system identification. The gantry crane project runs through most of this, from fitting the cable length to a state-space controller with an observer.
- Project
- Gantry crane control
EENG 411Digital Signal Processing
How to represent discrete-time signals and systems in the time, z-, and frequency domains. Each view helps you read a signal, design a filter, or sample correctly. It also covers sigma-delta conversion, multi-rate processing, and spectral analysis. The pitch tracker uses the last two. It decimates its audio to 8 kHz and finds pitch with an FFT.
- Skills
- MATLAB
- Project
- Pitch tracking for auto-tune
EENG 393Field Session – Printed Circuit Board Design
Taking a printed circuit board from concept through design, fabrication, and soldering. It teaches good design practice along with the real-world limits that manufacturing puts on a circuit.
- Skills
- PCB Design
EENG 391Field Session – Computational Methods for Electrical Engineers
Computational methods for everyday electrical engineering: plotting signals and data, analyzing and implementing digital filters, computing integrals, solving differential equations, and simulating dynamical systems. I kept using MATLAB and Simulink on later controls and estimation projects.
EENG 386Fundamentals of Engineering Electromagnetics
Electromagnetic theory with a practical focus. It starts with vector calculus and builds from Coulomb's and Biot-Savart laws up to Maxwell's equations. Then it covers generators, motors, transmission lines, impedance matching, and the Smith chart. I used Biot-Savart again to model the electromagnet on the EMBR damper.
EENG 385Electronic Devices and Circuits
The large-signal and small-signal behavior of op-amps, diodes, bipolar junction transistors, and field effect transistors, plus the frequency response of standard circuits. Labs test how well your analysis matches the real circuit.
EENG 383Embedded Systems
Building systems from analog and digital parts around a microcontroller. You use timers, PWM, ADCs, serial links, and interrupts, all in C or C++. The course also covers fixed-point math, direct digital synthesis, lookup tables, and row scanning. The Arduino code on the maze robot and the solar tracker uses the same parts.
EENG 350Electrical Engineering Integration and Design
A semester-long build around one challenge problem that changes every year. Teams design and prototype a full system, build it from modular subsystems, and integrate them, using concepts from across the electrical engineering courses. Our challenge became the autonomous maze robot, and Maverick Savage and I built its vision stack.
- Skills
- Python
- Project
- Autonomous maze robot
EENG 311Information Systems Science II (Signals and Systems II)
Signals and noise in electrical systems, with examples from radar and communications. Topics include information theory, signal-to-noise ratio, random variables, matched filters, coding and entropy, power spectral density, and bit error rate. The random-signal material comes back in Kalman filtering.
EENG 310Information Systems Science I (Signals and Systems I)
How signals carry information and noise over time, with examples from filtering, audio and image processing, and communications. It covers convolution, Fourier series and transforms, sampling, modulation, and z-transforms. The pitch tracker uses the sampling and Fourier analysis from this class.
EENG 307Introduction to Feedback Control Systems
Modeling linear electrical, mechanical, fluid, and thermal systems through energy flow, then analyzing their response in the time and frequency domains. Feedback design, including PID, is done both by hand and by computer. The frequency-domain tools here are the ones behind the gantry crane margins.
EENG 284Digital Logic
Digital logic, from Karnaugh maps and Boolean algebra to decoders, adders, counters, registers, and finite state machines. You write designs in a hardware description language and download them onto FPGAs. Mine was Verilog.
- Skills
- Verilog
EENG 282Electrical Circuits Laboratory
An engineering analysis of DC and AC circuits, both single-phase and three-phase. It covers Ohm's and Kirchhoff's laws, Thevenin and Norton equivalents, RC and RL transients, phasors, and power.
Computer Science
CSCI 410Elements of Computing Systems
CSCI 406Algorithms
Reasoning about whether an algorithm is correct, and how fast it runs in theory and in practice. It covers advanced sorting, dynamic programming, backtracking, graph algorithms, network flows, and NP-completeness.
- Skills
- Python
CSCI 358Discrete Mathematics
An introduction to discrete mathematics and algebraic structures. It covers formal logic, proofs, recursion, algorithm analysis, sets and combinatorics, relations, functions, and matrices. It also covers Boolean algebra, trees, graphs, finite-state machines, and regular languages.
CSCI 341Computer Organization (Computer Architecture)
How computers work at the machine level: machine instructions, assembly language, operating system calls, computer arithmetic, performance, processor design, and pipelining. The assembly I wrote was RISC-V.
- Skills
- RISC-V Assembly
CSCI 306Software Engineering
Software engineering process and object-oriented design: Agile, test-driven development, UML diagrams, use cases, and design patterns. The coursework pushes version control and code review. I later ran Git for the pitch tracker and maze robot teams.
CSCI 274Introduction to the Linux Operating System
CSCI 220Data Structures and Algorithms
Designing and building hash tables, trees, heaps, and graphs, analyzing their operations, and writing algorithms on them, such as graph search and minimum spanning trees. Everything is implemented in C++.
- Skills
- C++
CSCI 200Foundational Programming Concepts & Design
C++ from the start: managing memory at run time, object-oriented programming, and building algorithms from data structures and abstraction. Recursive data structures and the first software design principles come in along the way, all from the command line.
- Skills
- C++