summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2019-01-01 13:40:42 +1100
committerDamien Zammit <damien@zamaudio.com>2019-01-01 18:06:00 +1100
commitbc07dcc8e892f14462407e85843b5dc30fe13032 (patch)
treeb1caa98d4802b935f632338d476094f8c4ba91c5
parentd34c40c614ffa5db1a2a7d275b627dbf476b9c85 (diff)
Trying to follow equations
-rw-r--r--plugins/ZamTube/ZamTubePlugin.cpp4
-rw-r--r--plugins/ZamTube/ZamTubeUI.cpp2
-rw-r--r--plugins/ZamTube/wdfcircuits.h67
3 files changed, 45 insertions, 28 deletions
diff --git a/plugins/ZamTube/ZamTubePlugin.cpp b/plugins/ZamTube/ZamTubePlugin.cpp
index 9d845ff..82e2383 100644
--- a/plugins/ZamTube/ZamTubePlugin.cpp
+++ b/plugins/ZamTube/ZamTubePlugin.cpp
@@ -46,7 +46,7 @@ void ZamTubePlugin::initParameter(uint32_t index, Parameter& parameter)
parameter.unit = " ";
parameter.ranges.def = 0.0f;
parameter.ranges.min = 0.0f;
- parameter.ranges.max = 11.0f;
+ parameter.ranges.max = 30.0f;
break;
case paramBass:
parameter.hints = kParameterIsAutomable;
@@ -951,7 +951,7 @@ void ZamTubePlugin::run(const float** inputs, float** outputs, uint32_t frames)
in = fabs(in) < DANGER ? in : 0.f;
double ViE = in*from_dB(tubedrive - 10.);
- tubeout = e * ckt.advanc(ViE) * from_dB(40. - tubedrive);
+ tubeout = ckt.advanc(ViE) * from_dB(40. - tubedrive);
if (!ckt.on) {
tubeout = 0.0;
} else {
diff --git a/plugins/ZamTube/ZamTubeUI.cpp b/plugins/ZamTube/ZamTubeUI.cpp
index 4b6de0c..7421aa5 100644
--- a/plugins/ZamTube/ZamTubeUI.cpp
+++ b/plugins/ZamTube/ZamTubeUI.cpp
@@ -49,7 +49,7 @@ ZamTubeUI::ZamTubeUI()
// knobs
fKnobTube = new ZamKnob(this, knobImage);
fKnobTube->setAbsolutePos(177, 76);
- fKnobTube->setRange(0.f, 11.0f);
+ fKnobTube->setRange(0.f, 30.0f);
fKnobTube->setLabel(true);
fKnobTube->setScrollStep(1.0f);
fKnobTube->setDefault(0.0f);
diff --git a/plugins/ZamTube/wdfcircuits.h b/plugins/ZamTube/wdfcircuits.h
index 16504b1..2eda2c0 100644
--- a/plugins/ZamTube/wdfcircuits.h
+++ b/plugins/ZamTube/wdfcircuits.h
@@ -26,9 +26,9 @@ public:
void updateRValues(Real C_Ci, Real C_Ck, Real C_Co, Real E_E250, Real R_E250, Real R_Rg, Real R_Ri, Real R_Rk, Real R_Ro, Real R_Vi, Real sampleRate, Triode& tube) {
t = tube;
Real ViR = R_Vi;
- Real CiR = 1.0 / (2.0*C_Ci*sampleRate);
- Real CkR = 1.0 / (2.0*C_Ck*sampleRate);
- Real CoR = 1.0 / (2.0*C_Co*sampleRate);
+ CiR = 1.0 / (2.0*C_Ci*sampleRate);
+ CkR = 1.0 / (2.0*C_Ck*sampleRate);
+ CoR = 1.0 / (2.0*C_Co*sampleRate);
Real RoR = R_Ro;
Real RgR = R_Rg;
Real RiR = R_Ri;
@@ -72,35 +72,49 @@ public:
}
Real advanc(Real VE){
+ //a = (v + R*i)/2.
+ //b = (v - R*i)/2.
+ //par -> v1=v2=v3 i1+i2+i3=0
+ //ser -> v1+v2+v3=0 i1=i2=i3
+
+ //Set Bs
ViE = VE;
- Real Ckb = Cka;
- Real I3_3b3 = I3_3Gamma1 * Ckb;
- Real Cib = Cia;
- Real S0_3b3 = ViE + S0_3Gamma1*(Cib);
- Real P0_3b3 = P0_3Gamma1*(-S0_3b3);
- Real S1_3b3 = P0_3b3 + S1_3Gamma1*(P0_3b3);
- Real Cob = Coa;
- Real S2_3b3 = Cob;
- Real P2_3b3 = E250E + P2_3Gamma1*(-S2_3b3);
+ Real Ckb = -Cka;
+ Real I3_3b3 = -0.5*I3_3Gamma1*Ckb/CkR;
+
+ Real Cib = -Cia;
+ Real S0_3b3 = -0.5*(ViE - Cib*S0_3Gamma1/CiR);
+ Real P0_3b3 = 0.5 * S0_3b3;
+ Real S1_3b3 = 0.5 * P0_3b3;
+
+ Real Cob = -Coa;
+ Real S2_3b3 = 0.5*S2_3Gamma1*Cob/CoR;
+ Real P2_3b3 = 0.5*(E250E + S2_3b3);
+
//Tube: K G P
- //printf("K=%f G=%f P=%f\n", I3_3b3,-S1_3b3,P2_3b3);
t.compute(I3_3b3,-S1_3b3,P2_3b3);
Real b1 = t.getC();
Real b2 = t.getG();
Real b3 = t.getP();
+
+
//Set As
- Real I3_3b1 = (b1 - I3_3Gamma1*(b1 + Ckb));
- Cka = I3_3b1;
- Real S1_3b2 = P0_3b3 - b2 - S1_3Gamma1*(P0_3b3 - b2);
- Real P0_3b1 = S1_3b2 + (-S0_3b3) - P0_3Gamma1*(S1_3b2 - S0_3b3);
- Real S0_3b1 = (Cib - P0_3b1 - S0_3Gamma1*(Cib - P0_3b1));
- Cia = S0_3b1;
- Real P2_3b1 = (b3 - S2_3b3 - P2_3Gamma1*(b3 - S2_3b3));
- Real S2_3b2 = (Cob - S2_3Gamma1*(Cob - P2_3b1));
- Coa = S2_3b2;
- Real S2_3b1 = (Cob - P2_3b1 - S2_3Gamma1*(Cob - P2_3b1));
- Real Roa = S2_3b1;
- return Roa;
+ //a = (v + R*i)/2
+ Real I3_3a1 = 0.5*(b1 - I3_3Gamma1*Ckb/CkR);
+ Cka = I3_3a1;
+
+ Real S1_3a2 = -b2;
+ Real S0_3a1 = -0.5*ViE - S0_3b3;
+ Cia = S0_3a1;
+
+ Real P2_3a1 = 0.5*(E250E + b3);
+ Real S2_3a2 = -0.5*(E250E + S2_3b3);
+ Coa = S2_3a2;
+
+ Real S2_3a1 = 0.5*(-E250E - S2_3Gamma1*Cob/CoR);
+ Real Roa = S2_3a1/E250E;
+ printf("K=%f G=%f P=%f out=%f\n", I3_3b3,-S1_3b3,P2_3b3, Roa);
+ return -Roa;
}
private:
@@ -110,6 +124,9 @@ private:
Real Coa;
//R values
+ Real CiR;
+ Real CkR;
+ Real CoR;
Real I3_3Gamma1;
Real E250E;
Real ViE;