summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2018-08-19 13:33:14 +1000
committerDamien Zammit <damien@zamaudio.com>2018-08-19 13:33:14 +1000
commit04e087a278b94f89dd5b8674ebedd0bf4f9fba23 (patch)
treeb369899dfdca5d19dea8702184b37375ce9f8751
parent3d1beb1e43067475daad8a9fbd10a3f55c63d494 (diff)
ZamTube: Remove _exp and _log redundant approximations, factor out some coeffs
-rw-r--r--plugins/ZamTube/triode.cpp23
1 files changed, 3 insertions, 20 deletions
diff --git a/plugins/ZamTube/triode.cpp b/plugins/ZamTube/triode.cpp
index e138f45..045be35 100644
--- a/plugins/ZamTube/triode.cpp
+++ b/plugins/ZamTube/triode.cpp
@@ -59,23 +59,6 @@ void Triode::compute(T Pbb, T Gbb, T Kbb)
//printf("vg = %f vp = %f vk = %f Gb = %f Kb = %f Pb = %f\n", vg, vp, vk, Gb, Kb, Pb);
}
-inline T _exp(const T x)
-{
- if(x > -10.0 && x < 10.0)
- return 1.0 + x + x*x/2.0 + x*x*x/6.0 + x*x*x*x/24.0 + x*x*x*x*x/120.0
- + x*x*x*x*x*x/720.0 + x*x*x*x*x*x*x/5040.0;
- else
- return exp(x);
-}
-
-inline T _log(const T x)
-{
- if(x > 10)
- return log(x);
- const T a=(x-1)/(x+1);
- return 2.0*(a+a*a*a/3.0+a*a*a*a*a/5.0+a*a*a*a*a*a*a/7.0+a*a*a*a*a*a*a*a*a/9.0);
-}
-
T Triode::ffg(T VG) {
return (Gb-Gr*(gg*pow(log(1.0+exp(cg*VG))/cg,e)+ig0)-VG);
}
@@ -96,7 +79,7 @@ T Triode::ffp(T VP) {
const double scale = pow(L2,gamma-2)/(8.0*pow(c,gamma));
ffp_raw[0] = 8.0*L2*L2*scale;
ffp_raw[1] = gamma*c*L2*4*scale;
- ffp_raw[2] = (c*c*gamma*gamma+L2*c*c*gamma-c*c*gamma)*scale;
+ ffp_raw[2] = (c*c*gamma*scale)*(gamma+L2-1.);
prepared = true;
}
@@ -108,8 +91,8 @@ void Triode::prepare(void)
const double c0 = ffp_raw[0],
c1 = ffp_raw[1],
c2 = ffp_raw[2];
- ffp_coeff[0] = Pb + Pr*Gb/Gr + c2*Pr*vg*vg - Pr*vg/Gr + c1*Pr*vg + c0*Pr;
- ffp_coeff[1] = 2.*c2*Pr*vg/mu + c1*Pr/mu - 1.;
+ ffp_coeff[0] = Pb + Pr*(Gb/Gr + c2*vg*vg - vg/Gr + c1*vg + c0);
+ ffp_coeff[1] = (2.*c2*vg + c1)*(Pr/mu) - 1.;
ffp_coeff[2] = c2*Pr/(mu*mu);
}