
Explore the fundamentals of digital signal processing, including signals, analog and digital distinctions, sampling, quantization, and practical examples like moving averages and noise removal using Python.
Review complex numbers in the complex plane, converting between Cartesian x + j y and polar forms using e^(j theta) to connect cosine and sine.
Master complex arithmetic for digital signal processing by adding, subtracting, and multiplying complex numbers in Cartesian and polar forms, converting between representations, and using complex conjugates for division.
Learn how to install anakonda on linux or mac, verify python in your path, use editors or Spyder, and install soundfile, numpy, and matplotlib for digital signal processing.
Discover how to install python on windows using anaconda, choose the 64-bit graphical installer, and set up an environment with NumPy, Matplotlib, and Spyder, including troubleshooting with pip install soundfile.
this lecture explains Python statements, variable assignment, and basic data types; it demonstrates printing with format specifiers, comments, meaningful names, and how Python 3 handles floating point and integer division.
Explore how conditionals control program flow, from if/else structures and boolean logic to comparison operators, indentation rules, and Python-specific style considerations.
Explore while loops and for loops, and learn how conditions control iteration, update variables, and use nested loops with ranges and increments.
Develop programming skills with loops, conditionals, and pseudocode, using incremental development to generate and print three to twenty four numbers divisible by four, including input and int function.
Explore what functions are and why to use them, with Python examples showing inputs, outputs, returning values, and edge cases like counting divisors to improve code reuse and readability.
Explore how lists organize data in Python, including creation, indexing, and slicing. Compare lists with tuples and learn mutability and simple memory management in data handling for digital signal processing.
Learn how strings work in Python, including quotes, concatenation, type conversion, ASCII values, and string methods like upper and slice operations, with examples of indexing, slicing, and comparisons.
Discover how to read from and write to plain text files using file pointers in PHP, including opening, reading lines, converting to floats, summing values, and closing the file.
Learn how dictionaries store data as key-value pairs, access values by keys, and update entries. See practical examples with reading CSV files and tokenizing lines.
Explore numpy to create vectors and matrices, distinguish row and column shapes, and perform math with arrays, arange for ranges, and cosine functions using an alias like np.
Learn to use matplotlib to plot signals by creating x and y vectors, plotting sine and cosine waves, customizing markers and colors, and arranging multiple plots with subplots.
Explore how sinusoids underpin signal processing, covering sine and cosine waves, amplitude, frequency, phase, and Fourier's theorem that any periodic continuous signal decomposes into sinusoids.
Derive the underlying sinusoid from a plotted signal by identifying amplitude, frequency, period, and phase shift, and solve practice problems to verify the equation.
Explore sampling of continuous signals, balancing sample rate and processing, illustrated with a 3 Hz cosine wave and the tradeoff for accurate reconstruction.
Aliasing arises when sampling at five samples per second, making 3 Hz and 13 Hz yield samples; apply a low-pass anti-aliasing filter and follow the sampling theorem to set rate.
Demonstrate digital signal processing by converting piano key numbers to octave frequencies and generating a 24-note wav of Twinkle Twinkle Little Star using cosine tones at 8,000 samples per second.
Learn how low pass filters use a frequency response and cutoff to pass or reject signals, with examples of 10, 50, and 200 Hz components.
Explore basic signals such as the unit step, unit ramp, and impulse, and learn how complex signals decompose into sums of shifted and scaled basics, guiding how filters respond.
Compare continuous and discrete time signals using summations, differentiate non recursive and recursive difference equations, and show how inputs produce outputs in a filter with index-based terms.
Explore linear time-invariant (LTI) systems in digital signal processing, covering linearity properties (proportionality, superposition, commutativity), frequency preservation, and time-invariance in discrete-time systems.
Explore the two defining properties of linear systems—superposition and proportionality—through generic inputs and counterexamples, showing how linearity holds under addition and scaling.
Examine linearity in digital signal processing through downsampling and decimation, compare algebraic proofs with graphical intuition, and identify nonlinear cases via proportionality tests.
Explore time invariance with concrete signal examples, showing that delaying input versus delaying output can yield different results. A downsampling counterexample highlights time-variant behavior and clarifies the subtle proofs discussed.
Decode a digital message by encoding ASCII characters into binary pulses, sampling signals, and using a matched filter with cosine similarity to distinguish zeros and ones despite noise.
Explore impulse response in digital signal processing by modeling an LTI system with unit impulse inputs, deriving h[n] from a difference equation, and expressing outputs as shifted, scaled deltas.
Explore the difference between finite impulse response and infinite impulse response filters, compare non-recursive and recursive forms, and understand moving-average implementations for efficient digital signal processing.
Learn digital convolution in a linear time-invariant system by convolving an input with the impulse response to form a weighted average output, including moving-average examples and transient versus steady-state behavior.
Explore convolution properties: the commutative, associative, and distributive laws, with examples and discussion on why they hold, and note separate videos cover each property.
Explore the associativity of convolution in linear time-invariant systems by cascading impulse responses and show how two systems can be replaced by a single equivalent LTI system.
Demonstrate the convolution distributive property with practice problems, showing that x(n) convolved with h1 plus h2 equals the sum of x(n) convolved with h1 and with h2.
Explore how low pass and high pass filters shape signals and images, using a four point moving average, edge detection, and median filtering to manage salt and pepper noise.
Explore correlation as a measure of linear relationships between signals, compare standard and normalized correlation, and learn cross and autocorrelation with dot-product calculations and practical radar and image applications.
We explore template matching using the normalized two-dimensional cross-correlation with match_template to locate a small image within a larger one, with grayscale preprocessing and a practical code example.
Explore frequency-domain analysis by converting time-domain signals to a two-sided spectrum using Fourier methods, and learn that an LTA system cannot change a frequency, only amplitude and phase.
Explore harmonics of periodic signals by decomposing them into harmonically related sinusoids, identify fundamental frequency, and see how square and triangular waves emerge from various harmonics using Fourier analysis.
Learn how the discrete Fourier transform and its inverse convert between time-domain samples and frequency-domain spectrum using complex exponentials, and how the fast Fourier transform speeds these calculations.
Explore how the discrete Fourier transform analyzes a signal's frequency content, revealing frequency bins, the dc component, and the role of windowing to reduce spectral leakage.
Apply the DFT to remove noise from an audio file by zeroing out targeted frequency components, then reconstruct the signal with the inverse DFT.
This lecture applies the dft to temperature data to reveal daily and yearly cycles, using 24 samples per day and preprocessing to extract the average temperature and seasonal trends.
Explore how a filter's frequency response describes how each frequency is amplified or attenuated. Use impulse responses, sampling rate, and normalized frequency to analyze finite impulse response filters.
Learn how convolution links time-domain filtering to frequency-domain multiplication, and how a cascade of filters becomes a single filter with a combined frequency response by convolving impulse responses.
Explore how a spectrogram uses windowed segments and short-term Fourier transforms to show how frequencies change over time, highlighting the time–frequency tradeoff and spectral leakage.
Detect DTMF digits with a seven-band filter bank of band-pass filters, identifying the two frequencies per button (row and column, e.g., 697/852 Hz and 1209/1477 Hz) instead of a spectrogram.
Learn feature selection for machine learning classification and clustering of images, audio, and video, covering time-domain and frequency-domain features such as zero crossing rate, short term energy, and spectrograms.
Construct and compare audio signatures from spectrograms by selecting the maximum amplitude per time window to classify music against a signature database, using cosine similarity, vector norms, or shazam-style matching.
Design nonrecursive and recursive digital filters within linear time invariant systems, focusing on finite impulse response designs and stability. Use windowing to manage Gibbs phenomenon and shape the frequency response.
Design nonrecursive filters with windowing method, using 21 taps and 50 Hz cutoff, then convolve with 2000 Hz signal to separate 4 Hz, 120 Hz, and 330 Hz components.
Apply a low-pass FIR filter with a Hamming window to remove noise from audio, using 101 coefficients and a ~6000 Hz cutoff; compare frequency responses and demonstrate effective noise reduction.
When I was an undergraduate I took a course called Linear Systems, which provides background theory for courses like Digital Signal Processing, Control Systems, and Communication Systems. While I did earn a grade of A in the course, I never really understood the purpose of the course beyond it being a prerequisite to other courses that I was required to take.
My goal in this course is to introduce you to digital signal processing in such a way that you not only understand the purpose of the various topics, but that you also see how you can apply the material.
In order to demonstrate practical applications of digital signal processing, I provide about a dozen Python programs for doing such things as removing noise from audio files, removing noise from images, identifying which phone numbers are pressed on a touch-tone phone, and analyzing temperature data. I go over each program, explaining how it works and how I designed it. I don't assume that you have already programmed using the Python programming language, so I also provide a crash course to get you up to speed.
This course is not for someone wanting a rigorous, theory- and math-heavy course; there are many available options if this is what you are looking for. This isn't to say that we will not use math in this course. I think that there is too much that you need to know that you can't really understand without some math. To help you with the math that we will learn, I review complex numbers and complex exponentials at the beginning of the course. Then as we learn new topics I provide practice problems with my solved answers.