commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 02/07: Updated documentation and grc/python


From: git
Subject: [Commit-gnuradio] [gnuradio] 02/07: Updated documentation and grc/python examples in gr-trellis. Removed weird pyhton examples and made them grc files.
Date: Thu, 16 Oct 2014 16:14:04 +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 be8e888f80934a884287f0ec9eb62dd0d2b7f5e5
Author: Achilleas Anastasopoulos <address@hidden>
Date:   Wed Oct 1 18:22:53 2014 -0400

    Updated documentation and grc/python examples in gr-trellis.
    Removed weird pyhton examples and made them grc files.
---
 gr-trellis/doc/gr-trellis.xml                      |    8 +-
 gr-trellis/examples/grc/CMakeLists.txt             |   26 +-
 .../examples/grc/interference_cancellation.grc     | 2837 ++++++-------------
 gr-trellis/examples/grc/pccc.grc                   |  758 ++---
 gr-trellis/examples/grc/readme.txt                 |    6 +-
 gr-trellis/examples/grc/sccc.grc                   |  824 +++---
 gr-trellis/examples/grc/sccc1.grc                  | 1132 --------
 gr-trellis/examples/grc/{pccc1.grc => tcm.grc}     |  828 +++---
 ...nce_cancellation.grc => turbo_equalization.grc} | 2952 +++++++-------------
 .../{equalization.grc => viterbi_equalization.grc} |  868 +++---
 gr-trellis/examples/python/CMakeLists.txt          |   26 +-
 gr-trellis/examples/python/README                  |   10 +-
 .../python/fsm_files/awgn2o3_16ungerboeck.fsm      |   50 +
 .../python/fsm_files/awgn2o3_16ungerboecka.fsm     |   48 +
 .../python/fsm_files/awgn2o3_32ungerboeck.fsm      |   83 +
 .../python/fsm_files/awgn2o3_32ungerboecka.fsm     |   84 +
 .../examples/python/fsm_files/awgn2o3_4_msb.fsm    |    2 +-
 .../examples/python/fsm_files/awgn2o3_4_msbG.fsm   |    4 +-
 .../python/fsm_files/awgn2o3_4ungerboeck.fsm       |   26 +
 .../python/fsm_files/awgn2o3_4ungerboecka.fsm      |   23 +
 .../python/fsm_files/awgn2o3_64ungerboeck.fsm      |  150 +
 .../python/fsm_files/awgn2o3_64ungerboecka.fsm     |  154 +
 gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm |    3 +-
 .../python/fsm_files/awgn2o3_8ungerboeck.fsm       |   35 +
 .../python/fsm_files/awgn2o3_8ungerboecka.fsm      |   32 +
 gr-trellis/examples/python/fsm_files/uncoded4.fsm  |    7 +
 gr-trellis/examples/python/fsm_utils.py            |  239 --
 gr-trellis/examples/python/test_cpm.py             |    7 +-
 gr-trellis/examples/python/test_pccc_turbo1.py     |  124 -
 gr-trellis/examples/python/test_sccc_hard.py       |  106 -
 gr-trellis/examples/python/test_sccc_soft.py       |  110 -
 gr-trellis/examples/python/test_sccc_turbo.py      |  146 -
 gr-trellis/examples/python/test_sccc_turbo1.py     |  104 -
 gr-trellis/examples/python/test_sccc_turbo2.py     |  106 -
 gr-trellis/examples/python/test_tcm.py             |   76 +-
 gr-trellis/examples/python/test_tcm_bit.py         |  134 -
 gr-trellis/examples/python/test_tcm_combined.py    |  112 -
 gr-trellis/examples/python/test_tcm_parallel.py    |  118 -
 .../examples/python/test_turbo_equalization.py     |  147 -
 .../examples/python/test_turbo_equalization1.py    |  152 -
 .../examples/python/test_turbo_equalization2.py    |  152 -
 .../examples/python/test_viterbi_equalization.py   |   99 -
 .../examples/python/test_viterbi_equalization1.py  |  108 -
 gr-trellis/gnuradio-trellis.pc.in                  |    2 +-
 gr-trellis/grc/trellis_encoder_xx.xml              |   24 +-
 gr-trellis/include/gnuradio/trellis/encoder_XX.h.t |    5 +-
 gr-trellis/lib/encoder_XX_impl.cc.t                |   61 +-
 gr-trellis/lib/encoder_XX_impl.h.t                 |    9 +-
 gr-trellis/python/trellis/fsm_utils.py             |   12 +-
 49 files changed, 4622 insertions(+), 8507 deletions(-)

diff --git a/gr-trellis/doc/gr-trellis.xml b/gr-trellis/doc/gr-trellis.xml
index 6ffbb9e..aabf9ad 100644
--- a/gr-trellis/doc/gr-trellis.xml
+++ b/gr-trellis/doc/gr-trellis.xml
@@ -176,8 +176,8 @@ private:
   int d_O;
   std::vector&lt;int&gt; d_NS;
   std::vector&lt;int&gt; d_OS;
-  std::vector&lt;int&gt; d_PS;
-  std::vector&lt;int&gt; d_PI;
+  std::vector&lt; std::vector&lt; int&gt; &gt; d_PS;
+  std::vector&lt; std::vector&lt; int&gt; &gt; d_PI;
   std::vector&lt;int&gt; d_TMi;
   std::vector&lt;int&gt; d_TMl;
   void generate_PS_PI ();
@@ -195,8 +195,8 @@ public:
   int O () const { return d_O; }
   const std::vector&lt;int&gt; &amp; NS () const { return d_NS; }
   const std::vector&lt;int&gt; &amp; OS () const { return d_OS; }
-  const std::vector&lt;int&gt; &amp; PS () const { return d_PS; }
-  const std::vector&lt;int&gt; &amp; PI () const { return d_PI; }
+  const std::vector&lt; std::vector&lt; int&gt; &gt; &amp; PS () const { 
return d_PS; }
+  const std::vector&lt; std::vector&lt; int&gt; &gt; &amp; PI () const { 
return d_PI; }
   const std::vector&lt;int&gt; &amp; TMi () const { return d_TMi; }
   const std::vector&lt;int&gt; &amp; TMl () const { return d_TMl; }
 };
diff --git a/gr-trellis/examples/grc/CMakeLists.txt 
b/gr-trellis/examples/grc/CMakeLists.txt
index 35280d5..c5d4fc8 100644
--- a/gr-trellis/examples/grc/CMakeLists.txt
+++ b/gr-trellis/examples/grc/CMakeLists.txt
@@ -20,13 +20,18 @@
 ## Configure GRC examples to point to the right fsm_files directory
 set(FSM_FILE_INSTALL_DIR 
"${CMAKE_INSTALL_PREFIX}/${GR_PKG_TRELLIS_EXAMPLES_DIR}/fsm_files/")
 configure_file(
-    "${CMAKE_CURRENT_SOURCE_DIR}/pccc.grc"
-    "${CMAKE_CURRENT_BINARY_DIR}/pccc.grc"
+    "${CMAKE_CURRENT_SOURCE_DIR}/tcm.grc"
+    "${CMAKE_CURRENT_BINARY_DIR}/tcm.grc"
+)
+
+configure_file(
+    "${CMAKE_CURRENT_SOURCE_DIR}/viterbi_equalization.grc"
+    "${CMAKE_CURRENT_BINARY_DIR}/viterbi_equalization.grc"
 )
 
 configure_file(
-    "${CMAKE_CURRENT_SOURCE_DIR}/pccc1.grc"
-    "${CMAKE_CURRENT_BINARY_DIR}/pccc1.grc"
+    "${CMAKE_CURRENT_SOURCE_DIR}/turbo_equalization.grc"
+    "${CMAKE_CURRENT_BINARY_DIR}/turbo_equalization.grc"
 )
 
 configure_file(
@@ -35,8 +40,8 @@ configure_file(
 )
 
 configure_file(
-    "${CMAKE_CURRENT_SOURCE_DIR}/sccc1.grc"
-    "${CMAKE_CURRENT_BINARY_DIR}/sccc1.grc"
+    "${CMAKE_CURRENT_SOURCE_DIR}/pccc.grc"
+    "${CMAKE_CURRENT_BINARY_DIR}/pccc.grc"
 )
 
 configure_file(
@@ -46,11 +51,12 @@ configure_file(
 
 install(
     FILES
-    ${CMAKE_CURRENT_BINARY_DIR}/interference_cancellation.grc
-    ${CMAKE_CURRENT_BINARY_DIR}/pccc.grc
-    ${CMAKE_CURRENT_BINARY_DIR}/pccc1.grc
-    ${CMAKE_CURRENT_BINARY_DIR}/sccc1.grc
+    ${CMAKE_CURRENT_BINARY_DIR}/tcm.grc
+    ${CMAKE_CURRENT_BINARY_DIR}/viterbi_equalization.grc
+    ${CMAKE_CURRENT_BINARY_DIR}/turbo_equalization.grc
     ${CMAKE_CURRENT_BINARY_DIR}/sccc.grc
+    ${CMAKE_CURRENT_BINARY_DIR}/pccc.grc
+    ${CMAKE_CURRENT_BINARY_DIR}/interference_cancellation.grc
     readme.txt
     DESTINATION ${GR_PKG_TRELLIS_EXAMPLES_DIR}
     COMPONENT "trellis-examples"
diff --git a/gr-trellis/examples/grc/interference_cancellation.grc 
b/gr-trellis/examples/grc/interference_cancellation.grc
index 2ccc723..1dbcf69 100644
--- a/gr-trellis/examples/grc/interference_cancellation.grc
+++ b/gr-trellis/examples/grc/interference_cancellation.grc
@@ -1,6 +1,6 @@
 <?xml version='1.0' encoding='ASCII'?>
 <flow_graph>
-  <timestamp>Mon Jul 28 14:00:18 2014</timestamp>
+  <timestamp>Fri Sep 26 18:21:00 2014</timestamp>
   <block>
     <key>options</key>
     <param>
@@ -29,7 +29,7 @@
     </param>
     <param>
       <key>generate_options</key>
-      <value>qt_gui</value>
+      <value>wx_gui</value>
     </param>
     <param>
       <key>category</key>
@@ -52,10 +52,6 @@
       <value></value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>_coordinate</key>
       <value>(10, 10)</value>
     </param>
@@ -79,12 +75,8 @@
       <value>"@FSM_FILE_INSTALL_DIR@"</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(660, 11)</value>
+      <value>(871, 14)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -95,7 +87,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>block</value>
+      <value>R</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -103,15 +95,11 @@
     </param>
     <param>
       <key>value</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <value>100e3</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(583, 10)</value>
+      <value>(748, 12)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -122,7 +110,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>R</value>
+      <value>noisevar</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -130,15 +118,11 @@
     </param>
     <param>
       <key>value</key>
-      <value>100e3</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <value>10**(-snr_db/10)</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(502, 10)</value>
+      <value>(637, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -149,7 +133,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>noisevar</value>
+      <value>fsm1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -157,15 +141,11 @@
     </param>
     <param>
       <key>value</key>
-      <value>10**(-snr_db/10)</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <value>"awgn1o2_16.fsm"</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(428, 10)</value>
+      <value>(849, 87)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -173,54 +153,45 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>fsm2</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>value</key>
+      <value>"awgn1o2_4.fsm"</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(849, 153)</value>
     </param>
     <param>
-      <key>max</key>
-      <value>2</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>id</key>
+      <value>block</value>
     </param>
     <param>
-      <key>repeat</key>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>value</key>
+      <value>1000</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(21, 170)</value>
+      <value>(752, 85)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -228,38 +199,34 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_1</value>
+      <value>digital_chunks_to_symbols_xx_0_0_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
+      <key>in_type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>max</key>
-      <value>2</value>
+      <key>out_type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>symbol_table</key>
+      <value>1,1j,-1j,-1</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>dimension</key>
+      <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>num_ports</key>
+      <value>1</value>
     </param>
     <param>
       <key>affinity</key>
@@ -270,12 +237,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(25, 291)</value>
+      <value>(408, 1719)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -283,46 +246,45 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_0</value>
+      <value>virtual_source_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>stream_id</key>
+      <value>user1</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(356, 1844)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_2_0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>user2_est</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(536, 529)</value>
+      <value>(10, 1649)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -330,10 +292,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_xx</key>
+    <key>blocks_sub_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_xx_0</value>
+      <value>blocks_sub_xx_2_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -341,19 +303,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <value>complex</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>num_inputs</key>
+      <value>2</value>
     </param>
     <param>
       <key>affinity</key>
@@ -364,12 +322,31 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
+      <key>_coordinate</key>
+      <value>(963, 1695)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
+    <param>
+      <key>id</key>
+      <value>virtual_source_0_1_2</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>observation</value>
+    </param>
     <param>
       <key>_coordinate</key>
-      <value>(771, 525)</value>
+      <value>(705, 1660)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -377,10 +354,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>blocks_multiply_const_vxx</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_3</value>
+      <value>blocks_multiply_const_vxx_2_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -388,19 +365,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
+      <value>complex</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>const</key>
+      <value>(1-alpha)**0.5</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>affinity</key>
@@ -411,12 +384,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(535, 792)</value>
+      <value>(721, 1727)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -424,30 +393,34 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_2</value>
+      <value>digital_chunks_to_symbols_xx_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
+      <key>in_type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>out_type</key>
       <value>complex</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>symbol_table</key>
+      <value>1,1j,-1j,-1</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>dimension</key>
+      <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>num_ports</key>
+      <value>1</value>
     </param>
     <param>
       <key>affinity</key>
@@ -458,12 +431,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(944, 978)</value>
+      <value>(416, 1251)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -471,46 +440,45 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_1</value>
+      <value>virtual_source_0_4</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>stream_id</key>
+      <value>user2</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(359, 1373)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_2</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>user1_est</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(540, 1141)</value>
+      <value>(33, 1187)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -521,7 +489,7 @@
     <key>blocks_sub_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_2_0</value>
+      <value>blocks_sub_xx_2</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -540,10 +508,6 @@
       <value>2</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -552,12 +516,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(975, 1342)</value>
+      <value>(942, 1229)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -565,46 +525,22 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_1_0</value>
+      <value>virtual_source_0_1_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(559, 1536)</value>
+      <value>(698, 1198)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -612,10 +548,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_add_xx</key>
+    <key>blocks_multiply_const_vxx</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_0</value>
+      <value>blocks_multiply_const_vxx_2</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -626,18 +562,14 @@
       <value>complex</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>const</key>
+      <value>alpha**0.5</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -646,12 +578,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(1224, 245)</value>
+      <value>(708, 1259)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -659,50 +587,68 @@
     </param>
   </block>
   <block>
-    <key>analog_noise_source_x</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>analog_noise_source_x_0</value>
+      <value>virtual_source_0_3</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>stream_id</key>
+      <value>user2</value>
     </param>
     <param>
-      <key>noise_type</key>
-      <value>analog.GR_GAUSSIAN</value>
+      <key>_coordinate</key>
+      <value>(342, 928)</value>
     </param>
     <param>
-      <key>amp</key>
-      <value>noisevar</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
-    <param>
-      <key>seed</key>
-      <value>-42</value>
+  </block>
+  <block>
+    <key>virtual_sink</key>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0_2_0</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>user2_est</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(341, 1025)</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
+    <param>
+      <key>id</key>
+      <value>virtual_source_0_1_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>observation</value>
+    </param>
     <param>
       <key>_coordinate</key>
-      <value>(1178, 321)</value>
+      <value>(11, 873)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -710,50 +656,68 @@
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>virtual_source_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>stream_id</key>
+      <value>user1</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>R</value>
+      <key>_coordinate</key>
+      <value>(348, 566)</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0_2</value>
     </param>
     <param>
-      <key>ignoretag</key>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>user1_est</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(355, 687)</value>
     </param>
     <param>
-      <key>minoutbuf</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>id</key>
+      <value>virtual_source_0_1</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(579, 143)</value>
+      <value>(13, 530)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -761,10 +725,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_const_vxx</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_0</value>
+      <value>wxgui_numbersink2_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -772,73 +736,70 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
-      <key>const</key>
-      <value>alpha**0.5</value>
+      <key>title</key>
+      <value>BER 1 (raw)</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>max_value</key>
+      <value>1</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(988, 196)</value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>ref_level</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>digital_chunks_to_symbols_xx</key>
     <param>
-      <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
+      <key>show_gauge</key>
+      <value>True</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>grid_pos</key>
+      <value>0,0,1,1</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>notebook</key>
       <value></value>
     </param>
     <param>
@@ -846,16 +807,8 @@
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(703, 211)</value>
+      <value>(944, 556)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -863,10 +816,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_const_vxx</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_1</value>
+      <value>wxgui_numbersink2_2</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -874,73 +827,70 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
-      <key>const</key>
-      <value>(1-alpha)**0.5</value>
+      <key>title</key>
+      <value>BER 2 (raw)</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>max_value</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(994, 319)</value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>ref_level</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>digital_chunks_to_symbols_xx</key>
     <param>
-      <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0_0</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
+      <key>show_gauge</key>
+      <value>True</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>grid_pos</key>
+      <value>0,1,1,1</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>notebook</key>
       <value></value>
     </param>
     <param>
@@ -948,16 +898,8 @@
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(703, 311)</value>
+      <value>(944, 886)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -965,84 +907,81 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0_0_0</value>
+      <value>wxgui_numbersink2_3</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
+      <key>title</key>
+      <value>BER 2 (after cancelling user 1)</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>max_value</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
+      <key>ref_level</key>
       <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(418, 1000)</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_multiply_const_vxx</key>
     <param>
-      <key>id</key>
-      <value>blocks_multiply_const_vxx_2</value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>show_gauge</key>
+      <value>True</value>
     </param>
     <param>
-      <key>const</key>
-      <value>alpha**0.5</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>grid_pos</key>
+      <value>1,1,1,1</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>notebook</key>
       <value></value>
     </param>
     <param>
@@ -1050,16 +989,8 @@
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(710, 1008)</value>
+      <value>(945, 1351)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1070,7 +1001,7 @@
     <key>blocks_multiply_const_vxx</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_2_0</value>
+      <value>blocks_multiply_const_vxx_1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1089,10 +1020,6 @@
       <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -1101,12 +1028,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(733, 1374)</value>
+      <value>(943, 402)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1114,40 +1037,28 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>blocks_multiply_const_vxx</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0_0_1</value>
+      <value>blocks_multiply_const_vxx_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>out_type</key>
+      <key>type</key>
       <value>complex</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
-    </param>
-    <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>const</key>
+      <value>alpha**0.5</value>
     </param>
     <param>
-      <key>num_ports</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -1156,12 +1067,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(420, 1366)</value>
+      <value>(947, 301)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1169,128 +1076,127 @@
     </param>
   </block>
   <block>
-    <key>variable_qtgui_range</key>
+    <key>virtual_sink</key>
     <param>
       <key>id</key>
-      <value>alpha</value>
+      <value>virtual_sink_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>P1/P</value>
+      <key>stream_id</key>
+      <value>user2</value>
     </param>
     <param>
-      <key>value</key>
-      <value>0.6</value>
+      <key>_coordinate</key>
+      <value>(208, 340)</value>
     </param>
     <param>
-      <key>start</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>analog_random_source_x</key>
     <param>
-      <key>stop</key>
-      <value>1</value>
+      <key>id</key>
+      <value>analog_random_source_x_1</value>
     </param>
     <param>
-      <key>step</key>
-      <value>0.01</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>max</key>
+      <value>2</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>num_samps</key>
+      <value>block</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(177, 10)</value>
+      <value>(22, 374)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>variable_qtgui_range</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>snr_db</value>
+      <value>digital_chunks_to_symbols_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>P/sigma^2 (dB)</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>16</value>
-    </param>
-    <param>
-      <key>start</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>stop</key>
-      <value>20</value>
+      <key>in_type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>step</key>
-      <value>0.01</value>
+      <key>out_type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>symbol_table</key>
+      <value>1,1j,-1j,-1</value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>dimension</key>
+      <value>1</value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>num_ports</key>
+      <value>1</value>
     </param>
     <param>
-      <key>gui_hint</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(300, 10)</value>
+      <value>(700, 294)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>blocks_add_xx</key>
+    <key>blocks_throttle</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_1</value>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1298,21 +1204,17 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>byte</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>samples_per_second</key>
+      <value>R</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -1321,12 +1223,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(1400, 262)</value>
+      <value>(576, 226)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1334,10 +1232,10 @@
     </param>
   </block>
   <block>
-    <key>qtgui_const_sink_x</key>
+    <key>analog_random_source_x</key>
     <param>
       <key>id</key>
-      <value>qtgui_const_sink_x_0</value>
+      <value>analog_random_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1345,315 +1243,320 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>Constellation</value>
+      <value>byte</value>
     </param>
     <param>
-      <key>size</key>
-      <value>1024</value>
-    </param>
-    <param>
-      <key>grid</key>
-      <value>False</value>
+      <key>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>autoscale</key>
-      <value>False</value>
+      <key>max</key>
+      <value>2</value>
     </param>
     <param>
-      <key>ymin</key>
-      <value>-2</value>
+      <key>num_samps</key>
+      <value>block</value>
     </param>
     <param>
-      <key>ymax</key>
-      <value>2</value>
+      <key>repeat</key>
+      <value>True</value>
     </param>
     <param>
-      <key>xmin</key>
-      <value>-2</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>xmax</key>
-      <value>2</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(18, 253)</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_sink_0</value>
     </param>
     <param>
-      <key>tr_mode</key>
-      <value>qtgui.TRIG_MODE_FREE</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>tr_slope</key>
-      <value>qtgui.TRIG_SLOPE_POS</value>
+      <key>stream_id</key>
+      <value>user1</value>
     </param>
     <param>
-      <key>tr_level</key>
-      <value>0.0</value>
+      <key>_coordinate</key>
+      <value>(208, 229)</value>
     </param>
     <param>
-      <key>tr_chan</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
-      <key>tr_tag</key>
-      <value>""</value>
+      <key>id</key>
+      <value>digital_chunks_to_symbols_xx_0_0</value>
     </param>
     <param>
-      <key>label1</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>width1</key>
-      <value>1</value>
+      <key>in_type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>color1</key>
-      <value>"blue"</value>
+      <key>out_type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>style1</key>
-      <value>0</value>
+      <key>symbol_table</key>
+      <value>1,1j,-1j,-1</value>
     </param>
     <param>
-      <key>marker1</key>
-      <value>0</value>
+      <key>dimension</key>
+      <value>1</value>
     </param>
     <param>
-      <key>alpha1</key>
-      <value>1.0</value>
+      <key>num_ports</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label2</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>width2</key>
-      <value>1</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>color2</key>
-      <value>"red"</value>
+      <key>_coordinate</key>
+      <value>(700, 394)</value>
     </param>
     <param>
-      <key>style2</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_add_xx</key>
     <param>
-      <key>marker2</key>
-      <value>0</value>
+      <key>id</key>
+      <value>blocks_add_xx_1</value>
     </param>
     <param>
-      <key>alpha2</key>
-      <value>1.0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>width3</key>
-      <value>1</value>
+      <key>num_inputs</key>
+      <value>2</value>
     </param>
     <param>
-      <key>color3</key>
-      <value>"red"</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>style3</key>
-      <value>0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>marker3</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>alpha3</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>width4</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(1400, 341)</value>
     </param>
     <param>
-      <key>color4</key>
-      <value>"red"</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_add_xx</key>
     <param>
-      <key>style4</key>
-      <value>0</value>
+      <key>id</key>
+      <value>blocks_add_xx_0</value>
     </param>
     <param>
-      <key>marker4</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alpha4</key>
-      <value>1.0</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>num_inputs</key>
+      <value>2</value>
     </param>
     <param>
-      <key>width5</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>"red"</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>style5</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>marker5</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(1224, 324)</value>
     </param>
     <param>
-      <key>alpha5</key>
-      <value>1.0</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>analog_noise_source_x</key>
     <param>
-      <key>label6</key>
-      <value></value>
+      <key>id</key>
+      <value>analog_noise_source_x_0</value>
     </param>
     <param>
-      <key>width6</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color6</key>
-      <value>"red"</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>style6</key>
-      <value>0</value>
+      <key>noise_type</key>
+      <value>analog.GR_GAUSSIAN</value>
     </param>
     <param>
-      <key>marker6</key>
-      <value>0</value>
+      <key>amp</key>
+      <value>noisevar</value>
     </param>
     <param>
-      <key>alpha6</key>
-      <value>1.0</value>
+      <key>seed</key>
+      <value>-42</value>
     </param>
     <param>
-      <key>label7</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>width7</key>
-      <value>1</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>color7</key>
-      <value>"red"</value>
+      <key>_coordinate</key>
+      <value>(1178, 400)</value>
     </param>
     <param>
-      <key>style7</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>marker7</key>
-      <value>0</value>
+      <key>id</key>
+      <value>virtual_sink_0_1</value>
     </param>
     <param>
-      <key>alpha7</key>
-      <value>1.0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>width8</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(1407, 453)</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>"red"</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>wxgui_scopesink2</key>
     <param>
-      <key>style8</key>
-      <value>0</value>
+      <key>id</key>
+      <value>wxgui_scopesink2_0</value>
     </param>
     <param>
-      <key>marker8</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alpha8</key>
-      <value>1.0</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>label9</key>
-      <value></value>
+      <key>title</key>
+      <value>Scope Plot</value>
     </param>
     <param>
-      <key>width9</key>
-      <value>1</value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>"red"</value>
+      <key>v_scale</key>
+      <value>0</value>
     </param>
     <param>
-      <key>style9</key>
+      <key>v_offset</key>
       <value>0</value>
     </param>
     <param>
-      <key>marker9</key>
+      <key>t_scale</key>
       <value>0</value>
     </param>
     <param>
-      <key>alpha9</key>
-      <value>1.0</value>
+      <key>ac_couple</key>
+      <value>False</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>xy_mode</key>
+      <value>True</value>
     </param>
     <param>
-      <key>width10</key>
+      <key>num_inputs</key>
       <value>1</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>"red"</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>style10</key>
-      <value>0</value>
+      <key>grid_pos</key>
+      <value></value>
     </param>
     <param>
-      <key>marker10</key>
-      <value>0</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>alpha10</key>
-      <value>1.0</value>
+      <key>trig_mode</key>
+      <value>wxgui.TRIG_MODE_AUTO</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>y_axis_label</key>
+      <value>Counts</value>
     </param>
     <param>
       <key>affinity</key>
@@ -1661,7 +1564,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(0, 0)</value>
+      <value>(1383, 208)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1669,269 +1572,164 @@
     </param>
   </block>
   <block>
-    <key>blocks_short_to_float</key>
+    <key>trellis_viterbi_combined_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_short_to_float_0</value>
+      <value>trellis_viterbi_combined_xx_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>type</key>
+      <value>c</value>
     </param>
     <param>
-      <key>scale</key>
-      <value>1</value>
+      <key>out_type</key>
+      <value>b</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>fsm_args</key>
+      <value>prefix+fsm1</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1010, 1551)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>autoscale</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>avg</key>
-      <value>0.001</value>
-    </param>
-    <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>block_size</key>
+      <value>block</value>
     </param>
     <param>
-      <key>min</key>
+      <key>init_state</key>
       <value>-1</value>
     </param>
     <param>
-      <key>max</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.10</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value>0,0,1,1</value>
-    </param>
-    <param>
-      <key>label1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
+      <key>final_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>factor1</key>
+      <key>dim</key>
       <value>1</value>
     </param>
     <param>
-      <key>label2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor2</key>
-      <value>1</value>
+      <key>table</key>
+      
<value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
     </param>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
-      <key>unit3</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor3</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>unit4</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(75, 583)</value>
     </param>
     <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>trellis_viterbi_combined_xx</key>
     <param>
-      <key>factor4</key>
-      <value>1</value>
+      <key>id</key>
+      <value>trellis_viterbi_combined_xx_0_0</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit5</key>
-      <value></value>
+      <key>type</key>
+      <value>c</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
+      <key>out_type</key>
+      <value>b</value>
     </param>
     <param>
-      <key>factor5</key>
-      <value>1</value>
+      <key>fsm_args</key>
+      <value>prefix+fsm1</value>
     </param>
     <param>
-      <key>label6</key>
-      <value></value>
+      <key>block_size</key>
+      <value>block</value>
     </param>
     <param>
-      <key>unit6</key>
-      <value></value>
+      <key>init_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
+      <key>final_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>factor6</key>
+      <key>dim</key>
       <value>1</value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor7</key>
-      <value>1</value>
+      <key>table</key>
+      
<value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
-      <key>unit8</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor8</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label9</key>
-      <value></value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>unit9</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(63, 1848)</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>trellis_encoder_xx</key>
     <param>
-      <key>factor9</key>
-      <value>1</value>
+      <key>id</key>
+      <value>trellis_encoder_xx_0</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit10</key>
-      <value></value>
+      <key>type</key>
+      <value>bb</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
+      <key>fsm_args</key>
+      <value>prefix+fsm1</value>
     </param>
     <param>
-      <key>factor10</key>
-      <value>1</value>
+      <key>init_state</key>
+      <value>0</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1257, 471)</value>
+      <value>(337, 270)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1942,7 +1740,7 @@
     <key>trellis_encoder_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_encoder_xx_1</value>
+      <value>trellis_encoder_xx_2</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1950,21 +1748,17 @@
     </param>
     <param>
       <key>type</key>
-      <value>ss</value>
+      <value>bb</value>
     </param>
     <param>
       <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <value>prefix+fsm1</value>
     </param>
     <param>
       <key>init_state</key>
       <value>0</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -1973,12 +1767,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(336, 311)</value>
+      <value>(87, 1251)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1989,7 +1779,7 @@
     <key>trellis_encoder_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_encoder_xx_0</value>
+      <value>trellis_encoder_xx_1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1997,21 +1787,17 @@
     </param>
     <param>
       <key>type</key>
-      <value>ss</value>
+      <value>bb</value>
     </param>
     <param>
       <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <value>prefix+fsm2</value>
     </param>
     <param>
       <key>init_state</key>
       <value>0</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -2020,12 +1806,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(340, 187)</value>
+      <value>(376, 381)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2036,7 +1818,7 @@
     <key>trellis_viterbi_combined_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_viterbi_combined_xx_1</value>
+      <value>trellis_viterbi_combined_xx_2</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -2048,15 +1830,15 @@
     </param>
     <param>
       <key>out_type</key>
-      <value>s</value>
+      <value>b</value>
     </param>
     <param>
       <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <value>prefix+fsm2</value>
     </param>
     <param>
       <key>block_size</key>
-      <value>1000</value>
+      <value>block</value>
     </param>
     <param>
       <key>init_state</key>
@@ -2072,17 +1854,13 @@
     </param>
     <param>
       <key>table</key>
-      
<value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+      
<value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
     </param>
     <param>
       <key>metric_type</key>
       <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -2091,12 +1869,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(79, 501)</value>
+      <value>(85, 931)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2107,7 +1881,7 @@
     <key>trellis_viterbi_combined_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_viterbi_combined_xx_2</value>
+      <value>trellis_viterbi_combined_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -2119,15 +1893,15 @@
     </param>
     <param>
       <key>out_type</key>
-      <value>s</value>
+      <value>b</value>
     </param>
     <param>
       <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <value>prefix+fsm2</value>
     </param>
     <param>
       <key>block_size</key>
-      <value>1000</value>
+      <value>block</value>
     </param>
     <param>
       <key>init_state</key>
@@ -2150,10 +1924,6 @@
       <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>affinity</key>
       <value></value>
     </param>
@@ -2162,12 +1932,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(82, 766)</value>
+      <value>(81, 1362)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2175,10 +1941,10 @@
     </param>
   </block>
   <block>
-    <key>trellis_viterbi_combined_xx</key>
+    <key>trellis_encoder_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_viterbi_combined_xx_0</value>
+      <value>trellis_encoder_xx_2_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -2186,43 +1952,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>c</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>s</value>
+      <value>bb</value>
     </param>
     <param>
       <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
-    </param>
-    <param>
-      <key>block_size</key>
-      <value>1000</value>
+      <value>prefix+fsm2</value>
     </param>
     <param>
       <key>init_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>final_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>dim</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>table</key>
-      
<value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
-    </param>
-    <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <value>0</value>
     </param>
     <param>
       <key>affinity</key>
@@ -2233,12 +1971,8 @@
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(83, 1111)</value>
+      <value>(91, 1719)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2246,10 +1980,10 @@
     </param>
   </block>
   <block>
-    <key>trellis_viterbi_combined_xx</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>trellis_viterbi_combined_xx_0_0</value>
+      <value>wxgui_numbersink2_3_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -2257,774 +1991,70 @@
     </param>
     <param>
       <key>type</key>
-      <value>c</value>
+      <value>float</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>s</value>
+      <key>title</key>
+      <value>BER 1 (after cancelling user 2)</value>
     </param>
     <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>block_size</key>
-      <value>1000</value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>init_state</key>
-      <value>-1</value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>final_state</key>
-      <value>-1</value>
+      <key>max_value</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>dim</key>
-      <value>1</value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>table</key>
-      
<value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(75, 1495)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_multiply_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_multiply_xx_2_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(771, 1530)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_short_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_short_to_float_1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(985, 1608)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0_0_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>autoscale</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>avg</key>
-      <value>0.001</value>
-    </param>
-    <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.10</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value>1,0,1,1</value>
-    </param>
-    <param>
-      <key>label1</key>
-      <value>BER 2 (raw)</value>
-    </param>
-    <param>
-      <key>unit1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor3</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor4</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor5</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor6</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor7</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor8</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor9</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor10</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1272, 1551)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_multiply_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_multiply_xx_1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(785, 779)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_short_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_short_to_float_2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1013, 735)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_multiply_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_multiply_xx_2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(796, 1136)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_short_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_short_to_float_3</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1002, 1149)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
+      <key>ref_level</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
     <param>
