I've been dreaming of owning a low latency continuous XYZ controller for quite a few years now but as I cannot currently afford to order a Soundplane (being a music student in Eastern Europe has it's downsides) I've been thinking of building a smaller 8x16 (8 horizontal antennas + 16 vertical carriers) grid that will hook into a modified version of the OSX software.
So after reading through all of the information that Randy has so generously shared (seriously amazing that you did all of this) I'm somewhat confident that this is achievable and I've put together a little overview of what I think I need to figure out and implement.
1) Generate, amplify and send 16 different fixed frequency carrier wave sinewave signals (locked to the sampling rate of the ADC that's reading the antennas to avoid drift problems) through the 16 vertical strips
2) Amplify and sample the signal coming out of the 16 vertical antennas at 125000Hz(?) (thats gonna be fun)
3) Either perform the FFT computations inside the unit (very computationally expensive), pack the data up and send it via USB to the computer in isochronous fashion (128 taxels of data) or send the sampled data as fast as possible via USB or UDP, perform the FFT on the computer and then move on to step 4 (speed might be a limiting factor here).
4) Modify the Soundplane software to receive the new data and scale it to 8x16 from the original 8x32.
5) Never leave the house again and die of malnourishment.
So if all of that is correct (which I'm not sure it is) this might be how it would be implemented.
1) An appropriately fast STM32 or TI DSP generating the 16 sine waves > SPI DAC > amplifier board > carrier going to H strips
2) 16 Antenna V strips > amplifier board > SPI ADC > second STM32/DSP > FFT computation > USB
The big hurdles will probably be related to getting everything snappy enough to sample at 125000Hz and to finding a cheap way of doing FFT processing inside of the unit.
I'm also hoping to document all of this and to get the MuffWiggler/Monome communities involved, as I imagine there have to be others that would want to build something like this.
Any thoughts or overall feedback?
Hiya, I don't have much time right now so this is short. But I think you are on the right path. If you got that the carriers need to be synched to the ADC clock to avoid drift, you understand this pretty well.
a 1kHz sampling rate as used in the Soundplane may be overkill. The material damps the overall response rate, and fingers don't move super fast, so half that would be enough for a good controller in my experience.
We do the FFT on the Soundplane to reduce the bandwidth needed. We are currently maxing out the bandwidth of one USB hi-speed channel.
As always, my advice is: try 1 taxel first!
Cheers for the lighting fast response and for the words of encouragement though I'm quite new to all of this (loving the learning experience so far).
I'll start hunting for the materials and get around to building a small scale prototype soon (I'm finishing up an Ondes du Martenot/Trautonium hybrid controller right now).
My findings will be posted here once it's all said and done.
Hopefully this manages to expand the community a bit as well as I truly believe that you've created something beautiful here and it's not getting anywhere near as much love as it should.
You may not actually need as high as 125 kHz sampling rate.
With only 16 carriers and a target 500 Hz update rate instead of 1 kHz, you could possibly sample as low as 31.25 kHz or 32 kHz. Then you'd only need 32 frequency bins from a 64-point FFT, and that might be easier to perform with limited DSP capabilities. Your bandwidth might be one quarter that of the 8x64 Soundplane, so perhaps you don't need the reduction we attained by converting to the frequency domain. Instead of the Soundplane's 768 kB/s USB bandwidth, you might be able to get by with 384 kB/s of time domain information. You can cut that down to 192 kB/s via FFT. Of course, this assumes 12-bit samples. The Soundplane uses ADC chips that operate at 1 MHz. If you use 24-bit audio ADC chips, you'll need 8 of them (or an 8-channel CODEC), but the 24-bit data will double your bandwidth needs unless you dither down the bit depth before sending over USB.
In any case, you'll still need isochronous USB packets, whether time domain or frequency domain, in order to guarantee that the USB Host will allocate enough bandwidth to guarantee delivery of the data stream without dropouts.
Sorry for all the numbers - I hope I didn't do any of the math incorrectly.
p.s. A CODEC may simplify things, since you could have sine wave outputs and ADC inputs on a single chip with a single sample rate. However, I don't really know of any 16-out, 8-in CODEC parts. Designing around a lower sample rate may offer more converter chip options for your project. You might get better results around 60 kHz than 30 kHz, though, with the understanding that this would double your bandwidth requirements.
Sounds like fun! Keep us posted.
Can you please post all the hardware details here?
What are components of the hardware that you are using?
What are their specifications and other applications?
Also what type of the firmware you are using here?
Can you please post some more project details here?
@stefagleykin, do you mean Madrona Labs, or @kroaton?
All the source and instructions for my Soundplane 8x8 project are posted at http://madronalabs.com/DIY.
Film school is eating up all of my time so this project is as good as dead as of now.
Cheers for all of the info though