Index: /experimental/components/SymbolSyncPoly/.ignore
===================================================================
--- /experimental/components/SymbolSyncPoly/.ignore	(revision 3736)
+++ /experimental/components/SymbolSyncPoly/.ignore	(revision 3786)
@@ -4,4 +4,5 @@
 autotest.cpp
 aclocal.m4
+docs
 install-sh
 missing
Index: /experimental/components/SymbolSyncPoly/src/SymbolSyncPolyDSP.h
===================================================================
--- /experimental/components/SymbolSyncPoly/src/SymbolSyncPolyDSP.h	(revision 3741)
+++ /experimental/components/SymbolSyncPoly/src/SymbolSyncPolyDSP.h	(revision 3786)
@@ -106,5 +106,5 @@
     void AdvanceTimingLoopFilter() {
         q_hat = beta*q_hat - alpha*(q_hat-q);
-        b_soft = b_soft - q_hat;
+        b_soft = b_soft - q_hat*float(Npfb);
     }
 
Index: /experimental/components/SymbolSyncPoly/autotest_sources/SymbolSyncPoly_testsuite.h
===================================================================
--- /experimental/components/SymbolSyncPoly/autotest_sources/SymbolSyncPoly_testsuite.h	(revision 3741)
+++ /experimental/components/SymbolSyncPoly/autotest_sources/SymbolSyncPoly_testsuite.h	(revision 3786)
@@ -8,4 +8,6 @@
 #include "msg_i_rrc_qpsk_N512_dT0_dF0_k4_m4_b025_Npfb32.h"
 #include "msg_q_rrc_qpsk_N512_dT0_dF0_k4_m4_b025_Npfb32.h"
+
+#include "test_02.h"
 
 //
@@ -90,20 +92,20 @@
 
     ///\Basic test case for SynchronizeAndDecimate. No symbol offsets or timing errors
