Sometimes we’d like to cascade biquads to get a higher filter order. This calculator gives the Q values for each filter to achieve Butterworth response for lowpass and highpass filters.

Order:

Q values:

You can calculate coefficients for all biquad (and one-pole) filters with the biquad calculator.

### Motivation for cascading filters

Sometimes we’d like a steeper cutoff than a biquad—a second order filter—gives us. We could design a higher order filter directly, but the direct forms suffer from numerical problems due to limited computational precision. So, we typically combine one- and two-pole (biquad) filters to get the order we need. The lower order filters are less sensitive to precision errors. And we maintain the same number of math operations and delay elements as the equivalent higher order filter, so think of cascading as simply rearranging the math.

### Adjusting the corner

The main problem with cascading is that if you take two Buterworth filters in cascade, the result is no longer Butterworth. Consider a Butterworth—maximally flat passband—lowpass filter. At the defined corner frequency, the magnitude response is -3 dB. If you cascade two of these filter, the response is now -6 dB. We can’t simply move the frequency up to compensate, since the slope into the corner is also not as sharp. Increasing the Q of both filters to sharpen the corner would degrade the passband’s flatness. We need a combination of Q values to get the correct Butterworth response.

### How to calculate Q values

The problem of figuring out what the Q should be for each stage of a biquad cascade becomes very simple if we look at the pole positions of the Butterworth filter we want to achieve in the s-plane. In the s-plane, the poles of a Butterworth filter are distributed evenly, at a constant radius from the origin and with a constant angular spacing. Since the radius corresponds to frequency, and the pole angle corresponds to Q, we know that all of the component filters should be set to the same frequency, and their Q is simple to calculate from the pole angles. For a given pole angle, *θ*, Q is 1 / (2cos(*θ*)).

Calculating pole positions is easy: For a filter of order *n*, poles are spaced by an angle of π/*n*. For an odd order, we’ll have a one-pole filter on the real (horizontal) axis, and the remaining pole pairs spaced at the calculated angle. For even orders, the poles will be mirrored about the real axis, so the first pole pairs will start at plus and minus half the calculated angle. The biquad poles are conjugate pairs, corresponding to a single biquad, so we need only pay attention to the positive half for Q values.

### Examples

For a 2-pole filter, a single biquad, the poles are π/2 radians apart, mirrored on both sides of the horizontal axis. So, our single Q value is based on the angle π/4; 1/(2cos(π/4)) equals a Q value of 0.7071.

For a 3-pole filter, the pole spacing angle is π/3 radians. We start with a one-pole filter on the real (σ) axis, so the biquad’s pole angle is π/3; 1/(2cos(π/3)) equals a Q of 1.0.

For a 4-pole filter, we have two biquads, with poles spaced π/4 radians apart, mirrored about the real axis. That means the first biquad’s pole angle is π/8, and the second is 3π/8, yielding Q values of 0.541196 and 1.306563.

Every time you post, I find that I learn something useful, or find that I have been thinking about something wrongly. That is the case here. Thank you Nigel!

Am I understanding this?

Let say you have a 2 pole LPF at 200Hz and a 2 pole HPF at 20Hz, basically your making a 20-200Hz bandpass 2 pole….

You calculate the co-efficients with Q=0.54119610 for the first filter and the output of that filter goes into 2nd filter with co-efficients with Q=1.3065630?

RichardS

No, this cascading is to make a single filter from multiple one- and two-pole filters. If you want to make a four-pole Butterworth lowpass with a corner of 200 Hz, you’d use two biquads set to a frequency of 200 Hz, and set the Q of each to the two values the calculator gives. Otherwise, the corner gets rounder and rounder as you cascade more biquads at the same frequency.

Coming back to your comment I am curious to know what is the best way to make a 4th order butterworth bandpass (e.g. 0.5-4.5 Hz). I suppose you can use your calculator with settings fc=1.5 and Q=0.375, but this will end up in 2nd order. How can you cascade a bandpass to come up with a 4th order? Reapply or alter somehow the Q factor?

Otherwise is it equal to use two-cascaded low-pass at 4.5Hz and two cascaded high-pass at 0.5 Hz?

Thanks a lot in advance for your time and the excellent calculator you provide.

Bandpass depends on who it is defined, so I don’t have a quick answer for that. But yes, you can cascade lowpass and highpass. However, note that you only need one 2nd order lowpass and one 2nd order highpass to give you a 4th order bandpass equivalent.

Would this work with simply cascading two of Andy Cytomics SVF filters to create a 4 pole lowpass? With the Q values given by your site?

Yes!

This is a really great blog, thank you for all the information. I wonder if this works with other filters than low-/highpass e.g. RBJ shelving or peaking filters.

This really only makes sense for lowpass and highpass—filters that space their poles evenly at a constant radius in the s-plane. The definition of Butterworth, maximally flat, doesn’t work for a peaking filter, for instance. It makes sense for a higher-order shelf, but I’d have to think about what that means, since you have two corners…

Thanks for all your great posts! Most videos and articles about DSP are impractical and math-heavy, and just make me feel like an idiot. Your articles make me understand it and want to jump into my editor and actually implement stuff in my projects!

I have found this site very insightful. I have implemented your algorithms and get expected responses for the filters designed (2, 4 and 10 pole LPF, HPF using the cascaded biquad), except I am getting noise floor artifacts that peak at the corner frequency. For example, a 400 Hz LPF, 10 pole. I used your Q calculator for the filters and when I run the filter, each filter coefficient is the same as you get (LPF = exact to 16 significant digits, HPF to 11 significant digits). Normal noise floor of my 1kHz signal is ~ 160 dBm and this “peak” is -45 dBm at 400 Hz with a 10 dBm 1kHz signal. Any thoughts where this may be coming in? All math is being done in doubles.

Also, I do remove the first 4 samples of my sample array after applying all cascaded filters, since the filter needs this many to initialize z1 and z2 correctly. I also put an impulse response into the filter and removed more points for settling, but the artifact still shows up (although a bit lower in response, say -76 dBm). I did see some change in behavior when changing the cascaded algorithm from not zeroing z1 and z2, to when I do. You don’t really mention anything about these parameters when cascading.