# Transfer function an active tone control circuit

I'm trying to calculate the transfer function of this circuit:

As one of the answerers sugest on Explanation of 3 Tone Control Circuit , I tried to divide the circuit into 3 parts, the bass the mid and the treble, did some Delta-Wye transformations, but couldn't get a good result. If I assume the mid-range and treble part don't exist, the transfer function, with VR3 at 50%, from the bass point of view is approximately 1. If I now omit the bass and treble parts, the transfer function from the mid-range point of view, for VR4 set at 50%, is also approximately 1. It means that with VR3 at 50% and VR4 at 50%, the gain is 3dB, which is not, according to the simulator, and I'm not even considering the treble part. So, any suggestions on how to calculate the transfer function other than diving it into 3 parts?

• Although interesting, the long comment chain has exceeded what is reasonable for comments. Therefore it has been moved to chat and should be continued there (link below). --- As this bulk moving of comments to chat can only be done once per question, any further comments posted here which discuss the question, might be deleted without notice. Keep it in chat, please! When someone has got enough information from the chat to post an answer, then please do that as usual. Any updates to the question which are decided during the chat, should be made via an edit to the question. Thanks. Aug 28 at 21:32
• Comments are not for extended discussion; this conversation has been moved to chat. Aug 28 at 21:32

## Quick Overview

I diagrammed things out about like the following (which includes some sympy script needed to perform a full solution):

The automated solution is horribly long and not at all useful. So this implies a different approach is needed.

I don't have the time to go through all of how I'd approach this. Not right now. But I may be able to outline what I tried to suggest in my very first comment to you. It was something that just popped to mind right away and I still think, given more time to allow things to settle, that the original insight is the right approach. I'll try to expand on that comment here.

## Bass

If you take a quick look-see of the schematic, you might notice that if we assume that the impedance of $$\C_4\$$ and $$\C_6\$$ are high enough, then we can ignore their loading (and their consequent attached circuits) upon the bass stage. This allows us to simplify the bass stage analysis for a moment.

That said, I prefer to establish that there is a parameter, $$\0\le \phi_{3}\le 1\$$, that indicates the position of of the potentiometer, $$\R_{P_3}\$$ (VR3 in the above schematic.) It's confusing (and higher-entropy as some may say) to break it up into two distinct resistor parts. So I'd parameterize the potentiometer using $$\phi_{3}\$$, instead. The resulting transfer function is as follows:

$$-\left[K_0\frac{\omega_{_0}}{s+\omega_{_0}}+K_1\frac{s}{s+\omega_{_0}}\right]$$

Where $$\\omega_{_0}=\frac1{C_2}\left[\frac{\phi_3}{R_1}+\frac{1}{R_{P_3}}\right]\$$, $$\K_0=\frac{1-\phi_3}{\phi_3+\frac{R_1}{R_{P_3}}}+\frac{R_2}{R_1+\phi_3\cdot R_{P_3}}\$$, and $$\K_1=\frac{R_2}{R_1}\$$.

This is a low-pass and a bandpass result, which is interesting because there's only one energy storage device here. For the bandpass portion, and given your values, $$\34\:\text{Hz} \lt \omega_{_0}\lt 188\:\text{Hz}\$$, then respectively $$\5.45 \ge K_0\ge 0.180\$$ and $$\K_1=1\$$. So the bandpass has a fixed gain and it is the lowpass gain and frequency that is under adjustment. It's a high gain when the corner frequency is lowest and at low gain when it's corner frequency is highest. Which makes a lot of good sense, as well.

Let's take a look at $$\C_4\$$ over this range. Its impedance will be somewhere between $$\38.5\:\text{k}\Omega\$$ and $$\210\:\text{k}\Omega\$$. ($$\C_6\$$ will be still higher.) But given that this can be treated as "grounded" impedance at the (-) opamp input, it won't affect the frequency or the the gain.

This is a nice result for the bass section! Note that the potentiometer adjusts both the gain and also the corner frequency and that the relationship between them (high gain, at low corner frequency; low gain at high corner frequency) is quite useful.

The reason has to do with the interaction of these stages -- as the corner frequency of the bass stage gets close enough to interfere with the next stage (mid-range), it's gain is at its lowest and well below 1. So its impact will be to somewhat diminish, but not to peak, the shared region of frequency between them, should the mid-band be set to boost its band. And of both are set to diminish their gains then the extra dip won't be important, anyway. This suggests a careful design approach to me.

## Section Interference

I mentioned above, "But given that this can be treated as "grounded" impedance at the (-) opamp input, it won't affect the frequency or the the gain." It's useful to prove this result, rather than just state it as fact. If you haven't attempted the analysis, yourself, you should. The solution is the same, with or without the added load and it is worth a moment's time to prove this to yourself. So let's do that now.

