Василий Троцкий
2008-Aug-02 10:55 UTC
[Speex-dev] fir_mem16,iir_mem16 and filter_mem16 optimisations
Hi! I have some questions about that functions: fir_mem16, iir_mem16 and filter_mem16. Filtering is very slow on TI DSP, and i want to optimise it. Can somebody give me formulas which discribe work of this filters? Or any suggestions about how to transform code for better performance. I going to implement this functions in assembler, but it is hard to do without full understanding how functions work.
Jean-Marc Valin
2008-Aug-02 11:54 UTC
[Speex-dev] fir_mem16,iir_mem16 and filter_mem16 optimisations
??????? ??????? a ?crit :> I have some questions about that functions: fir_mem16, iir_mem16 and filter_mem16. > Filtering is very slow on TI DSP, and i want to optimise it. > Can somebody give me formulas which discribe work of this filters? > Or any suggestions about how to transform code for better performance. > > I going to implement this functions in assembler, but it is hard to do without full understanding how functions work.These are direct-form II transposed filters. There's actually two ways to compute them. For an alternate way, have a look at the commented version of filter_mem2() completely at the bottom of filters_bfin.h. The only thing you won't need from that one are the shifts by SIG_SHIFT because the inputs and outputs of filter_mem16() are already 16 bits. Jean-Marc
Василий Троцкий
2008-Aug-02 18:53 UTC
[Speex-dev] fir_mem16,iir_mem16 and filter_mem16 optimisations
-----Original Message----- From: Jean-Marc Valin <jean-marc.valin at usherbrooke.ca> To: ??????? ??????? <altersoft at mail.ru> Date: Sat, 02 Aug 2008 07:54:34 -0400 Subject: Re: [Speex-dev] fir_mem16,iir_mem16 and filter_mem16 optimisations> > ??????? ??????? a ?crit : > > I have some questions about that functions: fir_mem16, iir_mem16 and filter_mem16. > > Filtering is very slow on TI DSP, and i want to optimise it. > > Can somebody give me formulas which discribe work of this filters? > > Or any suggestions about how to transform code for better performance. > > > > I going to implement this functions in assembler, but it is hard to do without full understanding how functions work. > > These are direct-form II transposed filters. There's actually two ways > to compute them. For an alternate way, have a look at the commented > version of filter_mem2() completely at the bottom of filters_bfin.h. The > only thing you won't need from that one are the shifts by SIG_SHIFT > because the inputs and outputs of filter_mem16() are already 16 bits. > > Jean-Marc >I still in doubt. You could tell in more detail about filter_mem16()? I can't find comments in filter_mem2(). I think, filter_mem16 is a IIR filter, and const spx_coef_t *num, const spx_coef_t *den is a input and output signal coefficients, but i am not sure... is it right? But there is only one coefficients array in iir_mem, and logic is not clear for me. I feel, fir_mem16() and iir_mem16() is a two parts of one IIR filter. fir_mem16 multiplies input signal, and iir_mem16 doing that with output... So, if we call fir_mem16() and then iir_mem16() with corresponding parameters it will be equivalent to filter_mem16()? I'm sorry for a stupid questions, i am newbie in digital filtering. May be filter_mem2() will work better, but i am trying to understand approach. For me is interesting not only result in better performance of code, but i want to get some aducational effect. Thanks a lot )) If it is interesting for you, i can send you optimized functions after i shall finish with it.