Hi,

I'm wondering- is it possible to manipulate the FIR accelerator in such a way that it can be used for simple matrix multiplication?

In general I need to calculate G=M*Y, where M is a 96X16 complex floating matrix, Y is a 16X1 vector of the same data type. And G is a 96X1 vector.

Since G(n) = sigma(k=1..16)[M(n,k)*Y(k)], calculating it should be similar to a 16 tap filter right? (maybe with 1:16 decimation or something like that)

If this FIR unit manipulationis possible then what are the paramters I need? (window size, num of channels,decimation rate, etc). - I figure it should be window = 1, and channels = 96 but the FIR documentation (in the Hardware reference) is not clear enough...

Thanks.

Hi,

Matrix multiplication is possible using FIR accelerator in the way as you mentioned. Let's take a case where we want to multiply the matrix Xmxn and Ynx1, it can be performed by using decimation ratio = tap length = n, window size = m, and input buffer length = m*n. I have tested a simple matrix multiplication on ADSP-21469 EZ-Kit with m=4 and n =8 => decimation ratio = tap length = 8, window size = 4, and input buffer length = m*n =32.

It works as expected. Please see the test code and the corresponding screenshot attached.

As you know that the decimation ratio can't be more than 8 in the accelerator, thus for the case you mentioned where m = 96 and n= 16, the matrix multiplication can be performed by configuring decimation ratio =8, tap length = 16, window size = 96*2, input buffer lenght = 96*2*8=96*16. The output produced can again be further decimated by a factor of 2 by taking only the alternate output values to get the final result of the matrix multiplication.

Hope this helps.

Thanks and Regards,

Mitesh