// // x(-2) x(-1) x(+0) x(+1) x(+2) // | | | // b2 b1 b0 // \ \ | // \ \ | // \ \ | // y(-2) y(-1) y(+0) y(+1) y(+2) // | | / / // | -+-- / // |/ | / // a2 a1 // function y=dfilter(a,b,x) a=a/a(1);b=b/a(1); sza=length(a);szb=length(b);szf=max(sza,szb); x=[zeros(1,szf),x];szx=length(x); y=zeros(1,szx), for t=szf+1:szx, for k=1:szb, y(t)=y(t)+b(k)*x(t-k+1); end, for k=2:sza, y(t)=y(t)-a(k)*y(t-k+1); end, end, y=y(szf+1:szx); endfunction; y=dfilter([1,-0.3],[0.7],[1,zeros(1,10)]); clf(); bar(y,0.5),