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