My previous experience is based on floating point DSPs, so it was just the matter of time when I will meet efficiency problems. Using CSL i have written application with DMA ping-pong buffering. When one buffer is transfered to codec, other is being processed. In case of simple loopback (input buffer is copied to output pong buffer while output ping buffer is transmitted) i can hear sound correct. Problem appears, when I try to make fir filtration. Coefficients are stored in float table and buffers of samples are Int32, so mac operation looks like : Int32+=Int32*float. Of course that operation takes too many clock cycles, and buffer is not ready for time. Is there any state of art for that problem? I thought that DSPLIB would be goo solution, bu it support only Q.15/Q.31 types.Since these types have range (-1:1) and Int32 samples have values (0:FFFFFFFF), fallowing steps would be needed:
1.Convert and cast range of sample from Int32 to Q.31
2.make multiplication (LDATA)sample*(LDATA)coefficient
3.Convert result from LDATA (Q.31) to Int32
but I don't know how to do that. Or maybe there is some better way? Such operation is vital for dsp, so I hope that it won't be any problem to provide some good solution.
Thanks in advance.