]> git.gag.com Git - debian/gnuradio/blobdiff - gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.cc
Fixing up filters a bit to pass QA tests for all versions.
[debian/gnuradio] / gnuradio-core / src / lib / filter / gri_fir_filter_with_buffer_ccf.cc
index 55e316d027d6b6e83b801135e2e5aa863e6c61d2..b2db8ce0a73bd071820a882cdf8ee1942ab2db25 100644 (file)
@@ -38,7 +38,24 @@ gri_fir_filter_with_buffer_ccf::~gri_fir_filter_with_buffer_ccf()
     free(d_buffer);
 }
 
-gr_complex 
+void
+gri_fir_filter_with_buffer_ccf::set_taps (const std::vector<float> &taps)
+{
+  d_taps = gr_reverse(taps);
+  
+  if(d_buffer != NULL) {
+    free(d_buffer);
+    d_buffer = NULL;
+  }
+  
+  // FIXME: memalign this to 16-byte boundaries for SIMD later
+  size_t t = sizeof(gr_complex) * 2 * d_taps.size();
+  d_buffer = (gr_complex*)malloc(t);
+  memset(d_buffer, 0x00, t);
+  d_idx = 0;
+}
+
+gr_complex
 gri_fir_filter_with_buffer_ccf::filter (gr_complex input)
 {
   unsigned int i;
@@ -53,17 +70,17 @@ gri_fir_filter_with_buffer_ccf::filter (gr_complex input)
   if(d_idx >= ntaps())
     d_idx = 0;
 
-  gr_complex out = gr_complex(0,0);
+  gr_complex out = 0;
   for(i = 0; i < ntaps(); i++) {
-    out += d_buffer[d_idx + i]*d_taps[i];
+    out +=  d_buffer[d_idx + i] * d_taps[i];
   }
-  return out;
+  return (gr_complex)out;
 }
 
 void
 gri_fir_filter_with_buffer_ccf::filterN (gr_complex output[],
-                                        const gr_complex input[],
-                                        unsigned long n)
+                const gr_complex input[],
+                unsigned long n)
 {
   for(unsigned long i = 0; i < n; i++) {
     output[i] = filter(input[i]);