This book is designed to follow the course syllabus of Fundamentals of Digital Signals Theory (I) (MPATE-GE 2599) at New York University. The focus here is on digital signals, meaning discrete time signals as represented in modern computers. Unlike many other books, we do not cover continuous time signals, except insofar as necessary to understand digital sampling. The scope of the book is limited to these general topics:
Signals and systems,
Discrete Fourier analysis, and
Discrete-time linear filtering.
While certainly not a comprehensive treatment of signal processing, the topics covered here should provide a solid foundation upon which readers can develop in whichever direction they see fit.
Who is this book for?#
This book is intended for students interested in learning digital signal processing from the ground up, but who may not have much mathematical or engineering training. Because we do not cover the continuous-time case, we will not need differential calculus. In some places we’ll have to gloss over a couple of technical details, but my hope is that students can still gain a sufficiently rich understanding of digital signals with minimal mathematical background.
I’ve tried to make the contents of this book self-contained, and provide supplementary background material in the appendix. That said, we do have to start somewhere, and I generally expect readers to have familiarity with high-school level algebra and geometry.
Why another book?#
Put simply, I wasn’t happy with any of the existing digital signals textbooks that could be used for this class. While many of them are excellent reference books, they often assume a fairly sophisticated technical background, and are aimed at upper-division undergraduate students in engineering programs. After stubbornly trying to make do with existing books, I got frustrated enough to make my own!
This book is meant to be fairly self-contained, but it certainly can’t cover everything. Depending on your background, you may find yourself wanting more foundational material (e.g., on mathematics or programming), or more advanced coverage of certain topics.
PythonTutor is an excellent resource to learn the basics of program operation.
NumPy for Matlab users is helpful if you have prior experience with Matlab, and want some basic recipes to translate into Python.
The Software Carpentry organization has excellent tutorials for programming in Python:
I would like to thank several people for providing feedback on early versions of this text: Meinard Müller, Frank Zalkow, Ernesto Valenzuela, Haokun Tian, Katherine Kinnaird, Tanya Clement, and Nancy Rico-Mineros.
This project would not have been possible without the tireless efforts of the open source software developers, especially contributors to the following projects: