This splits the rate into a fractional an integer value, which allows the loop to...
authorTom Rondeau <trondeau@vt.edu>
Mon, 12 Oct 2009 21:55:17 +0000 (17:55 -0400)
committerTom Rondeau <trondeau@vt.edu>
Mon, 12 Oct 2009 21:55:17 +0000 (17:55 -0400)
gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.cc
gnuradio-core/src/lib/filter/gr_pfb_clock_sync_ccf.h
gnuradio-examples/grc/demod/pam_timing.grc

index 43412f25b3068d9ec4b72ec55a9604ec6304371f..433b7d6133f4c04e6991e6af34d94dd44fe68e2e 100644 (file)
@@ -68,6 +68,8 @@ gr_pfb_clock_sync_ccf::gr_pfb_clock_sync_ccf (double sps, float gain,
   set_beta(0.25*gain*gain);
   d_k = init_phase;
   d_rate = (sps-floor(sps))*(double)d_nfilters;
+  d_rate_i = (int)floor(d_rate);
+  d_rate_f = d_rate - (float)d_rate_i;
   d_filtnum = (int)floor(d_k);
 
   d_filters = std::vector<gr_fir_ccf*>(d_nfilters);
@@ -137,13 +139,23 @@ void
 gr_pfb_clock_sync_ccf::create_diff_taps(const std::vector<float> &newtaps,
                                        std::vector<float> &difftaps)
 {
+  float maxtap = 1e-20;
   difftaps.clear();
   difftaps.push_back(0); //newtaps[0]);
   for(unsigned int i = 1; i < newtaps.size()-1; i++) {
     float tap = newtaps[i+1] - newtaps[i-1];
     difftaps.push_back(tap);
+    if(tap > maxtap) {
+      maxtap = tap;
+    }
   }
   difftaps.push_back(0);//-newtaps[newtaps.size()-1]);
+
+  // Scale the differential taps; helps scale error term to better update state
+  // FIXME: should this be scaled this way or use the same gain as the taps?
+  for(unsigned int i = 0; i < difftaps.size(); i++) {
+    difftaps[i] /= maxtap;
+  }
 }
 
 void
@@ -250,18 +262,18 @@ gr_pfb_clock_sync_ccf::general_work (int noutput_items,
     error = (error_i + error_r) / 2.0;       // average error from I&Q channel
 
     // Run the control loop to update the current phase (k) and tracking rate
-    d_k = d_k + d_alpha*error + d_rate;
-    d_rate = d_rate + d_beta*error;
+    d_k = d_k + d_alpha*error + d_rate_i + d_rate_f;
+    d_rate_f = d_rate_f + d_beta*error;
     
     // Keep our rate within a good range
-    d_rate = gr_branchless_clip(d_rate, d_max_dev);
+    d_rate_f = gr_branchless_clip(d_rate_f, d_max_dev);
 
     i++;
     count += (int)floor(d_sps);
 
     if(output_items.size() > 2) {
       err[i] = error;
-      outrate[i] = d_rate;
+      outrate[i] = d_rate_f;
       outk[i] = d_k;
     }
   }
index 778db59e5b8b94ddb2f54eeb53df3b3fde5bce5e..a07192a7f34dcfeb52b4f2290601bf3bc632e705 100644 (file)
@@ -69,6 +69,8 @@ class gr_pfb_clock_sync_ccf : public gr_block
   std::vector< std::vector<float> > d_dtaps;
   float                    d_k;
   float                    d_rate;
+  float                    d_rate_i;
+  float                    d_rate_f;
   float                    d_max_dev;
   int                      d_filtnum;
   int                      d_taps_per_filter;
index 907233aca82fa2e26b299e43033e3b0d2bd6796d..4e2a2f8614dbc5bb3b1e69424b577c98eaf43b52 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Fri Oct  9 14:51:58 2009</timestamp>
+  <timestamp>Mon Oct 12 17:54:59 2009</timestamp>
   <block>
     <key>options</key>
     <param>
       <value>0</value>
     </param>
   </block>
-  <block>
-    <key>variable_slider</key>
-    <param>
-      <key>id</key>
-      <value>noise_amp</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>Channel Noise</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>num_steps</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
-    </param>
-    <param>
-      <key>converver</key>
-      <value>float_converter</value>
-    </param>
-    <param>
-      <key>grid_pos</key>
-      <value></value>
-    </param>
-    <param>
-      <key>notebook</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(168, 684)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
   <block>
     <key>variable</key>
     <param>
     </param>
   </block>
   <block>
-    <key>variable_slider</key>
+    <key>random_source_x</key>
     <param>
       <key>id</key>
-      <value>alpha</value>
+      <value>random_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>Timing Alpha</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>0</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
       <key>min</key>
     </param>
     <param>
       <key>max</key>
-      <value>10</value>
-    </param>
-    <param>
-      <key>num_steps</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
-    </param>
-    <param>
-      <key>converver</key>
-      <value>float_converter</value>
+      <value>pam_amp</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value></value>
+      <key>num_samps</key>
+      <value>10000</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value></value>
+      <key>repeat</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(552, 4)</value>
+      <value>(13, 80)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>variable_slider</key>
+    <key>random_source_x</key>
     <param>
       <key>id</key>
-      <value>beta</value>
+      <value>random_source_x_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>Timing Beta</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>value</key>
+      <key>min</key>
       <value>0</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0.0</value>
+      <key>max</key>
+      <value>pam_amp</value>
     </param>
     <param>
-      <key>max</key>
-      <value>0.1</value>
+      <key>num_samps</key>
+      <value>10000</value>
     </param>
     <param>
-      <key>num_steps</key>
-      <value>1000</value>
+      <key>repeat</key>
+      <value>True</value>
     </param>
     <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
+      <key>_coordinate</key>
+      <value>(15, 245)</value>
     </param>
     <param>
-      <key>converver</key>
-      <value>float_converter</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>const_source_x</key>
     <param>
-      <key>grid_pos</key>
-      <value></value>
+      <key>id</key>
+      <value>const_source_x_0</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>const</key>
+      <value>-0.5*(pam_amp-1)</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(668, 5)</value>
+      <value>(213, 197)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>variable</key>
+    <key>const_source_x</key>
     <param>
       <key>id</key>
-      <value>spb_gen</value>
+      <value>const_source_x_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>4</value>
+      <key>type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>const</key>
+      <value>-0.5*(pam_amp-1)</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(119, 841)</value>
+      <value>(200, 360)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>variable_slider</key>
+    <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>interpratio</value>
+      <value>wxgui_scopesink2_0_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>Timing Offset</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>value</key>
-      <value>1.00</value>
+      <key>title</key>
+      <value>Scope Plot</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0.9</value>
+      <key>samp_rate</key>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>max</key>
-      <value>1.1</value>
+      <key>v_scale</key>
+      <value>1.25</value>
     </param>
     <param>
-      <key>num_steps</key>
-      <value>1000</value>
+      <key>t_scale</key>
+      <value>0</value>
     </param>
     <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
+      <key>ac_couple</key>
+      <value>False</value>
     </param>
     <param>
-      <key>converver</key>
-      <value>float_converter</value>
+      <key>xy_mode</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>num_inputs</key>
+      <value>1</value>
     </param>
     <param>
       <key>grid_pos</key>
     </param>
     <param>
       <key>notebook</key>
-      <value></value>
+      <value>notebook_0,2</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(40, 684)</value>
+      <value>(1111, 767)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>random_source_x</key>
+    <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>random_source_x_0</value>
+      <value>wxgui_scopesink2_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>type</key>
-      <value>byte</value>
+      <value>float</value>
     </param>
     <param>
-      <key>min</key>
+      <key>title</key>
+      <value>Scope Plot</value>
+    </param>
+    <param>
+      <key>samp_rate</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>v_scale</key>
+      <value>9</value>
+    </param>
+    <param>
+      <key>t_scale</key>
       <value>0</value>
     </param>
     <param>
-      <key>max</key>
-      <value>pam_amp</value>
+      <key>ac_couple</key>
+      <value>False</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>10000</value>
+      <key>xy_mode</key>
+      <value>False</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>num_inputs</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value></value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value>notebook_0,1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(13, 80)</value>
+      <value>(1112, 881)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>random_source_x</key>
+    <key>gr_channel_model</key>
     <param>
       <key>id</key>
-      <value>random_source_x_0_0</value>
+      <value>gr_channel_model_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>noise_voltage</key>
+      <value>noise_amp</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0</value>
+      <key>freq_offset</key>
+      <value>freq_offset</value>
     </param>
     <param>
-      <key>max</key>
-      <value>pam_amp</value>
+      <key>epsilon</key>
+      <value>interpratio</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>10000</value>
+      <key>taps</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>seed</key>
+      <value>42</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(15, 245)</value>
+      <value>(59, 543)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>const_source_x</key>
+    <key>gr_throttle</key>
     <param>
       <key>id</key>
-      <value>const_source_x_0</value>
+      <value>gr_throttle_0</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>type</key>
-      <value>float</value>
+      <value>complex</value>
     </param>
     <param>
-      <key>const</key>
-      <value>-0.5*(pam_amp-1)</value>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(213, 197)</value>
+      <value>(290, 575)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>const_source_x</key>
+    <key>notebook</key>
     <param>
       <key>id</key>
-      <value>const_source_x_0_0</value>
+      <value>notebook_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>style</key>
+      <value>wx.NB_TOP</value>
     </param>
     <param>
-      <key>const</key>
-      <value>-0.5*(pam_amp-1)</value>
+      <key>labels</key>
+      <value>['error', 'phase', 'freq', 'Resampled Signal']</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value></value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(200, 360)</value>
+      <value>(729, 769)</value>
     </param>
     <param>
       <key>_rotation</key>
     <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0_0</value>
+      <value>wxgui_scopesink2_0_0_1</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>type</key>
-      <value>float</value>
+      <value>complex</value>
     </param>
     <param>
       <key>title</key>
     </param>
     <param>
       <key>notebook</key>
-      <value>notebook_0,0</value>
+      <value>notebook_0,3</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1110, 651)</value>
+      <value>(1115, 358)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>wxgui_scopesink2</key>
+    <key>gr_add_xx</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0_0_0_0</value>
+      <value>gr_add_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>float</value>
     </param>
     <param>
