Embedded Audio Recognition System
Real-time audio fingerprint recognition on an STM32 Nucleo microcontroller.
Author: Andreea-Maria Pascu
GitHub Project Link: https://github.com/UPB-PMRust-Students/acs-project-2026-andreeaa-10.git
Description
The system captures audio through a microphone triggered by a button press. The analog signal is amplified by a MAX9814 module before being digitized by the STM32's ADC. Each fixed-length audio window is processed with FFT to extract frequency-domain features, which are then compared against precomputed fingerprints stored on the device. The closest match is displayed on the TFT screen in real time.
Motivation
I chose this project because it combines signal processing and embedded programming in a way that felt more challenging than a typical sensor project. Through university coursework I have worked with algorithms and low-level programming, and this project is a natural next step (applying those concepts under real hardware constraints). I also listen to a lot of music, so building something that can actually recognize songs made it a more personal goal.
Architecture
- Audio Capture Module - reads the microphone signal through the MAX9814 amplifier (with automatic gain control), then samples the amplified analog signal via the ADC in fixed-length windows triggered by a button press.
- FFT Module - applies a fast Fourier transform (FFT) on each sampled window to extract frequency-domain features.
- Matching Module - compares extracted frequency-domain features against precomputed fingerprints of reference songs stored in flash or on the SD card.
- Display Module - shows the identified song (or a no-match result) on the ST7735 TFT over SPI.
- Logging Module (optional) - writes captured feature vectors to the SD card for offline analysis.
Log
Week 6 - 12 April
Defined project scope: audio fingerprinting on STM32 Nucleo-U545RE-Q using Rust and Embassy. Identified main components and risks.
Week 20 - 26 April
Performed initial research on required libraries and reviewed Embassy STM32 ADC examples.
Week 27 - 3 May
Completed initial documentation. Hardware components ordered and received.
Week 4 - 10 May
Connected all hardware components on the breadboard. Verified that each component powers up correctly and tested basic communication (SPI bus with the display and SD card module, ADC input from the microphone amplifier).
Week 11 - 17 May
Implemented basic ADC sampling and verified signal integrity using the MAX9814 module.
Week 18 - 24 May
Hardware
- STM32 Nucleo-U545RE-Q - main microcontroller running firmware in Rust with the Embassy async framework.
- MAX9814 Microphone Amplifier Module - amplifies the microphone signal and provides automatic gain control (AGC) before feeding it into the MCU ADC.
- ST7735 TFT Display (1.8") - shows recognition result over SPI.
- SD Card Module - optional storage for feature data, connected over SPI.
- Push Button - triggers recording session.
- Breadboard - solderless prototyping platform.
- Jumper Wires (M-M, F-M, F-F) - electrical interconnections between components.
- Resistors - used for biasing, current limiting, and voltage division.
- Ceramic Capacitors - used for decoupling, filtering, and signal stabilization.

Schematics
Bill of Materials
| Device | Usage | Price |
|---|---|---|
| STM32 Nucleo-U545RE-Q | Main microcontroller | Provided by university |
| MAX9814 amplifier module | Microphone amplifier | ~24 RON |
| ST7735 TFT Display (1.8") | Result display | ~41 RON |
| MicroSD Card module | Feature logging | ~5 RON |
| Push button | Recording trigger | ~2 RON |
| Breadboard | Prototyping | ~10 RON |
| Jumper wires M-M | Component interconnections | ~7 RON |
| Jumper wires M-F | Component interconnections | ~7 RON |
| Jumper wires F-F | Component interconnections | ~7 RON |
| Ceramic Capacitor Kit | Decoupling, filtering, and signal stabilization | ~13 RON |
| Resistor Kit | Biasing, current limiting, and voltage division | ~15 RON |
Estimated total: ~131 RON
Software
| Library | Description | Usage |
|---|---|---|
| dasp | Digital audio signal processing framework | Audio processing abstraction for sampling, buffering and feature extraction pipeline |
| embedded-graphics | 2D graphics library for embedded displays | Rendering structured UI elements and text on the ST7735 TFT display |
| mipidsi | ST7735 SPI display driver | Low-level control of the TFT LCD (ST7735S) over SPI |
| microfft | FFT implementation for no_std environments | Frequency-domain feature extraction from audio windows |