
Master practical digital signal processing in Java, covering deconvolution, DFT/IDFT, FIR and IIR design, windowing, and robust, readable code across architectures.
Link Java JDK with the IDE, create a new Java project in IntelliJ, configure JDK 11, run hello world, and customize editor font size and dark theme.
Download gnuplot to plot signals for Java digital signal processing, learn to install the 64 bit or 32 bit version from SourceForge, and verify results by plotting functions.
plot signals with gnuplot by writing algorithm output to a file and visualizing input signals, impulse responses, and convolution, including line styles and colors for clear dsp plots.
Explore how statistics and probability underpin signal characterization in DSP, distinguishing continuous signals from discrete digitized signals via analog to digital conversion. Understand signal axes, domains, and sample numbering concepts.
We define the mean as the average of signal amplitudes across samples. We compute standard deviation by squaring deviations, averaging, then square-rooting to measure fluctuating power.
Develop the signal standard deviation algorithm in Java by computing the mean and variance, then applying the square root to obtain the standard deviation.
Combine three signal statistical algorithms into the signal statistics class to compute the mean, variance, and standard deviation of a test input signal, with refactoring and usage details.
Develop a robust signal variance algorithm in Java DSP that processes signals in blocks, computes the mean, and accelerates variance calculation for long signals and embedded microcontrollers.
Develop a robust, faster signal standard deviation (SDD) algorithm in Java, using a block-based approach to compute sum of squares and square of sum for variance.
Learn how continuous signals are digitized into discrete data using analog-to-digital converters with sample-and-hold and quantizers, and how digital-to-analog converters reproduce analog forms.
Apply the Nyquist theorem to sample analog signals, using anti-alias filtering before ADC and accurate reconstruction to avoid aliasing in digital signal processing.
Design a passive rc low-pass filter from resistors and capacitors, set its cutoff frequency by resistor and capacitor values, and examine the transfer function.
swap the positions of resistor and capacitor to create a passive high-pass filter; high frequencies pass, low frequencies are attenuated, using f_c = 1/(2πRC) for calculation.
Explore how Bessel, Chebyshev, and Butterworth filters optimize different performance parameters, and build multi-stage filters by selecting K-1 and K-2 values to set the R and RF values.
Compare the frequency responses of Chebyshev, Butterworth, and Bessel filters, noting Chebyshev's closest to a brick wall response and Bessel's superior step response for suitable applications.
Explore system homogeneity in DSP, showing that scaling the input scales the output by the same factor, illustrated with a resistor and Ohm's law.
Understand shift invariance: shifting the input yields the same shift in output; test with sinusoidal fidelity, where a sine input yields sine output at the same frequency in linear systems.
Explore impulse decomposition, which breaks a signal into component signals where each component contains one nonzero sample with zeros elsewhere, enabling impulse responses and convolution.
Explore how a delta function, the unit impulse, yields a system's impulse response, and how any input can be represented as shifted, scaled deltas using homogeneity and shift invariance.
The lecture demonstrates convolution of a four-point input signal with a nine-point impulse response, yielding a consistent output and proving that convolution is commutative.
Analyze how a single output sample y of six is influenced by multiple shifted impulse responses and input samples, and apply the convolution sum equation and the deconvolution sum.
Learn the running sum and first difference as discrete analogues of integration and differentiation, and how discrete convolution supports difference equations in digital filters and infinite impulse response design.
Develop a running sum algorithm in Java for digital signal processing, converting an input signal to an output signal and illustrating testing, plotting, and smoothing applications.
Develop the first difference algorithm and compare its output with the running sum, then plot input signals and differences to illustrate its role and applications in Java DSP.
Explore how Fourier analysis decomposes signals into sinusoids, focusing on the discrete Fourier transform for digitized signals and on the Fourier series and Fourier transform for periodic and continuous signals.
Deduce the inverse DFT from the synthesis equation by reconstructing a time-domain signal as a sum of cosine and sine basis waves weighted by X(k) and X(-k).
Implement the discrete Fourier transform in Java, converting a time-domain signal to its frequency-domain real and imaginary parts and magnitude; test with 1 khz and 15 khz signals.
Develop the inverse dft algorithm from real and imaginary parts of the frequency domain signal to recover the time-domain signal, then test with a dft workflow and plot results.
Demonstrates converting an ECG signal to the frequency domain with a 640-point DFT, then reconstructing the time-domain signal with the inverse DFT, using MATLAB and a practical coding workflow.
Explore the duality between time and frequency domains, where a single point yields a sinusoid in the other domain, and convolution in one domain relates to multiplication in the other.
Explore the frequency domain representations in rectangular and polar notation, highlighting magnitude and phase relationships for DFT samples. Compare which form suits computation versus interpretation of signal characteristics.
Explore spectral analysis using the DFT to extract phase, frequency, and amplitude from 256-point signals, apply windowing, and identify noise, interference, and a fundamental 13 Hz with harmonics.
Represent complex numbers in polar form. Convert to rectangular form by computing magnitude and angle, deriving real and imaginary parts using r cos theta and r sin theta.
Explore Euler's relation and the exponential form to multiply and divide complex numbers. See how these concepts underpin DSP representations and operations.
Represent systems using complex numbers to analyze how a continuous input signal passes through a system and yields a distinctive output signal with characteristic changes.
Explore how the discrete Fourier transform uses real or complex numbers, extends the forward transform to complex parameters, and decomposes signals into complex exponentials with X(k) and normalization factor.
Explore the complex discrete Fourier transform equation using Pullen notation, mapping time-domain signals x(n) to frequency-domain X(k) as complex numbers from 0 to N-1.
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 and computer code, 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 Java programming language.
With each dsp topic we shall develop two versions of the same algorithm. One version shall be focused on code readable and the other version shall focus on robustness and execution speed- we shall employ programming techniques such loop unrolling and Multiply- Accumulate (MAC) to accomplish this.
By the end of this course you should be able build a complete DSP library in java, develop the Convolution Kernel algorithm in Java, develop the Discrete Fourier Transform (DFT) algorithm in Java, develop the Inverse Discrete Fourier Transform (IDFT) algorithm in Java, design and develop Finite Impulse Response (FIR) filters in Java, design and develop Infinite Impulse Response (IIR) filters in Java, develop Windowed-Sinc filters in Java, build Modified Sallen-Key filters, build Bessel, Chebyshev and Butterworth filters, develop the Fast Fourier Transform (FFT) algorithm in Java, even give a lecture on DSP and so much more. Please take a look at the full course curriculum.