-      <key>name</key>
-      <value>""</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>autoscale</key>
+      <key>average</key>
       <value>False</value>
     </param>
     <param>
-      <key>avg</key>
+      <key>avg_alpha</key>
       <value>0.001</value>
     </param>
     <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.10</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value>0,1,1,1</value>
-    </param>
-    <param>
-      <key>label1</key>
-      <value>BER 2 (raw)</value>
-    </param>
-    <param>
-      <key>unit1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor3</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor4</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor5</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor6</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor7</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor8</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor9</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label10</key>
-      <value></value>
+      <key>show_gauge</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit10</key>
+      <key>win_size</key>
       <value></value>
     </param>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor10</key>
-      <value>1</value>
+      <key>grid_pos</key>
+      <value>1,0,1,1</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>notebook</key>
       <value></value>
     </param>
     <param>
@@ -3033,7 +2063,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1223, 1133)</value>
+      <value>(929, 1816)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -3041,320 +2071,265 @@
     </param>
   </block>
   <block>
-    <key>trellis_encoder_xx</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>trellis_encoder_xx_2_0</value>
+      <value>alpha</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>ss</value>
-    </param>
-    <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>label</key>
+      <value>P1/P</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(103, 1366)</value>
+      <key>value</key>
+      <value>0.1</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>min</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>trellis_encoder_xx</key>
-    <param>
-      <key>id</key>
-      <value>trellis_encoder_xx_2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
     <param>
-      <key>type</key>
-      <value>ss</value>
+      <key>max</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <key>num_steps</key>
+      <value>100</value>
     </param>
     <param>
-      <key>init_state</key>
-      <value>0</value>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>converver</key>
+      <value>float_converter</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>grid_pos</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(89, 1000)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>autoscale</key>
-      <value>False</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>avg</key>
-      <value>0.001</value>
+      <key>_coordinate</key>
+      <value>(243, 11)</value>
     </param>
     <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable_slider</key>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>id</key>
+      <value>snr_db</value>
     </param>
     <param>
-      <key>min</key>
-      <value>-1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>max</key>
-      <value>1</value>
+      <key>label</key>
+      <value>P/sigma^2 (dB)</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>value</key>
+      <value>10</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value>1,1,1,1</value>
+      <key>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label1</key>
-      <value></value>
+      <key>max</key>
+      <value>20</value>
     </param>
     <param>
-      <key>unit1</key>
-      <value></value>
+      <key>num_steps</key>
+      <value>100</value>
     </param>
     <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
     </param>
     <param>
-      <key>factor1</key>
-      <value>1</value>
+      <key>converver</key>
+      <value>float_converter</value>
     </param>
     <param>
-      <key>label2</key>
+      <key>grid_pos</key>
       <value></value>
     </param>
     <param>
-      <key>unit2</key>
+      <key>notebook</key>
       <value></value>
     </param>
     <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
+      <key>_coordinate</key>
+      <value>(447, 14)</value>
     </param>
     <param>
-      <key>factor2</key>
-      <value>1</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blks2_error_rate</key>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>id</key>
+      <value>blks2_error_rate_0</value>
     </param>
     <param>
-      <key>unit3</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
+      <key>type</key>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>factor3</key>
-      <value>1</value>
+      <key>win_size</key>
+      <value>block*100</value>
     </param>
     <param>
-      <key>label4</key>
-      <value></value>
+      <key>bits_per_symbol</key>
+      <value>2</value>
     </param>
     <param>
-      <key>unit4</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor4</key>
-      <value>1</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(724, 613)</value>
     </param>
     <param>
-      <key>unit5</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blks2_error_rate</key>
     <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
+      <key>id</key>
+      <value>blks2_error_rate_0_0</value>
     </param>
     <param>
-      <key>factor5</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label6</key>
-      <value></value>
+      <key>type</key>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>unit6</key>
-      <value></value>
+      <key>win_size</key>
+      <value>block*100</value>
     </param>
     <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
+      <key>bits_per_symbol</key>
+      <value>2</value>
     </param>
     <param>
-      <key>factor6</key>
-      <value>1</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>unit7</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(719, 943)</value>
     </param>
     <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blks2_error_rate</key>
     <param>
-      <key>factor7</key>
-      <value>1</value>
+      <key>id</key>
+      <value>blks2_error_rate_0_0_0</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit8</key>
-      <value></value>
+      <key>type</key>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
+      <key>win_size</key>
+      <value>block*100</value>
     </param>
     <param>
-      <key>factor8</key>
-      <value>1</value>
+      <key>bits_per_symbol</key>
+      <value>2</value>
     </param>
     <param>
-      <key>label9</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>unit9</key>
-      <value></value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
+      <key>_coordinate</key>
+      <value>(725, 1399)</value>
     </param>
     <param>
-      <key>factor9</key>
-      <value>1</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blks2_error_rate</key>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>id</key>
+      <value>blks2_error_rate_0_0_0_0</value>
     </param>
     <param>
-      <key>unit10</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
+      <key>type</key>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>factor10</key>
-      <value>1</value>
+      <key>win_size</key>
+      <value>block*100</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>bits_per_symbol</key>
+      <value>2</value>
     </param>
     <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(1266, 720)</value>
+      <value>(724, 1880)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -3362,218 +2337,194 @@
     </param>
   </block>
   <connection>
-    <source_block_id>analog_random_source_x_1</source_block_id>
-    <sink_block_id>trellis_encoder_xx_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_0</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>wxgui_scopesink2_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>virtual_sink_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
-    <sink_block_id>blocks_add_xx_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
+    <source_block_id>virtual_source_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
+    <source_block_id>blks2_error_rate_0_0_0_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_0</sink_block_id>
+    <source_block_id>virtual_source_0_2_0</source_block_id>
+    <sink_block_id>trellis_encoder_xx_2_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>trellis_encoder_xx_0</sink_block_id>
+    <source_block_id>virtual_source_0_1_2</source_block_id>
+    <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id>
+    <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>trellis_encoder_xx_2_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id>
+    <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_1</sink_block_id>
+    <source_block_id>blocks_sub_xx_2_0</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_1</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_1</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2</sink_block_id>
+    <source_block_id>virtual_source_0_4</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_1</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2</sink_block_id>
+    <source_block_id>blks2_error_rate_0_0_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_2</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
+    <source_block_id>virtual_source_0_2</source_block_id>
+    <sink_block_id>trellis_encoder_xx_2</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
+    <source_block_id>virtual_source_0_1_1</source_block_id>
     <sink_block_id>blocks_sub_xx_2</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_const_vxx_2</source_block_id>
-    <sink_block_id>blocks_sub_xx_2</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id>
+    <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
-    <sink_block_id>trellis_encoder_xx_2</sink_block_id>
+    <source_block_id>trellis_encoder_xx_2</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
-    <sink_block_id>blocks_sub_xx_3</sink_block_id>
+    <source_block_id>blocks_multiply_const_vxx_2</source_block_id>
+    <sink_block_id>blocks_sub_xx_2</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_3</source_block_id>
-    <sink_block_id>blocks_multiply_xx_1</sink_block_id>
+    <source_block_id>blocks_sub_xx_2</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_3</source_block_id>
-    <sink_block_id>blocks_multiply_xx_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>analog_random_source_x_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_3</sink_block_id>
+    <source_block_id>blks2_error_rate_0_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_2</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
-    <sink_block_id>trellis_encoder_xx_2_0</sink_block_id>
+    <source_block_id>virtual_source_0_3</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_1_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_1_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
+    <sink_block_id>virtual_sink_0_2_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_1_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_2_0</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id>
+    <source_block_id>virtual_source_0_1_0</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
+    <source_block_id>blks2_error_rate_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_1_0</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_encoder_xx_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
+    <sink_block_id>virtual_sink_0_2</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_noise_source_x_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+    <source_block_id>virtual_source_0_1</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+    <source_block_id>analog_random_source_x_1</source_block_id>
+    <sink_block_id>virtual_sink_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>virtual_sink_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
@@ -3584,80 +2535,62 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_encoder_xx_2</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>trellis_encoder_xx_2_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
+    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_0</source_block_id>
-    <sink_block_id>qtgui_number_sink_0</sink_block_id>
+    <source_block_id>trellis_encoder_xx_0</source_block_id>
+    <sink_block_id>blocks_throttle_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_2_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_1</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>trellis_encoder_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_1</source_block_id>
-    <sink_block_id>qtgui_number_sink_0_0_0_0</sink_block_id>
+    <source_block_id>analog_random_source_x_1</source_block_id>
+    <sink_block_id>trellis_encoder_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_1</source_block_id>
-    <sink_block_id>blocks_short_to_float_2</sink_block_id>
+    <source_block_id>analog_noise_source_x_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_2</source_block_id>
-    <sink_block_id>qtgui_number_sink_0_0_0</sink_block_id>
+    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
+    <sink_block_id>blocks_add_xx_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_2</source_block_id>
-    <sink_block_id>blocks_short_to_float_3</sink_block_id>
+    <source_block_id>blocks_add_xx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_3</source_block_id>
-    <sink_block_id>qtgui_number_sink_0_0</sink_block_id>
+    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc
index c642a71..9d96603 100644
--- a/gr-trellis/examples/grc/pccc.grc
+++ b/gr-trellis/examples/grc/pccc.grc
@@ -1,6 +1,7 @@
 <?xml version='1.0' encoding='ASCII'?>
+<?grc format='1' created='3.7.6'?>
 <flow_graph>
-  <timestamp>Mon Jul 28 14:02:43 2014</timestamp>
+  <timestamp>Fri Sep 26 12:26:16 2014</timestamp>
   <block>
     <key>options</key>
     <param>
@@ -29,7 +30,7 @@
     </param>
     <param>
       <key>generate_options</key>
-      <value>qt_gui</value>
+      <value>wx_gui</value>
     </param>
     <param>
       <key>category</key>
@@ -68,7 +69,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>prefix</value>
+      <value>fsm2</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -76,7 +77,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>"@FSM_FILE_INSTALL_DIR@"</value>
+      <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value>
     </param>
     <param>
       <key>alias</key>
@@ -84,7 +85,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(520, 11)</value>
+      <value>(320, 149)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -95,7 +96,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>noisevar</value>
+      <value>fsm1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -103,7 +104,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>10**(-snr_db/10)</value>
+      <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value>
     </param>
     <param>
       <key>alias</key>
@@ -111,7 +112,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(279, 10)</value>
+      <value>(320, 85)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -122,7 +123,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>R</value>
+      <value>prefix</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -130,7 +131,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>100e3</value>
+      <value>"@FSM_FILE_INSTALL_DIR@"</value>
     </param>
     <param>
       <key>alias</key>
@@ -138,7 +139,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(358, 10)</value>
+      <value>(320, 21)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -149,7 +150,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>block</value>
+      <value>interleaver</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -157,7 +158,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>1000</value>
+      <value>trellis.interleaver(block,666)</value>
     </param>
     <param>
       <key>alias</key>
@@ -165,7 +166,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(438, 10)</value>
+      <value>(320, 213)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -173,54 +174,80 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>Es</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>value</key>
+      
<value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>max</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(776, 141)</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>repeat</key>
+      <key>id</key>
+      <value>block</value>
+    </param>
+    <param>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
+      <key>value</key>
+      <value>1000</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(200, 37)</value>
     </param>
     <param>
-      <key>minoutbuf</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>R</value>
+    </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>10e3</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(21, 170)</value>
+      <value>(200, 101)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -228,50 +255,53 @@
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>noisevar</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>value</key>
+      <value>10**(-EsN0_dB/10.0)  * Es   /2.0</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>R</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(1032, 149)</value>
     </param>
     <param>
-      <key>ignoretag</key>
-      <value>True</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>id</key>
+      <value>constellation</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>value</key>
+      <value>-3,-3,-1,-3,1,-3,3,-3,   -3,-1,-1,-1,1,-1,3,-1,     
-3,1,-1,1,1,1,3,1,     -3,3,-1,3,1,3,3,3        </value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(559, 104)</value>
+      <value>(528, 189)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -279,113 +309,167 @@
     </param>
   </block>
   <block>
-    <key>variable_qtgui_range</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>snr_db</value>
+      <value>dim</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>SNR (dB)</value>
+      <key>value</key>
+      <value>2</value>
     </param>
     <param>
-      <key>value</key>
-      <value>5</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>start</key>
-      <value>-10</value>
+      <key>_coordinate</key>
+      <value>(688, 189)</value>
     </param>
     <param>
-      <key>stop</key>
-      <value>10</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>step</key>
-      <value>0.01</value>
+      <key>id</key>
+      <value>virtual_source_0_0</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>_coordinate</key>
+      <value>(104, 1220)</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_0_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(177, 10)</value>
+      <value>(88, 1292)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0</value>
+      <value>wxgui_numbersink2_3_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
+      <key>title</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0,   0,-7,0, -5,0, -3,0, 
-1,0, 1,0, 3,0, 5,0, 7,0</value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>2</value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>max_value</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>factor</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>decimal_places</key>
+      <value>6</value>
+    </param>
+    <param>
+      <key>ref_level</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>number_rate</key>
+      <value>15</value>
+    </param>
+    <param>
+      <key>peak_hold</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>average</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>avg_alpha</key>
+      <value>0.001</value>
+    </param>
+    <param>
+      <key>show_gauge</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>win_size</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>grid_pos</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(559, 180)</value>
+      <value>(680, 1205)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -393,10 +477,10 @@
     </param>
   </block>
   <block>
-    <key>trellis_pccc_encoder_xx</key>
+    <key>blks2_error_rate</key>
     <param>
       <key>id</key>
-      <value>trellis_pccc_encoder_xx_0</value>
+      <value>blks2_error_rate_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -404,31 +488,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>ss</value>
-    </param>
-    <param>
-      <key>o_fsm_args</key>
-      <value>prefix + "/awgn1o2_4.fsm"</value>
-    </param>
-    <param>
-      <key>o_init_state</key>
-      <value>0</value>
+      <value>'SER'</value>
     </param>
     <param>
-      <key>i_fsm_args</key>
-      <value>prefix + "/awgn1o2_4.fsm"</value>
-    </param>
-    <param>
-      <key>i_init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>interleaver_args</key>
-      <value>trellis.interleaver(block,666)</value>
+      <key>win_size</key>
+      <value>block*100</value>
     </param>
     <param>
-      <key>bl</key>
-      <value>block</value>
+      <key>bits_per_symbol</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -448,7 +516,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(234, 154)</value>
+      <value>(304, 1256)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -456,109 +524,138 @@
     </param>
   </block>
   <block>
-    <key>trellis_pccc_decoder_combined_xx</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>trellis_pccc_decoder_combined_xx_0</value>
+      <value>EsN0_dB</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>c</value>
+      <key>label</key>
+      <value>EsN0 (dB)</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>s</value>
+      <key>value</key>
+      <value>2</value>
     </param>
     <param>
-      <key>o_fsm_args</key>
-      <value>prefix + "/awgn1o2_4.fsm"</value>
+      <key>min</key>
+      <value>-10</value>
     </param>
     <param>
-      <key>o_init_state</key>
-      <value>0</value>
+      <key>max</key>
+      <value>10</value>
     </param>
     <param>
-      <key>o_final_state</key>
-      <value>-1</value>
+      <key>num_steps</key>
+      <value>1000</value>
     </param>
     <param>
-      <key>i_fsm_args</key>
-      <value>prefix + "/awgn1o2_4.fsm"</value>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
     </param>
     <param>
-      <key>i_init_state</key>
-      <value>0</value>
+      <key>converver</key>
+      <value>float_converter</value>
     </param>
     <param>
-      <key>i_final_state</key>
-      <value>-1</value>
+      <key>grid_pos</key>
+      <value></value>
     </param>
     <param>
-      <key>interleaver</key>
-      <value>trellis.interleaver(block,666)</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>block_size</key>
-      <value>block</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>iterations</key>
-      <value>10</value>
+      <key>_coordinate</key>
+      <value>(896, 129)</value>
     </param>
     <param>
-      <key>dim</key>
-      <value>2</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>table</key>
-      <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0,   0,-7,0, -5,0, -3,0, 
-1,0, 1,0, 3,0, 5,0, 7,0</value>
+      <key>id</key>
+      <value>virtual_sink_0_1</value>
     </param>
     <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>siso_type</key>
-      <value>trellis.TRELLIS_MIN_SUM</value>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
-      <key>scaling</key>
-      <value>1.0</value>
+      <key>_coordinate</key>
+      <value>(768, 940)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
+      <key>stream_id</key>
+      <value>observation</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(104, 940)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>info</value>
+    </param>
     <param>
       <key>_coordinate</key>
-      <value>(234, 299)</value>
+      <value>(224, 412)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>blocks_multiply_xx</key>
+    <key>analog_random_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_xx_2_0</value>
+      <value>analog_random_source_x_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -566,15 +663,23 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
+      <value>byte</value>
     </param>
     <param>
-      <key>num_inputs</key>
+      <key>min</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>max</key>
       <value>2</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>num_samps</key>
+      <value>1007</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
     </param>
     <param>
       <key>alias</key>
@@ -594,7 +699,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(421, 574)</value>
+      <value>(8, 471)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -602,10 +707,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>blocks_throttle</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_0</value>
+      <value>blocks_throttle_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -613,15 +718,19 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>R</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>ignoretag</key>
+      <value>True</value>
     </param>
     <param>
       <key>alias</key>
@@ -641,7 +750,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(246, 580)</value>
+      <value>(208, 492)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -649,21 +758,33 @@
     </param>
   </block>
   <block>
-    <key>blocks_short_to_float</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_short_to_float_1_0</value>
+      <value>digital_chunks_to_symbols_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>in_type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>out_type</key>
+      <value>float</value>
+    </param>
+    <param>
+      <key>symbol_table</key>
+      <value>constellation</value>
     </param>
     <param>
-      <key>scale</key>
+      <key>dimension</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>num_ports</key>
       <value>1</value>
     </param>
     <param>
@@ -684,7 +805,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(564, 592)</value>
+      <value>(632, 485)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -703,7 +824,7 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
       <key>noise_type</key>
@@ -711,7 +832,7 @@
     </param>
     <param>
       <key>amp</key>
-      <value>noisevar</value>
+      <value>noisevar**0.5</value>
     </param>
     <param>
       <key>seed</key>
@@ -735,7 +856,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(520, 309)</value>
+      <value>(656, 646)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -754,7 +875,7 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
       <key>num_inputs</key>
@@ -782,7 +903,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(816, 192)</value>
+      <value>(880, 552)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -790,226 +911,211 @@
     </param>
   </block>
   <block>
-    <key>qtgui_number_sink</key>
+    <key>virtual_sink</key>
     <param>
       <key>id</key>
-      <value>qtgui_number_sink_0</value>
+      <value>virtual_sink_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>autoscale</key>
-      <value>True</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>avg</key>
-      <value>0.001</value>
-    </param>
-    <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(896, 676)</value>
     </param>
     <param>
-      <key>min</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>trellis_pccc_encoder_xx</key>
     <param>
-      <key>max</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.01</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>id</key>
+      <value>trellis_pccc_encoder_xx_0</value>
     </param>
     <param>
-      <key>label1</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit1</key>
-      <value></value>
+      <key>type</key>
+      <value>bb</value>
     </param>
     <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
+      <key>o_fsm_args</key>
+      <value>fsm1</value>
     </param>
     <param>
-      <key>factor1</key>
-      <value>1</value>
+      <key>o_init_state</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label2</key>
-      <value></value>
+      <key>i_fsm_args</key>
+      <value>fsm2</value>
     </param>
     <param>
-      <key>unit2</key>
-      <value></value>
+      <key>i_init_state</key>
+      <value>0</value>
     </param>
     <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
+      <key>interleaver_args</key>
+      <value>interleaver</value>
     </param>
     <param>
-      <key>factor2</key>
-      <value>1</value>
+      <key>bl</key>
+      <value>block</value>
     </param>
     <param>
-      <key>label3</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit3</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor3</key>
-      <value>1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label4</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(400, 457)</value>
     </param>
     <param>
-      <key>unit4</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>trellis_pccc_decoder_combined_xx</key>
     <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
+      <key>id</key>
+      <value>trellis_pccc_decoder_combined_xx_0</value>
     </param>
     <param>
-      <key>factor4</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>type</key>
+      <value>f</value>
     </param>
     <param>
-      <key>unit5</key>
-      <value></value>
+      <key>out_type</key>
+      <value>b</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
+      <key>o_fsm_args</key>
+      <value>fsm1</value>
     </param>
     <param>
-      <key>factor5</key>
-      <value>1</value>
+      <key>o_init_state</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label6</key>
-      <value></value>
+      <key>o_final_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>unit6</key>
-      <value></value>
+      <key>i_fsm_args</key>
+      <value>fsm2</value>
     </param>
     <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
+      <key>i_init_state</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor6</key>
-      <value>1</value>
+      <key>i_final_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
+      <key>interleaver</key>
+      <value>interleaver</value>
     </param>
     <param>
-      <key>unit7</key>
-      <value></value>
+      <key>block_size</key>
+      <value>block</value>
     </param>
     <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
+      <key>iterations</key>
+      <value>10</value>
     </param>
     <param>
-      <key>factor7</key>
-      <value>1</value>
+      <key>dim</key>
+      <value>2</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>table</key>
+      <value>constellation</value>
     </param>
     <param>
-      <key>unit8</key>
-      <value></value>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
+      <key>siso_type</key>
+      <value>trellis.TRELLIS_SUM_PRODUCT</value>
     </param>
     <param>
-      <key>factor8</key>
-      <value>1</value>
+      <key>scaling</key>
+      <value>1.0/noisevar</value>
     </param>
     <param>
-      <key>label9</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit9</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor9</key>
-      <value>1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(400, 849)</value>
     </param>
     <param>
-      <key>unit10</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>import</key>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
+      <key>id</key>
+      <value>import_0_0</value>
     </param>
     <param>
-      <key>factor10</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>import</key>
+      <value>import gnuradio.trellis.fsm_utils as fu</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(571, 477)</value>
+      <value>(48, 132)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1017,75 +1123,75 @@
     </param>
   </block>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id>
+    <source_block_id>blks2_error_rate_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_noise_source_x_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>virtual_source_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>virtual_source_0_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>virtual_sink_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_1_0</source_block_id>
-    <sink_block_id>qtgui_number_sink_0</sink_block_id>
+    <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>blocks_throttle_0_0</source_block_id>
+    <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+    <source_block_id>analog_random_source_x_0_0</source_block_id>
+    <sink_block_id>blocks_throttle_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+    <source_block_id>analog_random_source_x_0_0</source_block_id>
+    <sink_block_id>virtual_sink_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_2_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
+    <source_block_id>analog_noise_source_x_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
 </flow_graph>
diff --git a/gr-trellis/examples/grc/readme.txt 
b/gr-trellis/examples/grc/readme.txt
index a5261ac..3d32e04 100644
--- a/gr-trellis/examples/grc/readme.txt
+++ b/gr-trellis/examples/grc/readme.txt
@@ -1,6 +1,6 @@
 These are examples of using gr-trellis in grc.
 
-INTERFERENCE CANCELLATION
+Interference Cancellation
 -------------------------
 Two users are transmitting simultaneously using convolutionally encoded QPSK, 
each with power P1=alpha*P and P2=(1-alpha)*P.
 The combined signal is observed in noise and four different receivers are 
considered:
@@ -20,13 +20,13 @@ Serially Concatenated Convolutional Codes
 -----------------------------------------
 An SCCC can be defined by an outer and an inner FSM together with an 
interleaver
 and a modulation type. You can change the SNR and observe the estimated BER.
-In sccc.grc the decoding and metric calculation are combined; in sccc1.grc 
they are separate.
 
 Parallel Concatenated Convolutional Codes
 -----------------------------------------
 A PCCC can be defined by two FSMs together with an interleaver
 and a modulation type. You can change the SNR and observe the estimated BER.
-In pccc1.grc the decoding and metric calculation are separate.
+
+...and a few other examples including turbo equalization, etc
 
 
 Enjoy.
diff --git a/gr-trellis/examples/grc/sccc.grc b/gr-trellis/examples/grc/sccc.grc
index 9d51674..0bcaa6c 100644
--- a/gr-trellis/examples/grc/sccc.grc
+++ b/gr-trellis/examples/grc/sccc.grc
@@ -1,6 +1,7 @@
 <?xml version='1.0' encoding='ASCII'?>
+<?grc format='1' created='3.7.6'?>
 <flow_graph>
