This week I focused on researching algorithms for our MVP effects, EQ, reverb, and chorus. The standard way to implement EQ is by having a filter for each band, and applying an amount of gain to each filter, to shape the frequency response. This should be simple to implement, requiring filter coefficients, and buffers of inputs and outputs of the signal. Chorus is implemented with overlaying copies of a signal with variable delays controlled by LFO’s. In essence it should should like a “chorus” of singers or instruments playing all at the same time, with slight phase variations. This will require storing some inputs and outputs, past what we are storing in our DMA input and output buffers. I researched reverb, and after a lot of research into different implementations (mostly Schroder based reverbs such as “Freeverb”), it seems that for a versatile reverb with a large delay time, we run into issues with storing inputs and outputs. To store 1 second of inputs and outputs, required for a 1 second reverb-time, we would use just about all of our available SRAM. After some consideration, the team and I decided that going for delay would be a better option. A 1 second delay is practical, whereas a 1 second reverb time is a bit low. Delay is an IIR system that involved a feedback loop with a gain less than 1.
I did not implement any MVP effects in MATLAB, so we updated the schedule to give me another week to actually implement the effects. Prototyping the effects properly will save time in the end as we try to port the effects over to the STM32.
While researching the MVP effects, I looked into the memory usage of the effects, and talked with Xingran about implementation decisions- we ultimately decided on double input and output buffers served by DMA. We expect a processing latency of about 12ms.
Since we changed the schedule, my focus will be on implementing our MVP effects in MATLAB and providing the team a demo on Friday.