How can I solve this dual operational amplifier circuit with nodal analysis?

I'm somewhat unsure how to solve the Uout voltage of the above circuit using nodal analysis. Uout being the voltage at the right side obviously. I'm not entirely sure if what I have done so far is correct, but I'm definitely not sure how to continue with my solution. Here is what I've gotten so far:

First I added the voltage source Uin and made a source conversion with the R1 in series.

J1 is now in parallel with R1 (or G1).

Now I notice that there are 4 nodes in the circuit, so I can create a 4x4 matrix of the form GU=J:

Here I01 and I02 are the exiting current from their operational amplifiers.

We can remove the rows of I01 and I02:

Now noticing that U1=U2 and U3=U4, so we can add the their columns together:

Since U3=U4=Uout, we solve for U3:

Putting in

Now gives us

What do I do now to solve for Uout?

• The case is so simple that it does not require an analysis on a node basis or anything else, but only for educational purposes. It is assumed that the buffer has infinite input impedance, so the output voltage is equal to the input voltage . It follows that the transfer function of the entire system is given by the product of the transfer functions of the two blocks. Nov 13, 2023 at 16:34
• If you want anybody to be able to follow your math, please annotate your schematic so we know what $U_1$, $U_2$, $J_1$, $G_1$, etc., are. Nov 13, 2023 at 16:42
• @JohnnyB You have a single pole lowpass filter followed by a single pole highpass filter., each with the appropriate canonical form. Since they are decoupled by the op-amp buffers, the output is just the product of the two transfer functions, forming a bandpass filter. Nov 13, 2023 at 16:56
• @JohnnyB Sure, I didn't mean to imply that you can't solve it using other methods, I was just replying to your question "Can you elaborate on this a bit?" about just multiplying the two trivial transfer functions. If you do that, you will have an easy check to see if your nodal analysis is correct. Nov 13, 2023 at 17:41
• Because those op-amps are both simple voltage followers, the op amps really shouldn't enter into your equations. Nov 13, 2023 at 19:22

Well, notice that $$\\displaystyle\text{V}_{+_1}\$$ of the most left OP-AMP is given by:

$$\text{V}_{+_1}=\frac{\displaystyle\frac{1}{\displaystyle\text{sC}_1}}{\displaystyle\frac{1}{\displaystyle\text{sC}_1}+\text{R}_1}\cdot\text{V}_\text{i}\tag1$$

We will get the same for the second OP-AMP:

$$\text{V}_{+_2}=\frac{\displaystyle\text{R}_2}{\displaystyle\frac{1}{\displaystyle\text{sC}_2}+\text{R}_2}\cdot\text{V}_{+_1}\tag2$$

Using the ideal OP-AMP rule:

$$\text{V}_+=\text{V}_-\tag3$$

We can see that $$\\displaystyle\text{V}_{+_1}=\text{V}_{\text{o}_1}\$$ and $$\\displaystyle\text{V}_{+_2}=\text{V}_\text{o}\$$.

So, we get:

$$\text{V}_\text{o}=\frac{\displaystyle\text{R}_2}{\displaystyle\frac{1}{\displaystyle\text{sC}_2}+\text{R}_2}\cdot\frac{\displaystyle\frac{1}{\displaystyle\text{sC}_1}}{\displaystyle\frac{1}{\displaystyle\text{sC}_1}+\text{R}_1}\cdot\text{V}_\text{i}\space\Longleftrightarrow\space$$ $$\mathscr{H}\left(\text{s}\right):=\frac{\text{V}_\text{o}}{\text{V}_\text{i}}=\frac{\displaystyle1}{\displaystyle1+\text{sC}_1\text{R}_1}\cdot\frac{\displaystyle\text{sC}_2\text{R}_2}{\displaystyle1+\text{sC}_2\text{R}_2}\tag4$$

So, when $$\\displaystyle\text{s}=\text{j}\omega\$$, we get for the amplitude:

$$$$\begin{split} \left|\space\underline{\mathscr{H}}\left(\text{j}\omega\right)\right|&=\left|\frac{\displaystyle1}{\displaystyle1+\text{j}\omega\text{C}_1\text{R}_1}\cdot\frac{\displaystyle\text{j}\omega\text{C}_2\text{R}_2}{\displaystyle1+\text{j}\omega\text{C}_2\text{R}_2}\right|\\ \\ &=\left|\frac{\displaystyle1}{\displaystyle1+\text{j}\omega\text{C}_1\text{R}_1}\right|\cdot\left|\frac{\displaystyle\text{j}\omega\text{C}_2\text{R}_2}{\displaystyle1+\text{j}\omega\text{C}_2\text{R}_2}\right|\\ \\ &=\frac{\displaystyle\left|1\right|}{\displaystyle\left|1+\text{j}\omega\text{C}_1\text{R}_1\right|}\cdot\frac{\displaystyle\left|\text{j}\omega\text{C}_2\text{R}_2\right|}{\displaystyle\left|1+\text{j}\omega\text{C}_2\text{R}_2\right|}\\ \\ &=\frac{\displaystyle1}{\displaystyle\left|1+\text{j}\omega\text{C}_1\text{R}_1\right|}\cdot\frac{\displaystyle\omega\text{C}_2\text{R}_2}{\displaystyle\left|1+\text{j}\omega\text{C}_2\text{R}_2\right|}\\ \\ &=\frac{\displaystyle1}{\displaystyle\sqrt{1^2+\left(\omega\text{C}_1\text{R}_1\right)^2}}\cdot\frac{\displaystyle\omega\text{C}_2\text{R}_2}{\displaystyle\sqrt{1^2+\left(\omega\text{C}_2\text{R}_2\right)^2}}\\ \\ &=\frac{\displaystyle1}{\displaystyle\sqrt{1+\left(\omega\text{C}_1\text{R}_1\right)^2}}\cdot\frac{\displaystyle\omega\text{C}_2\text{R}_2}{\displaystyle\sqrt{1+\left(\omega\text{C}_2\text{R}_2\right)^2}}\\ \\ &=\frac{\displaystyle\omega\text{C}_2\text{R}_2}{\displaystyle\sqrt{\left(1+\left(\omega\text{C}_1\text{R}_1\right)^2\right)\left(1+\left(\omega\text{C}_2\text{R}_2\right)^2\right)}} \end{split}\tag5$$$$

And for the argument:

$$$$\begin{split} \arg\left(\space\underline{\mathscr{H}}\left(\text{j}\omega\right)\right)&=\arg\left(\frac{\displaystyle1}{\displaystyle1+\text{j}\omega\text{C}_1\text{R}_1}\cdot\frac{\displaystyle\text{j}\omega\text{C}_2\text{R}_2}{\displaystyle1+\text{j}\omega\text{C}_2\text{R}_2}\right)\\ \\ &=\arg\left(\frac{\displaystyle1}{\displaystyle1+\text{j}\omega\text{C}_1\text{R}_1}\right)+\arg\left(\frac{\displaystyle\text{j}\omega\text{C}_2\text{R}_2}{\displaystyle1+\text{j}\omega\text{C}_2\text{R}_2}\right)\\ \\ &=\arg\left(1\right)-\arg\left(1+\text{j}\omega\text{C}_1\text{R}_1\right)+\arg\left(\text{j}\omega\text{C}_2\text{R}_2\right)-\arg\left(1+\text{j}\omega\text{C}_2\text{R}_2\right)\\ \\ &=0-\arg\left(1+\text{j}\omega\text{C}_1\text{R}_1\right)+\frac{\pi}{2}-\arg\left(1+\text{j}\omega\text{C}_2\text{R}_2\right)\\ \\ &=-\arctan\left(\frac{\displaystyle\omega\text{C}_1\text{R}_1}{\displaystyle1}\right)+\frac{\pi}{2}-\arctan\left(\frac{\displaystyle\omega\text{C}_2\text{R}_2}{\displaystyle1}\right)\\ \\ &=\frac{\pi}{2}-\arctan\left(\omega\text{C}_1\text{R}_1\right)-\arctan\left(\omega\text{C}_2\text{R}_2\right) \end{split}\tag6$$$$