-      <key>title</key>
-      <value>Scope Plot</value>
+      <key>num_inputs</key>
+      <value>2</value>
     </param>
     <param>
-      <key>samp_rate</key>
-      <value>samp_rate</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>v_scale</key>
-      <value>1.25</value>
+      <key>_coordinate</key>
+      <value>(440, 167)</value>
     </param>
     <param>
-      <key>t_scale</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>gr_add_xx</key>
+    <param>
+      <key>id</key>
+      <value>gr_add_xx_0_1</value>
+    </param>
     <param>
-      <key>ac_couple</key>
-      <value>False</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>xy_mode</key>
-      <value>False</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
       <key>num_inputs</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(430, 330)</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value>notebook_0,2</value>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>gr_float_to_complex</key>
+    <param>
+      <key>id</key>
+      <value>gr_float_to_complex_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1111, 767)</value>
+      <value>(590, 184)</value>
     </param>
     <param>
       <key>_rotation</key>
     <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0_0_0</value>
+      <value>wxgui_scopesink2_0</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>type</key>
-      <value>float</value>
+      <value>complex</value>
     </param>
     <param>
       <key>title</key>
     </param>
     <param>
       <key>v_scale</key>
-      <value>9</value>
+      <value>0</value>
     </param>
     <param>
       <key>t_scale</key>
     </param>
     <param>
       <key>notebook</key>
