# Zero-lag butterworth filtering

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?

• 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.
– JRE
Commented Oct 8, 2015 at 11:53

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.

• 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?
– Ben
Commented Oct 8, 2015 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.

• 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. Commented Oct 8, 2015 at 15:34
• You are correct. I decided to keep this mention for reasons explained in the edited post. Commented Oct 8, 2015 at 16:45
• 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). Commented Oct 9, 2015 at 0:05
• @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. Commented Oct 9, 2015 at 13:50
• 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. Commented Oct 11, 2015 at 10:24