I am researching on a project about sound source beam-forming.

I'd like to build: 8~16 digital microphones into one 2D(circle)/3D(sphere) PCB to form an array with an equal separation of each mic 3cm ~ 5cm apart. After some processing and being able accurately locate the direction of a sound source.

My calculation on minimal sampling rate according to speed of sound. Simultaneous sampling mics at above > 96 kHz and > 8 bit at a precise timing manner should be mandate.

Due to I am a more Linux software guy to EE person, I have less knowledge + experience of choosing a right design among MPU / DSP / FPGA.

I can gather all data back via ethernet and processing on a PC or process on the unit. BUT:

I have some sampling concerns:

  1. Existing auido codecs won't be able to 8-16 channels digital PDM mics on a single chip.
  2. Bring in more than one audio codecs with multiple I2S bus can introduce non-uniform audio time delays which results huge error on final calculation.
  3. I don't know how other device can accurately measure PDM other than an audio codec.

Anyone can discuss some design ideas and I will look into it and implements it ASAP.

The PDM microphones I will be using: Analog Device ADMP521 65dB SNR

  • 1
    \$\begingroup\$ Sounds to me that you need something like a multichannel digital instrumentation recorder, rather than self made electronics. Teac and Sony used to make such devices, but that was years ago. Not sure where to find devices like that today. \$\endgroup\$
    – jippie
    Commented Feb 17, 2013 at 20:04

1 Answer 1


If you need very tight synchronisation/timekeeping, I think I'd go for an FPGA with microcontroller (either with e.g. ARM+FPGA on one chip, soft core, or external) and USB (or ethernet if you want)

An medium size FPGA should be able to easily handle 16 channels in parallel, process to an 8 or 16-bit bus, buffer and send over to the micro using a parallel port (or maybe high speed SPI)
You can use a simple protocol between the FGPA and micro (if external), which sends e.g. 8 x 16-bit words at a time which were all captured simultaneously. You could add timestamps at the end of each chunk also.
Then send it all over to the PC via USB/Ethernet for processing.

I'd look at what places like Digilent have to offer in the way of Dev boards, maybe a Spartan-6 board with an ARM Cortex-M3 or something.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.