-    void testBasicSynchronization()
+    void xtestBasicSynchronization()
     {
         SymbolSyncPolyDSP symbolSync;
-    	///The following input buffers and expected results are defined in header files
-	    ///float nominal_test_vector_I, nominal_test_vector_Q;
-    	///short nominal_expected_results_I, nominal_expected_results_Q;
-
-    	//float to short conversion
-    	//float max_float_value = 3;   //double check this value later if signal is noisy
-    	short max_short_value = 10000;//32767;
-    	//float tmp_float; 
-    	unsigned int N_in = 512; //This number must match with the lenght of the input buffer
+        ///The following input buffers and expected results are defined in header files
+        ///float nominal_test_vector_I, nominal_test_vector_Q;
+        ///short nominal_expected_results_I, nominal_expected_results_Q;
+
+        //float to short conversion
+        //float max_float_value = 3;   //double check this value later if signal is noisy
+        short max_short_value = 10000;//32767;
+        //float tmp_float; 
+        unsigned int N_in = 512; //This number must match with the lenght of the input buffer
         short* nominal_test_vector_I_short = new short[N_in];
         short* nominal_test_vector_Q_short = new short[N_in];
-    	for(unsigned int i =0 ; i < N_in; i++){
-	        //tmp_float = nominal_test_vector_I[i];// / max_float_value; //gives a value between 0 and 1
+        for(unsigned int i =0 ; i < N_in; i++){
+            //tmp_float = nominal_test_vector_I[i];// / max_float_value; //gives a value between 0 and 1
             nominal_test_vector_I_short[i] = (short) (nominal_test_vector_I[i] * max_short_value);
 
@@ -112,21 +114,21 @@
         }
 
-    	///Init variables shall match the values used in MATLAB to get the test vectors and
+        ///Init variables shall match the values used in MATLAB to get the test vectors and
         ///expected result
-	    char type[] = "rrcos";  ///< filter type
-    	unsigned int k = 2;		///< samples per symbol
-    	unsigned int m = 4;		///< symbol delay
-    	float beta = .25;		///< rolloff factor
-    	unsigned int Npfb = 32;	///< polyphse filter bank size
-
-    	unsigned int N_out = N_in/k + 2; //Need some buffer for mismatched samples per symbol
-    	short* systemOutputI = new short[N_out];
-    	short* systemOutputQ = new short[N_out];
-
-
-    	symbolSync.ConfigureFilterBank(type, k, m, beta, Npfb);
-
-	    //send test data
-	    symbolSync.SynchronizeAndDecimate(  nominal_test_vector_I_short,
+        char type[] = "rrcos";  ///< filter type
+        unsigned int k = 2;        ///< samples per symbol
+        unsigned int m = 4;        ///< symbol delay
+        float beta = .25;        ///< rolloff factor
+        unsigned int Npfb = 32;    ///< polyphse filter bank size
+
+        unsigned int N_out = N_in/k + 2; //Need some buffer for mismatched samples per symbol
+        short* systemOutputI = new short[N_out];
+        short* systemOutputQ = new short[N_out];
+
+
+        symbolSync.ConfigureFilterBank(type, k, m, beta, Npfb);
+
+        //send test data
+        symbolSync.SynchronizeAndDecimate(  nominal_test_vector_I_short,
                                             nominal_test_vector_Q_short,
                                             N_in,
@@ -143,10 +145,10 @@
         }
 
-	    //verify
-	    TS_ASSERT_SAME_DATA(&systemOutputI[m],
+        //verify
+        TS_ASSERT_SAME_DATA(&systemOutputI[m],
                             nominal_expected_results_I,
                             (N_out - m)*sizeof(short));
 
-	    TS_ASSERT_SAME_DATA(&systemOutputQ[m],
+        TS_ASSERT_SAME_DATA(&systemOutputQ[m],
                             nominal_expected_results_Q,
                             (N_out - m)*sizeof(short));
@@ -158,4 +160,52 @@
     }
 
+
+    // test_02
+    void testSymbolSynchronizationTimingOffset()
+    {
+        std::cout << std::endl << "testSymbolSynchronizationTimingOffset" << std::endl;
+        SymbolSyncPolyDSP symbolSync;
+
+        // Init variables shall match the values used in MATLAB to get the test vectors and
+        // expected result
+        unsigned int Npfb_02 = 32;
+        unsigned int N_out_02 = N_in_02;
+
+        //Need some buffer for mismatched samples per symbol
+        short* I_out_02 = new short[N_out_02];
+        short* Q_out_02 = new short[N_out_02];
+        memset( I_out_02, 0, N_out_02*sizeof(short) );
+        memset( Q_out_02, 0, N_out_02*sizeof(short) );
+
+        symbolSync.ConfigureFilterBank(type_02, k_02, m_02, beta_02, Npfb_02);
+
+        //send test data
+        symbolSync.SynchronizeAndDecimate(
+            I_in_02,
+            Q_in_02,
+            N_in_02,
+            I_out_02,
+            Q_out_02,
+            N_out_02);
+
+        //hard decision to see if we recovered the message correctly
+        unsigned int num_correct_symbols(0);
+        short t_min = short(Ac_02 / sqrtf(2) * 0.5);      // minimum threshold
+        short t_max = short(Ac_02 / sqrtf(2) * 1.5);    // maximum threshold
+        for(unsigned int i = 0; i<N_out_02; i++){
+            if ( abs(I_out_02[i])>t_min && abs(I_out_02[i])<t_max &&
+                 abs(Q_out_02[i])>t_min && abs(Q_out_02[i])<t_max )
+                num_correct_symbols++;
+            //std::cout << "  " << I_out_02[i] << "  " << Q_out_02[i] << std::endl;
+        }
+
+        std::cout << "num_correct_symbols : " << num_correct_symbols << std::endl;
+
+        TS_ASSERT(num_correct_symbols > 150);
+
+        delete [] I_out_02;
+        delete [] Q_out_02;
+    }
+
 };
 
Index: /experimental/components/SymbolSyncPoly/autotest_sources/test_02.h
===================================================================
--- /experimental/components/SymbolSyncPoly/autotest_sources/test_02.h	(revision 3786)
+++ /experimental/components/SymbolSyncPoly/autotest_sources/test_02.h	(revision 3786)
@@ -0,0 +1,125 @@
+/*
+ * SymbolSyncPoly test_02.h
+ * 
+ * These data are intended to be used to test timing synchronization of
+ * the symbol synchronizer based on a polyphase filter bank.  The data
+ * include an initial sample timing offset for which the synchronizer
+ * must correct.
+ */
+
+unsigned int N_in_02 = 512;     // Input length
+float dT_02 = 0.25f;            // Symbol timing offset (relative to symbol period)
+char type_02[] = "rrcos";       // Pulse shape
+unsigned int k_02 = 2;          // Samples per symbol
+unsigned int m_02 = 4;          // Symbol delay
+float beta_02 = 0.25;           // Excess bandwidth factor
+short Ac_02 = 10000;            // Signal amplitude
+
+short I_in_02[512] = {
+    6231, 7849, 6582, 7222, 9004, 4664, -4896, -9031, -6255, -7084,
+    -9618, -4273, 6445, 6445, -4273, -9759, -6480, -6340, -10362, -4188,
+    7776, 5527, -6480, -6480, 5527, 7776, -4188, -10222, -6944, -6395,
+    -8428, -4911, 3031, 9894, 10396, 2942, -6531, -5842, 4133, 9618,
+    7084, 6395, 8428, 4911, -3031, -9754, -11000, -2857, 7861, 4923,
+    -6339, -6339, 4923, 7721, -2254, -11225, -10481, -2198, 5786, 5927,
+    -2802, -10536, -9291, -3116, 3580, 9205, 9205, 3580, -3116, -9291,
+    -10536, -2802, 5927, 5786, -2198, -10481, -11225, -2254, 7721, 4923,
+    -6339, -6480, 5527, 7776, -4188, -10362, -6340, -6480, -9759, -4133,
+    5842, 6531, -2942, -10536, -9291, -3116, 3580, 9065, 9809, 3635,
+    -5051, -8287, -6999, -6859, -8891, -4966, 4966, 8891, 6859, 6859,
+    8891, 4825, -4362, -8976, -8189, -6081, -6081, -8189, -8976, -4362,
+    4825, 9031, 6255, 6944, 10222, 4048, -7172, -5612, 5149, 7258,
+    -2717, -11140, -9150, -3116, 3580, 9205, 9205, 3720, -3720, -9065,
+    -9809, -3635, 5051, 8428, 6395, 6944, 10222, 4188, -7776, -5668,
+    7084, 6254, -6254, -6943, 5064, 7721, -2254, -11225, -10481, -2339,
+    6390, 5842, -4133, -9759, -6480, -6480, -9759, -4273, 6445, 6305,
+    -3670, -9844, -7811, -5562, -7552, -7412, -6166, -7726, -8513, -4307,
+    2891, 9754, 11000, 2717, -7258, -5149, 5612, 7032, -3444, -10307,
+    -8275, -5477, -6221, -8189, -8976, -4362, 4825, 8891, 6859, 6999,
+    8287, 4911, -3031, -9894, -10396, -2942, 6531, 5701, -3529, -9844,
+    -7811, -5703, -6948, -7637, -6893, -6893, -7637, -6808, -6306, -7586,
+    -9117, -4362, 4825, 9031, 6255, 6944, 10222, 4048, -7172, -5612,
+    5149, 7258, -2717, -11140, -9150, -3116, 3580, 9205, 9205, 3580,
+    -3116, -9291, -10536, -2802, 5927, 5927, -2802, -10536, -9291, -2976,
+    2976, 9291, 10536, 2942, -6531, -5701, 3529, 9703, 8415, 5477,
+    6221, 8330, 8372, 4307, -2891, -9754, -11000, -2857, 7861, 4923,
+    -6339, -6480, 5527, 7636, -3584, -10307, -8275, -5617, -5617, -8415,
+    -9703, -3670, 6305, 6445, -4273, -9759, -6480, -6480, -9759, -4133,
+    5842, 6390, -2339, -10621, -10621, -2198, 5786, 5786, -2198, -10621,
+    -10621, -2339, 6390, 5701, -3529, -9844, -7811, -5562, -7552, -7412,
+    -6166, -7726, -8513, -4307, 2891, 9894, 10396, 2802, -5927, -5786,
+    2198, 10621, 10621, 2339, -6390, -5701, 3529, 9703, 8415, 5477,
+    6221, 8189, 8976, 4222, -4222, -9117, -7586, -6306, -6808, -7497,
+    -7497, -6808, -6306, -7726, -8513, -4307, 2891, 9894, 10396, 2802,
+    -5927, -5786, 2198, 10481, 11225, 2113, -7117, -5149, 5612, 7172,
+    -4048, -10222, -6944, -6395, -8428, -4911, 3031, 9754, 11000, 2717,
+    -7258, -5149, 5612, 7172, -4048, -10222, -6944, -6395, -8428, -5051,
+    3635, 9669, 9669, 3635, -5051, -8428, -6395, -7084, -9618, -4273,
+    6445, 6445, -4273, -9759, -6480, -6340, -10362, -4048, 7172, 5612,
+    -5149, -7258, 2717, 11000, 9754, 2891, -4307, -8513, -7726, -6166,
+    -7412, -7552, -5562, -7671, -10447, -3444, 7032, 5753, -5753, -7172,
+    4048, 10362, 6340, 6340, 10362, 4048, -7172, -5612, 5149, 7258,
+    -2717, -11140, -9150, -2976, 2976, 9150, 11140, 2857, -7861, -5064,
+    6943, 6395, -6858, -6998, 6998, 6998, -6998, -6998, 6998, 6858,
+    -6395, -6943, 5064, 7861, -2857, -11140, -9150, -2976, 2976, 9291,
+    10536, 2802, -5927, -5786, 2198, 10481, 11225, 2254, -7721, -4923,
+    6339, 6339, -4923, -7861, 2857, 11000, 9754, 3031, -4911, -8287,
+    -6999, -6859, -8891, -4966, 4966, 8891, 6859, 6859, 8891, 4966,
+    -4966, -8891, -6859, -6859, -8891, -4825, 4362, 9117, 7586, 6166,
+    7412, 7412, 6166, 7586, 9117, 4292, -4524, -9004, -7222, -6582,
+    -7849, -6231};
+
+short Q_in_02[512] = {
+    7107, 5349, -2615, -10258, -10509, -2641, 6460, 5842, -4133, -9759,
+    -6480, -6480, -9759, -4273, 6445, 6445, -4273, -9618, -7084, -6395,
+    -8428, -4911, 3031, 9754, 11000, 2857, -7861, -4923, 6339, 6339,
+    -4923, -7721, 2254, 11225, 10481, 2198, -5786, -5786, 2198, 10621,
+    10621, 2339, -6390, -5842, 4133, 9759, 6480, 6340, 10362, 4048,
+    -7172, -5753, 5753, 7172, -4048, -10222, -6944, -6255, -9031, -4966,
+    4966, 9031, 6255, 7084, 9618, 4273, -6445, -6445, 4273, 9759,
+    6480, 6340, 10362, 4188, -7776, -5527, 6480, 6480, -5527, -7776,
+    4188, 10222, 6944, 6255, 9031, 4966, -4966, -8891, -6859, -6999,
+    -8287, -5051, 3635, 9669, 9669, 3635, -5051, -8287, -6999, -6859,
+    -8891, -4966, 4966, 8891, 6859, 6999, 8287, 4911, -3031, -9894,
+    -10396, -2942, 6531, 5842, -4133, -9759, -6480, -6340, -10362, -4188,
+    7776, 5668, -7084, -6254, 6254, 7084, -5668, -7776, 4188, 10362,
+    6340, 6480, 9759, 4273, -6445, -6445, 4273, 9618, 7084, 6255,
+    9031, 4825, -4362, -8976, -8189, -6221, -5477, -8275, -10307, -3584,
+    7636, 5668, -7084, -6254, 6254, 7084, -5668, -7636, 3584, 10447,
+    7671, 5703, 6948, 7637, 6893, 7033, 7033, 7033, 7033, 7033,
+    7033, 7033, 7033, 6893, 7637, 6948, 5703, 7811, 9844, 3529,
+    -5701, -6390, 2339, 10621, 10621, 2198, -5786, -5927, 2802, 10396,
+    9894, 3031, -4911, -8428, -6395, -6944, -10222, -4188, 7776, 5668,
+    -7084, -6254, 6254, 7084, -5668, -7636, 3584, 10307, 8275, 5617,
+    5617, 8275, 10307, 3444, -7032, -5753, 5753, 7032, -3444, -10307,
+    -8275, -5477, -6221, -8330, -8372, -4307, 2891, 9754, 11000, 2857,
+    -7861, -5064, 6943, 6254, -6254, -7084, 5668, 7636, -3584, -10307,
+    -8275, -5617, -5617, -8415, -9703, -3670, 6305, 6445, -4273, -9759,
+    -6480, -6480, -9759, -4133, 5842, 6390, -2339, -10621, -10621, -2339,
+    6390, 5701, -3529, -9703, -8415, -5617, -5617, -8415, -9703, -3529,
+    5701, 6531, -2942, -10536, -9291, -3116, 3580, 9205, 9205, 3720,
+    -3720, -9065, -9809, -3495, 4447, 8372, 8330, 6221, 5477, 8415,
+    9703, 3670, -6305, -6305, 3670, 9703, 8415, 5617, 5617, 8275,
+    10307, 3584, -7636, -5527, 6480, 6480, -5527, -7776, 4188, 10222,
+    6944, 6255, 9031, 4825, -4362, -9117, -7586, -6306, -6808, -7637,
+    -6893, -7033, -7033, -7033, -7033, -7033, -7033, -6893, -7637, -6948,
+    -5703, -7671, -10447, -3444, 7032, 5612, -5149, -7117, 2113, 11225,
+    10481, 2339, -6390, -5701, 3529, 9703, 8415, 5477, 6221, 8189,
+    8976, 4222, -4222, -9117, -7586, -6166, -7412, -7412, -6166, -7586,
+    -9117, -4222, 4222, 8976, 8189, 6221, 5477, 8415, 9703, 3670,
+    -6305, -6445, 4273, 9618, 7084, 6255, 9031, 4825, -4362, -9117,
+    -7586, -6306, -6808, -7637, -6893, -7033, -7033, -6893, -7637, -6948,
+    -5703, -7671, -10447, -3584, 7636, 5668, -7084, -6395, 6858, 6998,
+    -6998, -6998, 6998, 6998, -6998, -6858, 6395, 6943, -5064, -7861,
+    2857, 11140, 9150, 3116, -3580, -9065, -9809, -3635, 5051, 8428,
+    6395, 7084, 9618, 4133, -5842, -6390, 2339, 10621, 10621, 2198,
+    -5786, -5927, 2802, 10536, 9291, 3116, -3580, -9065, -9809, -3635,
+    5051, 8428, 6395, 7084, 9618, 4133, -5842, -6531, 2942, 10536,
+    9291, 2976, -2976, -9150, -11140, -2717, 7258, 5149, -5612, -7032,
+    3444, 10447, 7671, 5703, 6948, 7497, 7497, 6808, 6306, 7586,
+    9117, 4362, -4825, -8891, -6859, -6999, -8287, -5051, 3635, 9669,
+    9669, 3635, -5051, -8287, -6999, -6859, -8891, -4966, 4966, 8891,
+    6859, 6859, 8891, 4966, -4966, -8891, -6859, -6999, -8287, -4911,
+    3031, 9894, 10396, 2802, -5927, -5857, 2500, 10509, 10258, 2615,
+    -5349, -7107};
+
