summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2020-12-04 11:17:35 +1100
committerDamien Zammit <damien@zamaudio.com>2020-12-04 11:17:35 +1100
commit5881ab339cede18b53480d633e9d94bd17ac8f37 (patch)
tree1443d6fe5cce342c171165327b711ceb0272fb32
parente8058b60888280fd4aab47baaec48cdf3a36fb6e (diff)
ZamTube: Optimise Newton-Raphson initial guess and lower the epsilon threshold
DSP load goes down about 3-4%
-rw-r--r--plugins/ZamTube/triode.cpp5
-rw-r--r--plugins/ZamTube/triode.h2
2 files changed, 4 insertions, 3 deletions
diff --git a/plugins/ZamTube/triode.cpp b/plugins/ZamTube/triode.cpp
index ac5ff6e..a1f9af2 100644
--- a/plugins/ZamTube/triode.cpp
+++ b/plugins/ZamTube/triode.cpp
@@ -6,18 +6,19 @@ using std::abs;
#define DUMP(x) x
T Triode::compute(T a, T R, T Vg, T Vk) {
- T VakGuess = 100.;
T Vgk = Vg - Vk;
+ T VakGuess = -mu * Vgk;
T Vak = VakGuess;
int iteration = 0;
T err = 1e6;
+ T b;
for (iteration = 0; (fabs(err)/fabs(Vak) > EPSILON) && (iteration <= ITER); iteration++){
VakGuess = iterateNewtonRaphson(Vak, TOLERANCE, Vgk, a, R);
err = Vak - VakGuess;
Vak = VakGuess;
}
- T b = Vak - R*getIa(Vgk, Vak);
+ b = Vak - R*getIa(Vgk, Vak);
//printf("Vgate=%f Vk=%f Vgk=%f b=%f\n", Vgate, Vk, Vgk, b);
return b;
diff --git a/plugins/ZamTube/triode.h b/plugins/ZamTube/triode.h
index 2f678a0..9db4d8f 100644
--- a/plugins/ZamTube/triode.h
+++ b/plugins/ZamTube/triode.h
@@ -21,7 +21,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <math.h>
-#define EPSILON 1e-9
+#define EPSILON 1e-8
#define ITER 50
#define TOLERANCE 1e-6