hi, This is my first filter implementation and is made in Scilab, also the design of the 3ord Chebyshev Type I IIR Filter (with the iir function). I actually have 3 filters, so i can use them as an equalizer for an audio application. I´m using Direct Form I Realization. Since I have to implement this on a 24bit Fixed-Point DSP I had to scale my coefficients by a factor of 256 (same as shifting 8 bits). The problem that I've been having is that the output signal generated by the scilab script gets some attenuation but only with my coefficients scaled, without the scale factor I get 0 dB gain. I don't know what am I doing wrong. The script is based on a Fixed Point Implementation of DFI IIR Filter shown in "Real-Time Digital Signal Processing - Implementations and Applications", basically it first update the input buffer, insert new data on the first position of that bufffer, then it multiply and accumulate b coefs(numerator) with inputs, then makes the same thing with a coefs(denominator) and an output buffer and finally it subtract both variables used as accumulators and place the result into the first position of the output buffer. I really apreciate anyone's help cause I'm stuck here and I want to learn all I can about DSP, also it would be nice if anyone know about some reading that I can use. Anyways... thanks for your attention... Regards, Daniel
about IIR Filter implementation...
Started by ●September 6, 2007
Reply by ●September 7, 20072007-09-07
On Thu, 06 Sep 2007 12:43:09 -0500, zeugnim wrote:> hi, > > This is my first filter implementation and is made in Scilab, also the > design of the 3ord Chebyshev Type I IIR Filter (with the iir function). I > actually have 3 filters, so i can use them as an equalizer for an audio > application. I´m using Direct Form I Realization. Since I have to > implement this on a 24bit Fixed-Point DSP I had to scale my coefficients > by a factor of 256 (same as shifting 8 bits). The problem that I've been > having is that the output signal generated by the scilab script gets some > attenuation but only with my coefficients scaled, without the scale factor > I get 0 dB gain. I don't know what am I doing wrong. The script is based on > a Fixed Point Implementation of DFI IIR Filter shown in "Real-Time Digital > Signal Processing - Implementations and Applications", basically it first > update the input buffer, insert new data on the first position of that > bufffer, then it multiply and accumulate b coefs(numerator) with inputs, > then makes the same thing with a coefs(denominator) and an output buffer > and finally it subtract both variables used as accumulators and place the > result into the first position of the output buffer. > I really apreciate anyone's help cause I'm stuck here and I want to learn > all I can about DSP, also it would be nice if anyone know about some > reading that I can use. Anyways... thanks for your attention... >Are you rounding the coefficients? Are you filtering at low frequencies compared to the sample rate? Are you using third-order filters instead of a 1st-order cascaded with a 2nd order? Any of these things could cause your DC gain (and other filter behavior) to be off. -- Tim Wescott Control systems and communications consulting http://www.wescottdesign.com Need to learn how to apply control theory in your embedded system? "Applied Control Theory for Embedded Systems" by Tim Wescott Elsevier/Newnes, http://www.wescottdesign.com/actfes/actfes.html
Reply by ●September 7, 20072007-09-07
>On Thu, 06 Sep 2007 12:43:09 -0500, zeugnim wrote: > >> hi, >> >> This is my first filter implementation and is made in Scilab, also the >> design of the 3ord Chebyshev Type I IIR Filter (with the iir function).I>> actually have 3 filters, so i can use them as an equalizer for anaudio>> application. I´m using Direct Form I Realization. Since I have to >> implement this on a 24bit Fixed-Point DSP I had to scale mycoefficients>> by a factor of 256 (same as shifting 8 bits). The problem that I'vebeen>> having is that the output signal generated by the scilab script getssome>> attenuation but only with my coefficients scaled, without the scalefactor>> I get 0 dB gain. I don't know what am I doing wrong. The script isbased on>> a Fixed Point Implementation of DFI IIR Filter shown in "Real-TimeDigital>> Signal Processing - Implementations and Applications", basically itfirst>> update the input buffer, insert new data on the first position of that >> bufffer, then it multiply and accumulate b coefs(numerator) withinputs,>> then makes the same thing with a coefs(denominator) and an outputbuffer>> and finally it subtract both variables used as accumulators and placethe>> result into the first position of the output buffer. >> I really apreciate anyone's help cause I'm stuck here and I want tolearn>> all I can about DSP, also it would be nice if anyone know about some >> reading that I can use. Anyways... thanks for your attention... >> >Are you rounding the coefficients? Are you filtering at low frequencies>compared to the sample rate? Are you using third-order filters instead >of a 1st-order cascaded with a 2nd order? > >Any of these things could cause your DC gain (and other filter >behavior) to be off. > >-- >Tim Wescott >Control systems and communications consulting >http://www.wescottdesign.com > >Need to learn how to apply control theory in your embedded system? >"Applied Control Theory for Embedded Systems" by Tim Wescott >Elsevier/Newnes, http://www.wescottdesign.com/actfes/actfes.html >Yes, my sample rate is twice faster than the higher frequency that I'm filtering... but about rounding the coefficients I guess I'm not, so I do a little research on doing that, thanks. And yes I'm using third-order bandpassing filters, do you suggest me to use SOS??