Adding ability for FIR filter with internal buffer to decimate.
[debian/gnuradio] / gnuradio-core / src / lib / filter / gri_fir_filter_with_buffer_XXX.cc.t
index c0d061c81773c51c9c3314aa6fde5cbc91c28aa6..1540688403c555c11cd4cf389dbfe5ff909eeaa7 100644 (file)
@@ -77,6 +77,26 @@ void
   return (@O_TYPE@)out;
 }
 
+@O_TYPE@
+@NAME@::filter (const @I_TYPE@ input[], unsigned long dec)
+{
+  unsigned int i;
+
+  for(i = 0; i < dec; i++) {
+    d_buffer[d_idx] = input[i];
+    d_buffer[d_idx+ntaps()] = input[i];
+    d_idx++;
+    if(d_idx >= ntaps())
+      d_idx = 0;
+  }
+
+  @ACC_TYPE@ out = 0;
+  for(i = 0; i < ntaps(); i++) {
+    out += @INPUT_CAST@ d_buffer[d_idx + i] * d_taps[i];
+  }
+  return (@O_TYPE@)out;
+}
+
 void
 @NAME@::filterN (@O_TYPE@ output[],
                 const @I_TYPE@ input[],
@@ -86,3 +106,16 @@ void
     output[i] = filter(input[i]);
   }
 }
+
+void
+@NAME@::filterNdec (@O_TYPE@ output[],
+                   const @I_TYPE@ input[],
+                   unsigned long n,
+                   unsigned long decimate)
+{
+  unsigned long j = 0;
+  for(unsigned long i = 0; i < n; i++) {
+    output[i] = filter(&input[j], decimate);
+    j += decimate;
+  }
+}