diff options
author | Jean-Marc Valin <jmvalin@amazon.com> | 2023-11-25 02:02:35 +0300 |
---|---|---|
committer | Jean-Marc Valin <jmvalin@amazon.com> | 2023-11-25 02:02:35 +0300 |
commit | ddbdbec444b07fc223ecad73e5c2467c2846aec9 (patch) | |
tree | 00cee935ca66ada5ddcefd9487e6d17f0822e96b | |
parent | 176507e4fcb4c6376af5ec465f23692ce84495fd (diff) |
Optimize biquad() to reduce dependency chains
-rw-r--r-- | dnn/lpcnet_enc.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/dnn/lpcnet_enc.c b/dnn/lpcnet_enc.c index e9178b55..12908365 100644 --- a/dnn/lpcnet_enc.c +++ b/dnn/lpcnet_enc.c @@ -83,14 +83,25 @@ static void frame_analysis(LPCNetEncState *st, kiss_fft_cpx *X, float *Ex, const static void biquad(float *y, float mem[2], const float *x, const float *b, const float *a, int N) { int i; + float mem0, mem1; + mem0 = mem[0]; + mem1 = mem[1]; for (i=0;i<N;i++) { - float xi, yi; + float xi, yi, mem00; xi = x[i]; - yi = x[i] + mem[0]; - mem[0] = mem[1] + (b[0]*xi - a[0]*yi); - mem[1] = (b[1]*xi - a[1]*yi); + yi = x[i] + mem0; + mem00 = mem0; + /* Original code: + mem0 = mem1 + (b[0]*xi - a[0]*yi); + mem1 = (b[1]*xi - a[1]*yi); + Modified to reduce dependency chains: + */ + mem0 = (b[0]-a[0])*xi + mem1 - a[0]*mem0; + mem1 = (b[1]-a[1])*xi + 1e-30f - a[1]*mem00; y[i] = yi; } + mem[0] = mem0; + mem[1] = mem1; } #define celt_log10(x) (0.3010299957f*celt_log2(x)) |