[scilab-Users] Cascaded IIR filter design

Markus Svilans msvilans at gmail.com
Fri Jul 24 04:02:21 CEST 2009


Hi Adelson,

Thanks for your response.
I think hz must be a Scilab rational polynomial. Here are its contents:

-->hz
 hz  =
 
                                       2            3            
4            5            6 
  - 0.0513754 + 0.0469923z - 0.0057700z + 2.282D-17z + 0.0057700z - 
0.0469923z + 0.0513754z  
    
---------------------------------------------------------------------------------------   

                                           2            3            
4            5   6      
        0.5046613 - 1.0416559z + 2.4270369z - 2.6222075z + 2.9969513z - 
1.6458787z + z       


 From what I have been able to research so far, I am starting to feel 
that it's not possible to get Scilab to directly return the a,b cascaded 
IIR coefficients.

Perhaps, could you lend your expertise on these related questions:
1. How to get the poles of hz?
2. How to get the zeroes of hz?

Knowing the poles and zeroes, I can hope to derive the IIR coefficients 
by hand.

Thanks very much,
Markus.



Adelson Santos de Oliveira wrote:
> Sorry,
>
> I did not analyse your program. I supposed that hz is a polinomial 
> according to SCILAB definition. See the following example and check
> if you can adapt it to your needs,
>
>
> Polz=poly([1,2,3],'Z','coefs')       <= this define a polynomial in 
> variable Z, maybe your hz is not a polynomial for SCILAB
>
> coefz=coeff(Polz)                        <= this will return the 
> coefficients 1, 2, and 3
>
>
> Markus Svilans escreveu:
>> Adelson,
>>
>> Thanks for your response.
>>
>> It doesn't seem to work. The error message I get is:
>>
>> -- 
>> Function not defined for given argument type(s),
>>
>>  check arguments or define function %r_coeff for overloading.
>> -- 
>>
>> I'm looking for a way to get the b0, b1, a1, b2, a2, ... coefficients 
>> required for a cascaded IIR. From what I understand, there is an 
>> algorithm by which they are computed from the z-domain coefficients hz.
>>
>> Regards,
>> Markus.
>>
>>
>> Adelson Santos de Oliveira wrote:
>>> Do you mean,
>>>
>>> coef_hz=coeff(hz) ?
>>>
>>> coef_hz is a vector with the coefficients of hz.
>>>
>>> coefhz=coeff
>>> Markus Svilans escreveu:
>>>> Hello,
>>>>
>>>> I would like to use Scilab to design a cascaded IIR filter.
>>>>
>>>> I'm able to design a filter using iir(), as in the following example
>>>> code:
>>>>
>>>> ystr=[ 'type (lp, hp, bp, sb) ';
>>>>    'order (integer)';
>>>>    'design (butt, cheb1, cheb2 , ellip)' ;
>>>>    'cut-off frequencies (2-vector in [0, 0.5])';
>>>>    'error values  0 delta(1),delta(2) 1 '];
>>>> w = x_mdialog('Choose filter type and parameters',...
>>>>    ystr,['bp';'3';'ellip';'0.15 0.25';'0.08 0.035'])
>>>>
>>>> if w<>[] then
>>>>  hz=iir(evstr(w(2)),w(1),w(3),evstr(w(4)),evstr(w(5)));
>>>>  [hzm,fr]=frmag(hz,256);
>>>>  xselect();
>>>>  plot2d(fr',hzm')
>>>>  xtitle('Discrete IIR filter '+'( '+ w(3)+' ) ',' ',' ');
>>>>
>>>>  hz
>>>> end
>>>>
>>>> My question is, how can I convert the z domain expression in hz to a
>>>> set of coefficients suitable for use in a cascaded IIR filter
>>>> implementation? Any help would be greatly appreciated.
>>>>
>>>> Best regards,
>>>> Markus.
>>>>
>>>> (also posted in the comp.soft-sys.math.scilab group)
>>>>
>>>>
>>>
>>
>>
>




More information about the users mailing list