diff options
author | Damien Zammit <damien@zamaudio.com> | 2019-01-01 13:40:42 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2019-01-01 18:06:00 +1100 |
commit | bc07dcc8e892f14462407e85843b5dc30fe13032 (patch) | |
tree | b1caa98d4802b935f632338d476094f8c4ba91c5 | |
parent | d34c40c614ffa5db1a2a7d275b627dbf476b9c85 (diff) |
Trying to follow equations
-rw-r--r-- | plugins/ZamTube/ZamTubePlugin.cpp | 4 | ||||
-rw-r--r-- | plugins/ZamTube/ZamTubeUI.cpp | 2 | ||||
-rw-r--r-- | plugins/ZamTube/wdfcircuits.h | 67 |
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; |