summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2020-11-23 18:21:54 +1100
committerDamien Zammit <damien@zamaudio.com>2020-11-23 20:03:45 +1100
commit77da69c220dbb7cdccf3b316e567e6ae69a0579d (patch)
tree4f54f1a1f4ae4e04033d824da0799019ebe5ad44
parentb4bdad4689de151e7223b75a49d450a0c865854a (diff)
ZamTube: Simplify circuit with no Ci capacitor - no sound quality loss
-rw-r--r--plugins/ZamTube/ZamTubePlugin.cpp5
-rw-r--r--plugins/ZamTube/wdfcircuits.h16
2 files changed, 5 insertions, 16 deletions
diff --git a/plugins/ZamTube/ZamTubePlugin.cpp b/plugins/ZamTube/ZamTubePlugin.cpp
index 4d7c453..7783700 100644
--- a/plugins/ZamTube/ZamTubePlugin.cpp
+++ b/plugins/ZamTube/ZamTubePlugin.cpp
@@ -299,7 +299,6 @@ void ZamTubePlugin::activate()
// Passive components
/* Original WDF preamp
- ci[0] = 100e-9;
rg[0] = 20e+3;
rk[0] = 1e+3;
ck[0] = 10e-6;
@@ -310,7 +309,6 @@ void ZamTubePlugin::activate()
*/
/* Matt's preamp */
- ci[0] = 100e-9;
rg[0] = 1e-3;
rk[0] = 1200.; // 820 originally
ck[0] = 50e-6;
@@ -320,7 +318,6 @@ void ZamTubePlugin::activate()
ro[0] = 470e+3;
/* CLA's preamp
- ci[0] = 1.0e-7;
rg[0] = 5.6e+3;
rk[0] = 1.5e+3;
ck[0] = 4.7e-6;
@@ -333,7 +330,7 @@ void ZamTubePlugin::activate()
int pre = 0;
float volumepot = 800e+3; // 100 good at low gain, 1000 good at high gain
ckt.on = false;
- ckt.updateRValues(ci[pre], ck[pre], co[pre], e[pre], er[pre], rg[pre], volumepot, rk[pre], 1e+3, ro[pre], Fs);
+ ckt.updateRValues(ck[pre], co[pre], e[pre], er[pre], rg[pre], volumepot, rk[pre], 1e+3, ro[pre], Fs);
ckt.warmup_tubes();
fSamplingFreq = Fs;
diff --git a/plugins/ZamTube/wdfcircuits.h b/plugins/ZamTube/wdfcircuits.h
index 816c96d..5bf2e93 100644
--- a/plugins/ZamTube/wdfcircuits.h
+++ b/plugins/ZamTube/wdfcircuits.h
@@ -40,10 +40,9 @@ public:
E500E = 0.;
}
- void updateRValues(Real C_Ci, Real C_Ck, Real C_Co, Real E_E500, Real R_E500, Real R_Rg, Real R_Ri, Real R_Rk, Real R_Vi, Real R_Ro, Real sampleRate) {
+ void updateRValues(Real C_Ck, Real C_Co, Real E_E500, Real R_E500, Real R_Rg, Real R_Ri, Real R_Rk, Real R_Vi, Real R_Ro, Real sampleRate) {
Real ViR = R_Vi;
- Real CiR = 1.0 / (2.0*C_Ci*sampleRate);
Real RiR = R_Ri;
Real RgR = R_Rg;
Real RoR = R_Ro;
@@ -52,10 +51,7 @@ public:
Real E500R = R_E500;
E500E = E_E500;
Real CoR = 1.0 / (2.0*C_Co*sampleRate);
- Real S0_3R = (CiR + ViR);
- S0_3Gamma1 = CiR/(CiR + ViR);
- Assert(S0_3Gamma1 >= 0.0 && S0_3Gamma1 <= 1.0);
- Real P0_1R = S0_3R;
+ Real P0_1R = ViR;
Real P0_2R = RiR;
Real P0_3R = 1.0 /(1.0 / P0_1R + 1.0 / P0_2R);
P0_3Gamma1 = 1.0 / P0_1R/(1.0 / P0_1R + 1.0 / P0_2R);
@@ -111,11 +107,10 @@ public:
//S0_1SetA
//ViGetB
//S0_2SetA
- Real S0_3b3 = -(/*Cib*/ + ViE);
//P0_1SetA
//RiGetB
//P0_2SetA
- Real P0_3b3 = -P0_3Gamma1*(-S0_3b3);
+ Real P0_3b3 = -P0_3Gamma1*ViE;
//S1_2SetA
Real S1_3b3 = -(P0_3b3);
//P1_3GetB
@@ -144,15 +139,12 @@ public:
//RkSetA
//S1_3SetA
//RgSetA
- Real S1_3b2 = Vg - S1_3Gamma1*(P0_3b3 + Vg);
//P0_3SetA
- Real P0_3b1 = S1_3b2 - S0_3b3 - P0_3Gamma1*(-S0_3b3);
//S0_3SetA
- Real S0_3b1 = /*Cib*/ - S0_3Gamma1*(/*Cib*/ + ViE + P0_3b1);
//Cia = S0_3b1;
//RiSetA
//printf("Vk=%f Vg=%f Vpk=%f in=%f out=%f\n", Vk,Vg,S2_3b3, ViE,Roa);
- return -(Roa);
+ return Roa;
}
private: