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.
…
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