commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 01/08: Replacing center of mass interpolati


From: git
Subject: [Commit-gnuradio] [gnuradio] 01/08: Replacing center of mass interpolation for the time_est tag with parabolic interpolation. It should be more accurate although still is a biased estimate of the time delay
Date: Wed, 5 Aug 2015 20:50:46 +0000 (UTC)

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

jcorgan pushed a commit to branch master
in repository gnuradio.

commit 8d336d2346c4933a124101af36ed88fc0f0ca58d
Author: Paul Garver <address@hidden>
Date:   Tue Jul 21 17:41:02 2015 -0400

    Replacing center of mass interpolation for the time_est tag with parabolic 
interpolation. It should be more accurate although still is a biased estimate 
of the time delay
---
 gr-digital/lib/corr_est_cc_impl.cc | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/gr-digital/lib/corr_est_cc_impl.cc 
b/gr-digital/lib/corr_est_cc_impl.cc
index 66645f6..772fc78 100644
--- a/gr-digital/lib/corr_est_cc_impl.cc
+++ b/gr-digital/lib/corr_est_cc_impl.cc
@@ -262,17 +262,18 @@ namespace gr {
         add_item_tag(0, nitems_written(0) + i, pmt::intern("corr_start"),
                      pmt::from_double(d_corr_mag[i]), d_src_id);
 
-        // Peak detector using a "center of mass" approach center
-        // holds the +/- fraction of a sample index from the found
-        // peak index to the estimated actual peak index.
+        // Use Parabolic interpolation to estimate a fractional
+        // sample delay. There are more accurate methods as 
+        // the sample delay estimate using this method is biased.
+        // But this method is simple and fast.
+        // center between [-0.5,0.5] units of samples
+        // Paper Reference: "Discrete Time Techniques for Time Delay
+        // Estimation" G. Jacovitti and G. Scarano
         double center = 0.0;
-        if (i > 0 && i < (noutput_items - 1)) {
-          double nom = 0, den = 0;
-          for(int s = 0; s < 3; s++) {
-            nom += (s+1)*d_corr_mag[i+s-1];
-            den += d_corr_mag[i+s-1];
-          }
-          center = nom / den - 2.0;
+        if( i > 0 && i < (noutput_items - 1 )){
+          double nom = d_corr_mag[i-1]-d_corr_mag[i+1];
+          double denom = 2*(d_corr_mag[i-1]-2*d_corr_mag[i]+d_corr_mag[i+1]);
+          center = nom/denom;
         }
 
         // Calculate the phase offset of the incoming signal.



reply via email to

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