-  <timestamp>Mon Jul 28 14:09:50 2014</timestamp>
+  <timestamp>Wed Oct  1 11:04:18 2014</timestamp>
   <block>
     <key>options</key>
     <param>
@@ -29,7 +30,7 @@
     </param>
     <param>
       <key>generate_options</key>
-      <value>qt_gui</value>
+      <value>wx_gui</value>
     </param>
     <param>
       <key>category</key>
@@ -68,7 +69,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>prefix</value>
+      <value>mod</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -76,7 +77,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>"@FSM_FILE_INSTALL_DIR@"</value>
+      <value>fu.psk2x3</value>
     </param>
     <param>
       <key>alias</key>
@@ -84,7 +85,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(514, 10)</value>
+      <value>(632, 101)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -95,7 +96,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>block</value>
+      <value>prefix</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -103,7 +104,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>1000</value>
+      <value>"@FSM_FILE_INSTALL_DIR@"</value>
     </param>
     <param>
       <key>alias</key>
@@ -111,7 +112,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(441, 10)</value>
+      <value>(344, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -130,7 +131,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>100e3</value>
+      <value>10e3</value>
     </param>
     <param>
       <key>alias</key>
@@ -138,7 +139,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(358, 10)</value>
+      <value>(224, 93)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -149,7 +150,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>noisevar</value>
+      <value>interleaver</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -157,7 +158,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>10**(-snr_db/10)</value>
+      <value>trellis.interleaver(block,666)</value>
     </param>
     <param>
       <key>alias</key>
@@ -165,7 +166,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(279, 10)</value>
+      <value>(344, 205)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -173,54 +174,53 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>Es</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
+      <key>value</key>
+      
<value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value>
     </param>
     <param>
-      <key>max</key>
-      <value>2</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>_coordinate</key>
+      <value>(800, 133)</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>id</key>
+      <value>noisevar</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>value</key>
+      <value>10**(-EsN0_dB/10.0)  * Es   /2.0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(21, 170)</value>
+      <value>(1056, 141)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -228,46 +228,26 @@
     </param>
   </block>
   <block>
-    <key>blocks_add_xx</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_1</value>
+      <value>block</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>value</key>
+      <value>1000</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(951, 256)</value>
+      <value>(224, 29)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -275,50 +255,53 @@
     </param>
   </block>
   <block>
-    <key>analog_noise_source_x</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>analog_noise_source_x_0</value>
+      <value>fsm_o</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>value</key>
+      <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value>
     </param>
     <param>
-      <key>noise_type</key>
-      <value>analog.GR_GAUSSIAN</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>amp</key>
-      <value>noisevar</value>
+      <key>_coordinate</key>
+      <value>(344, 77)</value>
     </param>
     <param>
-      <key>seed</key>
-      <value>-42</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>id</key>
+      <value>fsm_i</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>value</key>
+      <value>trellis.fsm(prefix+"/awgn2o3_4.fsm")</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(549, 250)</value>
+      <value>(344, 141)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -326,50 +309,53 @@
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>constellation</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>value</key>
+      <value>mod[1]</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>R</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(568, 173)</value>
     </param>
     <param>
-      <key>ignoretag</key>
-      <value>True</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>id</key>
+      <value>dim</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>value</key>
+      <value>mod[0]</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(551, 116)</value>
+      <value>(720, 173)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -377,46 +363,49 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>import</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_0</value>
+      <value>import_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>import</key>
+      <value>import numpy</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(32, 148)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_sink_0_0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(239, 548)</value>
+      <value>(192, 332)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -424,10 +413,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_xx</key>
+    <key>analog_random_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_xx_2_0</value>
+      <value>analog_random_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -435,15 +424,23 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
+      <value>byte</value>
     </param>
     <param>
-      <key>num_inputs</key>
+      <key>min</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>max</key>
       <value>2</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>num_samps</key>
+      <value>1007</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
     </param>
     <param>
       <key>alias</key>
@@ -463,7 +460,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(418, 551)</value>
+      <value>(5, 384)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -471,22 +468,30 @@
     </param>
   </block>
   <block>
-    <key>blocks_short_to_float</key>
+    <key>blocks_throttle</key>
     <param>
       <key>id</key>
-      <value>blocks_short_to_float_1_0</value>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>R</value>
+    </param>
+    <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>scale</key>
-      <value>1</value>
+      <key>ignoretag</key>
+      <value>True</value>
     </param>
     <param>
       <key>alias</key>
@@ -506,7 +511,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(605, 564)</value>
+      <value>(232, 404)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -525,19 +530,19 @@
     </param>
     <param>
       <key>in_type</key>
-      <value>short</value>
+      <value>byte</value>
     </param>
     <param>
       <key>out_type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
       <key>symbol_table</key>
-      <value>1,0,1j,0,-1j,0,-1,0,1,0,1j,0,-1j,0,-1,0</value>
+      <value>constellation</value>
     </param>
     <param>
       <key>dimension</key>
-      <value>2</value>
+      <value>dim</value>
     </param>
     <param>
       <key>num_ports</key>
@@ -561,7 +566,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(551, 181)</value>
+      <value>(672, 397)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -569,214 +574,222 @@
     </param>
   </block>
   <block>
-    <key>qtgui_number_sink</key>
+    <key>blocks_add_xx</key>
     <param>
       <key>id</key>
-      <value>qtgui_number_sink_0</value>
+      <value>blocks_add_xx_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
       <key>type</key>
       <value>float</value>
     </param>
     <param>
-      <key>autoscale</key>
-      <value>False</value>
+      <key>num_inputs</key>
+      <value>2</value>
     </param>
     <param>
-      <key>avg</key>
-      <value>0.001</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>min</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>max</key>
-      <value>1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>_coordinate</key>
+      <value>(960, 472)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blks2_error_rate</key>
     <param>
-      <key>gui_hint</key>
-      <value>1,0,1,1</value>
+      <key>id</key>
+      <value>blks2_error_rate_0</value>
     </param>
     <param>
-      <key>label1</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit1</key>
-      <value></value>
+      <key>type</key>
+      <value>'SER'</value>
     </param>
     <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
+      <key>win_size</key>
+      <value>block*100</value>
     </param>
     <param>
-      <key>factor1</key>
+      <key>bits_per_symbol</key>
       <value>1</value>
     </param>
     <param>
-      <key>label2</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit2</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor2</key>
-      <value>1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(312, 1168)</value>
     </param>
     <param>
-      <key>unit3</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
+      <key>id</key>
+      <value>virtual_source_0_0_0</value>
     </param>
     <param>
-      <key>factor3</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label4</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
-      <key>unit4</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(96, 1204)</value>
     </param>
     <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>factor4</key>
-      <value>1</value>
+      <key>id</key>
+      <value>virtual_source_0_0</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit5</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
+      <key>_coordinate</key>
+      <value>(112, 1132)</value>
     </param>
     <param>
-      <key>factor5</key>
-      <value>1</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>wxgui_numbersink2</key>
     <param>
-      <key>label6</key>
-      <value></value>
+      <key>id</key>
+      <value>wxgui_numbersink2_3_0_0</value>
     </param>
     <param>
-      <key>unit6</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>factor6</key>
-      <value>1</value>
+      <key>title</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>unit7</key>
-      <value></value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor7</key>
-      <value>1</value>
+      <key>max_value</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>unit8</key>
-      <value></value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
+      <key>ref_level</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor8</key>
-      <value>1</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>label9</key>
-      <value></value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>unit9</key>
-      <value></value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>factor9</key>
-      <value>1</value>
+      <key>show_gauge</key>
+      <value>False</value>
     </param>
     <param>
-      <key>label10</key>
+      <key>win_size</key>
       <value></value>
     </param>
     <param>
-      <key>unit10</key>
+      <key>grid_pos</key>
       <value></value>
     </param>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor10</key>
-      <value>1</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
       <key>alias</key>
@@ -788,7 +801,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(788, 548)</value>
+      <value>(688, 1117)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -796,69 +809,56 @@
     </param>
   </block>
   <block>
-    <key>variable_qtgui_range</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>snr_db</value>
+      <value>virtual_source_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>SNR (dB)</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>5</value>
-    </param>
-    <param>
-      <key>start</key>
-      <value>-10</value>
-    </param>
-    <param>
-      <key>stop</key>
-      <value>10</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>step</key>
-      <value>0.01</value>
-    </param>
-    <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>_coordinate</key>
+      <value>(88, 836)</value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>id</key>
+      <value>virtual_sink_0_1</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(177, 10)</value>
+      <value>(744, 836)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>trellis_sccc_encoder_xx</key>
+    <key>trellis_sccc_decoder_combined_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_sccc_encoder_xx_0</value>
+      <value>trellis_sccc_decoder_combined_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -866,33 +866,69 @@
     </param>
     <param>
       <key>type</key>
-      <value>ss</value>
+      <value>f</value>
+    </param>
+    <param>
+      <key>out_type</key>
+      <value>b</value>
     </param>
     <param>
       <key>o_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
+      <value>fsm_o</value>
     </param>
     <param>
       <key>o_init_state</key>
       <value>0</value>
     </param>
     <param>
+      <key>o_final_state</key>
+      <value>-1</value>
+    </param>
+    <param>
       <key>i_fsm_args</key>
-      <value>prefix+"/awgn2o3_4.fsm"</value>
+      <value>fsm_i</value>
     </param>
     <param>
       <key>i_init_state</key>
       <value>0</value>
     </param>
     <param>
-      <key>interleaver_args</key>
-      <value>trellis.interleaver(block,666)</value>
+      <key>i_final_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>bl</key>
+      <key>interleaver</key>
+      <value>interleaver</value>
+    </param>
+    <param>
+      <key>block_size</key>
       <value>block</value>
     </param>
     <param>
+      <key>iterations</key>
+      <value>5</value>
+    </param>
+    <param>
+      <key>dim</key>
+      <value>dim</value>
+    </param>
+    <param>
+      <key>table</key>
+      <value>constellation</value>
+    </param>
+    <param>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
+    </param>
+    <param>
+      <key>siso_type</key>
+      <value>trellis.TRELLIS_SUM_PRODUCT</value>
+    </param>
+    <param>
+      <key>scaling</key>
+      <value>1.0/noisevar</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -910,18 +946,18 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(242, 154)</value>
+      <value>(400, 745)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>trellis_sccc_decoder_combined_xx</key>
+    <key>analog_noise_source_x</key>
     <param>
       <key>id</key>
-      <value>trellis_sccc_decoder_combined_xx_0</value>
+      <value>analog_noise_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -929,67 +965,164 @@
     </param>
     <param>
       <key>type</key>
-      <value>c</value>
+      <value>float</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>s</value>
+      <key>noise_type</key>
+      <value>analog.GR_GAUSSIAN</value>
     </param>
     <param>
-      <key>o_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
+      <key>amp</key>
+      <value>noisevar**0.5</value>
     </param>
     <param>
-      <key>o_init_state</key>
+      <key>seed</key>
+      <value>-42</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>o_final_state</key>
-      <value>-1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>i_fsm_args</key>
-      <value>prefix+"/awgn2o3_4.fsm"</value>
+      <key>_coordinate</key>
+      <value>(608, 510)</value>
     </param>
     <param>
-      <key>i_init_state</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>i_final_state</key>
-      <value>-1</value>
+      <key>id</key>
+      <value>virtual_sink_0</value>
     </param>
     <param>
-      <key>interleaver</key>
-      <value>trellis.interleaver(block,666)</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>block_size</key>
-      <value>block</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>iterations</key>
-      <value>5</value>
+      <key>_coordinate</key>
+      <value>(1064, 484)</value>
     </param>
     <param>
-      <key>dim</key>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_slider</key>
+    <param>
+      <key>id</key>
+      <value>EsN0_dB</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>label</key>
+      <value>EsN0 (dB)</value>
+    </param>
+    <param>
+      <key>value</key>
       <value>2</value>
     </param>
     <param>
-      <key>table</key>
-      <value>1,0,1j,0,-1j,0,-1,0,1,0,1j,0,-1j,0,-1,0</value>
+      <key>min</key>
+      <value>-10</value>
     </param>
     <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
+      <key>max</key>
+      <value>10</value>
     </param>
     <param>
-      <key>siso_type</key>
-      <value>trellis.TRELLIS_SUM_PRODUCT</value>
+      <key>num_steps</key>
+      <value>1000</value>
     </param>
     <param>
-      <key>scaling</key>
-      <value>1.0</value>
+      <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>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(920, 113)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>trellis_sccc_encoder_xx</key>
+    <param>
+      <key>id</key>
+      <value>trellis_sccc_encoder_xx_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>bb</value>
+    </param>
+    <param>
+      <key>o_fsm_args</key>
+      <value>fsm_o</value>
+    </param>
+    <param>
+      <key>o_init_state</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>i_fsm_args</key>
+      <value>fsm_i</value>
+    </param>
+    <param>
+      <key>i_init_state</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>interleaver_args</key>
+      <value>interleaver</value>
+    </param>
+    <param>
+      <key>bl</key>
+      <value>block</value>
     </param>
     <param>
       <key>alias</key>
@@ -1009,7 +1142,34 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(241, 287)</value>
+      <value>(416, 369)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>import</key>
+    <param>
+      <key>id</key>
+      <value>import_0_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>import</key>
+      <value>import gnuradio.trellis.fsm_utils as fu</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(40, 204)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1017,74 +1177,74 @@
     </param>
   </block>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>analog_noise_source_x_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>1</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
     <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
+    <sink_block_id>virtual_sink_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_sccc_encoder_xx_0</source_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
     <sink_block_id>blocks_throttle_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>trellis_sccc_encoder_xx_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>virtual_sink_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_noise_source_x_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>virtual_source_0_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>virtual_source_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+    <source_block_id>blks2_error_rate_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_2_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
+    <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_1_0</source_block_id>
-    <sink_block_id>qtgui_number_sink_0</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
diff --git a/gr-trellis/examples/grc/sccc1.grc 
b/gr-trellis/examples/grc/sccc1.grc
deleted file mode 100644
index 71b3f76..0000000
--- a/gr-trellis/examples/grc/sccc1.grc
+++ /dev/null
@@ -1,1132 +0,0 @@
-<?xml version='1.0' encoding='ASCII'?>
-<flow_graph>
-  <timestamp>Mon Jul 28 14:10:35 2014</timestamp>
-  <block>
-    <key>options</key>
-    <param>
-      <key>id</key>
-      <value>sccc1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>title</key>
-      <value>Serially Concatenated Convolutional Code</value>
-    </param>
-    <param>
-      <key>author</key>
-      <value>AA</value>
-    </param>
-    <param>
-      <key>description</key>
-      <value>gnuradio flow graph</value>
-    </param>
-    <param>
-      <key>window_size</key>
-      <value>2048, 2048</value>
-    </param>
-    <param>
-      <key>generate_options</key>
-      <value>qt_gui</value>
-    </param>
-    <param>
-      <key>category</key>
-      <value>Custom</value>
-    </param>
-    <param>
-      <key>run_options</key>
-      <value>prompt</value>
-    </param>
-    <param>
-      <key>run</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>max_nouts</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>realtime_scheduling</key>
-      <value></value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(10, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>prefix</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>"@FSM_FILE_INSTALL_DIR@"</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(513, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>block</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(441, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>R</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>100e3</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(358, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable</key>
-    <param>
-      <key>id</key>
-      <value>noisevar</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>10**(-snr_db/10)</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(279, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>analog_random_source_x</key>
-    <param>
-      <key>id</key>
-      <value>analog_random_source_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>num_samps</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>repeat</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(21, 170)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_throttle</key>
-    <param>
-      <key>id</key>
-      <value>blocks_throttle_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>samples_per_second</key>
-      <value>R</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>ignoretag</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(607, 110)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_add_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_add_xx_1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <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>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(932, 187)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_multiply_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_multiply_xx_2_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(233, 480)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_sub_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_sub_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(58, 486)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_short_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_short_to_float_1_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(376, 498)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>trellis_metrics_x</key>
-    <param>
-      <key>id</key>
-      <value>trellis_metrics_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>f</value>
-    </param>
-    <param>
-      <key>card</key>
-      <value>8</value>
-    </param>
-    <param>
-      <key>dim</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>table</key>
-      <value>-7, -5, -3, -1, 1, 3, 5, 7</value>
-    </param>
-    <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(63, 328)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>digital_chunks_to_symbols_xx</key>
-    <param>
-      <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>in_type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>symbol_table</key>
-      <value>-7,-5,-3,-1,1,3,5,7</value>
-    </param>
-    <param>
-      <key>dimension</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>num_ports</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(607, 175)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>analog_noise_source_x</key>
-    <param>
-      <key>id</key>
-      <value>analog_noise_source_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>noise_type</key>
-      <value>analog.GR_GAUSSIAN</value>
-    </param>
-    <param>
-      <key>amp</key>
-      <value>noisevar</value>
-    </param>
-    <param>
-      <key>seed</key>
-      <value>-42</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(606, 242)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>autoscale</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>avg</key>
-      <value>0.001</value>
-    </param>
-    <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.10</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value>1,0,1,1</value>
-    </param>
-    <param>
-      <key>label1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor3</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor4</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor5</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor6</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor7</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor8</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor9</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor10</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(609, 482)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>variable_qtgui_range</key>
-    <param>
-      <key>id</key>
-      <value>snr_db</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>label</key>
-      <value>SNR (dB)</value>
-    </param>
-    <param>
-      <key>value</key>
-      <value>5</value>
-    </param>
-    <param>
-      <key>start</key>
-      <value>-10</value>
-    </param>
-    <param>
-      <key>stop</key>
-      <value>10</value>
-    </param>
-    <param>
-      <key>step</key>
-      <value>0.01</value>
-    </param>
-    <param>
-      <key>widget</key>
-      <value>counter_slider</value>
-    </param>
-    <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
-    </param>
-    <param>
-      <key>min_len</key>
-      <value>200</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value></value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(177, 10)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>180</value>
-    </param>
-  </block>
-  <block>
-    <key>trellis_sccc_encoder_xx</key>
-    <param>
-      <key>id</key>
-      <value>trellis_sccc_encoder_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>ss</value>
-    </param>
-    <param>
-      <key>o_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
-    </param>
-    <param>
-      <key>o_init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>i_fsm_args</key>
-      <value>prefix+"/awgn2o3_4.fsm"</value>
-    </param>
-    <param>
-      <key>i_init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>interleaver_args</key>
-      <value>trellis.interleaver(block,666)</value>
-    </param>
-    <param>
-      <key>bl</key>
-      <value>block</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(294, 154)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>trellis_sccc_decoder_x</key>
-    <param>
-      <key>id</key>
-      <value>trellis_sccc_decoder_x_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>s</value>
-    </param>
-    <param>
-      <key>o_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
-    </param>
-    <param>
-      <key>o_init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>o_final_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>i_fsm_args</key>
-      <value>prefix+"/awgn2o3_4.fsm"</value>
-    </param>
-    <param>
-      <key>i_init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>i_final_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>interleaver</key>
-      <value>trellis.interleaver(block,666)</value>
-    </param>
-    <param>
-      <key>block_size</key>
-      <value>block</value>
-    </param>
-    <param>
-      <key>iterations</key>
-      <value>10</value>
-    </param>
-    <param>
-      <key>siso_type</key>
-      <value>trellis.TRELLIS_MIN_SUM</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(292, 280)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>trellis_sccc_encoder_xx_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_metrics_x_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>trellis_metrics_x_0</source_block_id>
-    <sink_block_id>trellis_sccc_decoder_x_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>trellis_sccc_decoder_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>analog_noise_source_x_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_multiply_xx_2_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_short_to_float_1_0</source_block_id>
-    <sink_block_id>qtgui_number_sink_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-</flow_graph>
diff --git a/gr-trellis/examples/grc/pccc1.grc b/gr-trellis/examples/grc/tcm.grc
similarity index 63%
rename from gr-trellis/examples/grc/pccc1.grc
rename to gr-trellis/examples/grc/tcm.grc
index acb112d..451d940 100644
--- a/gr-trellis/examples/grc/pccc1.grc
+++ b/gr-trellis/examples/grc/tcm.grc
@@ -1,11 +1,12 @@
 <?xml version='1.0' encoding='ASCII'?>
+<?grc format='1' created='3.7.6'?>
 <flow_graph>
-  <timestamp>Mon Jul 28 14:09:00 2014</timestamp>
+  <timestamp>Wed Oct  1 11:04:18 2014</timestamp>
   <block>
     <key>options</key>
     <param>
       <key>id</key>
-      <value>sccc1</value>
+      <value>tcm</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -13,7 +14,7 @@
     </param>
     <param>
       <key>title</key>
-      <value>Parallel Concatenated Convolutional Code</value>
+      <value>Trellis Coded Modulation</value>
     </param>
     <param>
       <key>author</key>
@@ -29,7 +30,7 @@
     </param>
     <param>
       <key>generate_options</key>
-      <value>qt_gui</value>
+      <value>wx_gui</value>
     </param>
     <param>
       <key>category</key>
@@ -84,7 +85,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(513, 10)</value>
+      <value>(320, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -95,7 +96,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>block</value>
+      <value>dim</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -103,7 +104,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>1000</value>
+      <value>mod[0]</value>
     </param>
     <param>
       <key>alias</key>
@@ -111,7 +112,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(441, 10)</value>
+      <value>(464, 229)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -122,7 +123,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>R</value>
+      <value>constellation</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -130,7 +131,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>100e3</value>
+      <value>mod[1]</value>
     </param>
     <param>
       <key>alias</key>
@@ -138,7 +139,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(358, 10)</value>
+      <value>(312, 229)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -149,7 +150,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>noisevar</value>
+      <value>mod</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -157,7 +158,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>10**(-snr_db/10)</value>
+      <value>fu.psk4</value>
     </param>
     <param>
       <key>alias</key>
@@ -165,7 +166,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(279, 10)</value>
+      <value>(336, 157)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -173,54 +174,53 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>fsm</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
+      <key>value</key>
+      <value>"awgn1o2_4.fsm"</value>
     </param>
     <param>
-      <key>max</key>
-      <value>2</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>_coordinate</key>
+      <value>(320, 77)</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>id</key>
+      <value>R</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>value</key>
+      <value>100e3</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(21, 170)</value>
+      <value>(216, 109)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -228,226 +228,270 @@
     </param>
   </block>
   <block>
-    <key>qtgui_number_sink</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>qtgui_number_sink_0</value>
+      <value>noisevar</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>name</key>
-      <value>""</value>
+      <key>value</key>
+      <value>10**(-EsN0_dB/10.0)  * Es   /2.0</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>autoscale</key>
-      <value>False</value>
+      <key>_coordinate</key>
+      <value>(728, 157)</value>
     </param>
     <param>
-      <key>avg</key>
-      <value>0.001</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
+      <key>id</key>
+      <value>Es</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>min</key>
+      <key>value</key>
+      
<value>sum(numpy.square(numpy.abs(constellation)))/(len(constellation)/(1.0*dim))</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(528, 157)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>max</key>
-      <value>1</value>
+      <key>id</key>
+      <value>block</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value>1,0,1,1</value>
+      <key>value</key>
+      <value>500*16</value>
     </param>
     <param>
-      <key>label1</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit1</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(216, 29)</value>
     </param>
     <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_throttle</key>
     <param>
-      <key>factor1</key>
-      <value>1</value>
+      <key>id</key>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
-      <key>label2</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit2</key>
-      <value></value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
+      <key>samples_per_second</key>
+      <value>R</value>
     </param>
     <param>
-      <key>factor2</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>ignoretag</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit3</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>factor3</key>
-      <value>1</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label4</key>
-      <value></value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>unit4</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(208, 380)</value>
     </param>
     <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_add_xx</key>
     <param>
-      <key>factor4</key>
-      <value>1</value>
+      <key>id</key>
+      <value>blocks_add_xx_1</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit5</key>
-      <value></value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
+      <key>num_inputs</key>
+      <value>2</value>
     </param>
     <param>
-      <key>factor5</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
-      <key>label6</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit6</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor6</key>
-      <value>1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(912, 488)</value>
     </param>
     <param>
-      <key>unit7</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
+      <key>id</key>
+      <value>virtual_sink_0_0</value>
     </param>
     <param>
-      <key>factor7</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>unit8</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(224, 316)</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>factor8</key>
-      <value>1</value>
+      <key>id</key>
+      <value>virtual_sink_0</value>
     </param>
     <param>
-      <key>label9</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit9</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
+      <key>_coordinate</key>
+      <value>(832, 620)</value>
     </param>
     <param>
-      <key>factor9</key>
-      <value>1</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0</value>
     </param>
     <param>
-      <key>unit10</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>factor10</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(64, 732)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_sink_0_1</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(632, 509)</value>
+      <value>(800, 732)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -455,22 +499,30 @@
     </param>
   </block>
   <block>
-    <key>blocks_short_to_float</key>
+    <key>analog_noise_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_short_to_float_1_0</value>
+      <value>analog_noise_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>scale</key>
-      <value>1</value>
+      <key>noise_type</key>
+      <value>analog.GR_GAUSSIAN</value>
+    </param>
+    <param>
+      <key>amp</key>
+      <value>noisevar**0.5</value>
+    </param>
+    <param>
+      <key>seed</key>
+      <value>-42</value>
     </param>
     <param>
       <key>alias</key>
@@ -490,7 +542,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(375, 525)</value>
+      <value>(384, 502)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -498,46 +550,58 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_xx</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_xx_2_0</value>
+      <value>EsN0_dB</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>label</key>
+      <value>Es/N0 (dB)</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>value</key>
+      <value>4.0</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>min</key>
+      <value>-10</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>max</key>
+      <value>30</value>
     </param>
     <param>
-      <key>affinity</key>
+      <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>minoutbuf</key>
-      <value>0</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(232, 507)</value>
+      <value>(608, 105)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -545,10 +609,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>analog_random_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_0</value>
+      <value>analog_random_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -556,17 +620,25 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
+      <value>byte</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>num_inputs</key>
+      <key>max</key>
       <value>2</value>
     </param>
     <param>
+      <key>num_samps</key>
+      <value>1007</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -584,7 +656,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(57, 513)</value>
+      <value>(8, 359)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -592,49 +664,81 @@
     </param>
   </block>
   <block>
-    <key>variable_qtgui_range</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>snr_db</value>
+      <value>wxgui_numbersink2_3_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>SNR (dB)</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>value</key>
-      <value>5</value>
+      <key>title</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>start</key>
-      <value>-10</value>
+      <key>units</key>
+      <value>BER</value>
+    </param>
+    <param>
+      <key>samp_rate</key>
+      <value>R</value>
+    </param>
+    <param>
+      <key>min_value</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>max_value</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>factor</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>decimal_places</key>
+      <value>6</value>
+    </param>
+    <param>
+      <key>ref_level</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>number_rate</key>
+      <value>15</value>
+    </param>
+    <param>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>stop</key>
-      <value>10</value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>step</key>
-      <value>0.01</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>show_gauge</key>
+      <value>False</value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>grid_pos</key>
+      <value></value>
     </param>
     <param>
-      <key>gui_hint</key>
+      <key>notebook</key>
       <value></value>
     </param>
     <param>
@@ -642,51 +746,85 @@
       <value></value>
     </param>
     <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(177, 10)</value>
+      <value>(728, 1133)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>trellis_pccc_encoder_xx</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>trellis_pccc_encoder_xx_0</value>
+      <value>virtual_source_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>ss</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>o_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
+      <key>_coordinate</key>
+      <value>(80, 1148)</value>
     </param>
     <param>
-      <key>o_init_state</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>i_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
+      <key>id</key>
+      <value>virtual_source_0_0_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
-      <key>i_init_state</key>
+      <key>_coordinate</key>
+      <value>(72, 1244)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blks2_error_rate</key>
     <param>
-      <key>interleaver_args</key>
-      <value>trellis.interleaver(block,666)</value>
+      <key>id</key>
+      <value>blks2_error_rate_0</value>
     </param>
     <param>
-      <key>bl</key>
-      <value>block</value>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>'SER'</value>
+    </param>
+    <param>
+      <key>win_size</key>
+      <value>block*100</value>
+    </param>
+    <param>
+      <key>bits_per_symbol</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -706,7 +844,34 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(235, 154)</value>
+      <value>(312, 1184)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>note</key>
+    <param>
+      <key>id</key>
+      <value>note_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>note</key>
+      <value>Substititue the metrics/Viterbi block with Viterbi_combo</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(712, 868)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -721,7 +886,7 @@
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>False</value>
     </param>
     <param>
       <key>type</key>
@@ -729,15 +894,15 @@
     </param>
     <param>
       <key>card</key>
-      <value>16</value>
+      <value>trellis.fsm(prefix+fsm).O()</value>
     </param>
     <param>
       <key>dim</key>
-      <value>2</value>
+      <value>dim</value>
     </param>
     <param>
       <key>table</key>
-      <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0,   0,-7,0, -5,0, -3,0, 
-1,0, 1,0, 3,0, 5,0, 7,0</value>
+      <value>constellation</value>
     </param>
     <param>
       <key>metric_type</key>
@@ -761,7 +926,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(89, 380)</value>
+      <value>(304, 711)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -769,58 +934,34 @@
     </param>
   </block>
   <block>
-    <key>trellis_pccc_decoder_x</key>
+    <key>trellis_viterbi_x</key>
     <param>
       <key>id</key>
-      <value>trellis_pccc_decoder_x_0</value>
+      <value>trellis_viterbi_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>s</value>
-    </param>
-    <param>
-      <key>o_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
-    </param>
-    <param>
-      <key>o_init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>o_final_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>i_fsm_args</key>
-      <value>prefix+"/awgn1o2_4.fsm"</value>
-    </param>
-    <param>
-      <key>i_init_state</key>
-      <value>0</value>
+      <value>False</value>
     </param>
     <param>
-      <key>i_final_state</key>
-      <value>-1</value>
+      <key>type</key>
+      <value>b</value>
     </param>
     <param>
-      <key>interleaver</key>
-      <value>trellis.interleaver(block,666)</value>
+      <key>fsm_args</key>
+      <value>prefix+fsm</value>
     </param>
     <param>
       <key>block_size</key>
       <value>block</value>
     </param>
     <param>
-      <key>iterations</key>
-      <value>10</value>
+      <key>init_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>siso_type</key>
-      <value>trellis.TRELLIS_MIN_SUM</value>
+      <key>final_state</key>
+      <value>-1</value>
     </param>
     <param>
       <key>alias</key>
@@ -840,7 +981,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(379, 332)</value>
+      <value>(544, 711)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -848,34 +989,50 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>trellis_viterbi_combined_xx</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0</value>
+      <value>trellis_viterbi_combined_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>type</key>
+      <value>f</value>
     </param>
     <param>
       <key>out_type</key>
-      <value>float</value>
+      <value>b</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      
<value>-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0,-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0</value>
+      <key>fsm_args</key>
+      <value>prefix+fsm</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>2</value>
+      <key>block_size</key>
+      <value>block</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>init_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>final_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>dim</key>
+      <value>dim</value>
+    </param>
+    <param>
+      <key>table</key>
+      <value>constellation</value>
+    </param>
+    <param>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
       <key>alias</key>
@@ -895,7 +1052,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(552, 164)</value>
+      <value>(440, 866)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -903,50 +1060,53 @@
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>import</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>import_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>import</key>
+      <value>import numpy</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>R</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(16, 140)</value>
     </param>
     <param>
-      <key>ignoretag</key>
-      <value>True</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>import</key>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>id</key>
+      <value>import_0_0</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>import</key>
+      <value>import gnuradio.trellis.fsm_utils as fu</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(553, 89)</value>
+      <value>(24, 196)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -954,30 +1114,34 @@
     </param>
   </block>
   <block>
-    <key>analog_noise_source_x</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>analog_noise_source_x_0</value>
+      <value>digital_chunks_to_symbols_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
+      <key>in_type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>out_type</key>
       <value>float</value>
     </param>
     <param>
-      <key>noise_type</key>
-      <value>analog.GR_GAUSSIAN</value>
+      <key>symbol_table</key>
+      <value>constellation</value>
     </param>
     <param>
-      <key>amp</key>
-      <value>noisevar</value>
+      <key>dimension</key>
+      <value>dim</value>
     </param>
     <param>
-      <key>seed</key>
-      <value>-42</value>
+      <key>num_ports</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -997,7 +1161,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(551, 230)</value>
+      <value>(696, 373)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1005,10 +1169,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_add_xx</key>
+    <key>trellis_encoder_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_1</value>
+      <value>trellis_encoder_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1016,15 +1180,23 @@
     </param>
     <param>
       <key>type</key>
-      <value>float</value>
+      <value>bb</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>fsm_args</key>
+      <value>prefix+fsm</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>init_state</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>blockwise</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>blocklength</key>
+      <value>0</value>
     </param>
     <param>
       <key>alias</key>
@@ -1044,7 +1216,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(839, 176)</value>
+      <value>(424, 373)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1052,81 +1224,93 @@
     </param>
   </block>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>analog_noise_source_x_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_metrics_x_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
     <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id>
+    <sink_block_id>blocks_throttle_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_pccc_encoder_xx_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>trellis_encoder_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_metrics_x_0</source_block_id>
-    <sink_block_id>trellis_pccc_decoder_x_0</sink_block_id>
+    <source_block_id>trellis_encoder_xx_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_pccc_decoder_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>virtual_sink_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_1_0</source_block_id>
-    <sink_block_id>qtgui_number_sink_0</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>trellis_metrics_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+    <source_block_id>trellis_metrics_x_0</source_block_id>
+    <sink_block_id>trellis_viterbi_x_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>virtual_sink_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_2_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_1_0</sink_block_id>
+    <source_block_id>trellis_viterbi_x_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_noise_source_x_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+    <source_block_id>blks2_error_rate_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
+  <connection>
+    <source_block_id>virtual_source_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>0</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>virtual_source_0_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>1</sink_key>
+  </connection>
 </flow_graph>
diff --git a/gr-trellis/examples/grc/interference_cancellation.grc 
b/gr-trellis/examples/grc/turbo_equalization.grc
similarity index 51%
copy from gr-trellis/examples/grc/interference_cancellation.grc
copy to gr-trellis/examples/grc/turbo_equalization.grc
index 2ccc723..b2c3b20 100644
--- a/gr-trellis/examples/grc/interference_cancellation.grc
+++ b/gr-trellis/examples/grc/turbo_equalization.grc
@@ -1,55 +1,47 @@
 <?xml version='1.0' encoding='ASCII'?>
+<?grc format='1' created='3.7.6'?>
 <flow_graph>
-  <timestamp>Mon Jul 28 14:00:18 2014</timestamp>
+  <timestamp>Wed Oct  1 11:04:18 2014</timestamp>
   <block>
-    <key>options</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>int_cancellation</value>
+      <value>fsm_i</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>title</key>
-      <value>Superposition Coding</value>
-    </param>
-    <param>
-      <key>author</key>
-      <value>AA</value>
-    </param>
-    <param>
-      <key>description</key>
-      <value>gnuradio flow graph</value>
+      <key>value</key>
+      <value>trellis.fsm(len(modulation[1]),len(channel))</value>
     </param>
     <param>
-      <key>window_size</key>
-      <value>2048, 2048</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>generate_options</key>
-      <value>qt_gui</value>
+      <key>_coordinate</key>
+      <value>(320, 293)</value>
     </param>
     <param>
-      <key>category</key>
-      <value>Custom</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>run_options</key>
-      <value>prompt</value>
+      <key>id</key>
+      <value>prefix</value>
     </param>
     <param>
-      <key>run</key>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>max_nouts</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>realtime_scheduling</key>
-      <value></value>
+      <key>value</key>
+      <value>"@FSM_FILE_INSTALL_DIR@"</value>
     </param>
     <param>
       <key>alias</key>
@@ -57,7 +49,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(10, 10)</value>
+      <value>(768, 21)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -68,7 +60,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>prefix</value>
+      <value>tot_mod</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -76,7 +68,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>"@FSM_FILE_INSTALL_DIR@"</value>
+      <value>fu.make_isi_lookup(modulation,channel,False)</value>
     </param>
     <param>
       <key>alias</key>
@@ -84,7 +76,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(660, 11)</value>
+      <value>(320, 381)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -95,7 +87,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>block</value>
+      <value>R</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -103,7 +95,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>1000</value>
+      <value>100e3</value>
     </param>
     <param>
       <key>alias</key>
@@ -111,7 +103,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(583, 10)</value>
+      <value>(216, 109)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -122,7 +114,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>R</value>
+      <value>modulation</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -130,7 +122,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>100e3</value>
+      <value>fu.pam4</value>
     </param>
     <param>
       <key>alias</key>
@@ -138,7 +130,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(502, 10)</value>
+      <value>(320, 117)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -149,7 +141,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>noisevar</value>
+      <value>channel</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -157,7 +149,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>10**(-snr_db/10)</value>
+      <value>fu.c_channel</value>
     </param>
     <param>
       <key>alias</key>
@@ -165,7 +157,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(428, 10)</value>
+      <value>(320, 205)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -173,54 +165,80 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>bpsym</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>value</key>
+      <value>int(round(math.log(fsm_o.I())/math.log(2)))</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>max</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(528, 29)</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>id</key>
+      <value>noisevar</value>
     </param>
     <param>
-      <key>repeat</key>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
+      <key>value</key>
+      <value>10**(-EsN0_dB/10.0)  * Es   /2.0</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(1080, 181)</value>
     </param>
     <param>
-      <key>minoutbuf</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>id</key>
+      <value>Es</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(21, 170)</value>
+      <value>(776, 181)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -228,54 +246,80 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>variable</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_1</value>
+      <value>interleaver</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>value</key>
+      <value>trellis.interleaver(block_b/bpsym,666)</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>max</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(528, 117)</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>repeat</key>
+      <key>id</key>
+      <value>fsm_o</value>
+    </param>
+    <param>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
+      <key>value</key>
+      <value>trellis.fsm(prefix+"/awgn1o2_4.fsm")</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(328, 29)</value>
     </param>
     <param>
-      <key>minoutbuf</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>id</key>
+      <value>block_b</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>bpsym*1000</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(25, 291)</value>
+      <value>(216, 21)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -283,46 +327,53 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>import</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_0</value>
+      <value>import_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>import</key>
+      <value>import gnuradio.trellis.fsm_utils as fu</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(24, 252)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>import</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>import_0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>import</key>
+      <value>import numpy</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(536, 529)</value>
+      <value>(16, 140)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -330,46 +381,49 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_xx</key>
+    <key>import</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_xx_0</value>
+      <value>import_0_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
+      <key>import</key>
+      <value>import math</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(24, 188)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_sink_0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(771, 525)</value>
+      <value>(608, 1076)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -377,10 +431,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>blocks_add_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_3</value>
+      <value>blocks_add_xx_1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -388,17 +442,17 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
+      <value>float</value>
     </param>
     <param>
       <key>num_inputs</key>
       <value>2</value>
     </param>
     <param>
+      <key>vlen</key>
+      <value>1</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -416,7 +470,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(535, 792)</value>
+      <value>(688, 944)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -424,10 +478,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>analog_noise_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_2</value>
+      <value>analog_noise_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -435,15 +489,19 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>noise_type</key>
+      <value>analog.GR_GAUSSIAN</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>amp</key>
+      <value>noisevar**0.5</value>
+    </param>
+    <param>
+      <key>seed</key>
+      <value>-42</value>
     </param>
     <param>
       <key>alias</key>
@@ -463,7 +521,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(944, 978)</value>
+      <value>(288, 958)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -471,10 +529,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>fir_filter_xxx</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_1</value>
+      <value>fir_filter_xxx_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -482,15 +540,19 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
+      <value>fff</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>decim</key>
       <value>1</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>taps</key>
+      <value>fu.c_channel</value>
+    </param>
+    <param>
+      <key>samp_delay</key>
+      <value>0</value>
     </param>
     <param>
       <key>alias</key>
@@ -510,7 +572,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(540, 1141)</value>
+      <value>(448, 861)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -518,26 +580,34 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_2_0</value>
+      <value>digital_chunks_to_symbols_xx_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>in_type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>out_type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>symbol_table</key>
+      <value>modulation[1]</value>
+    </param>
+    <param>
+      <key>dimension</key>
+      <value>modulation[0]</value>
+    </param>
+    <param>
+      <key>num_ports</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -557,7 +627,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(975, 1342)</value>
+      <value>(480, 733)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -565,10 +635,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_sub_xx</key>
+    <key>trellis_permutation</key>
     <param>
       <key>id</key>
-      <value>blocks_sub_xx_1_0</value>
+      <value>trellis_permutation_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -576,15 +646,23 @@
     </param>
     <param>
       <key>type</key>
-      <value>short</value>
+      <value>byte</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>interleaver_size</key>
+      <value>interleaver.K()</value>
+    </param>
+    <param>
+      <key>table</key>
+      <value>interleaver.INTER()</value>
+    </param>
+    <param>
+      <key>syms_per_block</key>
       <value>1</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -604,7 +682,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(559, 1536)</value>
+      <value>(208, 726)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -612,28 +690,55 @@
     </param>
   </block>
   <block>
-    <key>blocks_add_xx</key>
+    <key>virtual_sink</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_0</value>
+      <value>virtual_sink_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>stream_id</key>
+      <value>info_i</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(968, 572)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_throttle</key>
+    <param>
+      <key>id</key>
+      <value>blocks_throttle_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>byte</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>R</value>
     </param>
     <param>
       <key>vlen</key>
       <value>1</value>
     </param>
     <param>
+      <key>ignoretag</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -651,7 +756,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1224, 245)</value>
+      <value>(256, 580)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -659,10 +764,10 @@
     </param>
   </block>
   <block>
-    <key>analog_noise_source_x</key>
+    <key>analog_random_source_x</key>
     <param>
       <key>id</key>
-      <value>analog_noise_source_x_0</value>
+      <value>analog_random_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -670,19 +775,23 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>byte</value>
     </param>
     <param>
-      <key>noise_type</key>
-      <value>analog.GR_GAUSSIAN</value>
+      <key>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>amp</key>
-      <value>noisevar</value>
+      <key>max</key>
+      <value>2</value>
     </param>
     <param>
-      <key>seed</key>
-      <value>-42</value>
+      <key>num_samps</key>
+      <value>1007</value>
+    </param>
+    <param>
+      <key>repeat</key>
+      <value>True</value>
     </param>
     <param>
       <key>alias</key>
@@ -702,7 +811,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1178, 321)</value>
+      <value>(16, 559)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -710,30 +819,18 @@
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>blocks_pack_k_bits_bb</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>blocks_pack_k_bits_bb_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>samples_per_second</key>
-      <value>R</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>ignoretag</key>
-      <value>True</value>
+      <key>k</key>
+      <value>bpsym</value>
     </param>
     <param>
       <key>alias</key>
@@ -753,7 +850,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(579, 143)</value>
+      <value>(440, 580)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -761,10 +858,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_const_vxx</key>
+    <key>trellis_encoder_xx</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_0</value>
+      <value>trellis_encoder_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -772,15 +869,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>bb</value>
     </param>
     <param>
-      <key>const</key>
-      <value>alpha**0.5</value>
+      <key>fsm_args</key>
+      <value>fsm_o</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>init_state</key>
+      <value>0</value>
     </param>
     <param>
       <key>alias</key>
@@ -800,7 +897,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(988, 196)</value>
+      <value>(672, 573)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -808,34 +905,64 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>virtual_sink</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0</value>
+      <value>virtual_sink_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
+      <key>_coordinate</key>
+      <value>(248, 524)</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0_1</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>stream_id</key>
+      <value>estimate</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(864, 1380)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>blocks_unpack_k_bits_bb</key>
+    <param>
+      <key>id</key>
+      <value>blocks_unpack_k_bits_bb_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>k</key>
+      <value>bpsym</value>
     </param>
     <param>
       <key>alias</key>
@@ -855,7 +982,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(703, 211)</value>
+      <value>(552, 1380)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -863,25 +990,21 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_const_vxx</key>
+    <key>blocks_char_to_float</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_1</value>
+      <value>blocks_char_to_float_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>const</key>
-      <value>(1-alpha)**0.5</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>scale</key>
       <value>1</value>
     </param>
     <param>
@@ -902,7 +1025,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(994, 319)</value>
+      <value>(72, 1380)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -910,33 +1033,33 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>trellis_permutation</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0_0</value>
+      <value>trellis_permutation_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
+      <key>interleaver_size</key>
+      <value>interleaver.K()</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
+      <key>table</key>
+      <value>interleaver.DEINTER()</value>
     </param>
     <param>
-      <key>dimension</key>
+      <key>syms_per_block</key>
       <value>1</value>
     </param>
     <param>
-      <key>num_ports</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
     <param>
@@ -957,7 +1080,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(703, 311)</value>
+      <value>(568, 1222)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -965,34 +1088,50 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>trellis_viterbi_combined_xx</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0_0_0</value>
+      <value>trellis_viterbi_combined_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>type</key>
+      <value>f</value>
     </param>
     <param>
       <key>out_type</key>
-      <value>complex</value>
+      <value>b</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
+      <key>fsm_args</key>
+      <value>fsm_i</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>block_size</key>
+      <value>interleaver.K()</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>init_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>final_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>dim</key>
+      <value>tot_mod[0]</value>
+    </param>
+    <param>
+      <key>table</key>
+      <value>tot_mod[1]</value>
+    </param>
+    <param>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
       <key>alias</key>
@@ -1012,7 +1151,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(418, 1000)</value>
+      <value>(288, 1194)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1020,46 +1159,45 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_const_vxx</key>
+    <key>virtual_sink</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_2</value>
+      <value>virtual_sink_0_1_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>const</key>
-      <value>alpha**0.5</value>
+      <key>stream_id</key>
+      <value>estimate_i</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(896, 1228)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(710, 1008)</value>
+      <value>(40, 1236)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1067,10 +1205,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_multiply_const_vxx</key>
+    <key>analog_const_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_2_0</value>
+      <value>analog_const_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1078,15 +1216,11 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>float</value>
     </param>
     <param>
       <key>const</key>
-      <value>(1-alpha)**0.5</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
+      <value>0</value>
     </param>
     <param>
       <key>alias</key>
@@ -1106,7 +1240,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(733, 1374)</value>
+      <value>(88, 1788)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1114,36 +1248,52 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>trellis_viterbi_combined_xx</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0_0_1</value>
+      <value>trellis_viterbi_combined_xx_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
+      <key>type</key>
+      <value>f</value>
     </param>
     <param>
       <key>out_type</key>
-      <value>complex</value>
+      <value>b</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>1,1j,-1j,-1</value>
+      <key>fsm_args</key>
+      <value>fsm_o</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>block_size</key>
+      <value>interleaver.K()</value>
     </param>
     <param>
-      <key>num_ports</key>
+      <key>init_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>final_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>dim</key>
       <value>1</value>
     </param>
     <param>
+      <key>table</key>
+      <value>0,1,2,3</value>
+    </param>
+    <param>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_HARD_SYMBOL</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -1161,7 +1311,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(420, 1366)</value>
+      <value>(256, 1338)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1169,128 +1319,140 @@
     </param>
   </block>
   <block>
-    <key>variable_qtgui_range</key>
+    <key>trellis_siso_combined_f</key>
     <param>
       <key>id</key>
-      <value>alpha</value>
+      <value>trellis_siso_combined_f_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>P1/P</value>
+      <key>fsm_args</key>
+      <value>fsm_i</value>
     </param>
     <param>
-      <key>value</key>
-      <value>0.6</value>
+      <key>block_size</key>
+      <value>interleaver.K()</value>
     </param>
     <param>
-      <key>start</key>
-      <value>0</value>
+      <key>init_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>stop</key>
-      <value>1</value>
+      <key>final_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>a_post_in</key>
+      <value>True</value>
     </param>
     <param>
-      <key>step</key>
-      <value>0.01</value>
+      <key>a_post_out</key>
+      <value>False</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>siso_type</key>
+      <value>trellis.TRELLIS_MIN_SUM</value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>dim</key>
+      <value>tot_mod[0]</value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>table</key>
+      <value>tot_mod[1]</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>metric_type</key>
+      <value>trellis.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(177, 10)</value>
+      <value>(280, 1765)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>variable_qtgui_range</key>
+    <key>trellis_permutation</key>
     <param>
       <key>id</key>
-      <value>snr_db</value>
+      <value>trellis_permutation_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>P/sigma^2 (dB)</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>value</key>
-      <value>16</value>
+      <key>interleaver_size</key>
+      <value>interleaver.K()</value>
     </param>
     <param>
-      <key>start</key>
-      <value>0</value>
+      <key>table</key>
+      <value>interleaver.DEINTER()</value>
     </param>
     <param>
-      <key>stop</key>
-      <value>20</value>
+      <key>syms_per_block</key>
+      <value>fsm_o.O()</value>
     </param>
     <param>
-      <key>step</key>
-      <value>0.01</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>widget</key>
-      <value>counter_slider</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>orient</key>
-      <value>Qt.Horizontal</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>min_len</key>
-      <value>200</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(300, 10)</value>
+      <value>(616, 1814)</value>
     </param>
     <param>
       <key>_rotation</key>
-      <value>180</value>
+      <value>0</value>
     </param>
   </block>
   <block>
-    <key>blocks_add_xx</key>
+    <key>trellis_viterbi_x</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_1</value>
+      <value>trellis_viterbi_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1298,15 +1460,23 @@
     </param>
     <param>
       <key>type</key>
-      <value>complex</value>
+      <value>b</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>2</value>
+      <key>fsm_args</key>
+      <value>fsm_o</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>block_size</key>
+      <value>interleaver.K()</value>
+    </param>
+    <param>
+      <key>init_state</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>final_state</key>
+      <value>-1</value>
     </param>
     <param>
       <key>alias</key>
@@ -1326,7 +1496,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1400, 262)</value>
+      <value>(288, 2023)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1334,322 +1504,328 @@
     </param>
   </block>
   <block>
-    <key>qtgui_const_sink_x</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>qtgui_const_sink_x_0</value>
+      <value>virtual_source_0_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>name</key>
-      <value>Constellation</value>
+      <key>_coordinate</key>
+      <value>(72, 1860)</value>
     </param>
     <param>
-      <key>size</key>
-      <value>1024</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>grid</key>
-      <value>False</value>
+      <key>id</key>
+      <value>virtual_source_0_1_0</value>
     </param>
     <param>
-      <key>autoscale</key>
-      <value>False</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>ymin</key>
-      <value>-2</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>ymax</key>
-      <value>2</value>
+      <key>_coordinate</key>
+      <value>(88, 2564)</value>
     </param>
     <param>
-      <key>xmin</key>
-      <value>-2</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_unpack_k_bits_bb</key>
     <param>
-      <key>xmax</key>
-      <value>2</value>
+      <key>id</key>
+      <value>blocks_unpack_k_bits_bb_0_0</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>k</key>
+      <value>bpsym</value>
     </param>
     <param>
-      <key>gui_hint</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>tr_mode</key>
-      <value>qtgui.TRIG_MODE_FREE</value>
-    </param>
-    <param>
-      <key>tr_slope</key>
-      <value>qtgui.TRIG_SLOPE_POS</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>tr_level</key>
-      <value>0.0</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>tr_chan</key>
+      <key>maxoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>tr_tag</key>
-      <value>""</value>
+      <key>_coordinate</key>
+      <value>(584, 2044)</value>
     </param>
     <param>
-      <key>label1</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>width1</key>
-      <value>1</value>
+      <key>id</key>
+      <value>virtual_sink_0_1_1</value>
     </param>
     <param>
-      <key>color1</key>
-      <value>"blue"</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>style1</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>estimate1</value>
     </param>
     <param>
-      <key>marker1</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(896, 2044)</value>
     </param>
     <param>
-      <key>alpha1</key>
-      <value>1.0</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>label2</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_0_0_0_0</value>
     </param>
     <param>
-      <key>width2</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color2</key>
-      <value>"red"</value>
+      <key>stream_id</key>
+      <value>estimate1</value>
     </param>
     <param>
-      <key>style2</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(144, 2284)</value>
     </param>
     <param>
-      <key>marker2</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>alpha2</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>label3</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_0_1_0</value>
     </param>
     <param>
-      <key>width3</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color3</key>
-      <value>"red"</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>style3</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(152, 2188)</value>
     </param>
     <param>
-      <key>marker3</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>alpha3</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_0_1_0_0</value>
     </param>
     <param>
-      <key>width4</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color4</key>
-      <value>"red"</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>style4</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(176, 2732)</value>
     </param>
     <param>
-      <key>marker4</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>alpha4</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>label5</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_0_0_0_0_0</value>
     </param>
     <param>
-      <key>width5</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>"red"</value>
+      <key>stream_id</key>
+      <value>estimate2</value>
     </param>
     <param>
-      <key>style5</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(168, 2828)</value>
     </param>
     <param>
-      <key>marker5</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>alpha5</key>
-      <value>1.0</value>
-    </param>
-    <param>
-      <key>label6</key>
-      <value></value>
+      <key>id</key>
+      <value>virtual_source_0_0_1</value>
     </param>
     <param>
-      <key>width6</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color6</key>
-      <value>"red"</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
-      <key>style6</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(80, 1556)</value>
     </param>
     <param>
-      <key>marker6</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
     <param>
-      <key>alpha6</key>
-      <value>1.0</value>
+      <key>id</key>
+      <value>virtual_source_0_0_0_0</value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>width7</key>
-      <value>1</value>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
-      <key>color7</key>
-      <value>"red"</value>
+      <key>_coordinate</key>
+      <value>(72, 1652)</value>
     </param>
     <param>
-      <key>style7</key>
+      <key>_rotation</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>wxgui_numbersink2</key>
     <param>
-      <key>marker7</key>
-      <value>0</value>
+      <key>id</key>
+      <value>wxgui_numbersink2_3_0_0_0</value>
     </param>
     <param>
-      <key>alpha7</key>
-      <value>1.0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>width8</key>
-      <value>1</value>
+      <key>title</key>
+      <value>BER_hard</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>"red"</value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>style8</key>
-      <value>0</value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>marker8</key>
+      <key>min_value</key>
       <value>0</value>
     </param>
     <param>
-      <key>alpha8</key>
+      <key>max_value</key>
       <value>1.0</value>
     </param>
     <param>
-      <key>label9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>width9</key>
-      <value>1</value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>"red"</value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>style9</key>
+      <key>ref_level</key>
       <value>0</value>
     </param>
     <param>
-      <key>marker9</key>
-      <value>0</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>alpha9</key>
-      <value>1.0</value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>width10</key>
-      <value>1</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>"red"</value>
+      <key>show_gauge</key>
+      <value>False</value>
     </param>
     <param>
-      <key>style10</key>
-      <value>0</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>marker10</key>
-      <value>0</value>
+      <key>grid_pos</key>
+      <value></value>
     </param>
     <param>
-      <key>alpha10</key>
-      <value>1.0</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
       <key>alias</key>
@@ -1661,7 +1837,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(0, 0)</value>
+      <value>(504, 1549)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1669,316 +1845,189 @@
     </param>
   </block>
   <block>
-    <key>blocks_short_to_float</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>blocks_short_to_float_0</value>
+      <value>wxgui_numbersink2_3_0_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>title</key>
+      <value>BER_soft</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
+      <key>min_value</key>
       <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(1010, 1551)</value>
+      <key>max_value</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
     <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0</value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>ref_level</key>
+      <value>0</value>
     </param>
     <param>
-      <key>name</key>
-      <value>""</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>autoscale</key>
+      <key>average</key>
       <value>False</value>
     </param>
     <param>
-      <key>avg</key>
+      <key>avg_alpha</key>
       <value>0.001</value>
     </param>
     <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>-1</value>
+      <key>show_gauge</key>
+      <value>False</value>
     </param>
     <param>
-      <key>max</key>
-      <value>1</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>grid_pos</key>
+      <value></value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value>0,0,1,1</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>label1</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit1</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
+      <key>_coordinate</key>
+      <value>(576, 2181)</value>
     </param>
     <param>
-      <key>factor1</key>
-      <value>1</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>wxgui_numbersink2</key>
     <param>
-      <key>label2</key>
-      <value></value>
+      <key>id</key>
+      <value>wxgui_numbersink2_3_0_0_0_0_0</value>
     </param>
     <param>
-      <key>unit2</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
+      <key>type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>factor2</key>
-      <value>1</value>
+      <key>title</key>
+      <value>BER_turbo</value>
     </param>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>unit3</key>
-      <value></value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor3</key>
-      <value>1</value>
+      <key>max_value</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>label4</key>
-      <value></value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>unit4</key>
-      <value></value>
+      <key>decimal_places</key>
+      <value>6</value>
     </param>
     <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
+      <key>ref_level</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor4</key>
-      <value>1</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>unit5</key>
-      <value></value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>factor5</key>
-      <value>1</value>
+      <key>show_gauge</key>
+      <value>False</value>
     </param>
     <param>
-      <key>label6</key>
+      <key>win_size</key>
       <value></value>
     </param>
     <param>
-      <key>unit6</key>
+      <key>grid_pos</key>
       <value></value>
     </param>
     <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor6</key>
-      <value>1</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>label7</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit7</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor7</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor8</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor9</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor10</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1257, 471)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>trellis_encoder_xx</key>
-    <param>
-      <key>id</key>
-      <value>trellis_encoder_xx_1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>ss</value>
-    </param>
-    <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(336, 311)</value>
+      <value>(600, 2725)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1986,10 +2035,10 @@
     </param>
   </block>
   <block>
-    <key>trellis_encoder_xx</key>
+    <key>trellis_sccc_decoder_combined_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_encoder_xx_0</value>
+      <value>trellis_sccc_decoder_combined_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1997,157 +2046,67 @@
     </param>
     <param>
       <key>type</key>
-      <value>ss</value>
-    </param>
-    <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <value>f</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>out_type</key>
+      <value>b</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(340, 187)</value>
+      <key>o_fsm_args</key>
+      <value>fsm_o</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>o_init_state</key>
+      <value>-1</value>
     </param>
-  </block>
-  <block>
-    <key>trellis_viterbi_combined_xx</key>
     <param>
-      <key>id</key>
-      <value>trellis_viterbi_combined_xx_1</value>
+      <key>o_final_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>i_fsm_args</key>
+      <value>fsm_i</value>
     </param>
     <param>
-      <key>type</key>
-      <value>c</value>
+      <key>i_init_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>s</value>
+      <key>i_final_state</key>
+      <value>-1</value>
     </param>
     <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <key>interleaver</key>
+      <value>interleaver</value>
     </param>
     <param>
       <key>block_size</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>-1</value>
+      <value>interleaver.K()</value>
     </param>
     <param>
-      <key>final_state</key>
-      <value>-1</value>
+      <key>iterations</key>
+      <value>5</value>
     </param>
     <param>
       <key>dim</key>
-      <value>1</value>
+      <value>tot_mod[0]</value>
     </param>
     <param>
       <key>table</key>
-      
<value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
+      <value>tot_mod[1]</value>
     </param>
     <param>
       <key>metric_type</key>
       <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(79, 501)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>trellis_viterbi_combined_xx</key>
-    <param>
-      <key>id</key>
-      <value>trellis_viterbi_combined_xx_2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>c</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>s</value>
-    </param>
-    <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
-    </param>
-    <param>
-      <key>block_size</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>final_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>dim</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>table</key>
-      
<value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
+      <key>siso_type</key>
+      <value>trellis.TRELLIS_MIN_SUM</value>
     </param>
     <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
+      <key>scaling</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>alias</key>
@@ -2167,7 +2126,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(82, 766)</value>
+      <value>(456, 2481)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -2175,852 +2134,25 @@
     </param>
   </block>
   <block>
-    <key>trellis_viterbi_combined_xx</key>
-    <param>
-      <key>id</key>
-      <value>trellis_viterbi_combined_xx_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>c</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>s</value>
-    </param>
-    <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
-    </param>
-    <param>
-      <key>block_size</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>final_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>dim</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>table</key>
-      
<value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value>
-    </param>
-    <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
+    <key>blks2_error_rate</key>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(83, 1111)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>trellis_viterbi_combined_xx</key>
-    <param>
-      <key>id</key>
-      <value>trellis_viterbi_combined_xx_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>c</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>s</value>
-    </param>
-    <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
-    </param>
-    <param>
-      <key>block_size</key>
-      <value>1000</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>final_state</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>dim</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>table</key>
-      
<value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value>
-    </param>
-    <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(75, 1495)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_multiply_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_multiply_xx_2_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(771, 1530)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_short_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_short_to_float_1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(985, 1608)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0_0_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>autoscale</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>avg</key>
-      <value>0.001</value>
-    </param>
-    <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.10</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value>1,0,1,1</value>
-    </param>
-    <param>
-      <key>label1</key>
-      <value>BER 2 (raw)</value>
-    </param>
-    <param>
-      <key>unit1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor3</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor4</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor5</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor6</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor7</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor8</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor9</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit10</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor10</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1272, 1551)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_multiply_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_multiply_xx_1</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(785, 779)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_short_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_short_to_float_2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1013, 735)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_multiply_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_multiply_xx_2</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>num_inputs</key>
-      <value>2</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(796, 1136)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_short_to_float</key>
-    <param>
-      <key>id</key>
-      <value>blocks_short_to_float_3</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>scale</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(1002, 1149)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>qtgui_number_sink</key>
-    <param>
-      <key>id</key>
-      <value>qtgui_number_sink_0_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>name</key>
-      <value>""</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>autoscale</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>avg</key>
-      <value>0.001</value>
-    </param>
-    <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
-    </param>
-    <param>
-      <key>nconnections</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>-1</value>
-    </param>
-    <param>
-      <key>max</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>update_time</key>
-      <value>0.10</value>
-    </param>
-    <param>
-      <key>gui_hint</key>
-      <value>0,1,1,1</value>
-    </param>
-    <param>
-      <key>label1</key>
-      <value>BER 2 (raw)</value>
-    </param>
-    <param>
-      <key>unit1</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor1</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit2</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor2</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit3</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor3</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit4</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor4</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit5</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor5</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit6</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor6</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit7</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor7</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit8</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor8</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>label9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>unit9</key>
-      <value></value>
-    </param>
-    <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
-    </param>
-    <param>
-      <key>factor9</key>
-      <value>1</value>
+      <key>id</key>
+      <value>blks2_error_rate_0_0_0_0</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit10</key>
-      <value></value>
+      <key>type</key>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
+      <key>win_size</key>
+      <value>block_b*100</value>
     </param>
     <param>
-      <key>factor10</key>
+      <key>bits_per_symbol</key>
       <value>1</value>
     </param>
     <param>
@@ -3032,8 +2164,16 @@
       <value></value>
     </param>
     <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(1223, 1133)</value>
+      <value>(408, 2766)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -3041,10 +2181,10 @@
     </param>
   </block>
   <block>
-    <key>trellis_encoder_xx</key>
+    <key>blks2_error_rate</key>
     <param>
       <key>id</key>
-      <value>trellis_encoder_xx_2_0</value>
+      <value>blks2_error_rate_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -3052,15 +2192,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>ss</value>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <key>win_size</key>
+      <value>block_b*100</value>
     </param>
     <param>
-      <key>init_state</key>
-      <value>0</value>
+      <key>bits_per_symbol</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -3080,7 +2220,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(103, 1366)</value>
+      <value>(384, 2230)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -3088,10 +2228,10 @@
     </param>
   </block>
   <block>
-    <key>trellis_encoder_xx</key>
+    <key>blks2_error_rate</key>
     <param>
       <key>id</key>
-      <value>trellis_encoder_xx_2</value>
+      <value>blks2_error_rate_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -3099,15 +2239,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>ss</value>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>fsm_args</key>
-      <value>prefix+"/awgn1o2_16.fsm"</value>
+      <key>win_size</key>
+      <value>block_b*100</value>
     </param>
     <param>
-      <key>init_state</key>
-      <value>0</value>
+      <key>bits_per_symbol</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -3127,7 +2267,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(89, 1000)</value>
+      <value>(312, 1598)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -3135,226 +2275,264 @@
     </param>
   </block>
   <block>
-    <key>qtgui_number_sink</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>qtgui_number_sink_0_0_0</value>
+      <value>EsN0_dB</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>name</key>
-      <value>""</value>
+      <key>label</key>
+      <value>Es/N0 (dB)</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>value</key>
+      <value>13.0</value>
     </param>
     <param>
-      <key>autoscale</key>
-      <value>False</value>
+      <key>min</key>
+      <value>-10</value>
     </param>
     <param>
-      <key>avg</key>
-      <value>0.001</value>
+      <key>max</key>
+      <value>30</value>
     </param>
     <param>
-      <key>graph_type</key>
-      <value>qtgui.NUM_GRAPH_HORIZ</value>
+      <key>num_steps</key>
+      <value>1000</value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>style</key>
+      <value>wx.SL_HORIZONTAL</value>
     </param>
     <param>
-      <key>min</key>
-      <value>-1</value>
+      <key>converver</key>
+      <value>float_converter</value>
     </param>
     <param>
-      <key>max</key>
-      <value>1</value>
+      <key>grid_pos</key>
+      <value></value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value>1,1,1,1</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>label1</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(936, 129)</value>
     </param>
     <param>
-      <key>unit1</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>options</key>
     <param>
-      <key>color1</key>
-      <value>("black", "black")</value>
+      <key>id</key>
+      <value>turbo_equalization</value>
     </param>
     <param>
-      <key>factor1</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label2</key>
-      <value></value>
+      <key>title</key>
+      <value>Hard/Soft/Turbo Equalization</value>
     </param>
     <param>
-      <key>unit2</key>
-      <value></value>
+      <key>author</key>
+      <value>AA</value>
     </param>
     <param>
-      <key>color2</key>
-      <value>("black", "black")</value>
+      <key>description</key>
+      <value>gnuradio flow graph</value>
     </param>
     <param>
-      <key>factor2</key>
-      <value>1</value>
+      <key>window_size</key>
+      <value>2048, 3048</value>
     </param>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>generate_options</key>
+      <value>wx_gui</value>
     </param>
     <param>
-      <key>unit3</key>
-      <value></value>
+      <key>category</key>
+      <value>Custom</value>
     </param>
     <param>
-      <key>color3</key>
-      <value>("black", "black")</value>
+      <key>run_options</key>
+      <value>prompt</value>
     </param>
     <param>
-      <key>factor3</key>
-      <value>1</value>
+      <key>run</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label4</key>
-      <value></value>
+      <key>max_nouts</key>
+      <value>0</value>
     </param>
     <param>
-      <key>unit4</key>
+      <key>realtime_scheduling</key>
       <value></value>
     </param>
     <param>
-      <key>color4</key>
-      <value>("black", "black")</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>factor4</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(10, 10)</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_unpack_k_bits_bb</key>
     <param>
-      <key>unit5</key>
-      <value></value>
+      <key>id</key>
+      <value>blocks_unpack_k_bits_bb_0_0_0</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>("black", "black")</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>factor5</key>
-      <value>1</value>
+      <key>k</key>
+      <value>bpsym</value>
     </param>
     <param>
-      <key>label6</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>unit6</key>
+      <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>color6</key>
-      <value>("black", "black")</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>factor6</key>
-      <value>1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(720, 2572)</value>
     </param>
     <param>
-      <key>unit7</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>color7</key>
-      <value>("black", "black")</value>
+      <key>id</key>
+      <value>virtual_sink_0_1_1_0</value>
     </param>
     <param>
-      <key>factor7</key>
-      <value>1</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>stream_id</key>
+      <value>estimate2</value>
     </param>
     <param>
-      <key>unit8</key>
-      <value></value>
+      <key>_coordinate</key>
+      <value>(920, 2572)</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>("black", "black")</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>note</key>
     <param>
-      <key>factor8</key>
-      <value>1</value>
+      <key>id</key>
+      <value>note_0_1</value>
     </param>
     <param>
-      <key>label9</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>unit9</key>
-      <value></value>
+      <key>note</key>
+      <value>This is the full-fledged turbo equalizer/decoder</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>("black", "black")</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>factor9</key>
-      <value>1</value>
+      <key>_coordinate</key>
+      <value>(1144, 2572)</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>note</key>
     <param>
-      <key>unit10</key>
-      <value></value>
+      <key>id</key>
+      <value>note_0_0</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>("black", "black")</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>factor10</key>
-      <value>1</value>
+      <key>note</key>
+      <value>This is a better soft-equalizer/Viterbi decoder</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>_coordinate</key>
+      <value>(1016, 1908)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+  </block>
+  <block>
+    <key>note</key>
+    <param>
+      <key>id</key>
+      <value>note_0</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>note</key>
+      <value>This is the simplest hard Viterbi equalizer/hard Viterbi 
decoder</value>
+    </param>
+    <param>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(1266, 720)</value>
+      <value>(1096, 1316)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -3362,303 +2540,219 @@
     </param>
   </block>
   <connection>
-    <source_block_id>analog_random_source_x_1</source_block_id>
-    <sink_block_id>trellis_encoder_xx_1</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>virtual_sink_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_0</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>blocks_throttle_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_0</source_block_id>
+    <source_block_id>analog_noise_source_x_0</source_block_id>
     <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_multiply_const_vxx_1</source_block_id>
-    <sink_block_id>blocks_add_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_0</sink_block_id>
-    <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>trellis_encoder_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
     <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id>
+    <sink_block_id>virtual_sink_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
+    <sink_block_id>fir_filter_xxx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>analog_random_source_x_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_1</sink_block_id>
+    <source_block_id>fir_filter_xxx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_1</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_1</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_2</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
+    <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
+    <sink_block_id>trellis_encoder_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_2</sink_block_id>
+    <source_block_id>trellis_encoder_xx_0</source_block_id>
+    <sink_block_id>trellis_permutation_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_const_vxx_2</source_block_id>
-    <sink_block_id>blocks_sub_xx_2</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
-    <sink_block_id>trellis_encoder_xx_2</sink_block_id>
+    <source_block_id>trellis_permutation_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
-    <sink_block_id>blocks_sub_xx_3</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_3</source_block_id>
-    <sink_block_id>blocks_multiply_xx_1</sink_block_id>
+    <source_block_id>trellis_encoder_xx_0</source_block_id>
+    <sink_block_id>virtual_sink_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_3</source_block_id>
-    <sink_block_id>blocks_multiply_xx_1</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>analog_random_source_x_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_3</sink_block_id>
+    <source_block_id>blocks_char_to_float_0</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_2</source_block_id>
-    <sink_block_id>trellis_encoder_xx_2_0</sink_block_id>
+    <source_block_id>trellis_permutation_0_0</source_block_id>
+    <sink_block_id>blocks_char_to_float_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_1_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_1_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
+    <source_block_id>trellis_permutation_0_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_sub_xx_1_0</source_block_id>
-    <sink_block_id>blocks_multiply_xx_2_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>1</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>blocks_sub_xx_2_0</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id>
+    <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_1</source_block_id>
+    <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_1_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+    <sink_block_id>trellis_permutation_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id>
-    <sink_block_id>blocks_sub_xx_2_0</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_encoder_xx_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_block_id>blocks_unpack_k_bits_bb_0_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_noise_source_x_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>virtual_source_0_1</source_block_id>
+    <sink_block_id>trellis_siso_combined_f_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
-    <source_key>0</source_key>
-    <sink_key>0</sink_key>
-  </connection>
-  <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+    <source_block_id>analog_const_source_x_0</source_block_id>
+    <sink_block_id>trellis_siso_combined_f_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id>
+    <source_block_id>trellis_siso_combined_f_0</source_block_id>
+    <sink_block_id>trellis_permutation_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_encoder_xx_1</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id>
+    <source_block_id>trellis_permutation_0_0_0</source_block_id>
+    <sink_block_id>trellis_viterbi_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_encoder_xx_2</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id>
+    <source_block_id>trellis_viterbi_x_0</source_block_id>
+    <sink_block_id>blocks_unpack_k_bits_bb_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id>
+    <source_block_id>virtual_source_0_1_0</source_block_id>
+    <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_encoder_xx_2_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id>
+    <source_block_id>blocks_unpack_k_bits_bb_0_0_0</source_block_id>
+    <sink_block_id>virtual_sink_0_1_1_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id>
+    <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id>
+    <sink_block_id>blocks_unpack_k_bits_bb_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>qtgui_const_sink_x_0</sink_block_id>
+    <source_block_id>blks2_error_rate_0_0_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id>
+    <source_block_id>virtual_source_0_0_1_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_0</source_block_id>
-    <sink_block_id>qtgui_number_sink_0</sink_block_id>
+    <source_block_id>virtual_source_0_0_0_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_2_0</source_block_id>
-    <sink_block_id>blocks_short_to_float_1</sink_block_id>
+    <source_block_id>blks2_error_rate_0_0_0_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_1</source_block_id>
-    <sink_block_id>qtgui_number_sink_0_0_0_0</sink_block_id>
+    <source_block_id>virtual_source_0_0_1_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_1</source_block_id>
-    <sink_block_id>blocks_short_to_float_2</sink_block_id>
+    <source_block_id>virtual_source_0_0_0_0_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_2</source_block_id>
-    <sink_block_id>qtgui_number_sink_0_0_0</sink_block_id>
+    <source_block_id>blks2_error_rate_0_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_multiply_xx_2</source_block_id>
-    <sink_block_id>blocks_short_to_float_3</sink_block_id>
+    <source_block_id>virtual_source_0_0_1</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_short_to_float_3</source_block_id>
-    <sink_block_id>qtgui_number_sink_0_0</sink_block_id>
+    <source_block_id>virtual_source_0_0_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
 </flow_graph>
diff --git a/gr-trellis/examples/grc/equalization.grc 
b/gr-trellis/examples/grc/viterbi_equalization.grc
similarity index 90%
rename from gr-trellis/examples/grc/equalization.grc
rename to gr-trellis/examples/grc/viterbi_equalization.grc
index 0e9c1bd..2f69ead 100644
--- a/gr-trellis/examples/grc/equalization.grc
+++ b/gr-trellis/examples/grc/viterbi_equalization.grc
@@ -69,7 +69,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>block</value>
+      <value>noisevar</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -77,7 +77,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>bpsym*1000</value>
+      <value>10**(-EsN0_dB/10.0)  * Es   /2.0</value>
     </param>
     <param>
       <key>alias</key>
@@ -85,7 +85,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(216, 21)</value>
+      <value>(872, 157)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -96,7 +96,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>R</value>
+      <value>bpsym</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -104,7 +104,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>100e3</value>
+      <value>int(round(math.log(fsm.I())/math.log(2)))</value>
     </param>
     <param>
       <key>alias</key>
@@ -112,7 +112,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(216, 109)</value>
+      <value>(528, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -150,7 +150,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>modulation</value>
+      <value>R</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -158,7 +158,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>fu.pam4</value>
+      <value>100e3</value>
     </param>
     <param>
       <key>alias</key>
@@ -166,7 +166,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(320, 21)</value>
+      <value>(216, 109)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -177,7 +177,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>fsm</value>
+      <value>block</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -185,7 +185,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>trellis.fsm(len(modulation[1]),len(channel))</value>
+      <value>bpsym*1000</value>
     </param>
     <param>
       <key>alias</key>
@@ -193,7 +193,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(320, 157)</value>
+      <value>(216, 21)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -204,7 +204,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>tot_channel</value>
+      <value>fsm</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -212,7 +212,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>fu.make_isi_lookup(modulation,channel,True)</value>
+      <value>trellis.fsm(len(modulation[1]),len(channel))</value>
     </param>
     <param>
       <key>alias</key>
@@ -220,7 +220,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(320, 229)</value>
+      <value>(320, 157)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -231,7 +231,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>bpsym</value>
+      <value>tot_mod</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -239,7 +239,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>int(round(math.log(fsm.I())/math.log(2)))</value>
+      <value>fu.make_isi_lookup(modulation,channel,False)</value>
     </param>
     <param>
       <key>alias</key>
@@ -247,7 +247,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(528, 13)</value>
+      <value>(320, 229)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -258,7 +258,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>Es</value>
+      <value>modulation</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -266,7 +266,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>1</value>
+      <value>fu.pam4</value>
     </param>
     <param>
       <key>alias</key>
@@ -274,7 +274,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(608, 157)</value>
+      <value>(320, 21)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -285,7 +285,7 @@
     <key>variable</key>
     <param>
       <key>id</key>
-      <value>noisevar</value>
+      <value>Es</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -293,7 +293,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>10**(-EsN0_dB/10.0)  * Es   /2.0</value>
+      <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value>
     </param>
     <param>
       <key>alias</key>
@@ -301,7 +301,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(872, 157)</value>
+      <value>(568, 157)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -390,10 +390,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_throttle</key>
+    <key>blks2_error_rate</key>
     <param>
       <key>id</key>
-      <value>blocks_throttle_0</value>
+      <value>blks2_error_rate_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -401,21 +401,17 @@
     </param>
     <param>
       <key>type</key>
-      <value>byte</value>
+      <value>'BER'</value>
     </param>
     <param>
-      <key>samples_per_second</key>
-      <value>R</value>
+      <key>win_size</key>
+      <value>block*100</value>
     </param>
     <param>
-      <key>vlen</key>
+      <key>bits_per_symbol</key>
       <value>1</value>
     </param>
     <param>
-      <key>ignoretag</key>
-      <value>True</value>
-    </param>
-    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -433,7 +429,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(216, 380)</value>
+      <value>(312, 1766)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -441,54 +437,22 @@
     </param>
   </block>
   <block>
-    <key>digital_chunks_to_symbols_xx</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>digital_chunks_to_symbols_xx_0</value>
+      <value>virtual_source_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>short</value>
-    </param>
-    <param>
-      <key>out_type</key>
-      <value>float</value>
-    </param>
-    <param>
-      <key>symbol_table</key>
-      <value>tot_channel[1]</value>
-    </param>
-    <param>
-      <key>dimension</key>
-      <value>tot_channel[0]</value>
-    </param>
-    <param>
-      <key>num_ports</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>info</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(920, 373)</value>
+      <value>(80, 1724)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -496,46 +460,22 @@
     </param>
   </block>
   <block>
-    <key>blocks_add_xx</key>
+    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>blocks_add_xx_1</value>
+      <value>virtual_source_0_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <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>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(912, 488)</value>
+      <value>(72, 1820)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -543,10 +483,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_null_sink</key>
+    <key>wxgui_numbersink2</key>
     <param>
       <key>id</key>
-      <value>blocks_null_sink_1</value>
+      <value>wxgui_numbersink2_3_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -557,79 +497,80 @@
       <value>float</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>title</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>num_inputs</key>
-      <value>1</value>
+      <key>units</key>
+      <value>BER</value>
     </param>
     <param>
-      <key>bus_conns</key>
-      <value>[[0,],]</value>
+      <key>samp_rate</key>
+      <value>R</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>min_value</key>
+      <value>0</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>max_value</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(1024, 552)</value>
+      <key>factor</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>decimal_places</key>
+      <value>6</value>
+    </param>
+    <param>
+      <key>ref_level</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>analog_noise_source_x</key>
     <param>
-      <key>id</key>
-      <value>analog_noise_source_x_0</value>
+      <key>number_rate</key>
+      <value>15</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>peak_hold</key>
+      <value>False</value>
     </param>
     <param>
-      <key>type</key>
-      <value>float</value>
+      <key>average</key>
+      <value>False</value>
     </param>
     <param>
-      <key>noise_type</key>
-      <value>analog.GR_GAUSSIAN</value>
+      <key>avg_alpha</key>
+      <value>0.001</value>
     </param>
     <param>
-      <key>amp</key>
-      <value>noisevar**0.5</value>
+      <key>show_gauge</key>
+      <value>False</value>
     </param>
     <param>
-      <key>seed</key>
-      <value>-42</value>
+      <key>win_size</key>
+      <value></value>
     </param>
     <param>
-      <key>alias</key>
+      <key>grid_pos</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>notebook</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(520, 494)</value>
+      <value>(728, 1709)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -637,46 +578,26 @@
     </param>
   </block>
   <block>
-    <key>trellis_encoder_xx</key>
+    <key>note</key>
     <param>
       <key>id</key>
-      <value>trellis_encoder_xx_0</value>
+      <value>note_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>bs</value>
-    </param>
-    <param>
-      <key>fsm_args</key>
-      <value>fsm</value>
-    </param>
-    <param>
-      <key>init_state</key>
-      <value>0</value>
+      <key>note</key>
+      <value>Substititue the metrics/Viterbi block with Viterbi_combo</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
-    </param>
-    <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(648, 373)</value>
+      <value>(704, 1468)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -699,7 +620,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(16, 732)</value>
+      <value>(40, 1236)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -710,7 +631,7 @@
     <key>virtual_sink</key>
     <param>
       <key>id</key>
-      <value>virtual_sink_0</value>
+      <value>virtual_sink_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -718,11 +639,11 @@
     </param>
     <param>
       <key>stream_id</key>
-      <value>observation</value>
+      <value>info</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(832, 620)</value>
+      <value>(232, 524)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -730,45 +651,54 @@
     </param>
   </block>
   <block>
-    <key>virtual_source</key>
+    <key>analog_random_source_x</key>
     <param>
       <key>id</key>
-      <value>virtual_source_0_0_0</value>
+      <value>analog_random_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>estimate</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(72, 1244)</value>
+      <key>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>max</key>
+      <value>2</value>
     </param>
-  </block>
-  <block>
-    <key>virtual_source</key>
     <param>
-      <key>id</key>
-      <value>virtual_source_0_0</value>
+      <key>num_samps</key>
+      <value>1007</value>
     </param>
     <param>
-      <key>_enabled</key>
+      <key>repeat</key>
       <value>True</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>info</value>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(80, 1148)</value>
+      <value>(16, 559)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -776,10 +706,10 @@
     </param>
   </block>
   <block>
-    <key>wxgui_numbersink2</key>
+    <key>blocks_null_sink</key>
     <param>
       <key>id</key>
-      <value>wxgui_numbersink2_3_0_0</value>
+      <value>blocks_null_sink_1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -790,68 +720,82 @@
       <value>float</value>
     </param>
     <param>
-      <key>title</key>
-      <value>BER</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>units</key>
-      <value>BER</value>
+      <key>num_inputs</key>
+      <value>1</value>
     </param>
     <param>
-      <key>samp_rate</key>
-      <value>R</value>
+      <key>bus_conns</key>
+      <value>[[0,],]</value>
     </param>
     <param>
-      <key>min_value</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>max_value</key>
-      <value>1.0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>factor</key>
-      <value>1.0</value>
+      <key>_coordinate</key>
+      <value>(800, 1008)</value>
     </param>
     <param>
-      <key>decimal_places</key>
-      <value>6</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>ref_level</key>
-      <value>0</value>
+      <key>id</key>
+      <value>virtual_sink_0</value>
     </param>
     <param>
-      <key>number_rate</key>
-      <value>15</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>peak_hold</key>
-      <value>False</value>
+      <key>stream_id</key>
+      <value>observation</value>
     </param>
     <param>
-      <key>average</key>
-      <value>False</value>
+      <key>_coordinate</key>
+      <value>(608, 1076)</value>
     </param>
     <param>
-      <key>avg_alpha</key>
-      <value>0.001</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>fir_filter_xxx</key>
     <param>
-      <key>show_gauge</key>
-      <value>False</value>
+      <key>id</key>
+      <value>fir_filter_xxx_0</value>
     </param>
     <param>
-      <key>win_size</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value></value>
+      <key>type</key>
+      <value>fff</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value></value>
+      <key>decim</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>taps</key>
+      <value>fu.c_channel</value>
+    </param>
+    <param>
+      <key>samp_delay</key>
+      <value>0</value>
     </param>
     <param>
       <key>alias</key>
@@ -862,8 +806,16 @@
       <value></value>
     </param>
     <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(728, 1133)</value>
+      <value>(904, 613)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -871,10 +823,10 @@
     </param>
   </block>
   <block>
-    <key>analog_random_source_x</key>
+    <key>blocks_add_xx</key>
     <param>
       <key>id</key>
-      <value>analog_random_source_x_0</value>
+      <value>blocks_add_xx_1</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -882,23 +834,15 @@
     </param>
     <param>
       <key>type</key>
-      <value>byte</value>
-    </param>
-    <param>
-      <key>min</key>
-      <value>0</value>
+      <value>float</value>
     </param>
     <param>
-      <key>max</key>
+      <key>num_inputs</key>
       <value>2</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1007</value>
-    </param>
-    <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
       <key>alias</key>
@@ -918,7 +862,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(8, 359)</value>
+      <value>(688, 944)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -926,49 +870,30 @@
     </param>
   </block>
   <block>
-    <key>virtual_sink</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>virtual_sink_0_0</value>
+      <value>digital_chunks_to_symbols_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>stream_id</key>
-      <value>info</value>
-    </param>
-    <param>
-      <key>_coordinate</key>
-      <value>(208, 324)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
-    </param>
-  </block>
-  <block>
-    <key>blocks_packed_to_unpacked_xx</key>
-    <param>
-      <key>id</key>
-      <value>blocks_packed_to_unpacked_xx_0</value>
+      <value>False</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>in_type</key>
+      <value>short</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>out_type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>bits_per_chunk</key>
-      <value>bpsym</value>
+      <key>symbol_table</key>
+      <value>tot_mod[1]</value>
     </param>
     <param>
-      <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
+      <key>dimension</key>
+      <value>tot_mod[0]</value>
     </param>
     <param>
       <key>num_ports</key>
@@ -992,7 +917,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(408, 397)</value>
+      <value>(944, 461)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1000,10 +925,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_unpacked_to_packed_xx</key>
+    <key>analog_noise_source_x</key>
     <param>
       <key>id</key>
-      <value>blocks_unpacked_to_packed_xx_0</value>
+      <value>analog_noise_source_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1011,19 +936,19 @@
     </param>
     <param>
       <key>type</key>
-      <value>byte</value>
+      <value>float</value>
     </param>
     <param>
-      <key>bits_per_chunk</key>
-      <value>1</value>
+      <key>noise_type</key>
+      <value>analog.GR_GAUSSIAN</value>
     </param>
     <param>
-      <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
+      <key>amp</key>
+      <value>noisevar**0.5</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>seed</key>
+      <value>-42</value>
     </param>
     <param>
       <key>alias</key>
@@ -1043,7 +968,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(400, 309)</value>
+      <value>(288, 958)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1051,49 +976,54 @@
     </param>
   </block>
   <block>
-    <key>note</key>
+    <key>trellis_metrics_x</key>
     <param>
       <key>id</key>
-      <value>note_0</value>
+      <value>trellis_metrics_x_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>False</value>
     </param>
     <param>
-      <key>note</key>
-      <value>Substititue the metrics/Viterbi block with Viterbi_combo</value>
+      <key>type</key>
+      <value>f</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>card</key>
+      <value>fsm.O()</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(720, 908)</value>
+      <key>dim</key>
+      <value>tot_mod[0]</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>table</key>
+      <value>tot_mod[1]</value>
     </param>
-  </block>
-  <block>
-    <key>virtual_sink</key>
     <param>
-      <key>id</key>
-      <value>virtual_sink_0_1</value>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>estimate</value>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(984, 812)</value>
+      <value>(272, 1271)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1101,50 +1031,58 @@
     </param>
   </block>
   <block>
-    <key>blocks_packed_to_unpacked_xx</key>
+    <key>variable_slider</key>
     <param>
       <key>id</key>
-      <value>blocks_packed_to_unpacked_xx_0_0</value>
+      <value>EsN0_dB</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>byte</value>
+      <key>label</key>
+      <value>Es/N0 (dB)</value>
     </param>
     <param>
-      <key>bits_per_chunk</key>
-      <value>1</value>
+      <key>value</key>
+      <value>20.0</value>
     </param>
     <param>
-      <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
+      <key>min</key>
+      <value>-10</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>max</key>
+      <value>30</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>num_steps</key>
+      <value>1000</value>
     </param>
     <param>
-      <key>affinity</key>
+      <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>minoutbuf</key>
-      <value>0</value>
+      <key>notebook</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(768, 813)</value>
+      <value>(728, 105)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1152,10 +1090,10 @@
     </param>
   </block>
   <block>
-    <key>blocks_unpacked_to_packed_xx</key>
+    <key>blocks_throttle</key>
     <param>
       <key>id</key>
-      <value>blocks_unpacked_to_packed_xx_0_0</value>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
       <key>_enabled</key>
@@ -1166,16 +1104,16 @@
       <value>byte</value>
     </param>
     <param>
-      <key>bits_per_chunk</key>
-      <value>bpsym</value>
+      <key>samples_per_second</key>
+      <value>R</value>
     </param>
     <param>
-      <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>ignoretag</key>
+      <value>True</value>
     </param>
     <param>
       <key>alias</key>
@@ -1195,7 +1133,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(760, 749)</value>
+      <value>(240, 580)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1203,25 +1141,33 @@
     </param>
   </block>
   <block>
-    <key>blks2_error_rate</key>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>id</key>
-      <value>blks2_error_rate_0</value>
+      <value>digital_chunks_to_symbols_xx_0_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>'BER'</value>
+      <key>in_type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>win_size</key>
-      <value>block*100</value>
+      <key>out_type</key>
+      <value>float</value>
     </param>
     <param>
-      <key>bits_per_symbol</key>
+      <key>symbol_table</key>
+      <value>modulation[1]</value>
+    </param>
+    <param>
+      <key>dimension</key>
+      <value>modulation[0]</value>
+    </param>
+    <param>
+      <key>num_ports</key>
       <value>1</value>
     </param>
     <param>
@@ -1242,7 +1188,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(312, 1184)</value>
+      <value>(672, 613)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1250,58 +1196,77 @@
     </param>
   </block>
   <block>
-    <key>variable_slider</key>
+    <key>virtual_sink</key>
     <param>
       <key>id</key>
-      <value>EsN0_dB</value>
+      <value>virtual_sink_0_1</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>label</key>
-      <value>Es/N0 (dB)</value>
+      <key>stream_id</key>
+      <value>estimate</value>
     </param>
     <param>
-      <key>value</key>
-      <value>14.0</value>
+      <key>_coordinate</key>
+      <value>(944, 1436)</value>
     </param>
     <param>
-      <key>min</key>
-      <value>-10</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>trellis_viterbi_x</key>
     <param>
-      <key>max</key>
-      <value>30</value>
+      <key>id</key>
+      <value>trellis_viterbi_x_0</value>
     </param>
     <param>
-      <key>num_steps</key>
-      <value>1000</value>
+      <key>_enabled</key>
+      <value>False</value>
     </param>
     <param>
-      <key>style</key>
-      <value>wx.SL_HORIZONTAL</value>
+      <key>type</key>
+      <value>b</value>
     </param>
     <param>
-      <key>converver</key>
-      <value>float_converter</value>
+      <key>fsm_args</key>
+      <value>fsm</value>
     </param>
     <param>
-      <key>grid_pos</key>
-      <value></value>
+      <key>block_size</key>
+      <value>block/bpsym</value>
     </param>
     <param>
-      <key>notebook</key>
-      <value></value>
+      <key>init_state</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>final_state</key>
+      <value>-1</value>
     </param>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(728, 105)</value>
+      <value>(480, 1271)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1309,17 +1274,21 @@
     </param>
   </block>
   <block>
-    <key>trellis_viterbi_x</key>
+    <key>trellis_viterbi_combined_xx</key>
     <param>
       <key>id</key>
-      <value>trellis_viterbi_x_0</value>
+      <value>trellis_viterbi_combined_xx_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>False</value>
+      <value>True</value>
     </param>
     <param>
       <key>type</key>
+      <value>f</value>
+    </param>
+    <param>
+      <key>out_type</key>
       <value>b</value>
     </param>
     <param>
@@ -1339,6 +1308,18 @@
       <value>-1</value>
     </param>
     <param>
+      <key>dim</key>
+      <value>tot_mod[0]</value>
+    </param>
+    <param>
+      <key>table</key>
+      <value>tot_mod[1]</value>
+    </param>
+    <param>
+      <key>metric_type</key>
+      <value>digital.TRELLIS_EUCLIDEAN</value>
+    </param>
+    <param>
       <key>alias</key>
       <value></value>
     </param>
@@ -1356,7 +1337,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(496, 711)</value>
+      <value>(352, 1410)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1364,34 +1345,18 @@
     </param>
   </block>
   <block>
-    <key>trellis_metrics_x</key>
+    <key>blocks_unpack_k_bits_bb</key>
     <param>
       <key>id</key>
-      <value>trellis_metrics_x_0</value>
+      <value>blocks_unpack_k_bits_bb_0</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>False</value>
-    </param>
-    <param>
-      <key>type</key>
-      <value>f</value>
-    </param>
-    <param>
-      <key>card</key>
-      <value>fsm.O()</value>
-    </param>
-    <param>
-      <key>dim</key>
-      <value>tot_channel[0]</value>
-    </param>
-    <param>
-      <key>table</key>
-      <value>tot_channel[1]</value>
+      <value>True</value>
     </param>
     <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
+      <key>k</key>
+      <value>bpsym</value>
     </param>
     <param>
       <key>alias</key>
@@ -1411,7 +1376,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(288, 711)</value>
+      <value>(728, 1364)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1419,50 +1384,65 @@
     </param>
   </block>
   <block>
-    <key>trellis_viterbi_combined_xx</key>
+    <key>blocks_pack_k_bits_bb</key>
     <param>
       <key>id</key>
-      <value>trellis_viterbi_combined_xx_0</value>
+      <value>blocks_pack_k_bits_bb_0</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>f</value>
+      <key>k</key>
+      <value>bpsym</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>b</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>fsm_args</key>
-      <value>fsm</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>block_size</key>
-      <value>block/bpsym</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>init_state</key>
-      <value>-1</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>final_state</key>
-      <value>-1</value>
+      <key>_coordinate</key>
+      <value>(456, 572)</value>
     </param>
     <param>
-      <key>dim</key>
-      <value>tot_channel[0]</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>trellis_encoder_xx</key>
     <param>
-      <key>table</key>
-      <value>tot_channel[1]</value>
+      <key>id</key>
+      <value>trellis_encoder_xx_0</value>
     </param>
     <param>
-      <key>metric_type</key>
-      <value>digital.TRELLIS_EUCLIDEAN</value>
+      <key>_enabled</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>bs</value>
+    </param>
+    <param>
+      <key>fsm_args</key>
+      <value>fsm</value>
+    </param>
+    <param>
+      <key>init_state</key>
+      <value>0</value>
     </param>
     <param>
       <key>alias</key>
@@ -1482,7 +1462,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(368, 850)</value>
+      <value>(672, 461)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -1490,122 +1470,128 @@
     </param>
   </block>
   <connection>
-    <source_block_id>analog_noise_source_x_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>blks2_error_rate_0</source_block_id>
+    <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
-    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_block_id>virtual_source_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_block_id>virtual_source_0_0_0</source_block_id>
+    <sink_block_id>blks2_error_rate_0</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>0</sink_key>
+    <sink_key>1</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_encoder_xx_0</source_block_id>
-    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>trellis_metrics_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_throttle_0</source_block_id>
-    <sink_block_id>blocks_unpacked_to_packed_xx_0</sink_block_id>
+    <source_block_id>trellis_metrics_x_0</source_block_id>
+    <sink_block_id>trellis_viterbi_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>blocks_null_sink_1</sink_block_id>
+    <source_block_id>virtual_source_0</source_block_id>
+    <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_unpacked_to_packed_xx_0</source_block_id>
-    <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>virtual_sink_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id>
-    <sink_block_id>trellis_encoder_xx_0</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>blocks_throttle_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>virtual_source_0</source_block_id>
-    <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id>
+    <source_block_id>analog_noise_source_x_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
+    <source_key>0</source_key>
+    <sink_key>1</sink_key>
+  </connection>
+  <connection>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>blocks_null_sink_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_metrics_x_0</source_block_id>
-    <sink_block_id>trellis_viterbi_x_0</sink_block_id>
+    <source_block_id>blocks_add_xx_1</source_block_id>
+    <sink_block_id>virtual_sink_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>virtual_source_0</source_block_id>
-    <sink_block_id>trellis_metrics_x_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
+    <sink_block_id>fir_filter_xxx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_add_xx_1</source_block_id>
-    <sink_block_id>virtual_sink_0</sink_block_id>
+    <source_block_id>fir_filter_xxx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>virtual_source_0_0_0</source_block_id>
-    <sink_block_id>blks2_error_rate_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id>
+    <sink_block_id>blocks_add_xx_1</sink_block_id>
     <source_key>0</source_key>
-    <sink_key>1</sink_key>
+    <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>virtual_source_0_0</source_block_id>
-    <sink_block_id>blks2_error_rate_0</sink_block_id>
+    <source_block_id>trellis_encoder_xx_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blks2_error_rate_0</source_block_id>
-    <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>virtual_sink_0_0</sink_block_id>
+    <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
+    <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_packed_to_unpacked_xx_0_0</source_block_id>
+    <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id>
     <sink_block_id>virtual_sink_0_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
-    <sink_block_id>blocks_unpacked_to_packed_xx_0_0</sink_block_id>
+    <source_block_id>trellis_viterbi_x_0</source_block_id>
+    <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_unpacked_to_packed_xx_0_0</source_block_id>
-    <sink_block_id>blocks_packed_to_unpacked_xx_0_0</sink_block_id>
+    <source_block_id>trellis_viterbi_combined_xx_0</source_block_id>
+    <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>trellis_viterbi_x_0</source_block_id>
-    <sink_block_id>blocks_unpacked_to_packed_xx_0_0</sink_block_id>
+    <source_block_id>blocks_pack_k_bits_bb_0</source_block_id>
+    <sink_block_id>trellis_encoder_xx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
diff --git a/gr-trellis/examples/python/CMakeLists.txt 
b/gr-trellis/examples/python/CMakeLists.txt
index e2c7e70..0e27a95 100644
--- a/gr-trellis/examples/python/CMakeLists.txt
+++ b/gr-trellis/examples/python/CMakeLists.txt
@@ -21,18 +21,8 @@ include(GrPython)
 
 GR_PYTHON_INSTALL(
     PROGRAMS
-    fsm_utils.py
     test_tcm.py
-    test_tcm_parallel.py
-    test_tcm_combined.py
-    test_sccc_hard.py
-    test_sccc_soft.py
-    test_sccc_turbo.py
-    test_viterbi_equalization1.py
-    test_viterbi_equalization.py
-    test_turbo_equalization.py
-    test_turbo_equalization1.py
-    test_turbo_equalization2.py
+    test_cpm.py
     DESTINATION ${GR_PKG_TRELLIS_EXAMPLES_DIR}
     COMPONENT "trellis_examples"
 )
@@ -50,15 +40,29 @@ install(
     fsm_files/awgn1o2_4.fsm
     fsm_files/awgn1o2_8.fsm
     fsm_files/awgn2o3_16.fsm
+    fsm_files/awgn2o3_16ungerboecka.fsm
+    fsm_files/awgn2o3_16ungerboeck.fsm
+    fsm_files/awgn2o3_32ungerboecka.fsm
+    fsm_files/awgn2o3_32ungerboeck.fsm
     fsm_files/awgn2o3_4.fsm
     fsm_files/awgn2o3_4_msb.fsm
     fsm_files/awgn2o3_4_msbG.fsm
+    fsm_files/awgn2o3_4ungerboecka.fsm
+    fsm_files/awgn2o3_4ungerboeck.fsm
+    fsm_files/awgn2o3_64ungerboecka.fsm
+    fsm_files/awgn2o3_64ungerboeck.fsm
     fsm_files/awgn2o3_8.fsm
+    fsm_files/awgn2o3_8ungerboecka.fsm
+    fsm_files/awgn2o3_8ungerboeck.fsm
     fsm_files/awgn2o4_4.fsm
     fsm_files/disconnected.fsm
+    fsm_files/irregular.fsm
+    fsm_files/joint_16_16.fsm
+    fsm_files/joint_4_16.fsm
     fsm_files/rep3.fsm
     fsm_files/rep5.fsm
     fsm_files/simple.fsm
+    fsm_files/uncoded4.fsm
     DESTINATION ${GR_PKG_TRELLIS_EXAMPLES_DIR}/fsm_files
     COMPONENT "trellis_examples"
 )
diff --git a/gr-trellis/examples/python/README 
b/gr-trellis/examples/python/README
index 155b0a9..8b4e0f0 100644
--- a/gr-trellis/examples/python/README
+++ b/gr-trellis/examples/python/README
@@ -2,8 +2,6 @@ Here we have several test programs for use with the gr-trellis 
implementation.
 Documentation can be found in
 http://gnuradio.org/doc/doxygen/group__trellis__coding__blk.html
 
-fsm_utils.py contains several useful functions.
-
 fsm_files is a directory with some FSM definitions
 
 If you just want to see what these programs do run them;
@@ -26,10 +24,12 @@ which gives you information about the:
 number of transmitted packets
 number of packets in error
 estimated packet error rate
-number of transmitted shorts (or symbols, or bits, depending on the specific 
program)
-number of shorts (or symbols, or bits) in error
-estimated short (or symbol, or bit) error rate
+number of transmitted symbols, or bits, depending on the specific program
+number of symbols, or bits in error
+estimated symbol, or bit error rate
 
 for instance, the final number 1.10e-03 is the error rate estimate by sending 
1000
 packets of 1024 shorts each, using an 1/2 4-state convolutional code
 and QPSK modulation through an AWGN with Es/N0 = 6.0 dB
+
+There is a similar example in the ../grc/ directory
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboeck.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboeck.fsm
new file mode 100644
index 0000000..70ead4f
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboeck.fsm
@@ -0,0 +1,50 @@
+4 16 8
+
+0      1       2       3
+4      5       6       7
+8      9       10      11
+12     13      14      15
+0      1       2       3
+4      5       6       7
+8      9       10      11
+12     13      14      15
+0      1       2       3
+4      5       6       7
+8      9       10      11
+12     13      14      15
+0      1       2       3
+4      5       6       7
+8      9       10      11
+12     13      14      15
+
+
+0      4       2       6
+1      5       3       7
+4      0       6       2
+5      1       7       3
+2      6       0       4
+3      7       1       5
+6      2       4       0
+7      3       5       1
+4      0       6       2
+5      1       7       3
+0      4       2       6
+1      5       3       7
+6      2       4       0
+7      3       5       1
+2      6       0       4
+3      7       1       5
+
+This is the rate 2/3 Ungerboeck code with 16 states for 8-PSK (natural 
mapping).
+The states are defined in Ungerboeck's way. 
+
+d_free^2 =  2.274^2 Es --> 7.13 dB (so gain of 4.13 dB over uncoded QPSK)
+
+Parity check matrix in octal: [16 04 23] 
+
+Generator Matrix:
+
+[ D    1+D+D^2 0
+  1+D^2        D^2     D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboecka.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboecka.fsm
new file mode 100644
index 0000000..5233843
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboecka.fsm
@@ -0,0 +1,48 @@
+4 16 8 
+
+0      8       2       10
+0      8       2       10
+1      9       3       11
+1      9       3       11
+0      8       2       10
+0      8       2       10
+1      9       3       11
+1      9       3       11
+4      12      6       14
+4      12      6       14
+5      13      7       15
+5      13      7       15
+4      12      6       14
+4      12      6       14
+5      13      7       15
+5      13      7       15
+
+
+0      6       2       4
+2      4       0       6
+6      0       4       2
+4      2       6       0
+4      2       6       0
+6      0       4       2
+2      4       0       6
+0      6       2       4
+1      7       3       5
+3      5       1       7
+7      1       5       3
+5      3       7       1
+5      3       7       1
+7      1       5       3
+3      5       1       7
+1      7       3       5
+
+This is the rate 2/3 Ungerboeck code with 16 states for 8-PSK (natural 
mapping).
+The states are defined in typical way. 
+
+d_free^2 =  2.274^2Es --> 7.13 dB (so gain of 4.13 dB over uncoded QPSK)
+
+Parity check matrix in octal: [16 04 23] 
+
+Generator Matrix:
+
+[ D    1+D+D^2 0
+  1+D^2        D^2     D]
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboeck.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboeck.fsm
new file mode 100644
index 0000000..a00f9c2
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboeck.fsm
@@ -0,0 +1,83 @@
+4 32 8 
+
+0      16      1       17
+0      16      1       17
+0      16      1       17
+0      16      1       17
+2      18      3       19
+2      18      3       19
+2      18      3       19
+2      18      3       19
+4      20      5       21
+4      20      5       21
+4      20      5       21
+4      20      5       21
+6      22      7       23
+6      22      7       23
+6      22      7       23
+6      22      7       23
+8      24      9       25
+8      24      9       25
+8      24      9       25
+8      24      9       25
+10     26      11      27
+10     26      11      27
+10     26      11      27
+10     26      11      27
+12     28      13      29
+12     28      13      29
+12     28      13      29
+12     28      13      29
+14     30      15      31
+14     30      15      31
+14     30      15      31
+14     30      15      31
+
+
+
+
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+5      1       7       3
+1      5       3       7
+7      3       5       1
+3      7       1       5
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+4      0       6       2
+0      4       2       6
+6      2       4       0
+2      6       0       4
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+4      0       6       2
+0      4       2       6
+6      2       4       0
+2      6       0       4
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+5      1       7       3
+1      5       3       7
+7      3       5       1
+3      7       1       5
+
+This is the rate 2/3 Ungerboeck code with 32 states for 8-PSK (natural 
mapping).
+The states are defined in typical way. 
+
+d_free^2 =  2.405^2 Es --> 7.59 dB (so gain of 4.59 dB over uncoded QPSK)
+
+Parity check matrix in octal: [34 16 45] 
+
+Generator Matrix:
+
+[ 1    D       0
+  D^4  D^2+1   D^3+D^2+D]
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboecka.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboecka.fsm
new file mode 100644
index 0000000..b2e6ebd
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboecka.fsm
@@ -0,0 +1,84 @@
+4 32 8 
+0      16      1       17
+0      16      1       17
+0      16      1       17
+0      16      1       17
+2      18      3       19
+2      18      3       19
+2      18      3       19
+2      18      3       19
+4      20      5       21
+4      20      5       21
+4      20      5       21
+4      20      5       21
+6      22      7       23
+6      22      7       23
+6      22      7       23
+6      22      7       23
+8      24      9       25
+8      24      9       25
+8      24      9       25
+8      24      9       25
+10     26      11      27
+10     26      11      27
+10     26      11      27
+10     26      11      27
+12     28      13      29
+12     28      13      29
+12     28      13      29
+12     28      13      29
+14     30      15      31
+14     30      15      31
+14     30      15      31
+14     30      15      31
+
+
+
+
+
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+3      7       1       5
+7      3       5       1
+1      5       3       7
+5      1       7       3
+2      6       0       4
+6      2       4       0
+0      4       2       6
+4      0       6       2
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+2      6       0       4
+6      2       4       0
+0      4       2       6
+4      0       6       2
+3      7       1       5
+7      3       5       1
+1      5       3       7
+5      1       7       3
+
+This is the rate 2/3 Ungerboeck code with 32 states for 8-PSK (natural 
mapping).
+The states are defined in typical way. 
+
+d_free^2 =  2.405^2 Es --> 7.59 dB (so gain of 4.59 dB over uncoded QPSK)
+
+Parity check matrix in octal: [34 16 45] 
+
+Generator Matrix:
+
+[ 1    D       0
+  D^4+D        1       D^3+D^2+D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm
index d834c52..ff6e2a7 100644
--- a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm
@@ -12,7 +12,7 @@
 
 
 This is generated by the 1/2 AWGN code (5 7) operated twice, ie,
-(xk+1 xki) [xk-1 xk-2] -> [xk+1 xki].
+(xk+1 xk) [xk-1 xk-2] -> [xk+1 xk].
 We also puncture the first (MSB) bit.
 This code is worse than awgn2o3_4_msbG and slightly worse than
 awgn2o3_4, BUT seems to be a good innner code for sctcm (with 8PSK natural).
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm
index 8956c53..54f9cbc 100644
--- a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm
@@ -11,7 +11,7 @@
 
 
 This is generated by the 1/2 AWGN code (5 7) operated twice, ie,
-(xk+1 xki) [xk-1 xk-2] -> [xk+1 xki].
+(xk+1 xk) [xk-1 xk-2] -> [xk+1 xk].
 We also puncture the first (MSB) bit and Gray map the symbols.
 
 intermediate states:
@@ -45,7 +45,7 @@ and in decimal:
 After Gray mapping:
 label -> phase
 0 -> 0
-1 -> 0
+1 -> 1
 2 -> 7
 3 -> 2
 4 -> 5
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboeck.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboeck.fsm
new file mode 100644
index 0000000..160f4ea
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboeck.fsm
@@ -0,0 +1,26 @@
+4 4 8
+
+0      0       1       1
+2      2       3       3
+0      0       1       1
+2      2       3       3
+
+
+0      4       2       6
+1      5       3       7
+2      6       0       4
+3      7       1       5
+
+
+
+This is the Ungerboeck code for 8-PSK (natural mapping).
+The states are defined in Ungerboeck's way. 
+
+d_free^2=4 Es -> 3.0 dB over uncoded QPSK 
+
+Parity check matrix in octal: [0 2 5]
+
+Generator matrix:
+
+[1     0       0
+ 0     1+D^2   D]
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboecka.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboecka.fsm
new file mode 100644
index 0000000..d9c210a
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboecka.fsm
@@ -0,0 +1,23 @@
+4 4 8
+
+0       2       0       2
+0       2       0       2
+1       3       1       3
+1       3       1       3
+
+0       2       4       6
+2       0       6       4
+1       3       5       7
+3       1       7       5
+
+This is the rate 2/3 Ungerboeck's code with 4 states. 
+The states are defined in typical way. 
+
+d_free^2=4 Es -> 3.0 dB over uncoded QPSK 
+
+Parity check matrix in octal: [0 2 5]
+
+Generator matrix:
+
+[1     0       0
+ 0     1+D^2   D]
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboeck.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboeck.fsm
new file mode 100644
index 0000000..62c75c3
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboeck.fsm
@@ -0,0 +1,150 @@
+4 64 8
+
+
+0      32      1       33
+0      32      1       33
+0      32      1       33
+0      32      1       33
+2      34      3       35
+2      34      3       35
+2      34      3       35
+2      34      3       35
+4      36      5       37
+4      36      5       37
+4      36      5       37
+4      36      5       37
+6      38      7       39
+6      38      7       39
+6      38      7       39
+6      38      7       39
+8      40      9       41
+8      40      9       41
+8      40      9       41
+8      40      9       41
+10     42      11      43
+10     42      11      43
+10     42      11      43
+10     42      11      43
+12     44      13      45
+12     44      13      45
+12     44      13      45
+12     44      13      45
+14     46      15      47
+14     46      15      47
+14     46      15      47
+14     46      15      47
+16     48      17      49
+16     48      17      49
+16     48      17      49
+16     48      17      49
+18     50      19      51
+18     50      19      51
+18     50      19      51
+18     50      19      51
+20     52      21      53
+20     52      21      53
+20     52      21      53
+20     52      21      53
+22     54      23      55
+22     54      23      55
+22     54      23      55
+22     54      23      55
+24     56      25      57
+24     56      25      57
+24     56      25      57
+24     56      25      57
+26     58      27      59
+26     58      27      59
+26     58      27      59
+26     58      27      59
+28     60      29      61
+28     60      29      61
+28     60      29      61
+28     60      29      61
+30     62      31      63
+30     62      31      63
+30     62      31      63
+30     62      31      63
+
+
+
+
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+3      7       1       5
+7      3       5       1
+1      5       3       7
+5      1       7       3
+2      6       0       4
+6      2       4       0
+0      4       2       6
+4      0       6       2
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+2      6       0       4
+6      2       4       0
+0      4       2       6
+4      0       6       2
+3      7       1       5
+7      3       5       1
+1      5       3       7
+5      1       7       3
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+2      6       0       4
+6      2       4       0
+0      4       2       6
+4      0       6       2
+3      7       1       5
+7      3       5       1
+1      5       3       7
+5      1       7       3
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+3      7       1       5
+7      3       5       1
+1      5       3       7
+5      1       7       3
+2      6       0       4
+6      2       4       0
+0      4       2       6
+4      0       6       2
+
+
+This is the rate 2/3 Ungerboeck code with 64 states for 8-PSK (natural 
mapping).
+The states are defined in typical way. 
+
+d_free^2 =  2.52^2 Es --> 8.01 dB (so gain of 5.01 dB over uncoded QPSK)
+
+parity check matrix in octal:   [074 036 105]
+
+generator matrix: 
+
+[1     D       0
+ D^5   D^2+1   D^4+D^3+D^2+D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboecka.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboecka.fsm
new file mode 100644
index 0000000..137091f
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboecka.fsm
@@ -0,0 +1,154 @@
+4 64 8
+
+
+0      32      1       33
+0      32      1       33
+0      32      1       33
+0      32      1       33
+2      34      3       35
+2      34      3       35
+2      34      3       35
+2      34      3       35
+4      36      5       37
+4      36      5       37
+4      36      5       37
+4      36      5       37
+6      38      7       39
+6      38      7       39
+6      38      7       39
+6      38      7       39
+8      40      9       41
+8      40      9       41
+8      40      9       41
+8      40      9       41
+10     42      11      43
+10     42      11      43
+10     42      11      43
+10     42      11      43
+12     44      13      45
+12     44      13      45
+12     44      13      45
+12     44      13      45
+14     46      15      47
+14     46      15      47
+14     46      15      47
+14     46      15      47
+16     48      17      49
+16     48      17      49
+16     48      17      49
+16     48      17      49
+18     50      19      51
+18     50      19      51
+18     50      19      51
+18     50      19      51
+20     52      21      53
+20     52      21      53
+20     52      21      53
+20     52      21      53
+22     54      23      55
+22     54      23      55
+22     54      23      55
+22     54      23      55
+24     56      25      57
+24     56      25      57
+24     56      25      57
+24     56      25      57
+26     58      27      59
+26     58      27      59
+26     58      27      59
+26     58      27      59
+28     60      29      61
+28     60      29      61
+28     60      29      61
+28     60      29      61
+30     62      31      63
+30     62      31      63
+30     62      31      63
+30     62      31      63
+
+
+
+
+
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+5      1       7       3
+1      5       3       7
+7      3       5       1
+3      7       1       5
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+4      0       6       2
+0      4       2       6
+6      2       4       0
+2      6       0       4
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+4      0       6       2
+0      4       2       6
+6      2       4       0
+2      6       0       4
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+5      1       7       3
+1      5       3       7
+7      3       5       1
+3      7       1       5
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+4      0       6       2
+0      4       2       6
+6      2       4       0
+2      6       0       4
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+5      1       7       3
+1      5       3       7
+7      3       5       1
+3      7       1       5
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+5      1       7       3
+1      5       3       7
+7      3       5       1
+3      7       1       5
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+4      0       6       2
+0      4       2       6
+6      2       4       0
+2      6       0       4
+
+
+
+
+
+This is the rate 2/3 Ungerboeck code with 64 states for 8-PSK (natural 
mapping).
+The states are defined in typical way. 
+
+d_free^2 =  2.52^2 Es --> 8.01 dB (so gain of 5.01 dB over uncoded QPSK)
+
+parity check matrix in octal:   [074 036 105]
+
+generator matrix: 
+
+[1     D       0
+ D^5+D 1       D^4+D^3+D^2+D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm
index 34deeb6..6ace4f5 100644
--- a/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm
@@ -21,5 +21,6 @@
 
 
 
-This is generated by the 1/2 8-state AWGN code (15 17) by puncturing the 
fourth bit.
+This is generated by the 1/2 8-state AWGN code (15 17) by operating it twice 
and
+puncturing the fourth bit.
 --> d_free=???
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboeck.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboeck.fsm
new file mode 100644
index 0000000..e2f08eb
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboeck.fsm
@@ -0,0 +1,35 @@
+4 8 8
+
+0      1       2       3
+4      5       6       7
+0      1       2       3
+4      5       6       7
+0      1       2       3
+4      5       6       7
+0      1       2       3
+4      5       6       7
+
+
+0      4       2       6
+1      5       3       7
+4      0       6       2
+5      1       7       3
+2      6       0       4
+3      7       1       5
+6      2       4       0
+7      3       5       1
+
+
+
+This is the rate 2/3 Ungerboeck code with 8-states for 8-PSK (natural mapping).
+The states are defined in Ungerboeck's way. 
+
+d_free^2 = 4.585 Es --> 6.6 dB (so gain of 3.6 dB over uncoded QPSK)
+
+Parity check matrix in octal: [04 02 11] 
+
+Generator Matrix:
+
+[ 1    D       0
+  D^2  1       D]
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboecka.fsm 
b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboecka.fsm
new file mode 100644
index 0000000..2425e6a
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboecka.fsm
@@ -0,0 +1,32 @@
+4 8 8
+
+0      4       1       5
+0      4       1       5
+0      4       1       5
+0      4       1       5
+2      6       3       7
+2      6       3       7
+2      6       3       7
+2      6       3       7
+
+0      4       2       6
+4      0       6       2
+2      6       0       4
+6      2       4       0
+1      5       3       7
+5      1       7       3
+3      7       1       5
+7      3       5       1
+
+This is the rate 2/3 Ungerboeck code with 8-states for 8-PSK (natural mapping).
+The states are defined in typical way. 
+
+d_free^2 = 4.585 Es --> 6.6 dB (so gain of 3.6 dB over uncoded QPSK)
+
+Parity check matrix in octal: [04 02 11] 
+
+Generator Matrix:
+
+[ 1    D       0
+  D^2  1       D]
+
diff --git a/gr-trellis/examples/python/fsm_files/uncoded4.fsm 
b/gr-trellis/examples/python/fsm_files/uncoded4.fsm
new file mode 100644
index 0000000..67cb12c
--- /dev/null
+++ b/gr-trellis/examples/python/fsm_files/uncoded4.fsm
@@ -0,0 +1,7 @@
+4 1 4
+
+0 0 0 0
+
+0 1 2 3
+
+uncoded 4-ary transmission
diff --git a/gr-trellis/examples/python/fsm_utils.py 
b/gr-trellis/examples/python/fsm_utils.py
deleted file mode 100755
index 06855ea..0000000
--- a/gr-trellis/examples/python/fsm_utils.py
+++ /dev/null
@@ -1,239 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2004 Free Software Foundation, Inc.
-#
-# This file is part of GNU Radio
-#
-# GNU Radio is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3, or (at your option)
-# any later version.
-#
-# GNU Radio is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU Radio; see the file COPYING.  If not, write to
-# the Free Software Foundation, Inc., 51 Franklin Street,
-# Boston, MA 02110-1301, USA.
-#
-
-
-import re
-import math
-import sys
-import operator
-import numpy
-
-from gnuradio import trellis
-
-try:
-    import scipy.linalg
-except ImportError:
-    print "Error: Program requires scipy (see: www.scipy.org)."
-    sys.exit(1)
-
-
-
-######################################################################
-# Decimal to any base conversion.
-# Convert 'num' to a list of 'l' numbers representing 'num'
-# to base 'base' (most significant symbol first).
-######################################################################
-def dec2base(num,base,l):
-    s=range(l)
-    n=num
-    for i in range(l):
-        s[l-i-1]=n%base
-        n=int(n/base)
-    if n!=0:
-        print 'Number ', num, ' requires more than ', l, 'digits.'
-    return s
-
-
-######################################################################
-# Conversion from any base to decimal.
-# Convert a list 's' of symbols to a decimal number
-# (most significant symbol first)
-######################################################################
-def base2dec(s,base):
-    num=0
-    for i in range(len(s)):
-        num=num*base+s[i]
-    return num
-
-
-
-
-######################################################################
-# Automatically generate the lookup table that maps the FSM outputs
-# to channel inputs corresponding to a channel 'channel' and a modulation
-# 'mod'. Optional normalization of channel to unit energy.
-# This table is used by the 'metrics' block to translate
-# channel outputs to metrics for use with the Viterbi algorithm.
-# Limitations: currently supports only one-dimensional modulations.
-######################################################################
-def make_isi_lookup(mod,channel,normalize):
-    dim=mod[0]
-    constellation = mod[1]
-
-    if normalize:
-        p = 0
-        for i in range(len(channel)):
-            p = p + channel[i]**2
-        for i in range(len(channel)):
-            channel[i] = channel[i]/math.sqrt(p)
-
-    lookup=range(len(constellation)**len(channel))
-    for o in range(len(constellation)**len(channel)):
-        ss=dec2base(o,len(constellation),len(channel))
-        ll=0
-        for i in range(len(channel)):
-            ll=ll+constellation[ss[i]]*channel[i]
-        lookup[o]=ll
-    return (1,lookup)
-
-
-
-
-
-
-######################################################################
-# Automatically generate the signals appropriate for CPM
-# decomposition.
-# This decomposition is based on the paper by B. Rimoldi
-# "A decomposition approach to CPM", IEEE Trans. Info Theory, March 1988
-# See also my own notes at http://www.eecs.umich.edu/~anastas/docs/cpm.pdf
-######################################################################
-def make_cpm_signals(K,P,M,L,q,frac):
-
-    Q=numpy.size(q)/L
-    h=(1.0*K)/P
-    f0=-h*(M-1)/2
-    dt=0.0; # maybe start at t=0.5
-    t=(dt+numpy.arange(0,Q))/Q
-    qq=numpy.zeros(Q)
-    for m in range(L):
-       qq=qq + q[m*Q:m*Q+Q]
-    w=math.pi*h*(M-1)*t-2*math.pi*h*(M-1)*qq+math.pi*h*(L-1)*(M-1)
-
-    X=(M**L)*P
-    PSI=numpy.empty((X,Q))
-    for x in range(X):
-       xv=dec2base(x/P,M,L)
-       xv=numpy.append(xv, x%P)
-       qq1=numpy.zeros(Q)
-       for m in range(L):
-          qq1=qq1+xv[m]*q[m*Q:m*Q+Q]
-       psi=2*math.pi*h*xv[-1]+4*math.pi*h*qq1+w
-       #print psi
-       PSI[x]=psi
-    PSI = numpy.transpose(PSI)
-    SS=numpy.exp(1j*PSI) # contains all signals as columns
-    #print SS
-
-
-    # Now we need to orthogonalize the signals
-    F = scipy.linalg.orth(SS) # find an orthonormal basis for SS
-    #print numpy.dot(numpy.transpose(F.conjugate()),F) # check for 
orthonormality
-    S = numpy.dot(numpy.transpose(F.conjugate()),SS)
-    #print F
-    #print S
-
-    # We only want to keep those dimensions that contain most
-    # of the energy of the overall constellation (eg, frac=0.9 ==> 90%)
-    # evaluate mean energy in each dimension
-    E=numpy.sum(numpy.absolute(S)**2,axis=1)/Q
-    E=E/numpy.sum(E)
-    #print E
-    Es = -numpy.sort(-E)
-    Esi = numpy.argsort(-E)
-    #print Es
-    #print Esi
-    Ecum=numpy.cumsum(Es)
-    #print Ecum
-    v0=numpy.searchsorted(Ecum,frac)
-    N = v0+1
-    #print v0
-    #print Esi[0:v0+1]
-    Ff=numpy.transpose(numpy.transpose(F)[Esi[0:v0+1]])
-    #print Ff
-    Sf = S[Esi[0:v0+1]]
-    #print Sf
-
-
-    return (f0,SS,S,F,Sf,Ff,N)
-    #return f0
-
-
-
-
-######################################################################
-# A list of common modulations.
-# Format: (dimensionality,constellation)
-######################################################################
-pam2 = (1,[-1, 1])
-pam4 = (1,[-3, -1, 3, 1])              # includes Gray mapping
-pam8 = (1,[-7, -5, -3, -1, 1, 3, 5, 7])
-
-psk4=(2,[1, 0, \
-         0, 1, \
-         0, -1,\
-        -1, 0])                                # includes Gray mapping
-psk8=(2,[math.cos(2*math.pi*0/8), math.sin(2*math.pi*0/8),  \
-         math.cos(2*math.pi*1/8), math.sin(2*math.pi*1/8),  \
-         math.cos(2*math.pi*2/8), math.sin(2*math.pi*2/8),  \
-         math.cos(2*math.pi*3/8), math.sin(2*math.pi*3/8),  \
-         math.cos(2*math.pi*4/8), math.sin(2*math.pi*4/8),  \
-         math.cos(2*math.pi*5/8), math.sin(2*math.pi*5/8),  \
-         math.cos(2*math.pi*6/8), math.sin(2*math.pi*6/8),  \
-         math.cos(2*math.pi*7/8), math.sin(2*math.pi*7/8)])
-
-orth2 = (2,[1, 0, \
-            0, 1])
-orth4=(4,[1, 0, 0, 0, \
-          0, 1, 0, 0, \
-          0, 0, 1, 0, \
-          0, 0, 0, 1])
-
-######################################################################
-# A list of channels to be tested
-######################################################################
-
-# C test channel (J. Proakis, Digital Communications, McGraw-Hill Inc., 2001)
-c_channel = [0.227, 0.460, 0.688, 0.460, 0.227]
-
-
-
-
-
-
-
-
-
-
-if __name__ == '__main__':
-    f1=trellis.fsm('fsm_files/awgn1o2_4.fsm')
-    #f2=trellis.fsm('fsm_files/awgn2o3_4.fsm')
-    #print f1.I(), f1.S(), f1.O()
-    #print f1.NS()
-    #print f1.OS()
-    #print f2.I(), f2.S(), f2.O()
-    #print f2.NS()
-    #print f2.OS()
-    ##f1.write_trellis_svg('f1.svg',4)
-    #f2.write_trellis_svg('f2.svg',4)
-    #f=fsm_concatenate(f1,f2)
-    #f=fsm_radix(f1,2)
-
-    #print "----------\n"
-    #print f.I(), f.S(), f.O()
-    #print f.NS()
-    #print f.OS()
-    #f.write_trellis_svg('f.svg',4)
-
-    q=numpy.arange(0,8)/(2.0*8)
-    (f0,SS,S,F,Sf,Ff,N) = make_cpm_signals(1,2,2,1,q,0.99)
-
diff --git a/gr-trellis/examples/python/test_cpm.py 
b/gr-trellis/examples/python/test_cpm.py
index 3f5cfc4..6fe25ec 100755
--- a/gr-trellis/examples/python/test_cpm.py
+++ b/gr-trellis/examples/python/test_cpm.py
@@ -12,8 +12,8 @@ from gnuradio import trellis, digital, filter, blocks
 from grc_gnuradio import blks2 as grc_blks2
 import math
 import numpy
-import fsm_utils
 from gnuradio import trellis
+from gnuradio.trellis import fsm_utils
 
 try:
     from gnuradio import analog
@@ -43,8 +43,9 @@ def run_test(seed,blocksize):
         f = trellis.fsm(P,M,L)
 
         # CPFSK signals
-        #p = numpy.ones(Q)/(2.0)
-        #q = numpy.cumsum(p)/(1.0*Q)
+        #p = numpy.ones(L*Q)
+        #q = numpy.cumsum(p)
+        #q = q/q[-1]/2.0;
 
         # GMSK signals
         BT=0.3;
diff --git a/gr-trellis/examples/python/test_pccc_turbo1.py 
b/gr-trellis/examples/python/test_pccc_turbo1.py
deleted file mode 100755
index 7104aa5..0000000
--- a/gr-trellis/examples/python/test_pccc_turbo1.py
+++ /dev/null
@@ -1,124 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed):
-    tb = gr.top_block ()
-
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the outer FSM input cardinality
-    #src = blocks.vector_source_s([0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],False)
-    enc = trellis.pccc_encoder_ss(fo,0,fi,0,interleaver,K)
-    code = blocks.vector_sink_s()
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    metrics_in = 
trellis.metrics_f(fi.O()*fo.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner SISO
-    scale = blocks.multiply_const_ff(1.0/N0)
-    dec = 
trellis.pccc_decoder_s(fo,0,-1,fi,0,-1,interleaver,K,IT,trellis.TRELLIS_MIN_SUM)
-
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s()
-
-    tb.connect (src,src_head,s2fsmi,enc,mod)
-    #tb.connect (src,enc,mod)
-    #tb.connect(enc,code)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,metrics_in,scale,dec,fsmi2s,dst)
-
-    tb.run()
-
-    #print code.data()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    return (ntotal,ntotal-nright)
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 5:
-        fname_out=args[0]
-        fname_in=args[1]
-        esn0_db=float(args[2]) # Es/No in dB
-        IT=int(args[3])
-        rep=int(args[4]) # number of times the experiment is run to collect 
enough errors
-    else:
-        sys.stderr.write ('usage: test_pccc_turbo.py fsm_name_1 fsm_fname_2 
Es/No_db iterations repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    if fo.I() != fi.I():
-        sys.stderr.write ('Incompatible input cardinality between two FSMs.\n')
-        sys.exit (1)
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    #modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = 4
-    constellation = [ 1, 0, 1, 0,\
-                      1, 0,-1, 0,\
-                      1, 0, 0, 1,\
-                      1, 0, 0,-1,\
-                     -1, 0, 1, 0,\
-                     -1, 0,-1, 0,\
-                     -1, 0, 0, 1,\
-                     -1, 0, 0,-1,\
-                      0, 1, 1, 0,\
-                      0, 1,-1, 0,\
-                      0, 1, 0, 1,\
-                      0, 1, 0,-1,\
-                      0,-1, 1, 0,\
-                      0,-1,-1, 0,\
-                      0,-1, 0, 1,\
-                      0,-1, 0,-1,] # equivalent to 2 QPSK symbols
-    if len(constellation)/dimensionality != fi.O()*fo.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%10==0): # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
diff --git a/gr-trellis/examples/python/test_sccc_hard.py 
b/gr-trellis/examples/python/test_sccc_hard.py
deleted file mode 100755
index 83393df..0000000
--- a/gr-trellis/examples/python/test_sccc_hard.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
-    tb = gr.top_block ()
-
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the outer FSM input cardinality
-    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
-    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
-    enc_in = trellis.encoder_ss(fi,0) # initial state = 0
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner Viterbi
-    va_in = trellis.viterbi_s(fi,K,0,-1) # Put -1 if the Initial/Final states 
are not set.
-    deinter = 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),1,gr.sizeof_short)
-    metrics_out = 
trellis.metrics_s(fo.O(),1,[0,1,2,3],digital.TRELLIS_HARD_SYMBOL) # data 
preprocessing to generate metrics for outer Viterbi (hard decisions)
-    va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states 
are not set.
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s()
-
-    tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,metrics_in)
-    tb.connect (metrics_in,va_in,deinter,metrics_out,va_out,fsmi2s,dst)
-
-    tb.run()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    return (ntotal,ntotal-nright)
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 4:
-        fname_out=args[0]
-        fname_in=args[1]
-        esn0_db=float(args[2]) # Es/No in dB
-        rep=int(args[3]) # number of times the experiment is run to collect 
enough errors
-    else:
-        sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in 
Es/No_db  repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%100==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
diff --git a/gr-trellis/examples/python/test_sccc_soft.py 
b/gr-trellis/examples/python/test_sccc_soft.py
deleted file mode 100755
index 25d26e0..0000000
--- a/gr-trellis/examples/python/test_sccc_soft.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
-    tb = gr.top_block ()
-
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the outer FSM input cardinality
-    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
-    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
-    enc_in = trellis.encoder_ss(fi,0) # initial state = 0
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner Viterbi
-    gnd = blocks.vector_source_f([0],True);
-    siso_in = trellis.siso_f(fi,K,0,-1,True,False,trellis.TRELLIS_MIN_SUM) # 
Put -1 if the Initial/Final states are not set.
-    deinter = 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
-    va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states 
are not set.
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s()
-
-    tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,metrics_in)
-    tb.connect (gnd,(siso_in,0))
-    tb.connect (metrics_in,(siso_in,1))
-    tb.connect (siso_in,deinter,va_out,fsmi2s,dst)
-
-    tb.run()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    return (ntotal,ntotal-nright)
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 4:
-        fname_out=args[0]
-        fname_in=args[1]
-        esn0_db=float(args[2]) # Es/No in dB
-        rep=int(args[3]) # number of times the experiment is run to collect 
enough errors
-    else:
-        sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in 
Es/No_db  repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%100==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
diff --git a/gr-trellis/examples/python/test_sccc_turbo.py 
b/gr-trellis/examples/python/test_sccc_turbo.py
deleted file mode 100755
index 08004e8..0000000
--- a/gr-trellis/examples/python/test_sccc_turbo.py
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,type):
-    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner Viterbi
-    scale = blocks.multiply_const_ff(1.0/N0)
-    gnd = blocks.vector_source_f([0],True);
-
-    inter=[]
-    deinter=[]
-    siso_in=[]
-    siso_out=[]
-
-    # generate all blocks
-    for it in range(IT):
-      inter.append( 
trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) 
)
-      siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) )
-      deinter.append( 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
 )
