ECE 4650/5650 Modern Digital Signal Processing

Course header graphic showing an ensemble of random waveforms needing to be discrete-time processed using a sum of products as depicted by the capital sigma symbol.

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

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

Other Course Materials

  • 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.

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.

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


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, and ingredients_function.jl. The IQIO.jl module, is similar in purpose to the Python version IQ_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 file ingredients_function.jl is a function to include in 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() and fft_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)

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

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.