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)$.

  • $\begingroup$ Your solution should work. You probably made an error in the filter conversion. $\endgroup$ – Ben Jan 25 at 23:33
  • $\begingroup$ 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. $\endgroup$ – Dan Szabo Jan 26 at 2:43
  • $\begingroup$ them poles and them holes. $\endgroup$ – robert bristow-johnson Jan 26 at 3:34
  • $\begingroup$ 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? $\endgroup$ – havakok Jan 26 at 6:45
  • $\begingroup$ 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. $\endgroup$ – shampar Jan 27 at 18:18

Your Answer

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

Browse other questions tagged or ask your own question.