This is a portable, efficient, object oriented C++ fixed-point implementation an audio EQ with arbitrary number of filter-bands.
The DSP-software and the app are free software (MIT license).
Take home message: by using inline functions, object oriented C++ DSP-software can be very efficient - even if sample-by-sample processing is used.
The EQ-design is based on the Audio-EQ-Cookbook of Robert Bristow Johnson, the error feedback reducing quantization noise is a smart idea of Jon Dattorro: eq32.h contains references.
Many people contributed to this software:
eq32 (*.cpp and *.h) and the limiter is provided by Hagen Jaeger.
midi.cpp is based on a work of Bastian Bechthold and Marco Ruhland.
main.cpp implementing sample by sample processing is based on the work of Patrick G.
uart.cpp for serial communication is based on the proposal of Mario G.
The BlueEQ app was designed and written by Christoph Eike, Frederike Kirschner, Johannes Lühring, Pieter Michael Schaffert, Max Zimmermann as a student projects at the Jade University of Applied Sciences, Oldenburg, Germany. It is written in the android mode of the free processing IDE (https://processing.org/) using Daniel Sauter's great Ketai library for Bluetooth communications:
The hardware consists of a BF706 EZ-KIT Mini DSP board and the Bluetooth module HC-05:
RXD (yellow) is connected to BF706 Mini P9 / pin 3 (UART0 TX)
TXD (orange) is connected to BF706 Mini P9 / pin 4 (UART0 RX)
GND (black) is connected to BF706 Mini P3 / pin 6 or 7 (GND)
VCC (red) is connected to BF706 Mini P15 (3.3V)
The HC-05 has a default baudrate of 9600. The baudrate and name can be changed by activating the code in the commend of setup() in audio_processing.cpp. The button on the HC-05 must be pressed before DSP-Software is started.
A connection to a PC with a USB cable and a USB to UART converter (3.3V) is also possible. See the excellent tutorial of Mario G.:
audio_processing.cpp has an Arduino-style interface. Only three functions have to be filled: in setup() all initialization is done, loop() can be used for slow computation, e.g. parameter computations double precision floating point and audio_processing() is the ISR interrupting the loop function for sample-by-sample audio processing.
The program can saved permanently in the flash memory of the BF706 EZ-KIT by starting FLASH_BF706.cmd
What is still missing? Saving and loading of presets is implemented in the app, however, the functions readPreset() and writePreset() to that should read and write the flash memory are not yet implemented. How can we write a memory block to Winbond W25Q32BC serial flash without overwriting the boot memory?