Hello from CA

First time on the site? Say hello here!
Post Reply
RitchRock
XCore Addict
Posts: 186
Joined: Tue Jan 17, 2017 9:25 pm

Hello from CA

Post 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!
Last edited by RitchRock on Thu Jun 29, 2017 9:24 pm, edited 2 times in total.


User avatar
andrew
Experienced Member
Posts: 114
Joined: Fri Dec 11, 2009 10:22 am

Post 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.
RitchRock
XCore Addict
Posts: 186
Joined: Tue Jan 17, 2017 9:25 pm

Post 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!
User avatar
andrew
Experienced Member
Posts: 114
Joined: Fri Dec 11, 2009 10:22 am

Post 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.
stnschrdr
Member
Posts: 13
Joined: Thu Jan 24, 2019 7:35 pm

Post 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?
Post Reply