Project Overview: Sound detection subsystem for a wearable safety device that alerts pedestrians to approaching vehicles through real-time audio processing of car horns and sirens.
Major Design Decisions + Features:
FFT-based frequency detection: Converts incoming audio into frequency spectrum to identify car horn patterns (600-1,500 Hz range); compares energy in the horn frequency band against total spectrum energy - when horn frequencies contain 30%+ of total power, triggers alert (filters out wind noise and general traffic)
Real time audio processing: Samples audio at 16 kHz, processes 512-sample chunks through FFT with Hamming window smoothing, entire pipeline from sound capture to wireless alert completes in under 100ms
Field tested: Achieves 90%+ detection rate for vehicle horns within 15 meters in real-world conditions
ESP32 dual-core architecture: Uses one processor core for continuous FFT computation while the second handles ESP-NOW wireless protocol, transmitting alerts to wearable haptic feedback unit (haptics integration currently in progress)
Project Overview: This project uses Julia-based audio analysis to detect musical structure in a song, including onsets and tempo, and then uses those timing cues to drive when visual edits happen. It essentially synchronizes visuals to the music.
Major Design Decisions + Features:
Built a full STFT pipeline in Julia. Takes input wav file and converts to mono, applies Hann-windowed framing, real FFT with FFTW, and log-compressed magnitude spectrogram to make onsets more pronounced.
Used spectral flux as the core onset function, then stabilized it with EMA smoothing and a moving percentile/median baseline, so the detector adapts to changing loudness over time.
Implemented a custom peak-picking stage with local maxima, thresholding above the baseline, and a configurable refractory period that keeps only the strongest onset per window.
Estimated a global BPM from the flux signal using autocorrelation. BPM plots for debugging and interpretation.
After I finish coding the audio detection features in Julia, my goal is to build a Julia-to-Java pipeline to drive dynamic video editing synchronized with the audio.
Major Design Decisions + Features:
Designed a simple 5-band graphic EQ in MATLAB using FIR filters built with fir1 (low-pass, band-pass, and high-pass), with band edges chosen to roughly cover bass, low-mids, mids, high-mids, and treble.
Mixed stereo input down to mono to keep the signal path and filter design straightforward.
Applied user-set gains in dB per band (converted to linear scale), filtered each band separately, then summed all bands back together and normalized to avoid clipping.
Added plotting for both time-domain waveforms and magnitude spectra, plus frequency responses of each band’s filter, so I can see how the EQ is shaping the sound.
I ran the script on a sample punk metal audio using gain = [-5, 0, 0, 0, 0], which effectively attenuates the lowest band (0–200 Hz) by 5 dB; all other bands are left flat. It cuts the bass a bit. See plots below: