Get an angle value of the direction of arrival (DOA) by 6+1 microphone array


Does anyone knows how to get the value of sound directions by Sipeed 6+1 microphone array?


There is a kendryte example. There isn’t much documentation on the APU, in the programming guide only a Chinese page is available, but google translate does a good job (I think). I do not know of a Maixpy or Maixduino example, but correct me if I’m wrong.


A couple observations from a code butcher:

The demo that runs from micro-python is not very impressive, twitchy and not very sensitive.

One ugly hack in Python, There is a 16x16 rectangular heatmap returned as an image, the mic locations are mapped to the cells of this map. one primitive way to get some info is to scale the image down to 4x4 to get an easier to read set of values, each of the 12 pixels on the perimeter give the most unique values (the mics i the corners mics get more points on the map)

kendryte-standalone-sdk/lib/drivers/apu.c and apu.h have code for beamforming which is what the siri alexa devices use to isolate a speaker from background noise.

I noticed dir_logic in the standalone demo link above uses APU_DIR_BUFFER which is for the case the FFT is disabled, if FFT processing is being used, the demo would use APU_DIR_FFT_BUFFER.

Here’s one recent pdf article using a lot of trig to explain one method to determine direction of arrival.


The code in Maixpy have return the directions, and display on 12 RGB LEDs, please check it