# How to break a second-order filter into two first-order filter

Let's assume the transfer function of a continuous-domain filter consists of two poles and one zero: $$H(s) = \frac{k_c (s-\omega_{z_1})}{(s-\omega_{p_1})(s-\omega_{p_2})}$$. Let's consider we do the bi-linear transformation and we get the numerator and denominator coefficients in $$z$$-domain:

(Numerator coeffs): $$\,\,\,\,$$ $$B = [b_0, b_1, b_2]$$ and,

(Denominator coeffs): $$A = [a_0, a_1, a_2]$$.

Then we filter an input signal $$v_{in}$$ with this filter to get $$v_{out}$$:

$$v_{out}$$ = filter(B,A, $$v_{in}$$);

Now I want to try another way in which I break the second-order filter $$H(s)$$ into two first-order filters $$H_1(s)$$ and $$H_2(s)$$ where $$H(s) = H_1(s) \times H_2(s)$$ and

$$H_1(s) = \frac{k_c (s-\omega_{z_1})}{(s-\omega_{p_1})}$$. $$H_2(s) = \frac{1}{(s-\omega_{p_2})}$$.

Same as before we perform bi-linear transformation and we get the numerator and denominator coefficients of $$H_1(z)$$:

$$B_1 = [b^1_0, b^1_1]$$,

$$A_1 = [a^1_0, a^1_1]$$,

and $$H_2(z)$$:

$$B_2 = [b^2_0, b^2_1]$$,

$$A_2 = [a^2_0, a^2_1]$$,

Now I want to apply these two filters on the same input waveform $$v_{in}$$ and get the same output waveform $$v_{out}$$.

Obviously I tried something like below and it did not work:

$$v_{mid}$$ = filter($$B_1$$,$$A_1$$, $$v_{in}$$);

$$v_{out}$$ = filter($$B_2$$,$$A_2$$, $$v_{mid}$$);

Can anyone figure out how this can be done properly to applying two first-order filters in sequence instead of applying a second-order filter and get the same output?

P.S.: Here, the plan is NOT to reconstruct coefficients $$A$$ and $$B$$ from $$(A_1, A_2)$$ and $$(B_1, B_2)$$.

• Your solution should work. You probably made an error in the filter conversion. – Ben Jan 25 at 23:33
• Just a thought: Second order filters can have complex pole and/or hole locations. Even with such a filter, it can be implemented as you’ve described, but it does require complex filter coefficients, so it may end up being less computationally efficient then a biquad implementation with all real coefficients. – Dan Szabo Jan 26 at 2:43
• them poles and them holes. – robert bristow-johnson Jan 26 at 3:34
• What do you mean by applying the bilinear transformation and getting z-domain? you can use the inverse bilinear transformation and get the continuous-time signal. I am guessing you are already working with a sampled signal, though, so you do not actually have an $H(s)$ without any reconstruction. How did you get $H(s)$ to begin with? Also, what platform are you working on? is it MATLAB? what does the command filter() do (mathematically speaking)? Is it a simple convolution? – havakok Jan 26 at 6:45
• I am working with sampled signal, but for the filter I only have its poles and zero locations in the continuous domain. For example I know the filter has two poles at 23GHz and one zero at 18GHz. So I need to covert them to the z-domain. I am working on MATLAB platform and filter() function here is simply applying the filter's difference equation to the input signal. – shampar Jan 27 at 18:18