Page 1 of 1

Hello from CA

Posted: Tue Jan 24, 2017 7:19 pm
by RitchRock
Hello! I just starting working with the XK-AUDIO-216-MC-AB MultiChannel Audio Platform for use with a microphone array processing application. I've already done some successful modifications to the board and reference code. I may need to add an external DSP to use as a convolver + signal matrix, as I don't believe the XMOS chip can handle 8 FIR filters (probably each 2048 in length).

I look forward to learning more about the power of this platform - a big step up from my older Full Speed Streaming audio controller. Cheers!

Re: Hello from San Diego, CA

Posted: Wed Jan 25, 2017 9:45 am
by andrew
Hello, I'm glad you are enjoying the dev board. If you give me some specifics of your FIR filters then I can let you know if they can run on the xcore or not. I will need: the number of cores you are willing to dedicate to the filtering, the sample rate, filter length(2048) and it's helpful to know if the FIR is the same for each channel and if it's linear phase.

Re: Hello from San Diego, CA

Posted: Wed Jan 25, 2017 8:32 pm
by RitchRock
Hi Andrew, thanks for the reply! Getting I2C to program the chip wasn't too difficult, but I did need to change the I2C address given in the TI datasheet to it's "7-bit version" for everything to play nice. This was a bit of a head scratcher for a few hours :).

Ideally I would like to support sample rates of 44.1k, 48k, 88.2k and 96k. The device needs to stream 4 filtered audio channels from my ADC to USB in, while at the same time sending these same 4 filtered streams to a DAC for analog out. The implementation may change, as I may be able to get away with less filtering, but at most, the DSP (or XMOS?) would process the 4 ADC channels with 2 FIR filters each (8 total) and apply a matrix. These FIRs are not the same, but can be the same length (2048).

Likely, there will be 2 additional channels output for headphone playback from the computer via USB. I may want to also filter this stereo playback.

In addition, I hope to read an encoder that programs the ADC PGAs, and perform audio mixing and level. There would also be a few LEDs to flash :). I'm not sure how many cores all this will take, or how many will be left over, but it seems to me that an external DSP may be in order. Any suggestions would be welcome.

Regarding filter implementation, years ago I created a convolution reverb using the overlap-add method, but there may a quicker way to do the processing on XMOS.

Cheers and thanks for your advice!

Re: Hello from San Diego, CA

Posted: Wed Jan 25, 2017 10:10 pm
by andrew
If you are comfortable working in the frequency domain and this suite your needs then we have optimised libraries for FFT, windowing, etc. We would not be able to support a time domain implementation of 8 FIRs at 2048 taps at 96kHz, but a block based implementation is very possible. Currently some of out internal (unreleased) code is doing 8 channel FIRs of 2048 taps but at 16kHz using overlap-and-add in a single thread. It would be easy to spread this technique across many cores if desired.

Re: Hello from CA

Posted: Wed Mar 13, 2019 9:49 pm
by stnschrdr
Hi Andrew,

I know this is an old thread, but I am very much interested in applying 8 channel FIRs of 2048 taps but at 16kHz using my XK-AUDIO-216-MC-AB MultiChannel Audio Platform if possible. I'm having problems inserting the DSP core while applying the convolution funciton 'dsp_filters_fir' from the dsp_lib library. Its very limited in the number of taps I can use the way I have it setup. I am comfortable working in the frequency domain instead of time domain, if it allows me to use longer filters.

What I'm trying to do is modify the project 'app_usb_aud_xk_216_mc' so that copies of the stereo USB output from Audacity to my board get routed to the LINE outs. Each copy needs to be convolved with a different FIR filter (or multiplied, if the input signal and FIR or in the frequency domain, and then applying an IFFT before outputting). Do you have code and documentation that can show me how to do this properly with real-time audio?