Fixed filter delay offset pointers in atsc_equalizer
authorcswiger <cswiger@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 27 Apr 2007 17:36:29 +0000 (17:36 +0000)
committercswiger <cswiger@221aa14e-8319-0410-a670-987f0aec2ac5>
Fri, 27 Apr 2007 17:36:29 +0000 (17:36 +0000)
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@5155 221aa14e-8319-0410-a670-987f0aec2ac5

gr-atsc/src/lib/atsc_equalizer.cc
gr-atsc/src/lib/atsc_equalizer.h

index f5ad6d0d8fa659b61e043f68d9af0fc114ba21d8..145ba836e2933dcc77205bdf1444f8ad434590a0 100644 (file)
@@ -59,17 +59,16 @@ atsc_equalizer::forecast (int noutput_items, gr_vector_int &ninput_items_require
 {
 
   int ntaps = d_equalizer->ntaps ();
-  int npretaps = d_equalizer->npretaps ();
-
-  assert (ntaps >= 1);
-  assert (npretaps >= 0 && npretaps < ntaps);
 
   unsigned ninputs = ninput_items_required.size();
   for (unsigned i = 0; i < ninputs; i++)
-    ninput_items_required[i] = fixed_rate_noutput_to_ninput (noutput_items);
+    ninput_items_required[i] = fixed_rate_noutput_to_ninput (noutput_items + ntaps);
+
+
 }
 
 
+
 int
 atsc_equalizer::work (int noutput_items,
                       gr_vector_const_void_star &input_items,
@@ -82,16 +81,25 @@ atsc_equalizer::work (int noutput_items,
 
   assert(sizeof(float) == sizeof(atsc::syminfo));
 
+  int ntaps = d_equalizer->ntaps ();
+  int npretaps = d_equalizer->npretaps ();
+
+  assert (ntaps >= 1);
+  assert (npretaps >= 0 && npretaps < ntaps);
+
+  int offset = ntaps - npretaps - 1;
+  assert (offset >= 0 && offset < ntaps);
+
 
   // peform the actual equalization
 
-  d_equalizer->filter (in, in_tags,
+  d_equalizer->filter (in, in_tags + offset,
                        out, noutput_items);
 
   // write the output tags
 
   for (int i = 0; i < noutput_items; i++)
-    out_tags[i] = in_tags[i];
+    out_tags[i] = in_tags[i + offset];
 
   return noutput_items;
 }
index 769902bff8c760ae62cb3fed1b9378b838010f76..1c2ac7e7d0d440884624d0bebde838a67c36c8ee 100644 (file)
@@ -45,6 +45,7 @@ class atsc_equalizer : public gr_sync_block
 
 public:
   void forecast (int noutput_items, gr_vector_int &ninput_items_required);
+
   int work (int noutput_items,
            gr_vector_const_void_star &input_items,
            gr_vector_void_star &output_items);