OxiNMP
Digital Signal Processing on a INMP microphone, having multiple voice effects chosen by the user.
Author: Khalghamouz Ali-Nicolas
GitHub Project Link: https://github.com/UPB-PMRust-Students/fils-project-2026-K-Nicolas-10
Description
My project's purpose is to have multiple integrated DSP algorithms (aiming to implement 4) that transform the captured audio into audio with multiple effects, kind of like a Voice Changer. I aim to have an 8-bit Retro audio effect, a high pitch effect, a low pitch effect and a sci-fi sounding effect (kind of like Dalke).
Motivation
Choosing this project was a mix of my interest in mathematics and wanting to learn DMA more in-depth.
Architecture
- 4x Buttons: This acts as a control panel for all the audio effects. They are connected to the GPIO pins on the STM32 configured as hardware interrupts.
- INMP441 Module: It sends clean digital audio arryas straight to the STM32 via I2S
- STM32: Calculates FFT to draw on the screen and the algorithms for the audio effects.
- UDA1334A: Takes the I2S output from the STM32 and outputs it into a 3.5mm Jack where you connect speakers or headphones.
- SPI TFT LCD Display: Chose an SPI screen over a I2C screen because it handles video better than I2C. I2C is too slow for smooth video.
Log
Week 5 - 11 May
Week 12 - 18 May
Week 19 - 25 May
Hardware
Microcontroller: STM32U545RE Nucleo (Core logic)
Input: INMP441 I2S Microphone (Captures audio)
Output: UDA1334A I2S DAC (Plays audio)
Display: SPI TFT LCD (Shows visualizer)
Interface: 4x Tactile Buttons (Changes effects)
Schematics
Not available right now.
Bill of Materials
| Device | Usage | Price |
|---|---|---|
| STM32 Nucleo-U545RE | The microcontroller | Borrowed |
| INMP441 I2S Microphone | Captures ambient audio digitally via I2S, bypassing analog ADC noise. | 21 RON |
| UDA1334A I2S DAC Module | Decodes processed digital audio to an analog signal via a 3.5mm jack. | 37 RON |
| Starting Electronics Kit | Contains Miscellaneous components like resistors,breadboard,etc | 51 RON |
Software
| Library | Description | Usage |
|---|---|---|
| embassy-stm32 | Hardware Abstraction Layer for STM32 | Used for accessing I2S, SPI, DMA, and GPIO peripherals asynchronously. |
| embassy-executor | Async runtime for embedded systems | Used for managing and scheduling concurrent tasks (audio pipeline, UI, buttons). |
| embassy-sync | Synchronization primitives for async | Used for safely passing audio data buffers between async tasks via channels. |
| embedded-graphics | no_std 2D graphics library | Used for drawing the real-time audio waveforms and frequency bars on the display. |
| mipidsi | Display driver for MIPI DSI displays | Used as the hardware driver for the ILI9341 or ST7789 SPI TFT LCD. |
| microfft | Fast Fourier Transform library for no_std | Used for calculating the frequency spectrum for the audio visualizer. |