We're designing a system that uses the ADSP-21469 and two daisy chained AD1974's in TDM mode to process the FFT of 8 audio channels. We implemented this solution by using the FIR and FFT accelerators. Since we don't have the board yet, we're debugging the software using the 21469 EZKit Some questions appeared while doing that.
We are sampling at 48kHz and we need the signal to be sampled at 8kHz, so decimation will be necessary. We use the FIR accelerator to do this operation, and then there's the fuirst question: provided that we give the input buffer with zero samples enough so the FIR can operate, why does the output has zeroed samples? This happens on ADI Example for decimation too.
Let me put some numbers, considering one channel of my TDM process (which has another question further down this text). To process FFT we need a buffer of 128 samples @ 8kHz, so we need 16ms of audio. Since we're sampling at 48kHz we must have 768 samples decimated by 6.
By the equation given on the HRM for the 21469, we need an input buffer of: TAPS – 1 + (WINDOW × DECIMATIONFACTOR). For our application, we designed a 128 tap FIR filter, which gives us the following numbers:
TAPS = 128
WINDOW = 128 (to me this is the desired number of points in output, I would expect this to have USEFUL samples, not zeros)
DECIMATIONFACTOR = 6
Which results in an 895 sample input vector. To my understanding of the HRM and the sample code given, one must fill the buffer with 127 zero samples and then fill the rest of the buffer with my 768 signal samples. After the filtering, there should be 128 useful non-zero samples at the output. Well, much to my surprise, using a sine wave as an input I have 10 samples at my output, which are not expected. And then comes the "useful" sine wave samples. Why does that happen? And since it happens, what's wrong?
I have other 2 questions, one regarding the TDM and other regarding the FFT and FIR interaction:
* We're using TDM mode which means we receive the channels like: | Ch0 | Ch1| Ch2 | Ch3 | Ch4 | Ch5 | Ch6 | Ch7 |. We're double buffering this using two INT type buffers. I believe we're currently losing time by rearranging the "free to process" input buffer and converting it to float. What would be the recomended flow for dealing with the TDM input? Should we rearrange the samples for FIR processing?
* We plan to use the FIR and the FFT accelerators and we realized they share 2 DMA channels and 2 Interrupts. When the FIR or FFT finishes processing of the samples, we plan to issue an interrupt (FIR interrupt will call FFT which will call additional processing of the samples in frequency domain). How do we chose which interrupt is used by each accelerator unit?
I believe no code is needed for this solution, but if you need any, I'm happy to provide.