
Explore fundamentals of signal processing from analog-to-digital conversion and Nyquist sampling to filtering, denoising, Fourier transform, and Python-based implementations that bridge theory and practice.
Yon can download the complete course material including Lecture slides and Python codes
Launch a concise Python crash course that covers essential modules for implementing signal processing techniques, teaching programming basics so you can program in Python and apply DSP algorithms.
Learn to install Python using Anaconda, download and install the software, and launch Jupiter notebook to begin coding for dsp projects.
Explore using Python as a calculator for addition, subtraction, multiplication, and division, including exponent and square roots, order of operations, modulo, and the basics of variable assignment.
Explore variable assignment and arithmetic in Python, then apply comparison and logical operators to evaluate expressions.
Explore Python conditional statements, including if, else, and elif, with comparison and logical operators like not, and, or, and practical examples using x and y.
Learn to create and manipulate 1d and 2d arrays in Python for DSP. Inspect shape and size, and find max, min, and their indices.
Master array creation in Python for DSP using range with lower and upper bounds, and interval, and linear space numbers; learn to reshape a 25-element array into a 5x5 matrix.
Learn to generate zeros and ones, create identity matrices, generate random numbers from normal and uniform distributions, and random integers, then index and slice arrays to extract submatrices and columns.
Learn to plot a sine wave against time, set x and y axis limits, add labels, a title, and a legend, and customize the figure with colors, markers, and styles.
Learn to create 2x2 subplots with tight layout for even spacing, plot continuous and discrete sine waves, and apply subplot titles and supertitles for clear dsp visualizations.
Master plotting and visualization by building subplots, configuring figure size, and applying line styles via policy parameters that affect all plots; plot data against X and Y with labeled axes.
Master Python lists by creating, indexing, slicing, and managing mixed-type elements; explore append, replace, delete, reverse, and sort, including nested lists and matrices.
Learn how to use for loops in Python with range, indentation, and if statements to print sequences, filter even numbers, build lists, and compute sums in DSP contexts.
Master nested for loops in Python, using outer and inner iterations and placeholders to build and fill matrices, including a 3x6 zeros matrix and a 5x5 checkerboard.
Explore fundamentals of signal processing, including analog to digital conversion, discrete signals, and sampling and reconstruction of continuous signals using the Nyquist theorem.
Explore the core elements of a signal processing system, from continuous analog signals to digital processing, and how analog-to-digital conversion enables transformation between time and frequency domains.
Explore analog-to-digital conversion by sampling analog signals into discrete time signals, quantizing amplitudes, and encoding to binary for digital processing.
Explore analog-to-digital conversion with Python by sampling a continuous signal, forming a discrete sequence, and applying quantization to produce a quantized signal.
Explain the encoding step in analog-to-digital conversion, turning a quantized discrete-time signal into a binary digital signal, using four bits to represent 11 levels from zero to one.
Explore how to generate continuous-time signals in python using numpy and scipy, covering impulse, step, sine, and exponential signals, with time shifting and delay demonstrations.
Explore fundamental discrete-time signals, including the unit impulse, unit step, and common time-shifting operations that create delayed and advanced versions; compare to continuous-time counterparts.
Learn to generate and manipulate discrete-time signals in Python, including unit impulses, unit steps, sine waves, and exponentials, with time shifting, delays, and sampling concepts, plus plotting with stem graphs.
Explore sampling and reconstruction in Python by applying Nyquist principles, showing how sampling at least twice the signal's maximum frequency enables accurate recovery of sine waves.
Explore how discrete signals are represented as sequences and graphs, then apply the convolution sum by flipping, shifting, multiplying, and adding to produce the output sequence.
Demonstrate numerical convolution by flipping the kernel, shifting it across the discrete signal, and performing multiplication and addition to form the output sequence.
Explore full mode convolution in digital signal processing, showing that the output length equals input length plus kernel length minus one, with a concrete numerical example.
Explore performing convolution in Python with NumPy, using a one-line command for full-mode convolution and comparing results to a for-loop approach, with plotting for visualization.
Learn how to denoise a noisy signal using convolution and moving average filters, generate a sine wave with noise, and apply convolution to recover the original signal.
Learn edge detection with convolution in Python for DSP by generating a 100-sample signal with edge-like segments and applying a seven-sample detector via convolution to reveal upward and downward transitions.
Explore moving average, Gaussian, and median filters to recover signals from noisy data. Learn their convolution-based noise removal and spike handling.
Apply a moving average filter to remove noise and smooth signals, using symmetric or asymmetric windows; increase order for more smoothing, while noting edge effects at signal boundaries.
Explore implementing a moving average filter in Python to remove noise from a sinusoidal signal, using 256 Hz sampling and a 61-point window.
Apply a gaussian mean filter to remove noise using a kernel generated from full width at half maximum. Pad with zeros to preserve length and clip edges.
Apply a normalized gaussian mean filter in Python to a generated noisy signal using zero padding and convolution for a smooth output.
Apply the median filter to noisy signals by replacing each point with the median of its neighbors, a nonlinear alternative to the moving average that resists outliers.
Demonstrates median filter in Python to denoise a noisy signal by applying a 50-sample window, and compares it with a moving average filter using visualization.
Apply a median filter to remove spikes from a noisy signal in Python, using a threshold of 50 to identify spikes and selectively filter only spike segments.
Explore how x^2 + 1 = 0 introduces the imaginary number G, and how complex numbers combine real and imaginary parts in the complex plane.
Learn to represent complex numbers in Python using three methods, extract real and imaginary parts, and plot them in the complex plane.
Learn to perform addition, subtraction, and multiplication of complex numbers using real and imaginary parts, and apply i squared equals minus one.
Learn to divide complex numbers by multiplying the numerator and denominator by the conjugate of the denominator, turning the denominator into a real number using a^2 - b^2 and simplifying.
Explore how to perform complex number operations in Python, including addition, subtraction, multiplication, division, and complex conjugates, and see how Python handles these calculations behind the scenes.
Calculate the magnitude and phase of a complex number using its real and imaginary parts. Use magnitude = sqrt(real^2 + imag^2) and angle = arctan(imag/real), illustrated with 5 + 6i.
Learn to calculate the magnitude and phase of a complex number in Python, convert radians to degrees, and visualize the magnitude and angle on a complex plane.
Explore frequency concepts and build a wave from sine, cosine, and DC components. Learn Fourier transform steps in Python, analyze multiplexed signals, and study the amplitude spectrum and inverse transform.
Explore how combining sine and cosine waves model complex signals, transform signals to the frequency domain with a lossless transformation, and understand amplitude, frequency, and DC components via sinusoidal modeling.
Generate and combine multiple sine and cosine waves in Python to construct complex signals, explore their DC component, and visualize the results with plotting and subplots.
Model a signal by decomposing it into sine waves and using dot products to locate frequencies, then use complex sine waves and amplitude correction to map to frequencies, noting symmetry.
Learn stepwise python coding of the Fourier transform for DSP, building a 256-sample sinusoid (amplitude 3, frequency 5 Hz) with complex numbers, Nyquist normalization, and frequency indexing, including multiplexing signals.
Apply the fast Fourier transform to a multiplexed signal of sine waves at 2, 4, and 6 Hz, revealing frequency components and amplitudes while comparing fft with loop-based approaches.
Learn to compute the Fourier transform of a multiplex signal with sine, cosine, and a DC component, properly handle the DC term, and scale amplitudes to recover true frequencies.
Learn to compute the amplitude spectrum of a multiplex signal with 2, 4, and 6 hertz components, then obtain the power spectrum by squaring the amplitudes.
The lecture explains that a signal is stationary when its statistical properties stay constant over time, making its Fourier transform interpretable, and contrasts amplitude stationary with amplitude nonstationary signals.
Explore how stationarity affects signal interpretation by comparing stationary and non-stationary segments with constant frequency five hertz and increasing amplitude, using the Fourier transform to reveal similarity for stationary signals.
Explore why digital filters are needed, master the five steps of filter design, and study zero shift filters to prevent phase differences, while examining the four basic filter types.
Explore why digital filters enable signal separation and restoration, define spectral separability, and contrast finite and infinite impulse responses as foundations for stable filtering.
Design FIR filters by defining the desired frequency-domain shape with cutoff and transition, using square or window methods, evaluating the frequency response, and applying the final filter.
Design a FIR filter using the window method, define frequency-domain specifications with no transition, select the filter order, and evaluate the frequency response against the desired shape.
Design a fir zero-shift filter in five steps using a 063 reader. Generate a test signal with zero-start and zero-end segments and a mid-band sinusoid, then apply a least-squares filter.
Design a low-pass fir filter to remove noise from a signal, defining a 20 Hz cutoff in the frequency domain and validating with a least-squares approach.
Generate a noisy 50 Hz signal with a 1024 Hz sampling rate in Python, then design and apply a low-pass FIR filter to remove noise.
Design a high-pass FIR filter by defining a target frequency-domain shape, set a 20 Hz cutoff with a 17–20 Hz transition, and validate impulse and frequency responses.
Learn how to implement a high pass fir filter in python, design its cutoff and transition, and evaluate the frequency and time-domain responses on a noisy signal.
Students design low-pass and high-pass filters using the window method and practice coding by designing a band with window techniques.
design isolators using a pattern-based method, outline five steps and compare fir and iir filters, highlighting differences and key characteristics.
Learn to design IIR Butterworth filters from ground up in Python, defining order and cutoff, generating coefficients, obtaining impulse response, transforming to frequency domain, and applying the filter to signals.
Design a low-pass IIR filter in Python using a Butterworth cutoff, normalize by Nyquist, and assess impulse and frequency responses before filtering noisy data to recover the desired signal.
Design a high-pass IIR filter, normalize its cutoff, and apply it to a noisy signal to preserve high-frequency components while suppressing low-frequency noise.
Design and analyze a bandpass iir filter for noise reduction in a simulated signal, using 30–40 Hz with a small filter order, impulse response, and frequency-domain evaluation.
This course will bridge the gap between the theory and implementation of Signal Processing Algorithms and their implementation in Python. All the lecture slides and python codes are provided.
Why Signal Processing?
Since the availability of digital computers in the 1970s, digital signal processing has found its way in all sections of engineering and sciences.
Signal processing is the manipulation of the basic nature of a signal to get the desired shaping of the signal at the output. It is concerned with the representation of signals by a sequence of numbers or symbols and the processing of these signals.
Following areas of sciences and engineering are specially benefitted by rapid growth and advancement in signal processing techniques.
1. Machine Learning.
2. Data Analysis.
3. Computer Vision.
4. Image Processing
5. Communication Systems.
6. Power Electronics.
7. Probability and Statistics.
8. Time Series Analysis.
9. Finance
10. Decision Theory
11. Biomedical Signal Processing
12. Health care
Course Outline
Section 01: Introduction of the course
Section 02: Python crash course
Section 03: Fundamentals of Signal Processing
Section 04: Convolution of Signals
Section 05: Signal Denoising Filters
Section 06: Complex Numbers
Section 07: Fourier Transform
Section 08: FIR Filter Design
Section 09: IIR Filter Design