From: robert bristow-johnson on
On Jan 25, 3:55 pm, adamchapman <adamchapman1...(a)hotmail.co.uk> wrote:
> Im trying to implement a zero-lag butterworth filter as described in
> tha paper athttp://www3.uta.edu/faculty/ricard/Grad%20Biomech/Pezzack/Robertson%2...
>
> My understanding is that the output of the filter needs to be reversed
> and passed back through the filter a second time, but this time with
> the data in reverse.

are you referring to what is commonly called "filtfilt"?

if so, the end response is not a butterworth, but some filter with |H
(w)|^2.

> I think that in eqn(7) of the paper; for the second pass through the
> filter, I just replace the x's with the output of the first filter
> pass, but the data multiplied by the "b" coefficients puzzle me. I
> suppose they would be replaced with previous outputs of the second
> filter pass.
>
> However, I don't see how the data is reversed for this second pass.

is this real time? if not real time, isn't it obvious?

but if it *is* real time, then one does it with a buffer and blocks of
samples, and there's an issue of overlap-adding the results with those
of the previous block. but it won't be *zero* lag. the end result
will be constant delay for all frequencies, which can be considered
"zero-lag" along with this known and fixed delay.

r b-j