In the case that $$\\displaystyle\text{n}:=\text{C}_1\text{R}_1=\text{C}_2\text{R}_2\$$, we get for the amplitude:

$$$$\begin{split} \left|\space\underline{\mathscr{H}}\left(\text{j}\omega\right)\right|&=\frac{\displaystyle\omega\text{n}}{\displaystyle\sqrt{\left(1+\left(\omega\text{n}\right)^2\right)\left(1+\left(\omega\text{n}\right)^2\right)}}\\ \\ &=\frac{\displaystyle\omega\text{n}}{\displaystyle\sqrt{\left(1+\left(\omega\text{n}\right)^2\right)^2}}\\ \\ &=\frac{\displaystyle\omega\text{n}}{\displaystyle1+\left(\omega\text{n}\right)^2} \end{split}\tag8$$$$

And for the argument:

$$$$\begin{split} \arg\left(\space\underline{\mathscr{H}}\left(\text{j}\omega\right)\right)&=\frac{\pi}{2}-\arctan\left(\omega\text{n}\right)-\arctan\left(\omega\text{n}\right)\\ \\ &=\frac{\pi}{2}-2\arctan\left(\omega\text{n}\right) \end{split}\tag9$$$$

• I follow you until the (6) step. What are you essentially doing from there onwards? Nov 13, 2023 at 21:55
• Step (6) entails getting the angle of the transfer function as a function of frequency. In the numerator of (4), $\angle j C_2 R_2 \omega = 2 \pi$. Each factor in the denominator has real part equal to 1 and imaginary parts equal to $\omega C_1 R_1$ and $\omega C_2 R_2$. In the complex plane these are right triangles with angles equal to $\arctan\left( \omega C_1 R_1\right)$ and $\arctan\left( \omega C_2 R_2\right)$. As they are in the denominator, they should be subtracted from the angle in the numerator. The rest just deals with a (common) special case. Nov 14, 2023 at 3:49
• @JohnnyB If you take a look at my edit, I show mathematically how I got the expressions. Nov 15, 2023 at 17:35
• @CharlesB.Cameron you stated in your comment that $\arg\left(\text{j}\text{C}_2\text{R}_2\omega\right)$ equals $2\pi$ which is wrong, because $\arg\left(\text{j}\text{C}_2\text{R}_2\omega\right)=\frac{\pi}{2}$. Nov 15, 2023 at 17:37
• Yes, thanks for the correction! Nov 15, 2023 at 23:12

Straight KCL Solution

The KCL for the four nodes is:

\begin{align*} \frac{1}{R_1}v_1+s C_1\, v1&=\frac1{R_1}v_{in}\tag{1} \\\\ s C_2\,v_2&=i_1\tag{2} \\\\ \frac{1}{R_2}v_3+s C_2\, v3&=s C_2\,v_2\tag{3} \\\\ 0&=i_2\tag{4} \end{align*}

($$\i_1\$$ and $$\i_2\$$ are the opamp output currents.)

But you also know that $$\v_2=v_1\$$ and that $$\v_{out}=v_3\$$. You should be able to fill out your matrices from this and use the Schur complement method to solve from there.

But cheating and just using a solver:

