Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Python virtual labs implemented via the Jupyter Notebook developed for EE 120: Signals and Systems at UC Berkeley.


These labs were developed by the EE 120 course staff in the spring 2019, fall 2019, and spring 2020 semesters. The topics follow our course's content and are listed below. They're ideal for an entry-level upper division course with a focus in signal processing where the students have some prior programming exposure.

We presented these labs at the 2020 International Conference on Higher Education Advances. The paper is available here.


The relevant Jupyter Notebook (.ipynb) file that students complete for Lab N is at labN/labN.ipynb. For example, the file for Lab 3 is named lab3.ipynb, located in the lab3 folder. The folder labN also contains all resources necessary for that lab to function as intended. Changing the directory structure provided in this repository may cause issues, since the labs expect certain fixed filepaths (e.g., when displaying images inside the notebook, loading data from provided files, or running test cases to provide students with sanity checks on their work).

The versions here are without solutions. If you're an educator at another institution and would like to use these in your course, contact Prof. Babak Ayazifar ( about acquiring solutions.

The Labs

Lab Topics
Lab 0: Scientific Python Tutorial
  • Python, NumPy, SciPy, and Matplotlib basics
  • Rectangular and exponential signal generation
Lab 1: Intro to Python for Signals and Systems
  • Basics of audio signals (amplitude, phase)
  • Convolution
Lab 2: Applications of LTI Filtering
  • 1D edge detector
  • Simple moving average for denoising
  • Exponential moving average of stock data
Lab 3: Practical Fourier Analysis
  • DFT/FFT implementation and analysis
  • Virtual oscilloscope calibration via cross-correlation
Lab 4: Heart Rate Monitoring
  • Spatial averaging of video of human thumb
  • Extract heartbeat frequency via FFT
Lab 5: Deconvolution and Imaging
  • 1D deconvolution (echo cancellation)
  • 2D convolution (image blurring and sharpening)
  • 2D deconvolution (Hubble Space Telescope image deblurring)
Lab 6: Control
  • Satellite stabilization
  • Open-loop vs closed-loop control
  • Nonlinear control
Lab 7: Communication
  • Amplitude Modulation
  • On-Off Keying
Lab 8: Shazam
  • Spectrograms and STFT
  • Audio Fingerprinting
Lab 9: Wavelets
  • Haar Basis vs DFT Basis
  • Implementation via filter banks
  • Image/Video Compression via Wavelets


Jupyter Notebook virtual labs developed for EE 120, UC Berkeley's course in Signals and Systems.







No releases published


No packages published