From 226880f4ae6b60aab3fd5a22f4b74af5aa6c1f05 Mon Sep 17 00:00:00 2001 From: Ivan COHEN Date: Thu, 5 Jul 2018 14:36:36 +0200 Subject: [PATCH] Optimized a little VCF algorithm --- src/VCF.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/VCF.cpp b/src/VCF.cpp index 754aa0e..d01d61f 100644 --- a/src/VCF.cpp +++ b/src/VCF.cpp @@ -41,10 +41,12 @@ struct LadderFilter { const float t4 = g * clip(state[3]); // update last LP1 output + const float t2t3 = t2*t3; + float y3 = (s[3]*(1+t3) + s[2]*t3)*(1+t2); - y3 = (y3 + t2*t3*s[1])*(1+t1); - y3 = (y3 + t1*t2*t3*(s[0]+t0*input)); - y3 = y3 / ((1+t1)*(1+t2)*(1+t3)*(1+t4) + resonance*t0*t1*t2*t3); + y3 = (y3 + t2t3*s[1])*(1+t1); + y3 = (y3 + t1*t2t3*(s[0]+t0*input)); + y3 = y3 / ((1+t1)*(1+t2)*(1+t3)*(1+t4) + resonance*t0*t1*t2t3); // update other LP1 outputs const float xx = t0 * (input - resonance * y3); @@ -59,9 +61,12 @@ struct LadderFilter { s[3] += 2 * (y2 - t4*y3); // returns LP, HP and BP outputs + const float y1t2 = y1 / t2; + const float y2t3 = y2 / t3; + output[0] = y3; - output[1] = xx/t0 - 4*y0/t1 + 6*y1/t2 - 4*y2/t3 + y3; - output[2] = y1/t2 - 2*y2/t3 + y3; + output[1] = xx/t0 - 4*y0/t1 + 6*y1t2 - 4*y2t3 + y3; + output[2] = y1t2 - 2*y2t3 + y3; // update delay input state zi = input;