-      <value>notebook_0,1</value>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1112, 881)</value>
+      <value>(1116, 500)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>gr_channel_model</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>gr_channel_model_0</value>
+      <value>nfilts</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>noise_voltage</key>
-      <value>noise_amp</value>
-    </param>
-    <param>
-      <key>freq_offset</key>
-      <value>freq_offset</value>
-    </param>
-    <param>
-      <key>epsilon</key>
-      <value>interpratio</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>seed</key>
-      <value>42</value>
+      <key>value</key>
+      <value>32</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(59, 543)</value>
+      <value>(435, 686)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>gr_throttle</key>
+    <key>gr_pfb_clock_sync_ccf</key>
     <param>
       <key>id</key>
-      <value>gr_throttle_0</value>
+      <value>gr_pfb_clock_sync_ccf_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>sps</key>
+      <value>spb</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
+      <key>alpha</key>
+      <value>alpha</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>beta</key>
+      <value>beta</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>rrctaps</value>
+    </param>
+    <param>
+      <key>filter_size</key>
+      <value>nfilts</value>
+    </param>
+    <param>
+      <key>init_phase</key>
+      <value>16</value>
+    </param>
+    <param>
+      <key>max_dev</key>
+      <value>1.5</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(290, 575)</value>
+      <value>(512, 527)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>notebook</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>notebook_0</value>
+      <value>noise_amp</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
+    <param>
+      <key>label</key>
+      <value>Channel Noise</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>min</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>max</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>num_steps</key>
+      <value>1000</value>
+    </param>
     <param>
       <key>style</key>
