I'm trying to understand the second order Butterworth filter and build a transfer function of it for analysing in the frequency plane.

I have my second order Butterworth filter.

enter image description here

Then I specify the equations for the first RC-filter

enter image description here

$$V_\mathrm{in} = V_1 + R(I_1 + I_2)$$ $$I_2 = C \left(\frac{dV_1}{dt} - \frac{dV_\mathrm{out}}{dt}\right)$$

Second RC filter.

enter image description here

$$V_1 = V_2 + RI_1$$ $$I_1 = C\frac{dV_2}{dt}$$

And now to the op-amp.

enter image description here

$$V_\mathrm{out} = \left(1 + \frac{R_f}{R_1}\right)V_2$$

When I put all the equations together, it becomes:

$$V_\mathrm{in} = V_1 + R(I_1 + I_2)$$ $$V_\mathrm{in} = V_1 + R\left(I_1 + C \left(\frac{dV_1}{dt} - \frac{dV_\mathrm{out}}{dt}\right)\right)$$ $$V_\mathrm{in} = V_1 + R\left(C\frac{dV_2}{dt} + C \left(\frac{dV_1}{dt} - \frac{dV_\mathrm{out}}{dt}\right)\right)$$ $$V_\mathrm{in} = V_2 + RI_1 + R\left(C\frac{dV_2}{dt} + C \left(\frac{dV_1}{dt} - \frac{dV_\mathrm{out}}{dt}\right)\right)$$ $$V_\mathrm{in} = V_2 + RC\frac{dV_2}{dt} + R\left(C\frac{dV_2}{dt} + C \left(\frac{dV_1}{dt} - \frac{dV_\mathrm{out}}{dt}\right)\right)$$

The problem is that I don't know how to make a transfer function. The problem is that I still got variables such as $$\frac{dV_2}{dt}$$ and $$\frac{dV_1}{dt}$$ and $$V_2$$

How can I eliminate them?

I want to create the derivative of \$V_2\$ by using

$$V_\mathrm{out} = \left(1 + \frac{R_f}{R_1}\right)V_2$$

They become:

$$\frac{V_\mathrm{out}}{\left(1 + \frac{R_f}{R_1}\right)} = V_2$$ $$\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}\frac{dV_\mathrm{out}}{dt} = \frac{dV_2}{dt}$$

Then I want to create the derivative of \$V_1\$

$$V_1 = V_2 + RC\frac{dV_2}{dt}$$

They become:

$$\frac{dV_1}{dt} = \frac{dV_2}{dt} + RC\frac{d^2V_2}{dt^2}$$ $$\frac{dV_1}{dt} = \frac{1}{\left(1 + \frac{R_f}{R_1}\right)}\frac{dV_\mathrm{out}}{dt} + RC\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}\frac{d^2V_\mathrm{out}}{dt^2}$$

I put them into this equation:

$$V_\mathrm{in} = V_2 + RC\frac{dV_2}{dt} + R\left(C\frac{dV_2}{dt} + C \left(\frac{dV_1}{dt} - \frac{dV_\mathrm{out}}{dt}\right)\right)$$

It becomes:

$$V_\mathrm{in} = \frac{V_\mathrm{out}}{\left(1 + \frac{R_f}{R_1}\right)} + RC\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}\frac{dV_\mathrm{out}}{dt} + R\left(C\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}\frac{dV_\mathrm{out}}{dt} + C \left(\left(\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}\frac{dV_\mathrm{out}}{dt} + RC\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}\frac{d^2V_\mathrm{out}}{dt^2}\right) - \frac{dV_{out}}{dt}\right)\right)$$

And with the Laplace transform, this will be:

$$U(s) = \frac{Y(s)}{\left(1 + \frac{R_f}{R_1}\right)} + RC\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}Y(s)s + R\left(C\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}Y(s)s + C \left(\left(\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}Y(s)s + RC\frac{1}{\left(1 + \frac{R_f}{R_1}\right)}Y(s)s^2\right) - Y(s)\right)\right)$$

