DSPRelated.com
Forums

y=filter(A,B,x) how?

Started by Helmut Sennewald June 25, 2005
Hello,

I want to do digital filtering of an digitized signal.

The Matlab-function

y=filter(A, B, x)

would do exactly what I need. A(denominator) and B(numerator)
contain the coefficients of the digital filter H(z).

I couldn't find any equivalent function in Scilab.

What function in Scilab is quivalent to this filter()-function
from Matlab?

Best regards,
Helmut 


Helmut Sennewald wrote:
> Hello, > > I want to do digital filtering of an digitized signal. > > The Matlab-function > > y=filter(A, B, x) > > would do exactly what I need. A(denominator) and B(numerator) > contain the coefficients of the digital filter H(z). > > I couldn't find any equivalent function in Scilab. > > What function in Scilab is quivalent to this filter()-function > from Matlab? > > Best regards, > Helmut > >
Scilab is definitely a different critter from Matlab. In Scilab you would first make a transfer function (they call them "rational matricies"), then extract the time-domain response of the filter with the input. So: H = poly(B, 'z') / poly(A, 'z'); y = flts(x, H); I prefer Scilab's approach to control and systems problems -- I'm hoping that their simulator gets a better GUI soon. There's a scilab newsgroup out there that is worth watching if you're going to be using it. -- ------------------------------------------- Tim Wescott Wescott Design Services http://www.wescottdesign.com
"Tim Wescott" <tim@seemywebsite.com> schrieb im Newsbeitrag 
news:11br2jlsviactfe@corp.supernews.com...
> Helmut Sennewald wrote: >> Hello, >> >> I want to do digital filtering of an digitized signal. >> >> The Matlab-function >> >> y=filter(A, B, x) >> >> would do exactly what I need. A(denominator) and B(numerator) >> contain the coefficients of the digital filter H(z). >> >> I couldn't find any equivalent function in Scilab. >> >> What function in Scilab is quivalent to this filter()-function >> from Matlab? >> >> Best regards, >> Helmut > Scilab is definitely a different critter from Matlab. > > In Scilab you would first make a transfer function (they call them > "rational matricies"), then extract the time-domain response of the filter > with the input. > > So: > > H = poly(B, 'z') / poly(A, 'z'); > y = flts(x, H); > > I prefer Scilab's approach to control and systems problems -- I'm hoping > that their simulator gets a better GUI soon. There's a scilab newsgroup > out there that is worth watching if you're going to be using it. > > -- > ------------------------------------------- > Tim Wescott > Wescott Design Services > http://www.wescottdesign.com
Hello Tim, I searched the web and gambled with the Scilab functions until I have got the expected result. The function rtitr() seems to be doing the job. The example below runs a stored data sequence two times through a 4th degree lowpass filter. The second pass is done with the sequence reversed(last sample first). The result is a zero delay dual pass 4th order Butterworth filter. Best regards, Helmut http://www.abdn.ac.uk/~psy359/dept/Papers/obsavoid.pdf "The raw X-, Y- and Z-coordinates of each IRED were digitally filtered by a dual pass through a 2nd-order Butterworth filter with a cut-off frequency of 20 Hz (equivalent to a 4th-order filter with no phase lag and a cut-off of ~16 Hz)." Scilab example -------------- ! fg=0.02*fs fs=10kHz t=(0:1e-4:0.1); sigbase=sin(2*%pi*t*50)+0.5*sin(2*%pi*t*150); signoise=sigbase+0.5*sin(2*pi*t*1100); [hz]=iir(4,'lp','butt', [0.02 0], [0 0]); y1=rtitr(hz(2),hz(3),signoise); y2for=rtitr(hz(2),hz(3),y1); for j=1:1001, y1rev(1,j)=y1(1002-j);end ; y20rev=rtitr(hz(2),hz(3),y1rev); for j=1:1001, y2rev(1,j)=y20rev(1002-j);end ; xbasc plot2d(t,signoise,style=3); plot2d(t,sigbase,style=1); plot2d(t,y2for,style=4); plot2d(t,y2rev,style=5);
Hello,
sorry, I forgot the % in front of pi in one place.


"Helmut Sennewald" <helmutsennewald@t-online.de> schrieb im Newsbeitrag 
news:d9kba0$v3u$02$1@news.t-online.com...
> > "Tim Wescott" <tim@seemywebsite.com> schrieb im Newsbeitrag > news:11br2jlsviactfe@corp.supernews.com... >> Helmut Sennewald wrote: >>> Hello, >>> >>> I want to do digital filtering of an digitized signal. >>> >>> The Matlab-function >>> >>> y=filter(A, B, x) >>> >>> would do exactly what I need. A(denominator) and B(numerator) >>> contain the coefficients of the digital filter H(z). >>> >>> I couldn't find any equivalent function in Scilab. >>> >>> What function in Scilab is quivalent to this filter()-function >>> from Matlab? >>> >>> Best regards, >>> Helmut >> Scilab is definitely a different critter from Matlab. >> >> In Scilab you would first make a transfer function (they call them >> "rational matricies"), then extract the time-domain response of the >> filter with the input. >> >> So: >> >> H = poly(B, 'z') / poly(A, 'z'); >> y = flts(x, H); >> >> I prefer Scilab's approach to control and systems problems -- I'm hoping >> that their simulator gets a better GUI soon. There's a scilab newsgroup >> out there that is worth watching if you're going to be using it. >> >> -- >> ------------------------------------------- >> Tim Wescott >> Wescott Design Services >> http://www.wescottdesign.com > > Hello Tim, > > I searched the web and gambled with the Scilab functions until I > have got the expected result. The function rtitr() seems to > be doing the job. > > The example below runs a stored data sequence two times > through a 4th degree lowpass filter. The second pass > is done with the sequence reversed(last sample first). > The result is a zero delay dual pass 4th order Butterworth filter. > > Best regards, > Helmut > > > > http://www.abdn.ac.uk/~psy359/dept/Papers/obsavoid.pdf > "The raw X-, Y- and Z-coordinates > of each IRED were digitally filtered by a dual pass through a > 2nd-order Butterworth filter with a cut-off frequency of 20 Hz > (equivalent to a 4th-order filter with no phase lag and a cut-off > of ~16 Hz)." > > > > Scilab example > -------------- > > ! fg=0.02*fs fs=10kHz > > t=(0:1e-4:0.1); > > sigbase=sin(2*%pi*t*50)+0.5*sin(2*%pi*t*150); > > signoise=sigbase+0.5*sin(2*pi*t*1100);
signoise=sigbase+0.5*sin(2*%pi*t*1100);
> > [hz]=iir(4,'lp','butt', [0.02 0], [0 0]); > > y1=rtitr(hz(2),hz(3),signoise); > > y2for=rtitr(hz(2),hz(3),y1); > > for j=1:1001, y1rev(1,j)=y1(1002-j);end ; > > y20rev=rtitr(hz(2),hz(3),y1rev); > > for j=1:1001, y2rev(1,j)=y20rev(1002-j);end ; > > xbasc > plot2d(t,signoise,style=3); > plot2d(t,sigbase,style=1); > plot2d(t,y2for,style=4); > plot2d(t,y2rev,style=5); > >