from sympy import *                     # required once per session
from sympy.solvers import solve         # required once per session
e1 = Eq( v1/r1 + s*c1*v1, vin/r1 )      # KCL/nodal for v1
e2 = Eq( s*c2*v2, i1 )                  # KCL/nodal for v2
e3 = Eq( v3/r2 + s*c2*v3, s*c2*v2 )     # KCL/nodal for v3
e4 = Eq( 0, i2 )                        # KCL/nodal for vout
e5 = Eq( v2, v1 )                       # left ideal opamp
e6 = Eq( vout, v3 )                     # right ideal opamp
ans = solve( [ e1, e2, e3, e4, e5, e6 ], [ i1, i2, v1, v2, v3, vout ] )
ans
{i1: c2*s*vin/(c1*r1*s + 1),
v1: vin/(c1*r1*s + 1),
v2: vin/(c1*r1*s + 1),
v3: c2*r2*s*vin/(c1*c2*r1*r2*s**2 + c1*r1*s + c2*r2*s + 1),
vout: c2*r2*s*vin/(c1*c2*r1*r2*s**2 + c1*r1*s + c2*r2*s + 1),
i2: 0}
ans[vout]/vin
c2*r2*s/(c1*c2*r1*r2*s**2 + c1*r1*s + c2*r2*s + 1)


(I'm using freely available SymPy and SageMath for this -- they run on a variety of environments and use the Python language.)

Matrices

The full matrix looks more to me like this:

But as shown with blue lines, you can strike the last column and the bottom row.

Striking those and if you call the upper-left 4x4 $$\P\$$ such that the above matrix can then be expressed in block form: $$\\left[\begin{smallmatrix}P&Q^T\\Q&R\end{smallmatrix}\right]\$$. Then if your column vector is $$\\left[\begin{smallmatrix}\hat{v}\\\hat{e}\end{smallmatrix}\right]\$$ and the result is $$\\left[\begin{smallmatrix}\hat{0}\\\hat{i}\end{smallmatrix}\right]\$$ so that $$\\left[\begin{smallmatrix}P&Q^T\\Q&R\end{smallmatrix}\right]\left[\begin{smallmatrix}\hat{v}\\\hat{e}\end{smallmatrix}\right]=\left[\begin{smallmatrix}\hat{0}\\\hat{i}\end{smallmatrix}\right]\$$, then $$\\hat{v}=-P^{-1}Q^T\hat{e}\$$.

P = Matrix([ [1/r1+s*c1,0,0,0], [-1,1,0,0], [0,-s*c2,1/r2+s*c2,0], [0,0,-1,1] ])
Q = Matrix([ [-1/r1,0,0,0] ])
ev = Matrix([ vin ])
for u in list( -P.inv()*Q.transpose()*ev ): simplify( u/vin )
1/(c1*r1*s + 1)                                      # v1
1/(c1*r1*s + 1)                                      # v2
c2*r2*s/(c1*c2*r1*r2*s**2 + c1*r1*s + c2*r2*s + 1)   # v3
c2*r2*s/(c1*c2*r1*r2*s**2 + c1*r1*s + c2*r2*s + 1)   # vout


Same result.

Bandpass

It's a bandpass, of course. If $$\\tau_{_1}=R_1 C_1\$$ and $$\\tau_{_2}=R_2 C_2\$$ then $$\K=\frac1{1+\frac{\tau_{_1}}{\tau_{_2}}}\$$, $$\\omega_{_0}=\frac1{\sqrt{\tau_{_1} \tau_{_2}}}\$$, and $$\\zeta=\frac12\omega_{_0}\left(\tau_{_1}+\tau_{_2}\right)\$$ or $$\Q=\frac1{\omega_{_0}\left(\tau_{_1}+\tau_{_2}\right)}\$$. Those can be plugged into the standard 2nd order bandpass transfer function form of your choice.

I have done a complete analysis. I hope the user's request is understandable and satisfactory.

• Much respect for copy-pasting the entire MathCad notebook here :) It’s certainly, ah, not typical approach taken, but hey it works. Perhaps you could find a plug-in/script that outputs in latex, then you could paste text here. Nov 17, 2023 at 21:40