All work
2026/ Signal processing · MATLAB/ EECE 340 · solo

Fourier-Based Signal & System Design

Four tasks, one rule: no built-in fft or conv. Every transform in this project is hand-rolled from first principles, a Riemann-sum approximation of the continuous Fourier integral, and an O(N²) convolution built term by term. The last task points the whole pipeline at a real 9-second voice recording of my own.

At a glance

Language
MATLAB
Size
940 lines across 5 files, solo
Tasks
4, each building on the last
Output
4 .wav files: original, filtered, safe & aliased reconstructions

Building the primitives from scratch

Tasks 1 through 3

The point of banning fft and conv is that using them would have made the assignment about calling a function correctly, not understanding what the function does. Task 1 and 2 implement the Fourier transform as a direct Riemann-sum approximation of the integral definition, summing discrete samples against complex exponentials by hand. Task 3 builds convolution the same way, an explicit O(N²) sliding-sum implementation rather than the O(N log N) trick conv uses internally.

A real recording, filtered and reconstructed

Task 4

The last task points the hand-rolled machinery at a genuine 9-second recording of my own voice, not a synthetic test signal. A spectral breakdown of the raw audio shows most of the energy sitting below 3 kHz with a broadband noise floor above it, so a 3.4 kHz low-pass filter, designed and applied with the exact same explicit Fourier and convolution code from Task 2, strips the noise while leaving speech intact. The filtered signal is then run back through Task 3's sampling and reconstruction pipeline at two rates: one comfortably above the filter's Nyquist limit, one deliberately below it. At 5 kHz the reconstruction error against the filtered signal comes out roughly 2,000× worse than at 8 kHz, the theory and the artifact matching up by ear, not just on a spectrum plot. It's the only project on this site with a literal playable output rather than a number or a log line.

Original recording Raw voice, 48 kHz, 8.8s
Filtered 3.4 kHz low-pass, hand-rolled convolution
Reconstructed · 8 kHz Sampled above Nyquist, sinc-reconstructed clean
Reconstructed · 5 kHz Sampled below Nyquist, audible aliasing
reconstruction error vs. sample rate · real numbers from tests.m

Inside the repo

Structure

  • task1.msignal design, time/frequency tradeoff
  • task2.mfilter design, convolution theorem check
  • task3.msampling and sinc reconstruction
  • task4.mvoice pipeline: filter, sample, reconstruct
  • tests.msanity checks against analytical results, all 4 tasks
  • original_recording.wav9-second source recording
  • report.pdf32-page write-up and results

Skills, in context

Where each one actually showed up

Signal processing Fourier transform, sampling and aliasing, and convolution, each implemented from the definition, not the library call.
Numerical methods Riemann-sum approximation of continuous integrals, and the accuracy tradeoffs that come with discretizing them.
MATLAB 940 lines across five files, including audio I/O for the final voice-filtering pipeline.
Technical rigor Solo build with a self-imposed constraint (no built-in transforms) that made the assignment harder on purpose.
Next project FPGA & Bare-Metal RISC-V Labs