What I've got so far:
- Array of 64 speakers, divided into groups of four. Each group of four is driven by a TI LM48901 spatial audio beamforming & amplifier chip, which does beamforming with its four speakers, while a central Teensy 3.1 does beamforming with the 16 groups.
- Audio is sent from the Teensy to the LM48901s via I2S. To achieve the phase delays for beamforming, one of the following methods could be used:
- Boomers with integrated wavetables, so they can do their own phase delays (I don't think these exist; the LM48901 definitely doesn't have this feature.)
- Very fast multiplexing of I2S, either with dedicated I2S multiplexers or clock-switching multiplexing
- Programmable I2S delay lines (These could be made out of microcontrollers or FGPAs + memory or maybe shift registers.)
- DAC + programmable analog delay lines (Suboptimal, and I don't know if those even exist.)
- Free-running SDRAM(s) fed with I2S wavetable(s), feeding out I2S signals from different locations in memory for the different channels' phase delays (Do you think this would work, @esot.eric.wazhung?)
- The same thing but with a multi-readout-location ROM of some kind (I don't know if that exists.)
- Because the array will be emitting only a single frequency and the steering will be static or at least relatively slowly changing, the Teensy's beamforming task shouldn't be too difficult. Just a bit of trigonometry… (famous last words!)
- The speakers will probably be set quite far apart on the ground to get the necessary separation for effective beamforming—tens to hundreds of meters probably. This will necessitate accurate measurement of each speaker's location, which can be done using a handheld GPS unit, and some kind of robust long-distance communication and synchronization scheme. (Maybe give each one its own GPS receiver so they can use GPS time, but that would make it very complex and expensive.)
What I need to figure out:
- What frequency of sound is best for making water droplets in the cloud coalesce? /r/AskScienceDiscussion thread
- Which of the above methods for getting sound from the Teensy to the LM48901s is best?
- What size and shape would work best for the speaker array?
- How much power is required?
- How can I generate LM48901 beamforming coefficients on the Teensy to accommodate array reconfiguration? (TI has a web-based configuration generator, but it (as well as the LM48901) is no longer supported, and it's intended for small-scale applications. Therefore I think I will have to reverse-engineer its output (or just read the datasheet, because I think it explains the coefficients) and implement a coefficient generator on the Teensy.)
- and a whole lot more…