-      if it < IT-1:
-        siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) )
-      else:
-        siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs 
needed
-
-    # connect first stage
-    tb.connect (gnd,inter[0])
-    tb.connect (metrics_in,scale)
-    tb.connect (scale,(siso_in[0],1))
-
-    # connect the rest
-    for it in range(IT):
-      if it < IT-1:
-        tb.connect (metrics_in,(siso_in[it+1],1))
-        tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
-        tb.connect (gnd,(siso_out[it],0))
-        tb.connect (siso_out[it],inter[it+1])
-        tb.connect (inter[it],(siso_in[it],0))
-      else:
-        tb.connect (siso_in[it],deinter[it],siso_out[it])
-        tb.connect (inter[it],(siso_in[it],0))
-
-    return (metrics_in,siso_out[IT-1])
-
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed):
-    tb = gr.top_block ()
-
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the outer FSM input cardinality
-    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
-    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
-    enc_in = trellis.encoder_ss(fi,0) # initial state = 0
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    (head,tail) = 
make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
-    #(head,tail) = 
make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_SUM_PRODUCT)
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s()
-
-    tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,head)
-    tb.connect (tail,fsmi2s,dst)
-
-    tb.run()
-
-    #print enc_out.ST(), enc_in.ST()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    return (ntotal,ntotal-nright)
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 5:
-        fname_out=args[0]
-        fname_in=args[1]
-        esn0_db=float(args[2]) # Es/No in dB
-        IT=int(args[3])
-        rep=int(args[4]) # number of times the experiment is run to collect 
enough errors
-    else:
-        sys.stderr.write ('usage: test_sccc_turbo.py fsm_name_out fsm_fname_in 
Es/No_db iterations repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%10==0): # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
diff --git a/gr-trellis/examples/python/test_sccc_turbo1.py 
b/gr-trellis/examples/python/test_sccc_turbo1.py
deleted file mode 100755
index 528a79d..0000000
--- a/gr-trellis/examples/python/test_sccc_turbo1.py
+++ /dev/null
@@ -1,104 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed):
-    tb = gr.top_block ()
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the outer FSM input cardinality
-    enc = trellis.sccc_encoder_ss(fo,0,fi,0,interleaver,K)
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    dec = 
trellis.sccc_decoder_combined_fs(fo,0,-1,fi,0,-1,interleaver,K,IT,trellis.TRELLIS_MIN_SUM,dimensionality,constellation,digital.TRELLIS_EUCLIDEAN,1.0)
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s()
-
-    #tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
-    tb.connect (src,src_head,s2fsmi,enc,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    #tb.connect (add,head)
-    #tb.connect (tail,fsmi2s,dst)
-    tb.connect (add,dec,fsmi2s,dst)
-
-    tb.run()
-
-    #print enc_out.ST(), enc_in.ST()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    return (ntotal,ntotal-nright)
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 5:
-        fname_out=args[0]
-        fname_in=args[1]
-        esn0_db=float(args[2]) # Es/No in dB
-        IT=int(args[3])
-        rep=int(args[4]) # number of times the experiment is run to collect 
enough errors
-    else:
-        sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in 
Es/No_db iterations repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%10==0): # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
diff --git a/gr-trellis/examples/python/test_sccc_turbo2.py 
b/gr-trellis/examples/python/test_sccc_turbo2.py
deleted file mode 100755
index d7f26c4..0000000
--- a/gr-trellis/examples/python/test_sccc_turbo2.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed):
-    tb = gr.top_block ()
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the outer FSM input cardinality
-    enc = trellis.sccc_encoder_ss(fo,0,fi,0,interleaver,K)
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner SISO
-    scale = blocks.multiply_const_ff(1.0/N0)
-    dec = 
trellis.sccc_decoder_s(fo,0,-1,fi,0,-1,interleaver,K,IT,trellis.TRELLIS_MIN_SUM)
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s()
-
-    #tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
-    tb.connect (src,src_head,s2fsmi,enc,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    #tb.connect (add,head)
-    #tb.connect (tail,fsmi2s,dst)
-    tb.connect (add,metrics_in,scale,dec,fsmi2s,dst)
-
-    tb.run()
-
-    #print enc_out.ST(), enc_in.ST()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    return (ntotal,ntotal-nright)
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 5:
-        fname_out=args[0]
-        fname_in=args[1]
-        esn0_db=float(args[2]) # Es/No in dB
-        IT=int(args[3])
-        rep=int(args[4]) # number of times the experiment is run to collect 
enough errors
-    else:
-        sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in 
Es/No_db iterations repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%10==0): # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
diff --git a/gr-trellis/examples/python/test_tcm.py 
b/gr-trellis/examples/python/test_tcm.py
index bf9710a..dfc5656 100755
--- a/gr-trellis/examples/python/test_tcm.py
+++ b/gr-trellis/examples/python/test_tcm.py
@@ -6,9 +6,10 @@ from gnuradio import eng_notation
 import math
 import sys
 import random
-import fsm_utils
+from gnuradio.trellis import fsm_utils
 from gnuradio.eng_option import eng_option
 from optparse import OptionParser
+import numpy
 
 try:
     from gnuradio import analog
@@ -19,39 +20,32 @@ except ImportError:
 def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
     tb = gr.top_block ()
 
-
     # TX
-    #packet = [0]*Kb
-    #for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0
-        #packet[i] = random.randint(0, 1) # random 0s and 1s
-    #src = blocks.vector_source_s(packet,False)
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts
-    #b2s = blocks.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in 
shorts
+    numpy.random.seed(-seed)
+    packet = numpy.random.randint(0,2,Kb) # create Kb random bits
+    packet[Kb-10:Kb]=0
+    packet[0:Kb]=0
+    src = blocks.vector_source_s(packet.tolist(),False)
+    b2s = blocks.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts
     s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the FSM input cardinality
     enc = trellis.encoder_ss(f,0) # initial state = 0
     mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
 
     # CHANNEL
     add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
+    noise = 
analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),long(seed))
 
     # RX
-    metrics = 
trellis.metrics_f(f.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) 
# data preprocessing to generate metrics for Viterbi
-    va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are 
not set.
+    va = 
trellis.viterbi_combined_fs(f,K,0,0,dimensionality,constellation,digital.TRELLIS_EUCLIDEAN)
 # Put -1 if the Initial/Final states are not set.
     fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    #s2b = blocks.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to 
