I know that bits precision required for an IIR filter is proportional to the number of IRR stages. I learnt this aftermaking a 9 stage IIR using doubles years ago, only the 2nd and third order ones worked correctly. Anything more went to the rails (generally), due to overflows. I also used binary scaling conventions when I worked in simulation in assembler many years ago. I am very intersted in seeing some sort of formal proof as t why this is so. I understand it from an empirical view point only..... Please enlighten me !

# rounding errors : fixed point precision

Started by ●December 9, 2003

Posted by ●December 10, 2003

Robin48gx <robin48gx@hotmail.com> wrote in message news:<pan.2003.12.09.20.09.17.669359.2006@hotmail.com>...> I know that bits precision required for > an IIR filter is proportional to the number of IRR > stages. I learnt this aftermaking a 9 stage IIR using doubles > years ago, only the 2nd and third order ones worked correctly. > > Anything more went to the rails (generally), due to overflows. > > I also used binary scaling conventions when I worked in simulation in > assembler many years ago. > > I am very intersted in seeing some sort of formal proof as t why this is > so. > > I understand it from an empirical view point only..... > > Please enlighten me !This isn't really an answer to you original question but is there any particular reason why you would want to implement an IIR as a single 9th order filter rather than break it up into 4 biquads and one lead/lag stage? This would certainly be less sensitive to the roundoff problems you are aluding to. Regards, Paavo Jumppanen. Author of HarBal Harmonic Balancer http://www.har-bal.com

Posted by ●December 30, 2003

On Tue, 09 Dec 2003 21:18:42 +0000, Paavo Jumppanen wrote:> Robin48gx <robin48gx@hotmail.com> wrote in messagenews:<pan.2003.12.09.20.09.17.669359.2006@hotmail.com>...> This isn't really an answer to you original question but is there any > particular reason why you would want to implement an IIR as a single > 9th order filter rather than break it up into 4 biquads and one > lead/lag stage? This would certainly be less sensitive to the roundoff > problems you are aluding to. > > Regards, > > > Paavo Jumppanen. > Author of HarBal Harmonic Balancer > http://www.har-bal.comHi Paavo, Well I had made a Z plane editor, and by placing poles and zeros on it the filter responses were plottled. Thus complicated filters could be made and their effects seen. Becuase of this I initially used a 9th order with doubles. After seeing the bad effects I converted a FORTRAN bi-quad polynomial breakdown to C and used that. I would really like to see a formal, or even intutative, proof of why this should be so though. Probably it s a precission loss in intermediate stages that does it. cheers

Posted by ●December 30, 2003

Robin Clark wrote:> Becuase of this I initially used a 9th order with doubles. > After seeing the bad effects I converted a FORTRAN bi-quad > polynomial breakdown to C and used that. > > I would really like to see a formal, or even intutative, proof of why this > should be so though. > > Probably it s a precission loss in intermediate stages that does it.For the best-ever analysis (IMO) of this topic, see Roberts & Mullis, "Digital Signal Processing." Their explanation is a very nice geometric one that relies on state-space analysis, essentially deriving transfer functions from the internal noise sources (e.g., roundoff errors) to the internal states and to the output, and finding implementation structures that minimize the overall noise. Not surprisingly, the common direct-II digital filter implementation is usually the very worst one WRT to noise, with enormous gain from noise to state and noise to output, which jibes well with your observation. Surprisingly, small cascaded second-order sections are not the globally optimal solution, either. But block-optimal comes pretty close to globally optimal in most cases, which is why second-order sections often work well. (Although I often deal with filters for which even the second-order sections can't be implemented as direct-form). Glenn Zelniker