
Download the Arduino IDE from the official page, install the latest version (1.85) or a prior release on Windows (XP and up), noting it is open source.
Download and run the arduino software installer, follow the setup wizard, choose or accept the default installation location, install required drivers, and finish the installation.
Explore how Arduino boards differ across five categories—entry level, ARM cortex, futures, internet of things, and education—and learn how cortex-based boards enable faster DSP and efficient C programming.
Install and select a new board in the Arduino IDE, configure the port, and upload test code to verify libraries and a blinking LED on a 32-bit ARM cortex-m3 board.
Install CMSIS-DSP capabilities in the Arduino IDE by integrating the CMSIS DSP library. Edit the platform configuration as an administrator and update the Cortex-M DSP path.
Unlock the concept of signal-to-noise ratio by comparing signal to noise and interference through the mean and standard deviation, and explore the coefficient of variation as an alternative measure.
Develop a from-scratch C algorithm to compute the mean of a signal, then run it on Arduino and Cortex-M3 with the DSP library, using a 320-point double array.
Demonstrates computing the mean of a signal on Arduino by calling a mean function with an input array and length, and printing results via serial monitor, while managing data size.
Create a signal plot function on Arduino that takes a double array and its length, prints values via serial, and supports optional motion while illustrating variance with CMSIS DSP.
Develop the signal variance algorithm in Arduino by creating a function that accepts the signal array, its mean, and length, computes the variance, and prints the result via serial.
Compute the signal variance using CMSIS-DSP on an Arduino, trim long signals by halving the length, then compile and upload to the board for faster variance computation.
learn to compute a signal's variance using the CMSIS-DSP library on the Adreno board, covering project setup, header inclusion, float32 data types, and invoking the variance function.
Design and implement an algorithm to compute the signal standard deviation from variance in Arduino using the DSP library, via a simple square root function and hardware testing.
Compute the signal standard deviation using the cmsis-dsp library in an Arduino project. Convert data types to float and use the _SDD_f32 function, with optional signal plotting.
Explore quantization in digitizing real-world signals with an analog-to-digital converter, including the sample-and-hold stage and the quantizer. Grasp how sampling, ADC resolution, and the DAC enable discrete representations.
Apply the Nyquist theorem to reconstruct an analog signal from samples, ensuring frequencies stay below half the sampling rate, using digital signal processing with a low-pass anti-alias filter before adc.
Design a passive rc low-pass filter using only a resistor and capacitor, and calculate its cutoff with 1/(2πRC). Use simple online tools to pick values and view transfer behavior.
Swap the resistor and capacitor of a low-pass to create a passive high-pass filter, letting high frequencies pass and blocking low ones, with cutoff f_c = 1/(2πRC) and simulation-based validation.
Explore the modified Sallen-Key low-pass filter using an operational amplifier with passive components to approach a brick-wall response. Cascading stages realize multi-stage DSP filters.
Design analog filters—Bessel, Chebyshev, and Butterworth—by cascading Sallen-Key stages and selecting K values to set R. Discover how Q1 and Q2 determine filter behavior in single- and two-stage configurations.
Compare Chebyshev, Butterworth, and Bessel filters in digital signal processing, noting Chebyshev offers the closest brick wall frequency response. Butterworth is mid, and Bessel offers the fastest settling.
Learn linear systems and the superposition principle in dsp, decompose signals into components, process each, sum results, and study time-domain and frequency-domain naming conventions with lowercase letters and square brackets.
Identify system homogeneity and additivity in dsp, showing that a proportional input change yields a proportional output change, and illustrate linearity and shift invariants with ohm's law for a resistor.
Explore additive systems where passing a signal through yields the sum of responses; x1 and x2 produce y1 and y2 respectively.
Explore synthesis and decomposition in DSP by combining signals through scaling and addition, learn superposition, and preview power composition and phoria decomposition methods.
Explore impulse decomposition by breaking a signal into component signals, each containing one nonzero sample with the rest zero. Learn how this decomposition reveals sample-by-sample behavior and ties to convolution.
Explore step decomposition in digital signal processing, where signals split into components with initial samples zero and later samples constant, revealing how a system responds to input changes.
Explore convolution, the key DSP operation that combines input signals with impulse responses to produce outputs, using decomposition, Fourier decomposition, and superposition, and the delta function relationship.
Define the delta function as a normalized impulse; relate it to the impulse response. Show how any input is a shifted, scaled delta and homogeneity and shift invariance predict outputs.
Demonstrate how input signals decompose into scaled, shifted delta impulses and produce outputs as scaled, shifted impulse responses, allowing the overall output to be obtained via convolution with the kernel.
Explore how a four-point input signal convolved with a nine-point impulse response yields a consistent output, demonstrating the commutative property of convolution.
Examine how a nine-sample input and impulse response synthesize the output through the convolution sum, enabling independent calculation of each Y[n].
Develop the convolution algorithm to convolve two signals with an impulse response that forms a six kilohertz low-pass filter, producing a one kilohertz output.
Develop a convolution algorithm for Arduino by convolving a source signal with an impulse response using a nested loop and accumulate results into a destination array.
Develop and test a convolution algorithm on Arduino by creating input and impulse response arrays, then plot input and output to verify low-pass filtering and manage memory constraints.
Perform convolution with the CMSIS-DSP library on Cortex devices, using 32-bit floats, and connect input, impulse response, and output buffers, then compile and upload to the board.
Explore the identity property of convolution: convolving any signal with a delta impulse yields the original signal, and shifting or scaling the delta moves or scales the output.
Explore discrete calculus operations on signals, including the running sum and first difference via convolution, and see how difference equations underpin digital filters and IIR systems.
Develop the running sum algorithm for a digital signal on Arduino using CMS DSP. Test with short and long signals and plot results.
Design and implement the first difference algorithm for a signal in digital signal processing with Arduino, prototype and test the function, then compare results to the running sum and plot.
Explore how Fourier analysis decomposes signals into sinusoids, focusing on the discrete Fourier transform for digitized signals and the Fourier series or Fourier transform for periodic or continuous signals.
Explore how a sixteen-point time-domain signal decomposes into sine waves using the discrete Fourier transform, revealing time-to-frequency mapping, real and complex forms, and three common frequency representations.
Explore dft basis functions as cosine and sine waves with unity amplitudes that form time-domain signals from frequency-domain amplitudes, where k equals the number of complete cycles.
Deduces the inverse DFT by using the synthesis equation to relate frequency-domain amplitudes of cosine and sine components to the time-domain signal, applying basis functions to synthesize x[n].
Explore how the discrete Fourier transform converts a 64-point time-domain signal into frequency-domain components using correlation with basis functions, via the DFT analysis equation.
Develop the dft algorithm by creating arrays for the real and imaginary parts, computing the short signal's dft, and plotting the real part and magnitude in the frequency domain.
Develop a DFT algorithm on Arduino to compute and plot the magnitude of a frequency-domain signal, deriving real and imaginary parts to reveal frequency components.
Develop the inverse DFT algorithm to transform a frequency-domain signal into the time-domain, deriving from the discrete Fourier transform, while handling real and imaginary parts through practical coding steps.
Develop and validate the inverse DFT algorithm (part III) by performing the DFT on a 100-point signal, managing real and imaginary parts, and verifying the recovered time-domain signal.
Develop the inverse dft algorithm for a one-cycle Arduino signal by validating with dft and idft on a 640-point dataset, plotting in serial plotter and managing memory.
Compute the DFT of a long signal and prepare the real and imaginary parts for the inverse DFT, then reconstruct the time-domain signal with the inverse DFT algorithm on Arduino.
Explore the symmetry and duality between time and frequency domains, revealing how a single frequency point forms a sinusoid in time and how convolution relates across domains.
Explore polar notation as an alternative to rectangular notation in the frequency domain, linking magnitude and phase to DFT representations and indicating when each view clarifies a signal.
Utilize digital signal processing to perform spectral analysis with the DFT, extracting phase, frequency, and amplitude to reveal the frequency response, fundamental frequencies, and harmonics in the spectrum.
Explore how a system's frequency response and impulse response fully describe it, with time-domain convolution becoming frequency-domain multiplication via the discrete Fourier transform.
Examine the complex number system, including the complex plane, real and imaginary parts, and the notation and operations used to manipulate them.
Explore how complex numbers are represented in polar and rectangular forms, compute magnitude and angle, and convert between forms using r and theta.
Explore Euler's relation and the exponential form of complex numbers, showing how multiplication and division work in DSP.
Represent sinusoids in DSP with complex numbers, using exponential forms to compactly express sine and cosine, with omega (ω) as 2πf and amplitude relationships for Arduino-based DSP.
Learn how complex numbers represent systems and continuous input signals in digital signal processing, using complex notation to capture system characteristics and analyze signals as they pass through a system.
Demonstrates how sine waves can be written with complex numbers using Euler's relation, showing two-term expressions with positive and negative frequencies that together form a complete waveform.
Explore the complex DFT equation in Pullen notation, linking time-domain x(n) to frequency-domain X(k) as an array of complex numbers from 0 to N-1, and compare with the real DFT.
Compare real DFT and complex DFT, showing how a real time-domain signal yields real frequency components in the real DFT and both positive and negative frequencies in the complex DFT.
Explore how the fast Fourier transform decomposes a time-domain signal into single-point components, computes their frequency spectra, and synthesizes them into a final spectrum.
Analyze the endpoint complexity of direct DFT, where each coefficient needs multiple multiplications and additions, causing quadratic growth, and learn how FFT offers a more efficient alternative.
Explore how decimation-in-time fft decomposes an eight-point dft into two four-point dfts via g(k) and h(k). It reduces multiplications and additions versus the direct dft.
Design digital filters for signal separation and restoration in DSP. Explore time-domain and frequency-domain representations, including impulse response, frequency response, and FFT.
Explore how impulse responses drive digital filters, using convolution to compute outputs, and distinguish finite impulse response from infinite impulse response, including recursive designs.
Explore how impulse responses define a system output and how step responses arise from discrete integration, then compute frequency response via discrete Fourier transform (dft) and fast Fourier transform (fft).
Understand how the logarithmic scale and decibels express power ratios, named for Alexander Graham Bell; every 10 dB indicates tenfold power change, while amplitude scales with square root of power.
Explore time-domain and frequency-domain representations, showing how a sequence of samples and their interrelations carry information; recognize how frequency response and time-domain behavior drive filter design trade-offs.
Explore time domain analysis by examining impulse response, segmentation via the step function, and key parameters like rise time, overshoot, and symmetry.
explore spectral inversion and spectral reversal to design high-pass and band-pass filters from a low-pass prototype, detailing center of symmetry adjustments and practical parallel implementations.
Learn how spectral reversal designs digital filters by flipping every other sample to shift the spectrum, enabling bandpass and bandreject filters via cascaded or parallel low-pass and high-pass stages.
Classify digital filters into time-domain, frequency-domain, and custom types, and compare convolution-based FIR and recursion-based IIR implementations for practical DSP applications.
With a programming based approach, this course is designed to give you a solid foundation in the most useful aspects of Digital Signal Processing (DSP) in an engaging and easy to follow way. The goal of this course is to present practical techniques while avoiding obstacles of abstract mathematical theories. To achieve this goal, the DSP techniques are explained in plain language, not simply proven to be true through mathematical derivations.
Still keeping it simple, this course comes in different programming languages and hardware architectures so that students can put the techniques to practice using a programming language or hardware architecture of their choice. This version of the course uses the Arduino board and programming language.
By the end of this course you should be able develop and test the Convolution Kernel algorithm on arduino, develop and test the Discrete Fourier Transform (DFT) algorithm on arduino, develop and test the Inverse Discrete Fourier Transform (IDFT) algorithm on arduino, design and develop Finite Impulse Response (FIR) filters on arduino, design and develop Infinite Impulse Response (IIR) filters on arduino, develop Windowed-Sinc filters on arduino, build Modified Sallen-Key filters, build Bessel, Chebyshev and Butterworth filters, develop the Fast Fourier Transform (FFT) algorithm on arduino, even give a lecture on DSP and so much more. Please take a look at the full course curriculum.