ECE 4650/5650 Modern Digital Signal Processing

Catalog Course Description
Study of linear discrete-time systems, linear difference equations, Z-transforms, discrete Fourier transform, fast Fourier transform, sensitivity, discrete random processes, quantization effects and design-related concepts.
Prerequisite: ECE 3205 and ECE 3610, or equivalent
Offered: Fall (F)
News for 12/20/2025
The grading is complete and the numbers have been run through a spreadsheet to calculate the various histograms. I will be thinking about how to assign the letter grades over the next 24 hours. In the mean time here is a link to the histograms. I will push papers back soon. The delay in getting done is related to dress rehearsals and performances that started Wednesday evening, with the final performance Sunday afternoon. I did get bogged down grading projects, which I only finished this morning. The final exams were just finished at about 3pm.
10/22: To get started with vs code and jupyter notebooks see this Microsoft link: Jupyter Notebooks in VS Code.
PDF file extracting and merging see: (1) Merging and (2) Splitting
Getting Tools Setup
- Create a new Python virtual environment using miniconda or miniforge3 as of February 09, 2026 09:01:05. I suggest this to get going quickly. This will give you a full scientific Python environment good for the entire semester. You will have scientific Python with scikit-dsp-comm running in Jupyter Lab with pyaudio for real-time DSP. Python scripts with debugging and Jupyter notebooks with debugging will also work in vs code with extensions.
- Create a second Python virtual environment for Marimo notebooks as of February 03, 2026 07:42:32. Marimo notebooks offer some very nice capabilities for reactive notebooks. This is being being developed at Stanford University.
- Install Julia, Python, Jupyter Lab, Pyaudio as of October 12, 2024 09:54:08. For both Python users and Julia users, the document also provides details on how Markdown file exports from Jupyter Lab can be used to produce PDF pages that can be merged with handwritten homework pages. The approach is to edit Markdown in vs code for producing PDFs from Jupyter Lab documents to include in your solved homework.
- C++ development with MSYS2, gcc/g++, and then configure vs code extensions for building, debugging, and running code.
- Get motivated for Real-time DSP in the Jupyter notebook by reading some Scipy Conference papers I published using pyaudio_helper. As an application consider a 3D audio simulator.
- Course Materials
- Lecture Videos
- Problem Sets with Solutions
- Jupyter Tutorial Notebooks
- Python Projects
- Julia Modules and Pluto Notebooks
- Exams New and with Solutions
- Preparing Homework in Typst
Syllabus
Course Syllabus as of August 17, 2025 09:59:27.
Intro Lecture (Chapter 1) as of August 19, 2025 09:33:44.
Lecture Notes
- PDF file of Chapter 2 as of July 23, 2024 05:03:14.
- PDF file of Chapter 3 as of July 23, 2024 05:03:14.
- PDF file of Chapter 4 as of July 23, 2024 05:03:13.
- PDF file of Chapter 5 as of July 23, 2024 05:03:14.
- PDF file of Chagter 6 as of July 23, 2024 05:03:13.
- PDF file of Chapter 7 as of July 23, 2024 05:03:13.
- PDF file of Chapter 8 as of July 23, 2024 05:03:13.
- PDF file of Chapter 9 as of July 23, 2024 05:03:12.
Other Course Materials
- Python Basics a tutorial written in Jupyter Notebook. ZIP.
- Read-the-Docs for scikit-dsp-comm
- Convolution sum extra examples
- LTI and causality graphically
- Exam tables you print and can bring to the exams
- Exam 2 Example Problems (may be useful for homework)
- Final Exam Review for fa2025 as of December 08, 2025 10:04:14; Updated with added notes December 09, 2025 10:13:23 following class
- A simulation of computing the spectrum of a periodic pulse train in Python posted as a PDF.
- Support materials for sampling theory.
Lecture Videos
Fall 2022 and as they unfold Fall 2024, are on YouTube via the links below. I have a YouTube channel with playlists for each of the lecture courses posted in this Web Site.
- Lecture 1 (fa22), Lecture 1 (fa24), Lecture 1 (fa25)
- Lecture 2 (fa22), Lecture 2 (fa24), Lecture 2 (fa25)
- Lecture 3 (fa22), Lecture 3 (fa24), Lecture 3 (fa25)
- Lecture 4 (fa22), Lecture 4 (fa24), Lecture 4 (fa25)
- Lecture 5 (fa22), Lecture 5 (fa24), Lecture 5 (fa25)
- Lecture 6 (fa22), Lecture 6 (fa24), Lecture 6 (fa25)
- Lecture 7 (fa22), Lecture 7 (fa24), Lecture 7 (fa25)
- Lecture 8 (fa22), Lecture 8 (fa24), Lecture 8 (fa25) short exam day
- Lecture 9 (fa22), Lecture 9 (fa24), Lecture 9 (fa25)
- Lecture 10 (fa22), Lecture 10 (fa24), Lecture 10 (fa25)
- Lecture 11 (fa22), Lecture 11 (fa24), Lecture 11 (fa25)
- Lecture 12 (fa22), Lecture 12 (fa24), Lecture 12 (fa25)
- Lecture 13 (fa22), Lecture 13 (fa24), Lecture 13 (fa25)
- Lecture 14 (fa22), Lecture 14 (fa24), Lecture 14 (fa25)
- Lecture 15 (fa22), Lecture 15 (fa24), Lecture 15 (fa25)
Problem Sets with Solutions
The time and date setting of all newer files are now in the local mountain time zone due to a change in a WordPress plugin (finally)
Set 1 as of September 04, 2025 06:11:56 (UTC). Hints as of August 31, 2025 09:41:38 (UTC). wxMaxima ZIP and pdf for Problem 1 and Python Jupyter ZIP and pdf. A general Jupyter notebook PDF hints. Note in this general Jupyter PDF hints the Problem 1 info applied to Fall 2024. Solved as of September 10, 2025 04:58:57 (UTC).
Set 2 as of September 07, 2025 05:37:41 (UTC). Hints as of September 13, 2025 07:55:17 (UTC). Solved as of September 24, 2025 06:19:54 (UTC). Score histogram.
Set 3 as of September 22, 2025 08:12:08 (UTC). Hints as of September 27, 2025 07:05:48 (UTC). Solved as of October 08, 2025 06:31:58 (UTC).
Set 4 as of October 06, 2025 09:17:19. Hints as of October 15, 2025 09:24:14. Solved as of October 29, 2025 09:15:00.
Set 5 as of October 28, 2025 09:36:36. Hints as of November 04, 2025 09:24:21. Solved as of October 29, 2025 09:15:00.
Set 6 as of November 10, 2025 06:27:52. Hints as of November 13, 2025 09:44:37. Solved as of November 21, 2025 06:47:17.
Set 7 as of November 26, 2025 07:03:10. Hints as of November 26, 2025 07:06:58. Solved as of December 10, 2025 07:40:28.
Set 8 as of November 26, 2025 07:03:17. Hints as of November 26, 2025 07:06:58. Solved as of December 11, 2025 08:01:32.
A Collection of Jupyter Notebooks
Check the posting dates for the newest.
- Audio record and playback ZIP in Jupyter from teaching win11 tablet as of September 16, 2025 03:21:11 (UTC). PDF rendering from MacBook.
- 5650_Fall_2025_Set_1_Demos using Python as of September 03, 2025 07:34:30 (UTC) and Julia as of June 30, 2025 09:11:36 (UTC) Jupyter notebooks. PDF renderings (Python, Julia) so you can see the hints and the respective code approaches.
- Chapter 2 as of September 04, 2024 09:18:35. PDF rendering as of September 05, 2024 10:08:43.
- Chapter 3 as of October 13, 2025 12:41:04. PDF rendering as of October 13, 2025 12:41:25 (UTC).
- Chapter 4 as of November 05, 2025 08:43:26. PDF version of the notebook. as of October 23, 2024 09:17:56.
- Chapter 5 as of November 19, 2025 07:53:27. PDF version of the notebook. as of November 19, 2025 07:53:56.
- Chapter 6 as of December 03, 2025 07:46:35. PDF version of the notebook. as of December 03, 2025 07:46:35.
- Chapter 7 as of December 08, 2025 09:53:41. PDF version of the notebook. as of December 08, 2025 09:53:42.
Python with Julia Projects Fall 2025
- Set #1p as of October 31, 2025 01:11:04. The ZIP includes three sample Jupyter Lab notebook files for problems 1, 2, 3-omitted, and 4 and a separate notebook for problem 5. The project ZIP file as of October 31, 2025 01:11:26. Music Test ZIP.
- Project 2 as of November 26, 2025 07:08:31 (UTC), on an FFT channelizer for concurrent AM broadcast band signal reception using an actual SDR capture at 1200 ksps centered on 1070 kHz. The ZIP package as of November 26, 2025 07:08:49 (UTC) and PDF rendering of the sample notebook as of November 26, 2025 07:26:10 are available now. A large SDR capture file (~500 Mb) is being delivered using Slack.
Fall 2024
- Project 2 option a, on adaptive filters as of December 10, 2024 05:18:04 (UTC). The sample notebook ZIP as of (UTC).
Recent Past Python Projects
Set #1p as of (UTC) and the project ZIP file as of (UTC). The ZIP includes a sample IPYNB file for problems 1, 3, and 4 and a separate notebook for problem 5. The Project 1 FFT portion zip as of July 24, 2024 05:17:34 (UTC) is Python and C++ code in a project folder titled FFT_filter when unpacked.
Project2/Final Project as of July 24, 2024 05:17:35 (UTC) and the project Project ZIP including a sample IPYNB and GPS.py file as of July 24, 2024 05:17:34 (UTC).
Julia Modules and Pluto Notebooks
- For those wanting to experiment with Julia I have provided a ZIP package of modules under development:
DSPTools.jl,CommTools.jl,PLLTools.jl,IQIO.jl, andingredients_function.jl. TheIQIO.jlmodule, is similar in purpose to the Python versionIQ_IO.py. Both are used to read and write binary files containing complex float values, I/Q (real/imag) in a serial stream of samples as …IQIQ… These are used when interfacing with say C++ code. The fileingredients_function.jlis a function toincludein a Julia file and can then load the other Julia files into a Pluto or Jupyter notebook. The modules then behave similarly to a real Julia package. Examples of this function can be found in Julia based Jupyter and Pluto notebooks, and vs code scripts that use the Julia extension. - On 1/19/2025 the module DSPTool.jl was updated to include new functions:
fft_filt_bank()andfft_caf(). - A nice feature of Pluto notebooks is you can directly export them from the browser to PDF documents.
Notebook ZIPs and PDF Renderings
Jupyter Notebooks (.ipynb file for Jupyter Lab)
- Julia NB1 as of October 16, 2024 08:55:03. PDF rendering as of October 16, 2024 08:54:01. The PDF rendering uses the notebook Export menu to export to PDF via installed LaTeX and Inkscape to convert graphics.
Pluto Notebooks (.jl file that runs in Pluto)
- Pluto NB1 as of October 16, 2024 10:15:21. PDF rendering as of October 17, 2024 06:44:29. The PDF rendering uses the stand alone PDF export capabilities of Pluto.
- Pluto Notch Demo as of October 16, 2024 10:18:39. PDF rendering as of October 17, 2024 06:44:28. This example shows off some nice interactive capabilities to explore the notes cover page block diagram and more.
- Antialiasing Filter Design and Sinusoid PSD with Quantization Demo as of November 12, 2025 07:19:22. PDF rendering as of November 12, 2025 07:17:48.
VS Code Scripts (.jl file that runs with Julia Extension)
Sample Exams with Solutions
Histograms to Date as of November 18, 2025 03:47:12
- Exam 1 with solutions Fall 2024
- Exam 1 with solutions Fall 2025
- Exam 2 Fall 2025 document as of November 20, 2025 04:57:37. Jupyter notebook zip as of November 20, 2025 07:41:35 and PDF rendering as of November 20, 2025 01:08:55
- A typst project zip export ready to load into your Typst account
- The pdf from the sample project, which includes useful problem solutions for problem similar to Set 1
In the *.typ file of this ZIP package the header imports the Callisto package. Some of the earlier graphics are now abandoned in favor of importing notebook content directly. The three cell types rendered are (1) Python code cells, (2) Markdown cells that include equations, (3) plots created in code cells. The header area at the top of the *.typ file now includes the line:import "@preview/callisto:0.2.4"
There is also a *.ipynb file in the main directory which is brought into the Typst document using the line:
#let (render, result) = callisto.config(nb: json(“Typst_demo_python.ipynb”))
Individual cells from the notebook are brought into the *.typ file using Typst lines of the form:#render(1)
where the number is the cell number. You need to load the notebook into your local Jupyter session to get a better sense of the content in the notebook. All of the notebook content is added under the Problem 2.29 part of the example. Overall the results are very nice and you see what the #render() statements are doing via the real-time preview!
Spring Related 2025
A course of related interest Spring 2026 is Real-Time DSP, ECE 5655/4655-3, a three credit course on programming the ARM CortexM4/M7. Keil MDK Community Edition is the IDE, and we make use of the ARM CMSIS-DSP library. As of Spring 2026 I am not sure this course will be offered.
Learning Python and Getting Acquainted with Julia
There are many resources for learning Python. For our purposes we are interested in learning Python with an emphasis on the so-called scipy stack which includes the well-known packages numpy, scipy, and matplotlib.
- Scientific-python.org
- Python Basics a tutorial written in Jupyter Notebook. A ZIP of the complete Jupyter notebook with all graphics.
- An IDE I recommend is VS Code with many nice extensions for Python, Julia, and Jupyter, C++, just to name a few.
- Cheat sheet for MATLAB/Python/Julia.
- NumPy2MATLAB and IPython reference card.
- Julia Tools ZIP package.