bits
-    #dst = blocks.vector_sink_s();
-    dst = blocks.check_lfsr_32k_s()
+    s2b = blocks.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to 
bits
+    dst = blocks.vector_sink_s();
 
 
-    tb.connect (src,src_head,s2fsmi,enc,mod)
-    #tb.connect (src,b2s,s2fsmi,enc,mod)
+    tb.connect (src,b2s,s2fsmi,enc,mod)
     tb.connect (mod,(add,0))
     tb.connect (noise,(add,1))
-    tb.connect (add,metrics)
-    tb.connect (metrics,va,fsmi2s,dst)
-    #tb.connect (metrics,va,fsmi2s,s2b,dst)
+    tb.connect (add,va,fsmi2s,s2b,dst)
 
 
     tb.run()
@@ -61,19 +55,11 @@ def run_test 
(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
     # Then put it as the last argument in the viterbi block
     #print "final state = " , enc.ST()
 
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    #ntotal = len(packet)
-    #if len(dst.data()) != ntotal:
-        #print "Error: not enough data\n"
-    #nright = 0;
-    #for i in range(ntotal):
-        #if packet[i]==dst.data()[i]:
-            #nright=nright+1
-        #else:
-            #print "Error in ", i
-    return (ntotal,ntotal-nright)
+    if len(dst.data()) != len(packet):
+        print "Error: not enough data:", len(dst.data()), len(packet)
+    ntotal=len(packet)
+    nwrong = sum(abs(packet-numpy.array(dst.data())));
+    return (ntotal,nwrong,abs(packet-numpy.array(dst.data())))
 
 
 
@@ -113,20 +99,26 @@ def main():
     Es = Es / (len(constellation)/dimensionality)
     N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
 
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
+    tot_b=0 # total number of transmitted bits
+    terr_b=0 # total number of bits in error
     terr_p=0 # total number of packets in error
     for i in range(rep):
-        
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
+        
(b,e,pattern)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-(666+i))
 # run experiment with different seed to get different noise realizations
