I am working on a project which involves capturing audio from a linearly-arranged array of microphones, and processing that data to identify the peak frequency (highest amplitude) detected by each microphone in the array. Each microphone is connected to the next one via a length of cable (currently 500mm between mics).
At present, I'm using an STM32 Nucleo F722ZE microcontroller, which can be configured with 2 x I2S channels, with 2 x mono microphones per channel. The WS selects which of the two mics to read data from, so I am able to read data from a maximum of 4 microphones. The whole system works well at present.
I need to add more microphones (let's say an extra 4, making a total of 8) and also keep the number of bus connections to a minimum. I don't want to use an extra microcontroller. It seems to me that multiplexing the I2S bus is an option, but I have limited experience of multiplexing clocked data in this way.
Can anyone advise a good strategy, or suitable resources?
Thanks!
For reference, the STM32 code works as follows (simplfied):
- Capture I2S channel data into a buffer (one buffer per channel. Each buffer stores alternate L+R mic data).
- When buffer is half/whole full, perform FFT on data from each mic.
- Detect peak frequency amplitude.