And the whole transfer function will be:

$$G(s) = \frac{Y(s)}{U(s)} = \frac{ R_1 + R_f}{C^2R^2R_1s^2 + (2CRR_1 - CRR_f)s + R_1}$$

Done! What do you think?

MATLAB code or GNU Octave

% Load packet
pkg load symbolic

% Symbolic
syms Vin Vout dVout ddVout R C Rf R1

A = 1 + Rf/R1;
eq = Vin == Vout/A + R*C*1/A*dVout + R*(C*1/A*dVout + C*((1/A*dVout + R*C*1/A*ddVout)- dVout));

% More symbolic
syms U s Y
eq2 = subs(eq, {Vin, Vout, dVout, ddVout}, {U, Y, Y*s, Y*s^2});
eq3 = expand(eq2);

% Transfer function G = Y/U
G = simplify(solve(eq3, Y)/U)
  • \$\begingroup\$ Comments are not for extended discussion; this conversation has been moved to chat. \$\endgroup\$
    – Null
    Sep 9, 2022 at 18:43

5 Answers 5


An error in your result

Heretic, your result near the bottom of your question is:

$$G(s) = \frac{Y(s)}{U(s)} = \frac{ R_f + R_{in}}{C^2R^2R_fs^2 + (2CRR_f - CRR_{in})s + R_f}$$

But it really should be:

$$G_{\text{s}} = \frac{ R_{\text{f}} + R_1}{R^2\,C^2\,R_1\,s^2 + R\,C\left(2R_1 - R_{\text{f}}\right)s + R_1}$$

The form is about right. But I think you may have gotten a resistor name mixed up, assuming your diagram is right.

Of course, both of these are in poor form. They should be put into standard form, which is more readable.

Quick KCL analysis

Using SymPy (freely available) and KCL, I find the following:

eq1 = Eq( v1/r + v1/r + v1/(1/s/c), vin/r + v2/r + vout/(1/s/c) )
eq2 = Eq( v2/(1/s/c) + v2/r, v1/r )
eq3 = Eq( v3/r1 + v3/rf, vout/rf )
eq4 = Eq( vout/rf + vout/(1/s/c), iout + v3/rf + v1/(1/s/c) )
eq5 = Eq( v2, v3 )
ans = solve( [ eq1, eq2, eq3, eq4, eq5 ], [ iout, v1, v2, v3, vout] )
tf = ans[vout]/vin

If I print out tf, I get:

(r1 + rf)/(c**2*r**2*r1*s**2 + 2*c*r*r1*s - c*r*rf*s + r1)

Compare that with your result.

John D's TI PDF suggestion

In comments, John D references TI's Analysis of the Sallen-Key Architecture. On numbered page 2 (6th page of the PDF) they discuss the generalized form of your schematic.

Let's see what happens using their discussion:

b = r1 / (r1+rf)
k = 1 / b
z1 = r
z2 = r
z3 = 1/s/c
z4 = 1/s/c

The last line above prints out:

(r1 + rf)/(c**2*r**2*r1*s**2 + 2*c*r*r1*s - c*r*rf*s + r1)

Same answer as I get using my own KCL approach.

Standard form

The standard form of this would be to set corner angular frequency \$\omega_{_0}=\frac1{R\,C}\$, set damping factor \$\zeta=1-\frac12\,\frac{R_{\text{f}}}{R_1}\$, set gain \$K=1+\frac{R_{\text{f}}}{R_1}\$, and then say: \$G_{\text{s}}=\frac{K}{\left(\frac{s}{\omega_{_0}}\right)^2+2\zeta\,\left(\frac{s}{\omega_{_0}}\right)+1}\$.

This actually tells you something interesting. Since we know that \$\zeta\ge 0\$, it must be the case that \$\frac{R_{\text{f}}}{R_1}\le 2\$. This means that there is no way to get \$K\gt 3\$. And if you try for \$K=3\$ then you will have an undamped situation. And take note of the fact that the gain you choose impacts the damping factor of the filter. All of that is helpful to know.