+        tot_b=tot_b+b
+        terr_b=terr_b+e
+        terr_p=terr_p+(e!=0)
         if ((i+1)%100==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_b,terr_b, 
'%.2e' % ((1.0*terr_b)/tot_b)
+       if e!=0:
+            print "rep=",i, e
+            for k in range(Kb):
+                if pattern[k]!=0:
+                    print k
+    # estimate of the bit error rate
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_b,terr_b, '%.2e' % 
((1.0*terr_b)/tot_b)
 
 
 
 if __name__ == '__main__':
     main()
+
diff --git a/gr-trellis/examples/python/test_tcm_bit.py 
b/gr-trellis/examples/python/test_tcm_bit.py
deleted file mode 100755
index 7880f0e..0000000
--- a/gr-trellis/examples/python/test_tcm_bit.py
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
-    tb = gr.top_block ()
-
-    # TX
-    packet = [0]*Kb
-    # this for loop is TOO slow!!!
-    for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0
-        packet[i] = random.randint(0, 1) # random 0s and 1s
-    src = blocks.vector_source_s(packet,False)
-    #src = blocks.lfsr_32k_source_s()
-    #src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts
-    b2s = blocks.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the FSM input cardinality
-    enc = trellis.encoder_ss(f,0) # initial state = 0
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-
-    # RX
-    metrics = 
trellis.metrics_f(f.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) 
# data preprocessing to generate metrics for Viterbi
-    va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are 
not set.
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    s2b = blocks.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to 
bits
-    dst = blocks.vector_sink_s();
-    #dst = blocks.check_lfsr_32k_s();
-
-
-    #tb.connect (src,src_head,s2fsmi,enc,mod)
-    tb.connect (src,b2s,s2fsmi,enc,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,metrics)
-    #tb.connect (metrics,va,fsmi2s,dst)
-    tb.connect (metrics,va,fsmi2s,s2b,dst)
-
-
-    tb.run()
-
-    # A bit of cheating: run the program once and print the
-    # final encoder state..
-    # Then put it as the last argument in the viterbi block
-    #print "final state = " , enc.ST()
-
-    #ntotal = dst.ntotal ()
-    #nright = dst.nright ()
-    #runlength = dst.runlength ()
-    ntotal = len(packet)
-    if len(dst.data()) != ntotal:
-        print "Error: not enough data\n"
-    nright = 0;
-    # this for loop is TOO slow!!!
-    for i in range(ntotal):
-        if packet[i]==dst.data()[i]:
-            nright=nright+1
-        #else:
-            #print "Error in ", i
-    return (ntotal,ntotal-nright)
-
-
-
-
-def main():
-    parser = OptionParser(option_class=eng_option)
-    parser.add_option("-f", "--fsm_file", type="string", 
default="fsm_files/awgn1o2_4.fsm", help="Filename containing the fsm 
specification, e.g. -f fsm_files/awgn1o2_4.fsm 
(default=fsm_files/awgn1o2_4.fsm)")
-    parser.add_option("-e", "--esn0", type="eng_float", default=10.0, 
help="Symbol energy to noise PSD level ratio in dB, e.g., -e 10.0 
(default=10.0)")
-    parser.add_option("-r", "--repetitions", type="int", default=100, 
help="Number of packets to be generated for the simulation, e.g., -r 100 
(default=100)")
-
-    (options, args) = parser.parse_args ()
-    if len(args) != 0:
-        parser.print_help()
-        raise SystemExit, 1
-
-    fname=options.fsm_file
-    esn0_db=float(options.esn0)
-    rep=int(options.repetitions)
-
-
-    # system parameters
-    f=trellis.fsm(fname) # get the FSM specification from a file
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-    modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != f.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%1==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main()
diff --git a/gr-trellis/examples/python/test_tcm_combined.py 
b/gr-trellis/examples/python/test_tcm_combined.py
deleted file mode 100755
index 697e3cc..0000000
--- a/gr-trellis/examples/python/test_tcm_combined.py
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import fsm_utils
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
-    tb = gr.top_block ()
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the FSM input cardinality
-    enc = trellis.encoder_ss(f,0) # initial state = 0
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-
-    # RX
-    va = 
trellis.viterbi_combined_fs(f,K,0,-1,dimensionality,constellation,digital.TRELLIS_EUCLIDEAN)
 # Put -1 if the Initial/Final states are not set.
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s();
-
-
-    tb.connect (src,src_head,s2fsmi,enc,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,va,fsmi2s,dst)
-
-
-    tb.run()
-
-    # A bit of cheating: run the program once and print the
-    # final encoder state..
-    # Then put it as the last argument in the viterbi block
-    #print "final state = " , enc.ST()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-
-    return (ntotal,ntotal-nright)
-
-
-
-
-def main():
-    parser = OptionParser(option_class=eng_option)
-    parser.add_option("-f", "--fsm_file", type="string", 
default="fsm_files/awgn1o2_4.fsm", help="Filename containing the fsm 
specification, e.g. -f fsm_files/awgn1o2_4.fsm 
(default=fsm_files/awgn1o2_4.fsm)")
-    parser.add_option("-e", "--esn0", type="eng_float", default=10.0, 
help="Symbol energy to noise PSD level ratio in dB, e.g., -e 10.0 
(default=10.0)")
-    parser.add_option("-r", "--repetitions", type="int", default=100, 
help="Number of packets to be generated for the simulation, e.g., -r 100 
(default=100)")
-
-    (options, args) = parser.parse_args ()
-    if len(args) != 0:
-        parser.print_help()
-        raise SystemExit, 1
-
-    fname=options.fsm_file
-    esn0_db=float(options.esn0)
-    rep=int(options.repetitions)
-
-    # system parameters
-    f=trellis.fsm(fname) # get the FSM specification from a file (will 
hopefully be automated in the future...)
-    Kb=1024*16  # packet size in bits (make it multiple of 16)
-    bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-    modulation = fsm_utils.psk4 # see fsm_utils.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != f.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%100==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main()
-
diff --git a/gr-trellis/examples/python/test_tcm_parallel.py 
b/gr-trellis/examples/python/test_tcm_parallel.py
deleted file mode 100755
index b30c808..0000000
--- a/gr-trellis/examples/python/test_tcm_parallel.py
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import fsm_utils
-from gnuradio.eng_option import eng_option
-from optparse import OptionParser
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed,P):
-    tb = gr.top_block ()
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16*P) # packet size in shorts
-    s2fsmi=blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the FSM input cardinality
-    s2p = blocks.stream_to_streams(gr.sizeof_short,P) # serial to parallel
-    enc = trellis.encoder_ss(f,0) # initiali state = 0
-    mod = digital.chunks_to_symbols_sf(constellation,dimensionality)
-
-    # CHANNEL
-    add=[]
-    noise=[]
-    for i in range(P):
-        add.append(blocks.add_ff())
-        
noise.append(analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed))
-
-    # RX
-    metrics = 
trellis.metrics_f(f.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) 
# data preprocessing to generate metrics for Viterbi
-    va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are 
not set.
-    p2s = blocks.streams_to_stream(gr.sizeof_short,P) # parallel to serial
-    fsmi2s=blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack 
FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s()
-
-    tb.connect (src,src_head,s2fsmi,s2p)
-    for i in range(P):
-        tb.connect ((s2p,i),(enc,i),(mod,i))
-        tb.connect ((mod,i),(add[i],0))
-        tb.connect (noise[i],(add[i],1))
-        tb.connect (add[i],(metrics,i))
-        tb.connect ((metrics,i),(va,i),(p2s,i))
-    tb.connect (p2s,fsmi2s,dst)
-
-
-    tb.run()
-
-    # A bit of cheating: run the program once and print the
-    # final encoder state.
-    # Then put it as the last argument in the viterbi block
-    #print "final state = " , enc.ST()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-
-    return (ntotal,ntotal-nright)
-
-
-
-def main():
-    parser = OptionParser(option_class=eng_option)
-    parser.add_option("-f", "--fsm_file", type="string", 
default="fsm_files/awgn1o2_4.fsm", help="Filename containing the fsm 
specification, e.g. -f fsm_files/awgn1o2_4.fsm 
(default=fsm_files/awgn1o2_4.fsm)")
-    parser.add_option("-e", "--esn0", type="eng_float", default=10.0, 
help="Symbol energy to noise PSD level ratio in dB, e.g., -e 10.0 
(default=10.0)")
-    parser.add_option("-r", "--repetitions", type="int", default=100, 
help="Number of packets to be generated for the simulation, e.g., -r 100 
(default=100)")
-
-    (options, args) = parser.parse_args ()
-    if len(args) != 0:
-        parser.print_help()
-        raise SystemExit, 1
-
-    fname=options.fsm_file
-    esn0_db=float(options.esn0)
-    rep=int(options.repetitions)
-
-    # system parameters
-    f=trellis.fsm(fname) # get the FSM specification from a file
-    P=4  # how many parallel streams?
-    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
-    bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-    modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined 
modulations
-    dimensionality = modulation[0]
-    constellation = modulation[1]
-    if len(constellation)/dimensionality != f.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
-        sys.exit (1)
-    # calculate average symbol energy
-    Es = 0
-    for i in range(len(constellation)):
-        Es = Es + constellation[i]**2
-    Es = Es / (len(constellation)/dimensionality)
-    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-    for i in range(rep):
-        
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i),P)
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%100==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-if __name__ == '__main__':
-    main()
-
diff --git a/gr-trellis/examples/python/test_turbo_equalization.py 
b/gr-trellis/examples/python/test_turbo_equalization.py
deleted file mode 100755
index b2d58a6..0000000
--- a/gr-trellis/examples/python/test_turbo_equalization.py
+++ /dev/null
@@ -1,147 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def 
make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
-    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner SISO
-    scale = blocks.multiply_const_ff(1.0/N0)
-    gnd = blocks.vector_source_f([0],True);
-
-    inter=[]
-    deinter=[]
-    siso_in=[]
-    siso_out=[]
-
-    # generate all blocks
-    for it in range(IT):
-      inter.append( 
trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) 
)
-      siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) )
-      deinter.append( 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
 )
-      if it < IT-1:
-        siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) )
-      else:
-        siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs 
needed
-
-    # connect first stage
-    tb.connect (gnd,inter[0])
-    tb.connect (metrics_in,scale)
-    tb.connect (scale,(siso_in[0],1))
-
-    # connect the rest
-    for it in range(IT):
-      if it < IT-1:
-        tb.connect (metrics_in,(siso_in[it+1],1))
-        tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
-        tb.connect (gnd,(siso_out[it],0))
-        tb.connect (siso_out[it],inter[it+1])
-        tb.connect (inter[it],(siso_in[it],0))
-      else:
-        tb.connect (siso_in[it],deinter[it],siso_out[it])
-        tb.connect (inter[it],(siso_in[it],0))
-
-    return (metrics_in,siso_out[IT-1])
-
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,Es,N0,IT,seed):
-    tb = gr.top_block ()
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the iouter FSM input cardinality
-    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
-    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
-    enc_in = trellis.encoder_ss(fi,0) # initial state = 0
-    # essentially here we implement the combination of modulation and channel 
as a memoryless modulation (the memory induced by the channel is hidden in the 
innner FSM)
-    mod = digital.chunks_to_symbols_sf(tot_constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    (head,tail) = 
make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s();
-
-    tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,head)
-    tb.connect (tail,fsmi2s,dst)
-
-    tb.run()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    #print ntotal,nright,runlength
-
-    return (ntotal,ntotal-nright)
-
-
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 3:
-        fname_out=args[0]
-        esn0_db=float(args[1])
-        rep=int(args[2])
-    else:
-        sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out 
Es/No_db  repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=64*16  # packet size in bits (multiple of 16)
-    modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined 
modulations
-    channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined 
test channels
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM 
automatically
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-    print 'size = ',K
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # 
generate the lookup table (normalize energy to 1)
-    dimensionality = tot_channel[0]
-    tot_constellation = tot_channel[1]
-    if len(tot_constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and lookup 
table size.\n')
-        sys.exit (1)
-    N0=pow(10.0,-esn0_db/10.0); # noise variance
-    IT = 3 # number of turbo iterations
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,1,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        print s
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%10==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
-
diff --git a/gr-trellis/examples/python/test_turbo_equalization1.py 
b/gr-trellis/examples/python/test_turbo_equalization1.py
deleted file mode 100755
index 5ff21ec..0000000
--- a/gr-trellis/examples/python/test_turbo_equalization1.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, filter, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def 
make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
-    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner SISO
-    scale = blocks.multiply_const_ff(1.0/N0)
-    gnd = blocks.vector_source_f([0],True);
-
-    inter=[]
-    deinter=[]
-    siso_in=[]
-    siso_out=[]
-
-    # generate all blocks
-    for it in range(IT):
-      inter.append( 
trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) 
)
-      siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) )
-      deinter.append( 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
 )
