I'm simulating the following passive bandpass filter in LTSPICE, and can't figure out why my calculated cutoff values don't match the -3db values in the simulation. Here's the circuit I'm simulating:


Here are my calculations:

\$f_{cutoff, HPF} = {\frac 1{2π(20k)(100p)}= 80kHz}\$

\$f_{cutoff, LPF} = {\frac 1{2π(1k)(1n)}= 160kHz}\$

Here are the simulation results (See the values in the lower left for Freq and dB):

Maximum value of plot is about -0.4dB @ 106kHZ: enter image description here

Measured HPF cutoff is around 6kHz @ -3.4dB: enter image description here

Measured LPF cutoff is around 1.8MHz @ -3.4dB: enter image description here

So what gives? Why are my calculated cutoff values so much different than my simulated cutoff values?

  • 1
    \$\begingroup\$ You can not cascade filters like this. The rightmost filter loads the leftmost one changing the overall transfer function. Either you can analyze the circuit as is or if you wish to cascade independant transfer functions you can put a high impedance buffer in between the two filters. \$\endgroup\$ Dec 8, 2019 at 5:52
  • \$\begingroup\$ Do you have a source that explains the limitations of cascaded passive filters in more depth? I have simulated cascaded passive RC filters in the past and I usually get the output values I expect. Also, if you Google "Passive Bandpass Circuit" this cascaded circuit is everywhere. \$\endgroup\$ Dec 8, 2019 at 6:20
  • \$\begingroup\$ You can use passive casades like this when you are dealing with a wide band response (lets say cutoff freq of 100Hz and 10kHz). But when your frequencies are so close you will have to consider the frequency dependant loading. Answer here should be relevant: electronics.stackexchange.com/questions/270319/… \$\endgroup\$ Dec 8, 2019 at 6:30
  • \$\begingroup\$ When cascading passive filters, always order them from lowest to highest impedance. In this case, put C2 and R2 after R1 and C1. This will minimize the loading effect of the second stage (minimum impedance 20k) on the first stage (maximum impedance 1k). Alternatively you could change the values so the first stage has lower impedance than the second eg. C2 = 2n, R2 = 1k, R1 = 10k, C1 = 100p. \$\endgroup\$ Dec 8, 2019 at 20:38

1 Answer 1


Just "fill in the blanks." Suppose we use Thevenin for the left-most divider network to find:

$$V_\text{X}=V_\text{IN}\frac{R_2}{R_2+Z_{C_2}}$$ and $$Z_\text{X}=\frac{R_2\,Z_{C_2}}{R_2+Z_{C_2}}$$

With that Thevenin source (whose \$Z_\text{X}\$ is now in series with \$R_1\$), it then follows that:


Of course, \$Z_C=\frac1{s\,C}\$. So, with a little bit of algebra stuff:


Set \$\alpha=\frac12 \left(\frac1{R_1\,C_1}+\frac1{R_2\,C_2}+\frac1{R_1\,C_2}\right)\$, \$\omega_{_0}=\frac1{\sqrt{R_1\,C_1\,R_2\,C_2}}\$, and create the unitless \$\zeta=\frac{\alpha}{\omega_{_0}}\$. It follows that \$f_{_0}\approx 112.54\:\text{kHz}\$ and \$\zeta\approx 8.132\$.

We want to find \$K\$ such that:


(If you are curious about the separation of these two factors, examine what happens to the second factor when \$s=j\,\omega_{_0}\$.)

We find here that \$K=\frac{R_2\,C_2}{R_1\,C_1+R_2\,C_2+R_2\,C_1}\$. (You can instead just compute \$K=\sqrt{G_{j\,\omega_{_0}}\:G_{-j\,\omega_{_0}}}\$, but there are less formal methods of getting to the same place.) With your values, I find \$K\approx 0.08695\$ or that the filter peaks at about \$-21.214\:\text{dB}\$.

The denominator is quadratic and the roots are:


\$\zeta\$ is handy. The following cases arrive (if you look at the square-root term of \$s_1\$ and \$s_2\$ you may note that it can be imaginary or real):

$$\begin{align*}\text{Damping factor conditions}\left\{\begin{array}{l}\zeta = 1 \left(\alpha=\omega_0\right)&&\text{Critically damped}\\\zeta \gt 1 \left(\alpha\gt \omega_0\right)&&\text{Over-damped}\\\zeta \lt 1 \left(\alpha\lt \omega_0\right)&&\text{Under-damped}\\\zeta = 0&&\text{Un-damped}\end{array}\right.\end{align*}$$

In your case, you have a bandpass because \$\zeta\approx 8.132\$ and it must be the over-damped case. So the square-root part of the solution is real and therefore \$s_1\$ and \$s_2\$ are both real (and different from each other.) Here also, the \$s_1\$ and \$s_2\$ poles actually represent your \$\omega_{_\text{L}}\$ and \$\omega_{_\text{H}}\$:


Easily computed from the variables earlier developed. (And note that \$\omega_{_\text{L}}\,\omega_{_\text{H}}=\omega_{_0}^2\$.) So \$f_{\text{L}}\approx 6.946\:\text{kHz}\$ and \$f_{\text{H}}\approx 1.82334\:\text{MHz}\$.

Note that the prior transfer function is but one standard way to write it. It's not the only standard form. Another approach is to simply replace \$s\$ with \$j\,\omega\$ (we are assuming that it doesn't spiral out of control or that it doesn't dampen into nothing -- in short, we are assuming \$\sigma=0\$.) Also, since \$s_1\$ and \$s_2\$ are real roots (for a bandpass filter that is over-damped, by definition), we can re-arrange as follows:

$$\begin{align*} G_s&=-K\:\left[\frac{2\zeta\,\omega_{_0}\,s}{\left(s-s_1\right)\cdot\left(s-s_2\right)}\right]\\\\ &=-K\:\left[\frac{2\zeta\,\omega_{_0}\,j\,\omega}{\left(j\,\omega+\omega_{_\text{L}}\right)\cdot\left(j\,\omega+\omega_{_\text{H}}\right)}\right]\\\\ &=-K\:\left[\frac{2\zeta\,\frac{j\,\omega}{\omega_{_0}}}{\left(1+\frac{j\,\omega}{\omega_{_\text{L}}}\right)\cdot\left(1+\frac{j\,\omega}{\omega_{_\text{H}}}\right)}\right] \end{align*}$$

The point is that there are different ways to represent the same thing. Your choice will depend on what you want to emphasize. (And, of course, it's worth the time to play a little with the equations to see where they take you.)

(By the way, the above only applies to the case where we are talking about an over-damped bandpass filter. I made some assumptions about the fact that we have real and distinct roots for this last development.)

Your Results

I notice that you used AC 11, not AC 1, in your simulation. You should correct this. The standard way to approach this is to use AC 1 in your simulation's input source.

If you fix this in your simulation, everything else will work out fine. Here are the results from LTspice:

enter image description here

I think that should suffice.


You have to take into account the loading that one sub-network has upon another. So you need to use the full Thevenin approach that takes into account all of the loading effects.


Your Answer

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

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