-      <value>wx.NB_TOP</value>
+      <value>wx.SL_HORIZONTAL</value>
     </param>
     <param>
-      <key>labels</key>
-      <value>['error', 'phase', 'freq', 'Resampled Signal']</value>
+      <key>converver</key>
+      <value>float_converter</value>
     </param>
     <param>
       <key>grid_pos</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(729, 769)</value>
+      <value>(168, 684)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>wxgui_scopesink2</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0_0_1</value>
+      <value>interpratio</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>complex</value>
+      <value>True</value>
     </param>
     <param>
-      <key>title</key>
-      <value>Error</value>
+      <key>label</key>
+      <value>Timing Offset</value>
     </param>
     <param>
-      <key>samp_rate</key>
-      <value>samp_rate</value>
+      <key>value</key>
+      <value>1.00</value>
     </param>
     <param>
-      <key>v_scale</key>
-      <value>.5</value>
+      <key>min</key>
+      <value>0.99</value>
     </param>
     <param>
-      <key>t_scale</key>
-      <value>0</value>
+      <key>max</key>
+      <value>1.01</value>
     </param>
     <param>
-      <key>ac_couple</key>
-      <value>False</value>
+      <key>num_steps</key>
+      <value>1000</value>
     </param>
     <param>
-      <key>xy_mode</key>
-      <value>False</value>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>1</value>
+      <key>converver</key>
+      <value>float_converter</value>
     </param>
     <param>
       <key>grid_pos</key>
     </param>
     <param>
       <key>notebook</key>
-      <value>notebook_0,3</value>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1115, 358)</value>
+      <value>(40, 684)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>spb</value>
+      <value>spb_gen</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>value</key>
-      <value>4.1</value>
+      <value>4</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(32, 842)</value>
+      <value>(119, 841)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>gr_add_xx</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>gr_add_xx_0</value>
+      <value>beta</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>label</key>
+      <value>Timing Beta</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>min</key>
+      <value>0.0</value>
+    </param>
+    <param>
+      <key>max</key>
+      <value>0.1</value>
+    </param>
+    <param>
+      <key>num_steps</key>
+      <value>1000</value>
+    </param>
+    <param>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
+    </param>
+    <param>
+      <key>converver</key>
+      <value>float_converter</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value></value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(440, 167)</value>
+      <value>(668, 5)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>0</value>
+      <value>180</value>
     </param>
   </block>
   <block>
-    <key>gr_add_xx</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>gr_add_xx_0_1</value>
+      <value>alpha</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>label</key>
+      <value>Timing Alpha</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>min</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>max</key>
       <value>1</value>
     </param>
+    <param>
+      <key>num_steps</key>
+      <value>1000</value>
+    </param>
+    <param>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
+    </param>
+    <param>
+      <key>converver</key>
+      <value>float_converter</value>
+    </param>
+    <param>
+      <key>grid_pos</key>
+      <value></value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value></value>
+    </param>
     <param>
       <key>_coordinate</key>
-      <value>(430, 330)</value>
+      <value>(552, 4)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>blks2_pfb_arb_resampler_ccf</key>
+    <key>wxgui_scopesink2</key>
     <param>
       <key>id</key>