Look back over your work. Your form appears close. But it gets some details wrong.

Butterworth vs Bessel vs ...

aconcernedcitizen made a correct point that is worth the addition of a moment's thought. He wrote that there really is only one parameter to modify, not the three I'd mentioned in comments. In the sense of the shape, he's right. I want to discuss this for a moment because it helps a great deal in understanding better all these "names" for filter types in the context of 2nd order filters.

I recently wrote a fair amount about 2nd order transfer functions. A low-pass 2nd order transfer function can always be expressed in this form:

$$\begin{align*} \underbrace{\overbrace{K}^{\text{gain}}\quad\overbrace{\frac{1}{\left(\frac{s}{\omega_{_0}}\right)^2+2\zeta\left(\frac{s}{\omega_{_0}}\right)+1}}^{\text{standard low-pass form}}}_{\text{standard low-pass form with gain}} \end{align*}$$

I mentioned that there are three parameters: \$K\$, \$\omega_{_0}\$, and \$\zeta\$. (Alternatively, where \$Q=\frac1{2\zeta}\$. But that's just another way of saying the same thing.)

The parameter \$K\$ doesn't change the shape of the filter. It's just a constant multiplier, so the shape isn't changed by it. So to simplify things, we can just set \$K=1\$ and study only what remains.

The parameter \$\omega_{_0}\$ also doesn't change the shape of the filter. All it does is move it left or right along the (angular) frequency axis. So we may as well just set \$\omega_{_0}=1\$ and study only what remains, now.

Well... only \$\zeta\$ remains now. That's what determines everything about the shape of the 2nd order filter. There's nothing left. It's the only parameter that can modify the shape. And it does.

So what does it mean to say Butterworth or Bessel, etc?? Well, there's only one thing that can make a difference between them in 2nd order filters. And that's \$\zeta\$. So that must be the only difference between them.

A Butterworth will have \$2\zeta=\sqrt{2}\$ and a Bessel will have \$2\zeta=\sqrt{3}\$. And that's literally how it works. Each type of 2nd order filter can only vary this one parameter to change its shape. And the only difference between one type of 2nd order filter and another can only be this shape factor, \$\zeta\$. And that's all it really is.

So, I can definitely say that \$\frac{1}{s^2+\sqrt{2} s+1}\$ is a 2nd order Butterworth low-pass filter and that \$\frac{1}{s^2+\sqrt{3} s+1}\$ is a 2nd order Bessel low-pass filter. And we can study these two to learn everything we can possibly need to know about these two different filter shapes.

Once we understand these, we can always go back and apply some \$K\$ or some \$\omega_{_0}\$ per some specific need, at a later time.

So, why did I first say you can adjust three parameters while aconcernedcitizen correctly pointed out that only one matters? I obviously agree, given what I've just written above.

It's because people often also talk about the \$3\:\text{dB}\$-down point in a 2nd order filter. And the Butterworth's \$3\:\text{dB}\$-down point is right at \$\omega_{_0}\$ while a Bessel's \$3\:\text{dB}\$-down point is at \$0.786151377757423\cdot \omega_{_0}\$. So if you want to get the Bessel's \$3\:\text{dB}\$-down point to the same place (angular frequency wise) as the Butterworth, then you need to adjust your designed \$\omega_{_0}\$ up a little bit. But this also may (depending on what you care about) mess with \$K\$. Which is why I said three parameters to play with instead of one. That was more about trying to achieve some goal.

If you want to work out these details on your own, you will also need to realize that to find the \$3\:\text{dB}\$-down point, you need to take the absolute magnitude of the complex transfer function and set it equal to \$\frac{\sqrt{2}}2\$ and then solve for \$\omega\$. If you do that, you'll find this number comes out of the Bessel case: 0.786151377757423. While 1 solves the Butterworth case. (Assuming we start with \$\omega_{_0}=1\$, of course.)

Using freely available SymPy:

Butter = 1 / ( s**2 + sqrt(2)*s + 1 )
Bessel = 1 / ( s**2 + sqrt(3)*s + 1 )
def H(g):
    return g.subs( { s:I*x } )
def HSTAR(g):
    return g.subs( { s:-I*x } )
for i in solve( Eq( sqrt(H(Butter)*HSTAR(Butter)), sqrt(2)/2 ), x ):i.n()
for i in solve( Eq( sqrt(H(Bessel)*HSTAR(Bessel)), sqrt(2)/2 ), x ):i.n()

That's how I'd find the \$3\:\text{dB}\$-down point for each of these two types of 2nd order low-pass filters.

Your Sallen-Key low-pass 2nd order as a Butterworth

Can a Butterworth filter be done, using your Sallen-Key schematic (it is only one of the many forms they described in TR-50 in 1954), if you make both \$R\$ values the same and both \$C\$ values the same so that \$\omega_{_0}=\frac1{R\,C}\$?

Just for kicks, let's say \$f_{_0}=1\:\text{kHz}\$ and that we are selecting \$R=10\:\text{k}\Omega\$. Then we can find that \$\omega_{_0}=2\pi\,f_{_0}=\frac1{10\:\text{k}\Omega\,C}\$ and thus, \$C=\frac1{2\pi\,\cdot\,1\:\text{kHz}\,\cdot\,10\:\text{k}\Omega}\approx 15.9\: \text{nF}\$. We know that the Butterworth requires \$2\zeta=\sqrt{2}\$, so then \$2-\frac{R_{\text{f}}}{R_1}=\sqrt{2}\$ or \$R_{\text{f}}=R_1\left(2-\sqrt{2}\right)\$. For quick convenience, let's set \$R_1=10\:\text{k}\Omega\$. This means that \$R_{\text{f}}\approx 5.858\:\text{k}\Omega\$ and therefore the gain is \$K\approx 1.5858\$ (about \$+4\:\text{dB}\$.)

Note that we have to accept this gain if we want a Butterworth in this circumstance.

Here's the LTspice schematic:

enter image description here

And here is the Bode plot:

enter image description here

We expect it to be down just slightly more than \$3\:\text{dB}\$ (down from \$K\$) and it is ... to about \$+1\:\text{dB}\$. Right as it should be.

So you can do a Butterworth shape with your Sallen-Key topology. But given the fact that you are specifying the shape (\$\zeta\$) and the corner angular frequency (\$\omega_{_0}\$) you are then forced to accept the implications for \$K\$. You cannot specify the angular frequency and the gain and also specify the filter shape, all at the same time. You get to specify two. The third is then determined, given this Sallen-Key topology.

Suppose you really wanted to insist that \$K=1\$ and that you still demand a Butterworth shape with the \$-3\:\text{dB}\$ point at \$f_{_0}=1\:\text{kHz}\$. Well, the only way to do that with this topology is to set \$R_{\text{f}}=0\:\Omega\$ and get rid of \$R_1\$. Which is a simpler Sallen-Key topology. But in this case, we find that \$2-\frac{0\:\Omega}{\infty\:\Omega}\ne\sqrt{2}\$. If both \$R\$ values are the same and both \$C\$ values are the same then in all cases with \$K=1\$ then \$\zeta=1\$. Wrong shape. So a Butterworth isn't possible. Something has to give.

If you let up on the requirement that \$C_1=C_2=C\$ (\$C_2\$ being the feedback cap, not the grounded cap) but keep the idea that \$R_1=R_2=R=10\:\text{k}\Omega\$, then you can find that if \$C_2=2\,C_1\$ and \$C_2=22.5\:\text{nF}\$ then you get everything you want:

enter image description here

With this Bode plot:

enter image description here

This fact of life -- trade-offs of various kinds -- is common for single opamp stages. Even in more complex stages, like the biquad, you are still making trade-offs.

You can get control over all three with, for example, a variable-gain state-variable filter. But this uses four opamps in order to allow you to control all three independently: gain, angular frequency, and shape -- all at one time.

  • \$\begingroup\$ Thank you! I will do an analysis now. \$\endgroup\$
    – euraad
    Sep 8, 2022 at 20:39
  • 1
    \$\begingroup\$ Done! Fixed. I mixed $R_1$ and $R_f$. Sorry. \$\endgroup\$
    – euraad
    Sep 8, 2022 at 20:51

Well, let's solve and show this mathematically. We are trying to analyze the following circuit (assuming an ideal opamp):


simulate this circuit – Schematic created using CircuitLab

When we use and apply KCL, we can write the following set of equations:

$$ \begin{cases} \text{I}_2=\text{I}_1+\text{I}_3\\ \\ \text{I}_0=\text{I}_3+\text{I}_4 \end{cases}\tag1 $$

When we use and apply Ohm's law, we can write the following set of equations:

$$ \begin{cases} \text{I}_1=\frac{\text{V}_\text{i}-\text{V}_1}{\text{R}_1}\\ \\ \text{I}_2=\frac{\text{V}_1-\text{V}_2}{\text{R}_2}\\ \\ \text{I}_3=\frac{\text{V}_4-\text{V}_1}{\text{R}_3}\\ \\ \text{I}_4=\frac{\text{V}_4-\text{V}_3}{\text{R}_4}\\ \\ \text{I}_2=\frac{\text{V}_2}{\text{R}_5}\\ \\ \text{I}_4=\frac{\text{V}_3}{\text{R}_6} \end{cases}\tag2 $$

Now, when we have an ideal opamp we know that \$\text{V}_x:=\text{V}_+=\text{V}_-=\text{V}_2=\text{V}_3\$. So we can rewrite equation \$(2)\$ as follows:

$$ \begin{cases} \text{I}_1=\frac{\text{V}_\text{i}-\text{V}_1}{\text{R}_1}\\ \\ \text{I}_2=\frac{\text{V}_1-\text{V}_x}{\text{R}_2}\\ \\ \text{I}_3=\frac{\text{V}_4-\text{V}_1}{\text{R}_3}\\ \\ \text{I}_4=\frac{\text{V}_4-\text{V}_x}{\text{R}_4}\\ \\ \text{I}_2=\frac{\text{V}_x}{\text{R}_5}\\ \\ \text{I}_4=\frac{\text{V}_x}{\text{R}_6} \end{cases}\tag3 $$

Now, for the output voltage we get:


So, the transfer function is given by:


I checked my calculations using LTspice and they're correct.

Now, applying this to your circuit we need to use (from now on I use the lower case letters for the function in the 'complex' s-domain where I used Laplace transform) the fact that the resistor \$\text{R}_3\$ and \$\text{R}_5\$ are replaced by a capacitor, so:

  • $$\text{R}_3=\frac{1}{\text{sC}_1}\tag6$$
  • $$\text{R}_5=\frac{1}{\text{sC}_2}\tag7$$

So, we get as the transfer function:


So, when we substitute \$\text{s}:=\text{j}\omega\$ we get:


I used Mathematica to solve it. The code:

V2 = Vx;
V3 = Vx;
R3 = 1/(s*C1);
R5 = 1/(s*C2);
s = I*2*Pi*f;
h = FullSimplify[(V4 /. 
      Solve[{I2 == I1 + I3, I0 == I3 + I4, I1 == (Vi - V1)/R1, 
         I2 == (V1 - V2)/R2, I3 == (V4 - V1)/R3, I4 == (V4 - V3)/R4, 
         I2 == V2/R5, I4 == V3/R6}, {I0, I1, I2, I3, I4, V1, V4, 
H = FullSimplify[
  Sqrt[ComplexExpand[Re[h]]^2 + ComplexExpand[Im[h]]^2], 
  Assumptions -> 
   f >= 0 && C1 > 0 && C2 > 0 && R1 > 0 && R2 > 0 && R4 > 0 && 
    R5 > 0 && R6 > 0]

Out[1]=(R4 + R6) Sqrt[1/((1 + 4 C2^2 f^2 \[Pi]^2 (R1 + R2)^2) R6^2 + 
  4 C1^2 f^2 \[Pi]^2 R1^2 (R4^2 + 4 C2^2 f^2 \[Pi]^2 R2^2 R6^2) - 
  8 C1 C2 f^2 \[Pi]^2 R1 R6 (R1 R4 + R2 (R4 + R6)))]
  • \$\begingroup\$ Wow! Greate answer! I edited my question. Have a loot at it. \$\endgroup\$
    – euraad
    Sep 8, 2022 at 18:32
  • \$\begingroup\$ I think we got the same results, with different ways of thinking :) \$\endgroup\$
    – euraad
    Sep 8, 2022 at 18:35

I do it with equal-value RC's and a gain of 1.6 times or with the feedback capacitor with double the value and a gain of 1 time like this: Butterworth lowpass



simulate this circuit – Schematic created using CircuitLab

Node a: KCL

$$\left(\frac{1}{R_{1}}+\frac{1}{R_{2}}+C_{1}s \right)V_{a}(s)-\frac{1}{R_{1}}V_{in}(s)-\frac{1}{R_{2}}V_{b}(s)-C_{1}sV_{out}(s)=0$$

Node b: KCL

$$\left(\frac{1}{R_{2}}+C_{2}s \right)V_{b}(s)-\frac{1}{R_{2}}V_{a}(s)=0$$

Constraint: \$V_{out}(s)=KV_{b}(s)\$

Solve Node b equation for Va. Substitute into Node a equation. Apply the constraint. Then solve for the transfer function: \$G(s)=\frac{V_{out}(s)}{V_{in}(s)}\$ $$G(s)=\frac{K}{R_{1}C_{1}R_{2}C_{2}s^{2}+\left[\left(R_{1}+R_{2}\right) C_{2}+\left(1-K\right)R_{1}C_{1}\right]s+1}$$

Equal Element Simplification:\$R_{1}=R_{2}=R\$, \$C_{1}=C_{2}=C\$


For the OPs question \$K=1+\frac{R_{f}}{R_{i}}\$.

As jonk indicated, a standard form is $$G(s)=\frac{K}{\left(\frac{s}{\omega _{N}}\right)^2+\left(2\zeta\frac{s}{\omega _{N}}\right)+1}$$

So \$\omega_{N}=\frac{1}{RC}\$ and \$K=3-2\zeta\$.

For a Butterworth filter \$\zeta = \frac{1}{\sqrt{2}}\Rightarrow K=1.59\$

To achieve an overall gain of unity, place a voltage divider on the input (as shown below) such that: \$R_{1}=R_{1a}//R_{1b}=R_{2}\$ for the equal element simplification and \$\frac{R_{1b}}{R_{1a}+R_{1b}}=\frac{1}{K}\$.


simulate this circuit

The method that I applied to obtain the Node Equations is a prescribed method but is still KCL.

  1. Sum the admittances connected to the node of interest and multiply by the node voltage.
  2. Subtract, for each branch connected to the node, the product of the branch admittance with the voltage at the opposite end of the node.
  3. Set the result equal to zero.

Using this method the node equations can be written in one line directly from the schematic diagram.


Replace the capacitors with their Laplace equivalent, \$\frac{1}{sC}\$, and solve via nodal analysis.

(a) At the \$\small V_B\$ node,

\$\small V_B=V_A =V_2 =\large\frac{R_1}{R_1+R_f}\small V_{out}\$

(b) Voltage divider across \$\small V_1\$ and reference ground,

\$\small V_1 =(1+RCs)V_2 \$

(c) At the \$\small V_1\$ node,


Combining above three equations,

\$\large\frac{V_{out}(s)}{V_{in}(s)}=\frac{R_1+R_f}{R_1R^2C^2s^2+(2R_1-R_f)RCs+R_1} \$


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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