• No more LM48901

    PointyOintment02/29/2016 at 19:31 0 comments

    The LM48901 is now discontinued, not even having a page on TI's website anymore, and was at least NRND when I initially specified it. It's still available from distributors in sufficient quantities for building a prototype or a few, but I'd rather use something that can go into production without a complete redesign. Additionally, the LM48901's programming tool doesn't seem to be online anymore either, and I was never sure whether it could even converge to a point several kilometers away. So I should probably switch to using some kind of microcontroller or FPGA for each speaker group. (I still think it's best to use this architecture rather than one central processor sending signals to each speaker directly, though I'm not entirely sure. Maybe a 3-level tree where nodes at each level do 4-speaker/4-sub-node beamforming?) This means more beamforming work for me, but it should also be far more flexible and capable of things like adaptive acoustics.

  • What I've got so far, and what I need to figure out

    PointyOintment06/29/2015 at 22:37 2 comments

    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…