-      <value>blks2_pfb_arb_resampler_ccf_0</value>
+      <value>wxgui_scopesink2_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>rate</key>
-      <value>float(spb)/float(spb_gen)</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>taps</key>
-      <value>firdes.low_pass(128, 128, 0.45, 0.1)</value>
+      <key>title</key>
+      <value>Error</value>
     </param>
     <param>
-      <key>size</key>
-      <value>128</value>
+      <key>samp_rate</key>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(617, 374)</value>
+      <key>v_scale</key>
+      <value>3</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>t_scale</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>gr_float_to_complex</key>
     <param>
-      <key>id</key>
-      <value>gr_float_to_complex_0</value>
+      <key>ac_couple</key>
+      <value>False</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>xy_mode</key>
+      <value>False</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>num_inputs</key>
       <value>1</value>
     </param>
+    <param>
+      <key>grid_pos</key>
+      <value></value>
+    </param>
+    <param>
+      <key>notebook</key>
+      <value>notebook_0,0</value>
+    </param>
     <param>
       <key>_coordinate</key>
-      <value>(590, 184)</value>
+      <value>(1110, 651)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(832, 157)</value>
+      <value>(834, 157)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>wxgui_scopesink2</key>
+    <key>blks2_pfb_arb_resampler_ccf</key>
     <param>
       <key>id</key>
-      <value>wxgui_scopesink2_0</value>
+      <value>blks2_pfb_arb_resampler_ccf_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>rate</key>
+      <value>float(spb)/float(spb_gen)</value>
     </param>
     <param>
-      <key>title</key>
-      <value>Scope Plot</value>
+      <key>taps</key>
+      <value>firdes.low_pass(128, 128, 0.45, 0.1)</value>
     </param>
     <param>
-      <key>samp_rate</key>
-      <value>samp_rate</value>
+      <key>size</key>
+      <value>128</value>
     </param>
     <param>
-      <key>v_scale</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(617, 374)</value>
     </param>
     <param>
-      <key>t_scale</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>gr_multiply_const_vxx</key>
     <param>
-      <key>ac_couple</key>
-      <value>False</value>
+      <key>id</key>
+      <value>gr_multiply_const_vxx_0</value>
     </param>
     <param>
-      <key>xy_mode</key>
-      <value>False</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>1</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value></value>
+      <key>const</key>
+      <value>sig_amp</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value></value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1116, 500)</value>
+      <value>(1096, 197)</value>
     </param>
     <param>
       <key>_rotation</key>
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>nfilts</value>
+      <value>pam_amp</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>value</key>
-      <value>64</value>
+      <value>2</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(435, 686)</value>
+      <value>(223, 9)</value>
     </param>
     <param>
       <key>_rotation</key>
     </param>
   </block>
   <block>
-    <key>gr_pfb_clock_sync_ccf</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>gr_pfb_clock_sync_ccf_0</value>
+      <value>spb</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>sps</key>
-      <value>spb</value>
-    </param>
-    <param>
-      <key>alpha</key>
-      <value>alpha</value>
-    </param>
-    <param>
-      <key>beta</key>
-      <value>beta</value>
-    </param>
-    <param>
-      <key>taps</key>
-      <value>rrctaps</value>
-    </param>
-    <param>
-      <key>filter_size</key>
-      <value>nfilts</value>
-    </param>
-    <param>
-      <key>init_phase</key>
-      <value>16</value>
-    </param>
-    <param>
-      <key>max_dev</key>
-      <value>20</value>
+      <key>value</key>
+      <value>4.1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(512, 527)</value>
+      <value>(32, 842)</value>
     </param>
     <param>
       <key>_rotation</key>
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>pam_amp</value>
+      <value>sig_amp</value>
     </param>
     <param>
       <key>_enabled</key>
     </param>
     <param>
       <key>value</key>
-      <value>2</value>
+      <value>1</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(223, 9)</value>
+      <value>(315, 9)</value>
     </param>
     <param>
       <key>_rotation</key>
   </connection>
   <connection>
     <source_block_id>root_raised_cosine_filter_0</source_block_id>
+    <sink_block_id>gr_multiply_const_vxx_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>gr_multiply_const_vxx_0</source_block_id>
     <sink_block_id>blks2_pfb_arb_resampler_ccf_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>