shithub: opus

Download patch

ref: 3883f3d372f08562958845bb93ca7e4ef22d80a2
parent: a11e68dd74c5188b88345470779ea44bf61d6de6
author: Jean-Marc Valin <jmvalin@amazon.com>
date: Sat Feb 19 13:03:22 EST 2022

Synchronizing DC removal for noncausal PLC

--- a/dnn/lpcnet_plc.c
+++ b/dnn/lpcnet_plc.c
@@ -292,9 +292,9 @@
   RNN_COPY(st->pcm, pcm_save, FRAME_SIZE);
   st->loss_count = 0;
   if (st->remove_dc) {
-    for (i=0;i<FRAME_SIZE;i++) {
-      pcm[i] += lp[i];
-    }
+    for (i=0;i<TRAINING_OFFSET;i++) pcm[i] += st->dc_buf[i];
+    for (;i<FRAME_SIZE;i++) pcm[i] += lp[i-TRAINING_OFFSET];
+    for (i=0;i<TRAINING_OFFSET;i++) st->dc_buf[i] = lp[FRAME_SIZE-TRAINING_OFFSET+i];
   }
   return 0;
 }
@@ -329,9 +329,10 @@
   RNN_COPY(st->pcm, &pcm[TRAINING_OFFSET], FRAME_SIZE-TRAINING_OFFSET);
 
   if (st->remove_dc) {
-    for (i=0;i<FRAME_SIZE;i++) {
-      pcm[i] += (int)floor(.5 + st->dc_mem);
-    }
+    int dc = (int)floor(.5 + st->dc_mem);
+    for (i=0;i<TRAINING_OFFSET;i++) pcm[i] += st->dc_buf[i];
+    for (;i<FRAME_SIZE;i++) pcm[i] += dc;
+    for (i=0;i<TRAINING_OFFSET;i++) st->dc_buf[i] = dc;
   }
   st->loss_count++;
   return 0;
--- a/dnn/lpcnet_private.h
+++ b/dnn/lpcnet_private.h
@@ -82,6 +82,7 @@
   double dc_mem;
   int remove_dc;
 
+  short dc_buf[TRAINING_OFFSET];
   int queued_update;
   short queued_samples[FRAME_SIZE];
 };
--