[PD] biquad~ with elementary filters [was: Re: dinosaurs ...]

Claude Heiland-Allen claudiusmaximus at goto10.org
Sun Sep 21 16:35:46 CEST 2008

Charles Henry wrote:
> z^-1 is the unit delay operator....
> so,
> Y(z)=z*X(z) means y(n) = x(n+1)
> while this is not impossible... it's non-causal.  For real-time
> filtering, you can't already know the sample that comes next.
> I've been thinking about it for a little while now.  I hope we can figure it out

oops, i got it backwards, thanks for the correction - poles at 0 are 
unit delay, zeros at 0 are unit advance

but that means that rzero~ and czero~ as implemented in Pd have an extra 
pole at 0, so implementing a biquad~ with czero~ and cpole~ will give a 
2 sample delay compared to the "real" biquad~.

snippet of source of sigrzero_perform():

{for (i = 0; i < n; i++){
         t_sample next = *in1++;
         t_sample coef = *in2++;
         *out++ = next - coef * last;
         last = next;

when coef = 0, then out = in : no delay or advance, the extra pole at 0 
cancels out the zero at 0

> Chuck


More information about the Pd-list mailing list