Here's the sympy statements I used to analyze the bass section, with the assumption that load imposed by the other sections can be temporarily ignored. (Please note that while it is quite true that it is valid to remove $$\R_3\$$ from the analysis, it's also harmless to keep it):

var('vin vb1 vb2 vbw vout iout vm r1 r2 r3 c2 s p3 vr3')
r3a = p3*vr3         # potentiometer left side. When p3=0 the left side is 0 Ohms.
r3b = (1-p3)*vr3     # potentiometer right side.
zc2 = 1/s/c2
eq1 = Eq( vb1/r1 + vb1/zc2 + vb1/r3a, vin/r1 + vb2/zc2 + vbw/r3a )
eq2 = Eq( vb2/r2 + vb2/zc2 + vb2/r3b, vout/r2 + vb1/zc2 + vbw/r3b )
eq3 = Eq( vbw/r3a + vbw/r3b + vbw/r3, vb1/r3a + vb2/r3b + vm/r3 )
eq4 = Eq( vm/r3, vbw/r3 )       # kind of silly, but pedandic is good.
eq5 = Eq( vout/r2, vb2/r2 + iout )
eq6 = Eq( vm, 0 )               # virtual ground
ans0 = solve( [eq1, eq2, eq3, eq4, eq5, eq6], [vb1, vb2, vbw, vm, iout, vout] )
simplify( ans0[vout]/vin )

(-c2*r2*s*vr3 + p3*vr3 - r2 - vr3)/(c2*r1*s*vr3 + p3*vr3 + r1)


After a little bit of massaging, that becomes what I wrote earlier. Feel free to prove that on your own. But it's the same. I just cleaned it up.

Now let's complicate things.

Suppose the other sections represent a load we cannot ignore, located at $$\V_m\$$, and let's suppose that this load looks like a capacitor, $$\C_x\$$, in series with a resistor, $$\R_x\$$. (Not far-fetched, as you can see.) Then:

var('vin vb1 vb2 vbw vout iout vm r1 r2 r3 c2 s p3 vr3 rx cx')
r3a = p3*vr3         # potentiometer left side. When p3=0 the left side is 0 Ohms.
r3b = (1-p3)*vr3     # potentiometer right side.
zc2 = 1/s/c2
zcx = 1/s/cx         # series capacitor impedance for interfering section
zx = rx + zcx        # total series impedance of interfering section
eq1 = Eq( vb1/r1 + vb1/zc2 + vb1/r3a, vin/r1 + vb2/zc2 + vbw/r3a )
eq2 = Eq( vb2/r2 + vb2/zc2 + vb2/r3b, vout/r2 + vb1/zc2 + vbw/r3b )
eq3 = Eq( vbw/r3a + vbw/r3b + vbw/r3, vb1/r3a + vb2/r3b + vm/r3 )
eq4 = Eq( vm/r3 + vm/zx, vbw/r3 + 0/zx )  # no longer as silly as before
eq5 = Eq( vout/r2, vb2/r2 + iout )
eq6 = Eq( vm, 0 )               # virtual ground
ans1 = solve( [eq1, eq2, eq3, eq4, eq5, eq6], [vb1, vb2, vbw, vm, iout, vout] )
simplify( ans1[vout]/vin )

(-c2*r2*s*vr3 + p3*vr3 - r2 - vr3)/(c2*r1*s*vr3 + p3*vr3 + r1)


Now compare these two answers from sympy.

$$\V_m\$$ is a virtual ground. As earlier mentioned, the grounded loads of the other section impedances as arranged here do not impact the analysis of each section, independently. There is no path by which they can. And analysis demonstrates the fact.

Now, the above still assumes that we can treat sections not under consideration as grounded loads through a complex impedance, in order to see how such a load might impact the section we are currently considering. In this case, we find the sections are completely independent of each other.

The reality is a little more complicated, as they don't actually go to ground but instead go through complex imepdances to the input and output, which themselves are signal-dependent. But for analysis purposes, it still remains a reasonable approximation that should allow us to greatly simplify analysis.

Here's what I might additionally try in order to capture the added, fuller complexity I just mentioned (complex impedances from the (-) input towards the input and output nodes):

var('vin vb1 vb2 vbw vout iout vm r1 r2 r3 c2 s p3 vr3 rx cx ry cy')
r3a = p3*vr3         # potentiometer left side. When p3=0 the left side is 0 Ohms.
r3b = (1-p3)*vr3     # potentiometer right side.
zc2 = 1/s/c2
zcx = 1/s/cx         # interfering series capacitor impedance to Vin
zcy = 1/s/cy         # interfering series capacitor impedance to Vout
zx = rx + zcx        # total interfering series impedance towards Vin
zy = ry + zcy        # total interfering series impedance towards Vout
eq1 = Eq( vb1/r1 + vb1/zc2 + vb1/r3a, vin/r1 + vb2/zc2 + vbw/r3a )
eq2 = Eq( vb2/r2 + vb2/zc2 + vb2/r3b, vout/r2 + vb1/zc2 + vbw/r3b )
eq3 = Eq( vbw/r3a + vbw/r3b + vbw/r3, vb1/r3a + vb2/r3b + vm/r3 )
eq4 = Eq( vm/r3 + vm/zx + vm/zy, vbw/r3 + vin/zx + vout/zy )
eq5 = Eq( vout/r2 + vout/zy, vb2/r2 + vm/zy + iout )
eq6 = Eq( vm, 0 )               # virtual ground
ans2 = solve( [eq1, eq2, eq3, eq4, eq5, eq6], [vb1, vb2, vbw, vm, iout, vout] )
simplify( ans2[vout]/vin )


The results are indeed more complex, now. And I've not yet attempted to factor through the results to simplify them into an error term that is added to prior analysis, above. I will do so when I get the time and inclination. It's important to consider, so I'll try and do that when I get a moment.

Meanwhile, I can say that the transfer function difference is zero when all three potentiometers are exactly centered. (This is a unique solution.) So when all three potentiometers are at the mid-position, the sections can truly be analyzed independently from each other.

To show this, I developed the fuller transfer function for the circuit and then took the difference between the fuller TF and the simplified TF and then did nothing more than state that $$\R_1=R_2\$$ in addition to setting the potentiometers to 50% (where also $$\C_x=C_y\$$ and $$\R_x=R_y\$$):

simplify( ((ans2[vout]-ans0[vout])/vin).subs( {r1:r2, cx:cy, rx:ry, p3:.5} ) )

0


Note the exact result! Here, I left all of the variables within the difference equation as abstract values. No specific value. The entire thing just collapses to 0, indicating "no difference" between the simplified analysis and the fuller, more complex analysis case. If I even slightly modify the balanced resistor values or even slightly modify the potentiometer positions, then the difference doesn't simplify to 0. So, in such cases, the simpler analysis misses some residuals that need to be included.

In reality, no parts are identical and there's no way to set potentiometers to exactly 50%, either. So there will always be some interaction that is unaccounted by the simplified analysis. But it remains a remarkable result that the simplified analysis can be proven valid in at least a unique situation.

• Even going with separate analysis there is still the part where there will be interaction around the boundaries. I still say OP asks for too much trouble in exchange for a chance of dazzling the audience. That doesn't diminish the value of the answers, though (up'd, both). Aug 28 at 6:39
• @jonk ... about ... Bass circuit . "That said, I prefer to establish that there is a parameter, 0≤ϕ3≤1, that indicates the position of the potentiometer, RP3 (VR3 in the above schematic.)"... Can't you split using the same parameter the paralleled C2 capacitor ? Aug 30 at 5:35
• @Antonio51 Why do you think so? The parameter $\theta_3$ is only about the potentiometer. How does it split the capacitor, which itself isn't changing as a result of the potentiometer position? Or do you mean something else, here, that I'm not quite getting?
– jonk
Aug 30 at 5:37
• Electrically, If you split accordingly the capacitor (a bit complicated by the fact that there is two serial capacitors), it is a point that has the same "potential" as the "mid" point potmeter. So you can do it, it does not change the transfer function, I think. Aug 30 at 5:42
• Splitting as this, for example ... i.stack.imgur.com/l5aHz.png Aug 30 at 5:56

Log time ago I try to analyze this circuit.

For low frequency (bass) we have a "simple" case.

simulate this circuit – Schematic created using CircuitLab

And raw (high entropy) transfer function will look like this:

$$H(s) = -\frac{R_2 + P_{3b} + C_2 R_2 (P_{3a} + P_{3b})s }{R_1 + P_{3a} + C_2 R_1 (P_{3a} + P_{3b}) s}$$

And for the max bass boost, the gain is equal to:

$$A_V = \frac{R_1 + P3}{R_1} = 5.545 V/V \approx 15 dB$$

And the pole and the zero ar at:

$$F_P = \frac{1}{2\pi C_2P3} \approx 34Hz$$ $$F_Z = \frac{1}{2\pi C_2 (P3||R_1)} \approx 189Hz$$

For the "mid-frequency" we have this situation (I assuming $$\X_{C2} = 0\Omega\$$ and $$\X_{C6} = \infty\$$)

simulate this circuit

Also, notice that the job of $$\R_{11}\$$ resistor is to separate and reduced the bass pot influence on the rest of a circuit. And makes the bass "equivalent resistance" fairly constant at mid and high-frequency.

