commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 04/06: digital: pfb_clock_sync_ccf tag offs


From: git
Subject: [Commit-gnuradio] [gnuradio] 04/06: digital: pfb_clock_sync_ccf tag offset update.
Date: Wed, 15 Jun 2016 04:11:15 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch packet3
in repository gnuradio.

commit c475f14e4604b9bca25c08f1d30a2e8ff9bbcf26
Author: Tom Rondeau <address@hidden>
Date:   Tue Jun 14 10:37:46 2016 -0700

    digital: pfb_clock_sync_ccf tag offset update.
    
    This seems to work correctly regardless of the sps.
---
 gr-digital/lib/pfb_clock_sync_ccf_impl.cc | 32 ++++++++++++++++++++++++++-----
 gr-digital/lib/pfb_clock_sync_ccf_impl.h  |  2 ++
 2 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/gr-digital/lib/pfb_clock_sync_ccf_impl.cc 
b/gr-digital/lib/pfb_clock_sync_ccf_impl.cc
index 314ff94..6ac39fb 100644
--- a/gr-digital/lib/pfb_clock_sync_ccf_impl.cc
+++ b/gr-digital/lib/pfb_clock_sync_ccf_impl.cc
@@ -72,7 +72,8 @@ namespace gr {
         throw std::runtime_error("pfb_clock_sync_ccf: please specify a 
filter.\n");
 
       // Let scheduler adjust our relative_rate.
-      enable_update_rate(true);
+      //enable_update_rate(true);
+      set_tag_propagation_policy(TPP_DONT);
 
       d_nfilters = filter_size;
       d_sps = floor(sps);
@@ -108,6 +109,10 @@ namespace gr {
       set_taps(taps, d_taps, d_filters);
       set_taps(dtaps, d_dtaps, d_diff_filters);
 
+      d_old_in = 0;
+      d_new_in = 0;
+      d_last_out = 0;
+
       set_relative_rate((float)d_osps/(float)d_sps);
     }
 
@@ -420,8 +425,8 @@ namespace gr {
       }
 
       std::vector<tag_t> tags;
-      get_tags_in_range(tags, 0, nitems_read(0),
-                        nitems_read(0)+d_sps*noutput_items,
+      get_tags_in_window(tags, 0, 0,
+                        d_sps*noutput_items,
                         pmt::intern("time_est"));
 
       int i = 0, count = 0;
@@ -433,7 +438,8 @@ namespace gr {
           size_t offset = tags[0].offset-nitems_read(0);
           if((offset >= (size_t)count) && (offset < (size_t)(count + d_sps))) {
             float center = (float)pmt::to_double(tags[0].value);
-            d_k = (offset-count - d_sps/2.0) * d_nfilters + 
(M_PI*center*d_nfilters);
+            d_k = d_nfilters*(center + (offset - count));
+
             tags.erase(tags.begin());
           }
         }
@@ -458,7 +464,23 @@ namespace gr {
 
          out[i+d_out_idx] = d_filters[d_filtnum]->filter(&in[count+d_out_idx]);
          d_k = d_k + d_rate_i + d_rate_f; // update phase
-         d_out_idx++;
+
+
+          // Manage Tags
+          std::vector<tag_t> xtags;
+          std::vector<tag_t>::iterator itags;
+          d_new_in = nitems_read(0) + count + d_out_idx + d_sps;
+          get_tags_in_range(xtags, 0, d_old_in, d_new_in);
+          for(itags = xtags.begin(); itags != xtags.end(); itags++) {
+            tag_t new_tag = *itags;
+            //new_tag.offset = d_last_out + d_taps_per_filter/(2*d_sps) - 2;
+            new_tag.offset = d_last_out + d_taps_per_filter/4 - 2;
+            add_item_tag(0, new_tag);
+          }
+          d_old_in = d_new_in;
+          d_last_out = nitems_written(0) + i + d_out_idx;
+
+          d_out_idx++;
 
          if(output_items.size() == 4) {
            err[i] = d_error;
diff --git a/gr-digital/lib/pfb_clock_sync_ccf_impl.h 
b/gr-digital/lib/pfb_clock_sync_ccf_impl.h
index 5356281..b23b8fe 100644
--- a/gr-digital/lib/pfb_clock_sync_ccf_impl.h
+++ b/gr-digital/lib/pfb_clock_sync_ccf_impl.h
@@ -59,6 +59,8 @@ namespace gr {
       float d_error;
       int   d_out_idx;
 
+      uint64_t d_old_in, d_new_in, d_last_out;
+
       void create_diff_taps(const std::vector<float> &newtaps,
                            std::vector<float> &difftaps);
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]