Recently, I've read several papers where zero-lag Butterworth filters are used (both low-pass and high-pass).

I have a fair understanding of (Butterworth) filters, but how can we design one with zero lag? Can someone explain me how this works?

From my understanding, any low-pass filter yields an intrinsic delay.

Or does this involve bidirectional filtering?

  • 2
    $\begingroup$ In case it is not obvious from @PeterK's answer, you can only use this kind of filter off-line. That is to say, you can't do it real time. You have to have the complete sequence to run it through backwards, and when running real time, you don't have the whole sequence in your hands at any time. $\endgroup$ – JRE Oct 8 '15 at 11:53
  • $\begingroup$ See also this answer to a related question. $\endgroup$ – Matt L. Oct 8 '15 at 15:25

As you suspect, this paper says that zero-lag Butterworth filtering is obtained by passing the signal through the filter twice: once in the forwards direction and once in reverse.

enter image description here

  • $\begingroup$ Ok, the paper also mentions that the cutoff frequency needs to be adapted when filters are cascaded. In case I have a standard Butterworth filter (for example, built in Matlab), is this an underdamped filter? $\endgroup$ – Ben Oct 8 '15 at 12:00

This issue is not often mentioned in text books. Within Matlab, it is implemented with the filtfilt function. It is sometimes called forward-backward filtering, and works with other filters than Butterworth's. One of the few references I am aware of is: F. Gustafsson, Determining the initial states in forward-backward filtering, IEEE Transactions on Signal Processing, 1996. It bears some weak similarities with Linkwitz-Riley filters, by cascading two filters in a specific fashion to reduce limitations caused by a single filter. Moreover, I cannot take out of my mind that 20 years ago, when I discovered the filtfilt function, a skilled colleague told me it was called (phonetically) a L*n[q/k][w/v]i[z/st/tz] filter (I remember I heard Lunqvist back then), although I never found a reference. He was apparently wrong, additional historical connections would be welcome.

The whole operation, interpreted in a frequency domain, amounts to multiplying the filter frequency response by its complex conjugate. Hence, the resulting "squared-filter" is real, and possesses a zero-phase, i.e. no delay, at the expense of non-causality. Its order is the double of the original filters, and may hit unstability problems when quantifying its coefficients. Its attenuation at cut-off frequency also doubles.

Related discussions can be found in What is the advantage of MATLAB's filtfilt or Real time digital filter with zero phase.

  • $\begingroup$ Linkwitz-Riley filters are just HPF/LPF that are designed to sum to unity. They are still causal and create phase shift, so I don't see that they have anything to do with forward-reverse filtering. $\endgroup$ – endolith Oct 8 '15 at 15:34
  • $\begingroup$ You are correct. I decided to keep this mention for reasons explained in the edited post. $\endgroup$ – Laurent Duval Oct 8 '15 at 16:45
  • $\begingroup$ no, @endolith is not correct. Linkwitz-Riley filters sum to an APFs. the gain of the filter that L-R filters sum to is unity (or some other constant). $\endgroup$ – robert bristow-johnson Oct 9 '15 at 0:05
  • $\begingroup$ @robertbristow-johnson Yes, they sum to unity gain, which is unrelated to zero-phase filtering. They are causal filters that introduce phase shift. I don't see any relationship between LR filters and forward-backward filters: LR filters are all-pass with minimum phase; forward-backward filtering is zero-phase and not all-pass. They couldn't be more different. $\endgroup$ – endolith Oct 9 '15 at 13:50
  • 2
    $\begingroup$ Adding to L. Duval’s good answer, as I mention in my textbook, the peak to peak ripple in the passband gain of the “squared filter” will be twice the peak to peak ripple in the passband gain of the individual filters. $\endgroup$ – Richard Lyons Oct 11 '15 at 10:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.