Now, to simplify the circuit we can apply Y-Δ transform.

$$R_{X1} = R_1 + (R_{11} + \frac{P3}{4}) + \frac{R_1(R_{11} + \frac{P3}{4}) }{R_2}$$

Because in this circuit we have $$\R_1 = R_2\$$ we finnaly have:

$$R_{X1} = R_{X2} = R_1 + 2R_{11} + \frac{P3}{2}$$

simulate this circuit

The raw transfer function will be very complex for this circuit:

$$H(s)=\frac{1 + \frac{C_3 (P4a + P4b) (R_4 + R_5) + C_4 (P4b + R_5) (P4a + R_4 + R_{X1}) }{P4a + P4b + R_4 + R_5}s + \frac{C_3 C_4 (P4a P4b (R_4 + R_5) + P4a R_5 (R_4 + R_{X1}) + P4b R_5 (R_4 + R_{X1}))}{P4a + P4b + R_4 + R_5} s^2}{1 + \frac{C_3 (P4a + P4b) (R_4 + R_5) + C_4 (P4b + R_4) (P4a + R_5 + R_{X1}) }{P4a + P4b + R_4 + R_5}s + \frac{C_3 C_4 (P4a P4b (R_4 + R_5) + P4a R_4 (R_5 + R_{X1}) + P4b R_4 (R_5 + R_{X1}))}{P4a + P4b + R_4 + R_5} s^2}$$

The maximum boost mid center frequency is:

$$F_0 = \frac{1}{2\pi \sqrt{\frac{C_3 C_4 P4\: R_4 (R_4 + R_{X1})}{2R_4+ P4}}} \approx 556Hz$$

And the gain is:

$$A_V = \frac{2 C_3 P_4 R_4 + C_4 (P_4 + R_4) (R_4 + R_{X1})}{2 C_3 P_4 R_4 + C_4 R_4 (P_4 + R_4 + R_{X1})} \approx 5.2V/V = 14dB$$

And finally, we can analyze the high-frequency booster (treble range).

And again I assume that $$\X_{C3} = X_{C4} = 0\$$ and again I will use Y-Δ transform to simplified the "mid-range" part as well.

$$\R_m = R_4 + \frac{P4}{2}\$$ and the equivalent circuit:

simulate this circuit

Where $$\R_{eq} = R_X||R_m\$$

The raw transfer funcion is:

$$H(s)=-\frac{(P5+R_6+R_7)R_{eq2}+C_6(P5b+R_7)(P5a+R_6+R_{eq1})R_{eq2}s}{(P5+R_6+R_7)R_{eq1}+C_6(P5a+R_6)R_{eq1}(P5b+R_7+R_{eq2})s}$$

And the maximum boost at a treble range:

$$A_V = \frac{(P5 + R_6) (R_6 + R_{eq})}{R_6 (P5 + R_6 + R_{eq})} =\frac{R_{eq}||(R_6+P5)}{R_6} \approx 8.8V = 19dB$$

And we have a zero at:

$$F_Z = \frac{1}{2 \pi \frac{(P5 + R_6) (R_6 + R_{eq})}{P5 + 2R_6} C_6} \approx 893Hz$$

And the pole

$$F_P = \frac{1}{2 \pi \frac{R_6(P5+R_6+R_{eq})}{P5+ 2R_6}C_6} \approx 7.8kHz$$

And maybe @Verbal Kint will show us how to get a low-entropy solution using Fast Analytical Circuits Techniques.

Or maybe @Jonk will show us his work too?

• I have the complete solution. It's not in a low-entropy solution form, though. That will take some added work. Python didn't enjoy itself doing the work. ;)
– jonk
Aug 27 at 3:47
• @jonk For sure. I have the same problem in Mathematica. And the full transfer function is huge.
– G36
Aug 27 at 15:48
• I don't think I want to write an answer, with yours here. However, I would approach it differently in some respects. One of the first things I'd want to show is the range over which $\omega_{_0}$ varies in the base circuit and then show that for the other two sections, which must go through capacitors, that the load they present is negligible (or if it isn't, then approximately how much of a load they present to your otherwise idealized attempt here.
– jonk
Aug 27 at 17:08
• Those loads do impact the overall behavior of the bass stage. But not much because those capacitor values are relatively small when considering the bass stage range of frequencies. So it can be boxed up pretty easily so that the slight adjustments can be seen as a lump. Makes it more accurate without adding much conceptual complexity. Also, I'd replace your P3a/P3b with a PCT*P3 and (1-PCT)*P3 so that PCT controls things. It's lower-entropy and it brings out something important, if you do that. You'll see if you try it.
– jonk
Aug 27 at 17:09
• @jonk I would like to see how did you include the loading effect on the bass stage. Can you share?
– G36
Aug 27 at 18:28