-      if it < IT-1:
-        siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) )
-      else:
-        siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs 
needed
-
-    # connect first stage
-    tb.connect (gnd,inter[0])
-    tb.connect (metrics_in,scale)
-    tb.connect (scale,(siso_in[0],1))
-
-    # connect the rest
-    for it in range(IT):
-      if it < IT-1:
-        tb.connect (scale,(siso_in[it+1],1))
-        tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
-        tb.connect (gnd,(siso_out[it],0))
-        tb.connect (siso_out[it],inter[it+1])
-        tb.connect (inter[it],(siso_in[it],0))
-      else:
-        tb.connect (siso_in[it],deinter[it],siso_out[it])
-        tb.connect (inter[it],(siso_in[it],0))
-
-    return (metrics_in,siso_out[IT-1])
-
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed):
-    tb = gr.top_block ()
-    L = len(channel)
-
-    # TX
-    # this for loop is TOO slow in python!!!
-    packet = [0]*(K)
-    random.seed(seed)
-    for i in range(len(packet)):
-        packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols
-    src = blocks.vector_source_s(packet,False)
-    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
-    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
-    mod = digital.chunks_to_symbols_sf(modulation[1],modulation[0])
-
-    # CHANNEL
-    isi = filter.fir_filter_fff(1,channel)
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    (head,tail) = 
make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
-    dst = blocks.vector_sink_s();
-
-    tb.connect (src,enc_out,inter,mod)
-    tb.connect (mod,isi,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,head)
-    tb.connect (tail,dst)
-
-    tb.run()
-
-    data = dst.data()
-    ntotal = len(data)
-    nright=0
-    for i in range(ntotal):
-        if packet[i]==data[i]:
-            nright=nright+1
-        #else:
-            #print "Error in ", i
-
-    return (ntotal,ntotal-nright)
-
-
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 3:
-        fname_out=args[0]
-        esn0_db=float(args[1])
-        rep=int(args[2])
-    else:
-        sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out 
Es/No_db  repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=64*16  # packet size in bits (multiple of 16)
-    modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined 
modulations
-    channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined 
test channels
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM 
automatically
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # 
generate the lookup table (normalize energy to 1)
-    dimensionality = tot_channel[0]
-    tot_constellation = tot_channel[1]
-    if len(tot_constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and lookup 
table size.\n')
-        sys.exit (1)
-    N0=pow(10.0,-esn0_db/10.0); # noise variance
-    IT = 3 # number of turbo iterations
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%10==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
-
diff --git a/gr-trellis/examples/python/test_turbo_equalization2.py 
b/gr-trellis/examples/python/test_turbo_equalization2.py
deleted file mode 100755
index c2af9fb..0000000
--- a/gr-trellis/examples/python/test_turbo_equalization2.py
+++ /dev/null
@@ -1,152 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, filter, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def 
make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type):
-    scale = blocks.multiply_const_ff(math.sqrt(1.0/N0))
-    gnd = blocks.vector_source_f([0],True);
-
-    inter=[]
-    deinter=[]
-    siso_in=[]
-    siso_out=[]
-
-    # generate all blocks
-    for it in range(IT):
-      inter.append( 
trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) 
)
-      siso_in.append( 
trellis.siso_combined_f(fi,K,0,-1,True,False,type,dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN)
 )
-      deinter.append( 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
 )
-      if it < IT-1:
-        siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) )
-      else:
-        siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs 
needed
-
-    # connect first stage
-    tb.connect (gnd,inter[0])
-    tb.connect (scale,(siso_in[0],1))
-
-    # connect the rest
-    for it in range(IT):
-      if it < IT-1:
-        tb.connect (scale,(siso_in[it+1],1))
-        tb.connect (siso_in[it],deinter[it],(siso_out[it],1))
-        tb.connect (gnd,(siso_out[it],0))
-        tb.connect (siso_out[it],inter[it+1])
-        tb.connect (inter[it],(siso_in[it],0))
-      else:
-        tb.connect (siso_in[it],deinter[it],siso_out[it])
-        tb.connect (inter[it],(siso_in[it],0))
-
-    return (scale,siso_out[IT-1])
-
-
-def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed):
-    tb = gr.top_block ()
-    L = len(channel)
-
-    # TX
-    # this for loop is TOO slow in python!!!
-    packet = [0]*(K)
-    random.seed(seed)
-    for i in range(len(packet)):
-        packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols
-    src = blocks.vector_source_s(packet,False)
-    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
-    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
-    mod = digital.chunks_to_symbols_sf(modulation[1],modulation[0])
-
-    # CHANNEL
-    isi = filter.fir_filter_fff(1,channel)
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    (head,tail) = 
make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
-    dst = blocks.vector_sink_s();
-
-    tb.connect (src,enc_out,inter,mod)
-    tb.connect (mod,isi,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,head)
-    tb.connect (tail,dst)
-
-    tb.run()
-
-    data = dst.data()
-    ntotal = len(data)
-    nright=0
-    for i in range(ntotal):
-        if packet[i]==data[i]:
-            nright=nright+1
-        #else:
-            #print "Error in ", i
-
-    return (ntotal,ntotal-nright)
-
-
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 3:
-        fname_out=args[0]
-        esn0_db=float(args[1])
-        rep=int(args[2])
-    else:
-        sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out 
Es/No_db  repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=64*16  # packet size in bits (multiple of 16)
-    modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined 
modulations
-    channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined 
test channels
-    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
-    fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM 
automatically
-    if fo.O() != fi.I():
-        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
-        sys.exit (1)
-    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-    interleaver=trellis.interleaver(K,666) # construct a random interleaver
-    tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # 
generate the lookup table (normalize energy to 1)
-    dimensionality = tot_channel[0]
-    N0=pow(10.0,-esn0_db/10.0); # noise variance
-    tot_constellation =[0]*len(tot_channel[1])
-    for i in range(len(tot_channel[1])):
-      tot_constellation[i] = tot_channel[1][i] * math.sqrt(1.0/N0)
-    if len(tot_constellation)/dimensionality != fi.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and lookup 
table size.\n')
-        sys.exit (1)
-    IT = 3 # number of turbo iterations
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-
-    for i in range(rep):
-        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%10==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
-
diff --git a/gr-trellis/examples/python/test_viterbi_equalization.py 
b/gr-trellis/examples/python/test_viterbi_equalization.py
deleted file mode 100755
index 987f171..0000000
--- a/gr-trellis/examples/python/test_viterbi_equalization.py
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test (f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,seed):
-    tb = gr.top_block ()
-
-    # TX
-    src = blocks.lfsr_32k_source_s()
-    src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts
-    s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
unpack shorts to symbols compatible with the FSM input cardinality
-    enc = trellis.encoder_ss(f,0) # initial state = 0
-    # essentially here we implement the combination of modulation and channel 
as a memoryless modulation (the memory induced by the channel is hidden in the 
FSM)
-    mod = digital.chunks_to_symbols_sf(tot_constellation,dimensionality)
-
-    # CHANNEL
-    add = blocks.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    metrics = 
trellis.metrics_f(f.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for Viterbi
-    va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are 
not set.
-    fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # 
pack FSM input symbols to shorts
-    dst = blocks.check_lfsr_32k_s();
-
-    tb.connect (src,src_head,s2fsmi,enc,mod)
-    tb.connect (mod,(add,0))
-    tb.connect (noise,(add,1))
-    tb.connect (add,metrics)
-    tb.connect (metrics,va,fsmi2s,dst)
-
-    tb.run()
-
-    ntotal = dst.ntotal ()
-    nright = dst.nright ()
-    runlength = dst.runlength ()
-    #print ntotal,nright,runlength
-
-    return (ntotal,ntotal-nright)
-
-
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 2:
-        esn0_db=float(args[0])
-        rep=int(args[1])
-    else:
-        sys.stderr.write ('usage: test_viterbi_equalization.py Es/No_db  
repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=128*16  # packet size in bits (multiple of 16)
-    modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined 
modulations
-    channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined 
test channels
-    f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM 
automatically
-    bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-
-    tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # 
generate the lookup table (normalize energy to 1)
-    dimensionality = tot_channel[0]
-    tot_constellation = tot_channel[1]
-    N0=pow(10.0,-esn0_db/10.0); # noise variance
-    if len(tot_constellation)/dimensionality != f.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and lookup 
table size.\n')
-        sys.exit (1)
-
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-
-    for i in range(rep):
-        
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%100==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or bit) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
-
diff --git a/gr-trellis/examples/python/test_viterbi_equalization1.py 
b/gr-trellis/examples/python/test_viterbi_equalization1.py
deleted file mode 100755
index baa6a27..0000000
--- a/gr-trellis/examples/python/test_viterbi_equalization1.py
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/env python
-
-from gnuradio import gr
-from gnuradio import trellis, digital, filter, blocks
-from gnuradio import eng_notation
-import math
-import sys
-import random
-import fsm_utils
-
-try:
-    from gnuradio import analog
-except ImportError:
-    sys.stderr.write("Error: Program requires gr-analog.\n")
-    sys.exit(1)
-
-def run_test 
(f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed):
-    tb = gr.top_block ()
-    L = len(channel)
-
-    # TX
-    # this for loop is TOO slow in python!!!
-    packet = [0]*(K+2*L)
-    random.seed(seed)
-    for i in range(len(packet)):
-        packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols
-    for i in range(L): # first/last L symbols set to 0
-        packet[i] = 0
-        packet[len(packet)-i-1] = 0
-    src = blocks.vector_source_s(packet,False)
-    mod = digital.chunks_to_symbols_sf(modulation[1],modulation[0])
-
-    # CHANNEL
-    isi = filter.fir_filter_fff(1,channel)
-    add = blockss.add_ff()
-    noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)
-
-    # RX
-    skip = blocks.skiphead(gr.sizeof_float, L) # skip the first L samples 
since you know they are coming from the L zero symbols
-    #metrics = 
trellis.metrics_f(f.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for Viterbi
-    #va = trellis.viterbi_s(f,K+L,-1,0) # Put -1 if the Initial/Final states 
are not set.
-    va = 
trellis.viterbi_combined_fs(f,K+L,0,0,dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN)
 # using viterbi_combined_fs instead of metrics_f/viterbi_s allows larger 
packet lengths because metrics_f is complaining for not being able to allocate 
large buffers. This is due to the large f.O() in this application...
-    dst = blocks.vector_sink_s()
-
-    tb.connect (src,mod)
-    tb.connect (mod,isi,(add,0))
-    tb.connect (noise,(add,1))
-    #tb.connect (add,metrics)
-    #tb.connect (metrics,va,dst)
-    tb.connect (add,skip,va,dst)
-
-    tb.run()
-
-    data = dst.data()
-    ntotal = len(data) - L
-    nright=0
-    for i in range(ntotal):
-        if packet[i+L]==data[i]:
-            nright=nright+1
-        #else:
-            #print "Error in ", i
-
-    return (ntotal,ntotal-nright)
-
-
-def main(args):
-    nargs = len (args)
-    if nargs == 2:
-        esn0_db=float(args[0])
-        rep=int(args[1])
-    else:
-        sys.stderr.write ('usage: test_viterbi_equalization1.py Es/No_db  
repetitions\n')
-        sys.exit (1)
-
-    # system parameters
-    Kb=128*16  # packet size in bits (multiple of 16)
-    modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined 
modulations
-    channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined 
test channels
-    f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM 
automatically
-    bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM 
input symbol
-    K=Kb/bitspersymbol # packet size in trellis steps
-
-    tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # 
generate the lookup table (normalize energy to 1)
-    dimensionality = tot_channel[0]
-    tot_constellation = tot_channel[1]
-    N0=pow(10.0,-esn0_db/10.0); # noise variance
-    if len(tot_constellation)/dimensionality != f.O():
-        sys.stderr.write ('Incompatible FSM output cardinality and lookup 
table size.\n')
-        sys.exit (1)
-
-    tot_s=0 # total number of transmitted shorts
-    terr_s=0 # total number of shorts in error
-    terr_p=0 # total number of packets in error
-
-    for i in range(rep):
-        
(s,e)=run_test(f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
-        tot_s=tot_s+s
-        terr_s=terr_s+e
-        terr_p=terr_p+(terr_s!=0)
-        if ((i+1)%100==0) : # display progress
-            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short or symbol) error rate
-    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
-
-
-
-if __name__ == '__main__':
-    main (sys.argv[1:])
diff --git a/gr-trellis/gnuradio-trellis.pc.in 
b/gr-trellis/gnuradio-trellis.pc.in
index df7e2e2..8ccf65b 100644
--- a/gr-trellis/gnuradio-trellis.pc.in
+++ b/gr-trellis/gnuradio-trellis.pc.in
@@ -4,7 +4,7 @@ address@hidden@
 address@hidden@
 
 Name: gnuradio-trellis
-Description: GNU Radio blocks for trellis coded modulation
+Description: GNU Radio blocks for trellis-based processing
 Requires: gnuradio-runtime
 Version: @LIBVER@
 Libs: -L${libdir} -lgnuradio-trellis
diff --git a/gr-trellis/grc/trellis_encoder_xx.xml 
b/gr-trellis/grc/trellis_encoder_xx.xml
index c4259ff..a2ad692 100644
--- a/gr-trellis/grc/trellis_encoder_xx.xml
+++ b/gr-trellis/grc/trellis_encoder_xx.xml
@@ -10,7 +10,7 @@
   <key>trellis_encoder_xx</key>
   <category>Trellis Coding</category>
   <import>from gnuradio import trellis</import>
-  <make>trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state)</make>
+  <make> trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state, 
$blocklength) if $blockwise else 
trellis.encoder_$(type)(trellis.fsm($fsm_args), $init_state) </make>
   <callback>set_FSM(trellis.fsm($fsm_args))</callback>
   <callback>set_ST($init_state)</callback>
   <param>
@@ -65,6 +65,28 @@
     <value>0</value>
     <type>int</type>
   </param>
+  <param>
+    <name>Blockwise</name>
+    <key>blockwise</key>
+    <value>False</value>
+    <type>enum</type>
+    <hide>part</hide>
+    <option>
+      <name>On</name>
+      <key>True</key>
+    </option>
+    <option>
+      <name>Off</name>
+      <key>False</key>
+    </option>
+  </param>
+  <param>
+     <name>Block length</name>
+     <key>blocklength</key>
+     <value>0</value>
+     <type>int</type>
+     <hide>#if $blockwise() == 'True' then 'none' else 'all'#</hide>
+  </param>
   <check>(isinstance(eval(""" $fsm_args """[1:-1], locals(),globals()), str) 
and open($fsm_args).close()) or True</check>
   <sink>
     <name>in</name>
diff --git a/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t 
b/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t
index 67d17f3..f767510 100644
--- a/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t
+++ b/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t
@@ -44,11 +44,14 @@ namespace gr {
 
       static sptr make(const fsm &FSM, int ST);
 
+      static sptr make(const fsm &FSM, int ST, int K);
+
       virtual fsm FSM() = 0;
       virtual int ST() = 0;
-
+      virtual int K() = 0;
       virtual void set_FSM(fsm &FSM) =0;
       virtual void set_ST(int ST) =0;
+      virtual void set_K(int K) =0;
     };
 
   } /* namespace trellis */
diff --git a/gr-trellis/lib/encoder_XX_impl.cc.t 
b/gr-trellis/lib/encoder_XX_impl.cc.t
index 4b11e3c..f2e1992 100644
--- a/gr-trellis/lib/encoder_XX_impl.cc.t
+++ b/gr-trellis/lib/encoder_XX_impl.cc.t
@@ -37,15 +37,24 @@ namespace gr {
     @BASE_NAME@::make(const fsm &FSM, int ST)
     {
       return gnuradio::get_initial_sptr
-       (new @IMPL_NAME@(FSM,ST));
+       (new @IMPL_NAME@(FSM,ST,0,false));
     }
 
-    @IMPL_NAME@::@IMPL_NAME@(const fsm &FSM, int ST)
+    @BASE_NAME@::sptr
+    @BASE_NAME@::make(const fsm &FSM, int ST, int K)
+    {
+      return gnuradio::get_initial_sptr
+       (new @IMPL_NAME@(FSM,ST,K,true));
+    }
+
+    @IMPL_NAME@::@IMPL_NAME@(const fsm &FSM, int ST, int K, bool B)
     : sync_block("@BASE_NAME@",
-                   io_signature::make(1, -1, sizeof(@I_TYPE@)),
-                   io_signature::make(1, -1, sizeof(@O_TYPE@))),
+                   io_signature::make(1, 1, sizeof(@I_TYPE@)),
+                   io_signature::make(1, 1, sizeof(@O_TYPE@))),
       d_FSM(FSM),
-      d_ST(ST)
+      d_ST(ST),
+      d_K(K),
+      d_B(B)      
     {
     }
 
@@ -59,24 +68,32 @@ namespace gr {
                      gr_vector_void_star &output_items)
     {
       int ST_tmp = 0;
-      int nstreams = input_items.size();
-
-      for(int m=0;m<nstreams;m++) {
-       const @I_TYPE@ *in = (const @address@hidden)input_items[m];
-       @O_TYPE@ *out = (@O_TYPE@ *) output_items[m];
-       ST_tmp = d_ST;
 
-       // per stream processing
-       for(int i = 0; i < noutput_items; i++) {
-         out[i] = (@O_TYPE@)d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // direction 
of time?
-         ST_tmp = (int)d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
-       }
-       // end per stream processing
-      }
-      d_ST = ST_tmp;
-
-      return noutput_items;
-    }
+      if (d_B){ // blockwise operation
+        int nblocks = noutput_items /d_K;
+       const @I_TYPE@ *in = (const @address@hidden)input_items[0];
+       @O_TYPE@ *out = (@O_TYPE@ *) output_items[0];
+        for(int n = 0; n < nblocks; n++) {
+          ST_tmp = d_ST;
+          for(int i = 0; i < d_K; i++) {
+            out[n*d_K+i] = (@O_TYPE@)d_FSM.OS()[ST_tmp*d_FSM.I()+in[n*d_K+i]];
+            ST_tmp = (int)d_FSM.NS()[ST_tmp*d_FSM.I()+in[n*d_K+i]];
+          }
+        }
+        return nblocks*d_K;
+      } // end blockwise operation
+      else{ // streaming operation
+        const @I_TYPE@ *in = (const @address@hidden)input_items[0];
+        @O_TYPE@ *out = (@O_TYPE@ *) output_items[0];
+        ST_tmp = d_ST;
+        for(int i = 0; i < noutput_items; i++) {
+          out[i] = (@O_TYPE@)d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; 
+          ST_tmp = (int)d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+        }
+        d_ST = ST_tmp;
+        return noutput_items;
+      } // end streaming operation  
+   }
 
   } /* namespace trellis */
 } /* namespace gr */
diff --git a/gr-trellis/lib/encoder_XX_impl.h.t 
b/gr-trellis/lib/encoder_XX_impl.h.t
index d58f9b0..69f853d 100644
--- a/gr-trellis/lib/encoder_XX_impl.h.t
+++ b/gr-trellis/lib/encoder_XX_impl.h.t
@@ -35,17 +35,20 @@ namespace gr {
     private:
       fsm d_FSM;
       int d_ST;
+      int d_K;
+      bool d_B;
+ 
 
     public:
-      @IMPL_NAME@(const fsm &FSM, int ST);
+      @IMPL_NAME@(const fsm &FSM, int ST, int K, bool B);
       address@hidden@();
 
       fsm FSM() { return d_FSM;; }
       int ST() {  return d_ST; }
-
+      int K() {  return d_K; }
       void set_FSM(fsm &FSM) { d_FSM = FSM; }
       void set_ST(int ST) { d_ST = ST; }
-
+      void set_K(int K) { d_K = K; }
       int work(int noutput_items,
               gr_vector_const_void_star &input_items,
               gr_vector_void_star &output_items);
diff --git a/gr-trellis/python/trellis/fsm_utils.py 
b/gr-trellis/python/trellis/fsm_utils.py
index c579f09..7ec88cb 100755
--- a/gr-trellis/python/trellis/fsm_utils.py
+++ b/gr-trellis/python/trellis/fsm_utils.py
@@ -28,12 +28,12 @@ import operator
 import numpy
 
 #from gnuradio import trellis
-#
-#try:
-    #import scipy.linalg
-#except ImportError:
-    #print "Error: Program requires scipy (see: www.scipy.org)."
-    #sys.exit(1)
+
+try:
+    import scipy.linalg
+except ImportError:
+    print "Error: Program requires scipy (see: www.scipy.org)."
+    sys.exit(1)
 
 
 



reply via email to

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