commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] [gnuradio] 21/24: digital: adding packet_formatter_ofd


From: git
Subject: [Commit-gnuradio] [gnuradio] 21/24: digital: adding packet_formatter_ofdm to replace packet_header_ofdm.
Date: Tue, 14 Jun 2016 00:41:02 +0000 (UTC)

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

jcorgan pushed a commit to branch packet2
in repository gnuradio.

commit c1e111cca1743a77d6f4af1cced833f01c79bfdb
Author: Tom Rondeau <address@hidden>
Date:   Wed Apr 27 17:44:14 2016 -0400

    digital: adding packet_formatter_ofdm to replace packet_header_ofdm.
    
    New OFDM formatter as child of packet_formatter_base to work with
    newer style of formatters. Updated packet_formatter_crc to work a bit
    differently with endianness to more closely match packet_header_ofdm
    style.
    
    The LSB/MSB is different between packet_header_ofdm and
    packet_formatter_ofdm. We can drop in the new packet_formatter_ofdm
    into the tx_ofdm example fine with a repack_bits using LSB. However,
    we cannot just drop this into the rx_ofdm example without updating the
    bit order in ofdm_txrx.py.
---
 gr-digital/examples/ofdm/tx_ofdm.grc               | 2067 +++++++++++---------
 gr-digital/examples/packet/formatter_crc.grc       |   30 +-
 .../{formatter_crc.grc => formatter_ofdm.grc}      |  231 ++-
 gr-digital/include/gnuradio/digital/CMakeLists.txt |    1 +
 .../gnuradio/digital/packet_formatter_ofdm.h       |  127 ++
 gr-digital/lib/CMakeLists.txt                      |    1 +
 gr-digital/lib/packet_formatter_crc.cc             |   13 +-
 gr-digital/lib/packet_formatter_ofdm.cc            |  180 ++
 gr-digital/swig/digital_swig.i                     |    2 +
 gr-digital/swig/packet_header.i                    |    6 +
 10 files changed, 1691 insertions(+), 967 deletions(-)

diff --git a/gr-digital/examples/ofdm/tx_ofdm.grc 
b/gr-digital/examples/ofdm/tx_ofdm.grc
index 368f16b..308d768 100644
--- a/gr-digital/examples/ofdm/tx_ofdm.grc
+++ b/gr-digital/examples/ofdm/tx_ofdm.grc
@@ -1,160 +1,151 @@
-<?xml version='1.0' encoding='ASCII'?>
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.10'?>
 <flow_graph>
   <timestamp>Wed Jul  9 15:49:47 2014</timestamp>
   <block>
-    <key>variable</key>
+    <key>options</key>
     <param>
-      <key>id</key>
-      <value>sync_word2</value>
+      <key>author</key>
+      <value></value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>window_size</key>
+      <value>1280, 1024</value>
     </param>
     <param>
-      <key>value</key>
-      <value>[0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 
1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 0, 1, -1, 1, 1, 1, -1, 1, 1, 1, 
-1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 0, 0, 0, 0, 0] 
</value>
+      <key>category</key>
+      <value>Custom</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
+      <key>description</key>
+      <value>Example of an OFDM Transmitter</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(496, 128)</value>
+      <value>(1, 0)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>variable</key>
     <param>
-      <key>id</key>
-      <value>length_tag_key</value>
+      <key>generate_options</key>
+      <value>qt_gui</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>hier_block_src_path</key>
+      <value>.:</value>
     </param>
     <param>
-      <key>value</key>
-      <value>"packet_len"</value>
+      <key>id</key>
+      <value>tx_ofdm</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>max_nouts</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(352, 0)</value>
+      <key>qt_qss_theme</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>realtime_scheduling</key>
+      <value></value>
     </param>
-  </block>
-  <block>
-    <key>variable</key>
     <param>
-      <key>id</key>
-      <value>samp_rate</value>
+      <key>run_command</key>
+      <value>{python} -u {filename}</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>run_options</key>
+      <value>run</value>
     </param>
     <param>
-      <key>value</key>
-      <value>100000</value>
+      <key>run</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>thread_safe_setters</key>
       <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(255, 0)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>title</key>
+      <value>OFDM Tx</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>rolloff</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>0</value>
+      <key>_coordinate</key>
+      <value>(181, -1)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(898, -1)</value>
+      <key>id</key>
+      <value>fft_len</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>64</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>payload_mod</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>1</value>
     </param>
     <param>
-      <key>value</key>
-      <value>digital.constellation_qpsk()</value>
+      <key>_coordinate</key>
+      <value>(720, 69)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(734, 0)</value>
+      <key>id</key>
+      <value>formatter</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>digital.packet_formatter_ofdm(occupied_carriers, 1, 
length_tag_key,)</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>header_mod</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>digital.constellation_bpsk()</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
       <key>_coordinate</key>
       <value>(567, 0)</value>
     </param>
@@ -162,479 +153,462 @@
       <key>_rotation</key>
       <value>0</value>
     </param>
+    <param>
+      <key>id</key>
+      <value>header_mod</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>digital.constellation_bpsk()</value>
+    </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>packet_len</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>96</value>
+      <key>_coordinate</key>
+      <value>(352, 0)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(476, 0)</value>
+      <key>id</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>"packet_len"</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>fft_len</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>64</value>
+      <key>_coordinate</key>
+      <value>(320, 69)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(181, -1)</value>
+      <key>id</key>
+      <value>occupied_carriers</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + 
range(8, 21) + range(22, 27),)</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>header_formatter</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>digital.packet_header_ofdm(occupied_carriers, 1, 
length_tag_key)</value>
+      <key>_coordinate</key>
+      <value>(476, 0)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(708, 64)</value>
+      <key>id</key>
+      <value>packet_len</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>96</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>pilot_carriers</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>((-21, -7, 7, 21,),)</value>
+      <key>_coordinate</key>
+      <value>(734, 0)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(480, 64)</value>
+      <key>id</key>
+      <value>payload_mod</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>digital.constellation_qpsk()</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>occupied_carriers</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + 
range(8, 21) + range(22, 27),)</value>
+      <key>_coordinate</key>
+      <value>(480, 69)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(329, 64)</value>
+      <key>id</key>
+      <value>pilot_carriers</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>((-21, -7, 7, 21,),)</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>pilot_symbols</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>value</key>
-      <value>((1, 1, 1, -1,),)</value>
+      <key>_coordinate</key>
+      <value>(608, 69)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(601, 64)</value>
+      <key>id</key>
+      <value>pilot_symbols</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>value</key>
+      <value>((1, 1, 1, -1,),)</value>
     </param>
   </block>
   <block>
     <key>variable</key>
     <param>
-      <key>id</key>
-      <value>sync_word1</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>1</value>
     </param>
     <param>
-      <key>value</key>
-      <value>[0., 0., 0., 0., 0., 0., 0., 1.41421356, 0., -1.41421356, 0., 
1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 
0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 
-1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 
0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 
1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 
0., 1.41421356, 0., 0., 0., 0., 0., 0.]</value>
+      <key>_coordinate</key>
+      <value>(898, -1)</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(352, 128)</value>
+      <key>id</key>
+      <value>rolloff</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>value</key>
       <value>0</value>
     </param>
   </block>
   <block>
-    <key>virtual_source</key>
+    <key>variable</key>
     <param>
-      <key>id</key>
-      <value>virtual_source_0_0</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Payload Bits</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(0, 458)</value>
+      <value>(255, 0)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>import</key>
     <param>
       <key>id</key>
-      <value>import_0</value>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>value</key>
+      <value>100000</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>import</key>
-      <value>import numpy</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(237, 93)</value>
+      <value>(8, 93)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>import</key>
     <param>
       <key>id</key>
-      <value>import_1</value>
+      <value>sync_word1</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>value</key>
+      <value>[0., 0., 0., 0., 0., 0., 0., 1.41421356, 0., -1.41421356, 0., 
1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 
0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 
-1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 
0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 
1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 
0., 1.41421356, 0., 0., 0., 0., 0., 0.]</value>
     </param>
+  </block>
+  <block>
+    <key>variable</key>
     <param>
-      <key>import</key>
-      <value>from gnuradio.digital.utils import tagged_streams</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(99, 93)</value>
+      <value>(152, 93)</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>
+      <value>sync_word2</value>
     </param>
     <param>
-      <key>import</key>
-      <value>import random</value>
+      <key>value</key>
+      <value>[0, 0, 0, 0, 0, 0, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, -1, 1, 1, 
1, 1, 1, -1, -1, -1, -1, -1, 1, -1, -1, 1, -1, 0, 1, -1, 1, 1, 1, -1, 1, 1, 1, 
-1, 1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, 1, -1, -1, -1, -1, 0, 0, 0, 0, 0] 
</value>
     </param>
+  </block>
+  <block>
+    <key>analog_random_source_x</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(3, 94)</value>
-    </param>
-    <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>comment</key>
+      <value></value>
     </param>
-  </block>
-  <block>
-    <key>virtual_source</key>
     <param>
-      <key>id</key>
-      <value>virtual_source_0_0_0_0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Time Domain</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(1, 747)</value>
+      <value>(16, 167)</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_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <value>analog_random_source_x_0</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Pre-OFDM</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(745, 441)</value>
+      <key>max</key>
+      <value>255</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>minoutbuf</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>min</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>num_samps</key>
+      <value>1000</value>
     </param>
     <param>
-      <key>in_type</key>
+      <key>type</key>
       <value>byte</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
-    </param>
-    <param>
-      <key>symbol_table</key>
-      <value>payload_mod.points()</value>
+      <key>repeat</key>
+      <value>True</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_multiply_const_vxx</key>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>num_ports</key>
-      <value>1</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>const</key>
+      <value>0.05</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>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(212, 450)</value>
+      <value>(208, 692)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>virtual_source_0_0_0</value>
+      <value>blocks_multiply_const_vxx_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Pre-OFDM</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(0, 578)</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
   </block>
   <block>
-    <key>virtual_sink</key>
+    <key>blocks_repack_bits_bb</key>
     <param>
-      <key>id</key>
-      <value>virtual_sink_0</value>
+      <key>k</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>l</key>
+      <value>payload_mod.bits_per_symbol()</value>
+    </param>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Time Domain</value>
+      <key>endianness</key>
+      <value>gr.GR_LSB_FIRST</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(855, 578)</value>
+      <value>(664, 245)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>fft_vxx</key>
     <param>
       <key>id</key>
-      <value>fft_vxx_0</value>
+      <value>blocks_repack_bits_bb_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>len_tag_key</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>fft_size</key>
-      <value>fft_len</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>forward</key>
+      <key>align_output</key>
       <value>False</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_repack_bits_bb</key>
     <param>
-      <key>window</key>
-      <value>()</value>
-    </param>
-    <param>
-      <key>shift</key>
-      <value>True</value>
+      <key>k</key>
+      <value>8</value>
     </param>
     <param>
-      <key>nthreads</key>
+      <key>l</key>
       <value>1</value>
     </param>
     <param>
@@ -642,300 +616,317 @@
       <value></value>
     </param>
     <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>endianness</key>
+      <value>gr.GR_LSB_FIRST</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(414, 548)</value>
+      <value>(896, 157)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_multiply_const_vxx</key>
     <param>
       <key>id</key>
-      <value>blocks_multiply_const_vxx_0</value>
+      <value>blocks_repack_bits_bb_0_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>len_tag_key</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>const</key>
-      <value>0.05</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>align_output</key>
+      <value>False</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_stream_to_tagged_stream</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(209, 747)</value>
+      <value>(192, 181)</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>
+      <value>blocks_stream_to_tagged_stream_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>len_tag_key</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>in_type</key>
-      <value>byte</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>out_type</key>
-      <value>complex</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>symbol_table</key>
-      <value>header_mod.points()</value>
+      <key>packet_len</key>
+      <value>packet_len</value>
     </param>
     <param>
-      <key>dimension</key>
-      <value>1</value>
+      <key>type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>num_ports</key>
+      <key>vlen</key>
       <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_tag_debug</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>display</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(214, 376)</value>
+      <value>(680, 822)</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>
+      <value>blocks_tag_debug_0</value>
     </param>
     <param>
       <key>type</key>
       <value>byte</value>
     </param>
     <param>
-      <key>min</key>
-      <value>0</value>
+      <key>filter</key>
+      <value>""</value>
     </param>
     <param>
-      <key>max</key>
-      <value>255</value>
+      <key>name</key>
+      <value>Rx'd Packets</value>
     </param>
     <param>
-      <key>num_samps</key>
-      <value>1000</value>
+      <key>num_inputs</key>
+      <value>1</value>
     </param>
     <param>
-      <key>repeat</key>
-      <value>True</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_tag_gate</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(13, 220)</value>
+      <value>(376, 692)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_tagged_stream_mux</key>
     <param>
       <key>id</key>
-      <value>blocks_tagged_stream_mux_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <value>blocks_tag_gate_0</value>
     </param>
     <param>
       <key>type</key>
       <value>complex</value>
     </param>
     <param>
-      <key>ninputs</key>
-      <value>2</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>lengthtagname</key>
-      <value>length_tag_key</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>propagate_tags</key>
+      <value>False</value>
     </param>
     <param>
-      <key>tag_preserve_head_pos</key>
-      <value>0</value>
+      <key>vlen</key>
+      <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_tagged_stream_mux</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(510, 428)</value>
+      <value>(512, 369)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>digital_ofdm_cyclic_prefixer</key>
     <param>
       <key>id</key>
-      <value>digital_ofdm_cyclic_prefixer_0</value>
+      <value>blocks_tagged_stream_mux_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>input_size</key>
-      <value>fft_len</value>
+      <key>lengthtagname</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>cp_len</key>
-      <value>fft_len/4</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>rolloff</key>
-      <value>rolloff</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>tagname</key>
-      <value>length_tag_key</value>
+      <key>ninputs</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>tag_preserve_head_pos</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>vlen</key>
+      <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>blocks_throttle</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(632, 564)</value>
+      <value>(560, 692)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_tag_gate</key>
     <param>
       <key>id</key>
-      <value>blocks_tag_gate_0</value>
+      <value>blocks_throttle_0</value>
     </param>
     <param>
-      <key>_enabled</key>
+      <key>ignoretag</key>
       <value>True</value>
     </param>
     <param>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>samples_per_second</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
       <key>type</key>
       <value>complex</value>
     </param>
@@ -943,12 +934,19 @@
       <key>vlen</key>
       <value>1</value>
     </param>
+  </block>
+  <block>
+    <key>channels_channel_model</key>
     <param>
-      <key>propagate_tags</key>
-      <value>False</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>alias</key>
+      <key>block_tags</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
@@ -956,292 +954,264 @@
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>epsilon</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>freq_offset</key>
+      <value>0.0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(372, 747)</value>
+      <value>(192, 801)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_repack_bits_bb</key>
     <param>
       <key>id</key>
-      <value>blocks_repack_bits_bb_0</value>
+      <value>channels_channel_model_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>k</key>
-      <value>8</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>l</key>
-      <value>payload_mod.bits_per_symbol()</value>
+      <key>noise_voltage</key>
+      <value>0.0</value>
     </param>
     <param>
-      <key>len_tag_key</key>
-      <value>length_tag_key</value>
+      <key>seed</key>
+      <value>0</value>
     </param>
     <param>
-      <key>align_output</key>
-      <value>False</value>
+      <key>taps</key>
+      <value>1.0 + 1.0j</value>
     </param>
+  </block>
+  <block>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>dimension</key>
+      <value>1</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(710, 301)</value>
+      <value>(216, 317)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>digital_packet_headergenerator_bb</key>
     <param>
       <key>id</key>
-      <value>digital_packet_headergenerator_bb_0</value>
+      <value>digital_chunks_to_symbols_xx_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>in_type</key>
+      <value>byte</value>
     </param>
     <param>
-      <key>header_formatter</key>
-      <value>header_formatter.formatter()</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>len_tag_key</key>
-      <value>"packet_len"</value>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>num_ports</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>out_type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>symbol_table</key>
+      <value>header_mod.points()</value>
     </param>
+  </block>
+  <block>
+    <key>digital_chunks_to_symbols_xx</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>dimension</key>
+      <value>1</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(703, 242)</value>
+      <value>(216, 397)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_stream_to_tagged_stream</key>
     <param>
       <key>id</key>
-      <value>blocks_stream_to_tagged_stream_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <value>digital_chunks_to_symbols_xx_0_0</value>
     </param>
     <param>
-      <key>type</key>
+      <key>in_type</key>
       <value>byte</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
-    </param>
-    <param>
-      <key>packet_len</key>
-      <value>packet_len</value>
-    </param>
-    <param>
-      <key>len_tag_key</key>
-      <value>length_tag_key</value>
-    </param>
-    <param>
-      <key>alias</key>
-      <value></value>
-    </param>
-    <param>
-      <key>affinity</key>
-      <value></value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>minoutbuf</key>
       <value>0</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>num_ports</key>
+      <value>1</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(193, 235)</value>
+      <key>out_type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>symbol_table</key>
+      <value>payload_mod.points()</value>
     </param>
   </block>
   <block>
-    <key>virtual_sink</key>
-    <param>
-      <key>id</key>
-      <value>header_bits</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>stream_id</key>
-      <value>Header Bits</value>
-    </param>
+    <key>digital_crc32_bb</key>
     <param>
-      <key>_coordinate</key>
-      <value>(936, 243)</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>comment</key>
+      <value></value>
     </param>
-  </block>
-  <block>
-    <key>virtual_sink</key>
     <param>
-      <key>id</key>
-      <value>virtual_sink_0_0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Payload Bits</value>
-    </param>
-    <param>
       <key>_coordinate</key>
-      <value>(934, 324)</value>
+      <value>(432, 182)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>virtual_source_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>stream_id</key>
-      <value>Header Bits</value>
+      <value>digital_crc32_bb_0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(1, 382)</value>
+      <key>lengthtagname</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>_rotation</key>
+      <key>maxoutbuf</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>digital_crc32_bb</key>
-    <param>
-      <key>id</key>
-      <value>digital_crc32_bb_0</value>
-    </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>check</key>
       <value>False</value>
     </param>
     <param>
-      <key>lengthtagname</key>
-      <value>length_tag_key</value>
+      <key>packed</key>
+      <value>True</value>
     </param>
+  </block>
+  <block>
+    <key>digital_ofdm_carrier_allocator_cvc</key>
     <param>
       <key>alias</key>
       <value></value>
     </param>
     <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
       <key>affinity</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>fft_len</key>
+      <value>fft_len</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(430, 235)</value>
+      <value>(192, 489)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>digital_ofdm_carrier_allocator_cvc</key>
     <param>
       <key>id</key>
       <value>digital_ofdm_carrier_allocator_cvc_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>len_tag_key</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>fft_len</key>
-      <value>fft_len</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
       <key>occupied_carriers</key>
@@ -1259,12 +1229,19 @@
       <key>sync_words</key>
       <value>(sync_word1, sync_word2)</value>
     </param>
+  </block>
+  <block>
+    <key>digital_ofdm_cyclic_prefixer</key>
+    <param>
+      <key>alias</key>
+      <value></value>
+    </param>
     <param>
-      <key>len_tag_key</key>
-      <value>length_tag_key</value>
+      <key>cp_len</key>
+      <value>fft_len/4</value>
     </param>
     <param>
-      <key>alias</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
@@ -1272,93 +1249,107 @@
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>input_size</key>
+      <value>fft_len</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(192, 540)</value>
+      <value>(632, 503)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>virtual_source</key>
     <param>
       <key>id</key>
-      <value>virtual_source_1</value>
+      <value>digital_ofdm_cyclic_prefixer_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>tagname</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Tx Signal</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(0, 894)</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>rolloff</key>
+      <value>rolloff</value>
     </param>
   </block>
   <block>
-    <key>virtual_sink</key>
+    <key>digital_ofdm_rx</key>
     <param>
-      <key>id</key>
-      <value>virtual_sink_1</value>
+      <key>alias</key>
+      <value></value>
+    </param>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
+    </param>
+    <param>
+      <key>cp_len</key>
+      <value>fft_len/4</value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>stream_id</key>
-      <value>Tx Signal</value>
+      <key>fft_len</key>
+      <value>fft_len</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(990, 646)</value>
+      <value>(440, 766)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>digital_ofdm_rx</key>
+    <param>
+      <key>header_mod</key>
+      <value>"BPSK"</value>
+    </param>
     <param>
       <key>id</key>
       <value>digital_ofdm_rx_0</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>log</key>
+      <value>False</value>
     </param>
     <param>
-      <key>fft_len</key>
-      <value>fft_len</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>cp_len</key>
-      <value>fft_len/4</value>
+      <key>minoutbuf</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>occupied_carriers</key>
+      <value>occupied_carriers</value>
     </param>
     <param>
       <key>packet_len_key</key>
       <value>"length"</value>
     </param>
     <param>
-      <key>occupied_carriers</key>
-      <value>occupied_carriers</value>
+      <key>payload_mod</key>
+      <value>"QPSK"</value>
     </param>
     <param>
       <key>pilot_carriers</key>
@@ -1369,6 +1360,10 @@
       <value>pilot_symbols</value>
     </param>
     <param>
+      <key>scramble_bits</key>
+      <value>False</value>
+    </param>
+    <param>
       <key>sync_word1</key>
       <value>sync_word1</value>
     </param>
@@ -1376,83 +1371,62 @@
       <key>sync_word2</key>
       <value>sync_word2</value>
     </param>
+  </block>
+  <block>
+    <key>digital_packet_format_bb</key>
     <param>
-      <key>header_mod</key>
-      <value>"BPSK"</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>payload_mod</key>
-      <value>"QPSK"</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>scramble_bits</key>
-      <value>False</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
-      <key>log</key>
-      <value>False</value>
+      <key>_enabled</key>
+      <value>1</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>formatter</key>
+      <value>formatter</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>(439, 823)</value>
+      <key>_coordinate</key>
+      <value>(664, 157)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>channels_channel_model</key>
     <param>
       <key>id</key>
-      <value>channels_channel_model_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
-    </param>
-    <param>
-      <key>noise_voltage</key>
-      <value>0.0</value>
-    </param>
-    <param>
-      <key>freq_offset</key>
-      <value>0.0</value>
+      <value>digital_packet_format_bb_0</value>
     </param>
     <param>
-      <key>epsilon</key>
-      <value>1.0</value>
+      <key>len_tag_key</key>
+      <value>length_tag_key</value>
     </param>
     <param>
-      <key>taps</key>
-      <value>1.0 + 1.0j</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>seed</key>
+      <key>minoutbuf</key>
       <value>0</value>
     </param>
+  </block>
+  <block>
+    <key>fft_vxx</key>
     <param>
-      <key>block_tags</key>
-      <value>True</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>alias</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
@@ -1460,201 +1434,190 @@
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>maxoutbuf</key>
-      <value>0</value>
+      <key>fft_size</key>
+      <value>fft_len</value>
+    </param>
+    <param>
+      <key>forward</key>
+      <value>False</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(193, 858)</value>
+      <value>(416, 496)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
-  </block>
-  <block>
-    <key>blocks_tag_debug</key>
     <param>
       <key>id</key>
-      <value>blocks_tag_debug_0</value>
-    </param>
-    <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <value>fft_vxx_0</value>
     </param>
     <param>
       <key>type</key>
-      <value>byte</value>
+      <value>complex</value>
     </param>
     <param>
-      <key>name</key>
-      <value>Rx'd Packets</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>filter</key>
-      <value>""</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>num_inputs</key>
+      <key>nthreads</key>
       <value>1</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>shift</key>
+      <value>True</value>
     </param>
     <param>
-      <key>display</key>
-      <value>True</value>
+      <key>window</key>
+      <value>()</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>alias</key>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(689, 889)</value>
+      <value>(1104, 164)</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>
+      <value>header_bits</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>stream_id</key>
+      <value>Header Bits</value>
     </param>
+  </block>
+  <block>
+    <key>qtgui_freq_sink_x</key>
     <param>
-      <key>samples_per_second</key>
-      <value>samp_rate</value>
+      <key>autoscale</key>
+      <value>True</value>
     </param>
     <param>
-      <key>vlen</key>
-      <value>1</value>
+      <key>average</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>ignoretag</key>
+      <key>axislabels</key>
       <value>True</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>bw</key>
+      <value>samp_rate</value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>alias</key>
       <value></value>
     </param>
     <param>
-      <key>minoutbuf</key>
-      <value>0</value>
-    </param>
-    <param>
-      <key>maxoutbuf</key>
+      <key>fc</key>
       <value>0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(559, 747)</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>ctrlpanel</key>
+      <value>False</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_freq_sink_x</key>
     <param>
-      <key>id</key>
-      <value>qtgui_freq_sink_x_0</value>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>fftsize</key>
+      <value>1024</value>
     </param>
     <param>
-      <key>name</key>
-      <value>FFT Plot</value>
+      <key>_coordinate</key>
+      <value>(960, 759)</value>
     </param>
     <param>
-      <key>fftsize</key>
-      <value>1024</value>
+      <key>gui_hint</key>
+      <value></value>
     </param>
     <param>
-      <key>wintype</key>
-      <value>firdes.WIN_BLACKMAN_hARRIS</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>fc</key>
-      <value>0</value>
+      <key>grid</key>
+      <value>False</value>
     </param>
     <param>
-      <key>bw</key>
-      <value>samp_rate</value>
+      <key>id</key>
+      <value>qtgui_freq_sink_x_0</value>
     </param>
     <param>
-      <key>autoscale</key>
+      <key>legend</key>
       <value>True</value>
     </param>
     <param>
-      <key>average</key>
+      <key>alpha1</key>
       <value>1.0</value>
     </param>
     <param>
-      <key>ymin</key>
-      <value>-140</value>
+      <key>color1</key>
+      <value>"blue"</value>
     </param>
     <param>
-      <key>ymax</key>
-      <value>10</value>
+      <key>label1</key>
+      <value></value>
     </param>
     <param>
-      <key>nconnections</key>
+      <key>width1</key>
       <value>1</value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>alpha10</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>gui_hint</key>
-      <value></value>
+      <key>color10</key>
+      <value>"dark blue"</value>
     </param>
     <param>
-      <key>label1</key>
+      <key>label10</key>
       <value></value>
     </param>
     <param>
-      <key>width1</key>
+      <key>width10</key>
       <value>1</value>
     </param>
     <param>
-      <key>color1</key>
-      <value>"blue"</value>
+      <key>alpha2</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha1</key>
-      <value>1.0</value>
+      <key>color2</key>
+      <value>"red"</value>
     </param>
     <param>
       <key>label2</key>
@@ -1665,12 +1628,12 @@
       <value>1</value>
     </param>
     <param>
-      <key>color2</key>
-      <value>"red"</value>
+      <key>alpha3</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha2</key>
-      <value>1.0</value>
+      <key>color3</key>
+      <value>"green"</value>
     </param>
     <param>
       <key>label3</key>
@@ -1681,12 +1644,12 @@
       <value>1</value>
     </param>
     <param>
-      <key>color3</key>
-      <value>"green"</value>
+      <key>alpha4</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha3</key>
-      <value>1.0</value>
+      <key>color4</key>
+      <value>"black"</value>
     </param>
     <param>
       <key>label4</key>
@@ -1697,12 +1660,12 @@
       <value>1</value>
     </param>
     <param>
-      <key>color4</key>
-      <value>"black"</value>
+      <key>alpha5</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha4</key>
-      <value>1.0</value>
+      <key>color5</key>
+      <value>"cyan"</value>
     </param>
     <param>
       <key>label5</key>
@@ -1713,12 +1676,12 @@
       <value>1</value>
     </param>
     <param>
-      <key>color5</key>
-      <value>"cyan"</value>
+      <key>alpha6</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha5</key>
-      <value>1.0</value>
+      <key>color6</key>
+      <value>"magenta"</value>
     </param>
     <param>
       <key>label6</key>
@@ -1729,12 +1692,12 @@
       <value>1</value>
     </param>
     <param>
-      <key>color6</key>
-      <value>"magenta"</value>
+      <key>alpha7</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha6</key>
-      <value>1.0</value>
+      <key>color7</key>
+      <value>"yellow"</value>
     </param>
     <param>
       <key>label7</key>
@@ -1745,12 +1708,12 @@
       <value>1</value>
     </param>
     <param>
-      <key>color7</key>
-      <value>"yellow"</value>
+      <key>alpha8</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha7</key>
-      <value>1.0</value>
+      <key>color8</key>
+      <value>"dark red"</value>
     </param>
     <param>
       <key>label8</key>
@@ -1761,12 +1724,12 @@
       <value>1</value>
     </param>
     <param>
-      <key>color8</key>
-      <value>"dark red"</value>
+      <key>alpha9</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>alpha8</key>
-      <value>1.0</value>
+      <key>color9</key>
+      <value>"dark green"</value>
     </param>
     <param>
       <key>label9</key>
@@ -1777,507 +1740,743 @@
       <value>1</value>
     </param>
     <param>
-      <key>color9</key>
-      <value>"dark green"</value>
+      <key>maxoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>alpha9</key>
-      <value>1.0</value>
+      <key>minoutbuf</key>
+      <value>0</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>name</key>
+      <value>FFT Plot</value>
     </param>
     <param>
-      <key>width10</key>
+      <key>nconnections</key>
       <value>1</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>"dark blue"</value>
+      <key>showports</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alpha10</key>
-      <value>1.0</value>
+      <key>freqhalf</key>
+      <value>True</value>
     </param>
     <param>
-      <key>alias</key>
-      <value></value>
+      <key>tr_chan</key>
+      <value>0</value>
     </param>
     <param>
-      <key>affinity</key>
-      <value></value>
+      <key>tr_level</key>
+      <value>0.0</value>
     </param>
     <param>
-      <key>_coordinate</key>
-      <value>(966, 841)</value>
+      <key>tr_mode</key>
+      <value>qtgui.TRIG_MODE_FREE</value>
     </param>
     <param>
-      <key>_rotation</key>
-      <value>0</value>
+      <key>tr_tag</key>
+      <value>""</value>
     </param>
-  </block>
-  <block>
-    <key>qtgui_time_sink_x</key>
     <param>
-      <key>id</key>
-      <value>qtgui_time_sink_x_0</value>
+      <key>type</key>
+      <value>complex</value>
     </param>
     <param>
-      <key>_enabled</key>
-      <value>True</value>
+      <key>update_time</key>
+      <value>0.10</value>
     </param>
     <param>
-      <key>type</key>
-      <value>complex</value>
+      <key>wintype</key>
+      <value>firdes.WIN_BLACKMAN_hARRIS</value>
     </param>
     <param>
-      <key>name</key>
-      <value>Scope Plot</value>
+      <key>label</key>
+      <value>Relative Gain</value>
     </param>
     <param>
-      <key>size</key>
-      <value>1024</value>
+      <key>ymax</key>
+      <value>10</value>
     </param>
     <param>
-      <key>srate</key>
-      <value>samp_rate</value>
+      <key>ymin</key>
+      <value>-140</value>
+    </param>
+    <param>
+      <key>units</key>
+      <value>dB</value>
     </param>
+  </block>
+  <block>
+    <key>qtgui_time_sink_x</key>
     <param>
       <key>autoscale</key>
       <value>True</value>
     </param>
     <param>
-      <key>ymin</key>
-      <value>-1</value>
+      <key>axislabels</key>
+      <value>True</value>
     </param>
     <param>
-      <key>ymax</key>
-      <value>1</value>
+      <key>alias</key>
+      <value></value>
     </param>
     <param>
-      <key>nconnections</key>
-      <value>1</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>update_time</key>
-      <value>0.10</value>
+      <key>ctrlpanel</key>
+      <value>False</value>
+    </param>
+    <param>
+      <key>affinity</key>
+      <value></value>
     </param>
     <param>
       <key>entags</key>
       <value>True</value>
     </param>
     <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(960, 671)</value>
+    </param>
+    <param>
       <key>gui_hint</key>
       <value></value>
     </param>
     <param>
-      <key>tr_mode</key>
-      <value>qtgui.TRIG_MODE_FREE</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>tr_slope</key>
-      <value>qtgui.TRIG_SLOPE_POS</value>
+      <key>grid</key>
+      <value>False</value>
     </param>
     <param>
-      <key>tr_level</key>
-      <value>0.0</value>
+      <key>id</key>
+      <value>qtgui_time_sink_x_0</value>
     </param>
     <param>
-      <key>tr_delay</key>
-      <value>0</value>
+      <key>legend</key>
+      <value>True</value>
     </param>
     <param>
-      <key>tr_chan</key>
-      <value>0</value>
+      <key>alpha1</key>
+      <value>1.0</value>
     </param>
     <param>
-      <key>tr_tag</key>
-      <value>""</value>
+      <key>color1</key>
+      <value>"blue"</value>
     </param>
     <param>
       <key>label1</key>
       <value>Scope Plot</value>
     </param>
     <param>
+      <key>marker1</key>
+      <value>-1</value>
+    </param>
+    <param>
+      <key>style1</key>
+      <value>1</value>
+    </param>
+    <param>
       <key>width1</key>
       <value>1</value>
     </param>
     <param>
-      <key>color1</key>
+      <key>alpha10</key>
+      <value>1.0</value>
+    </param>
+    <param>
+      <key>color10</key>
       <value>"blue"</value>
     </param>
     <param>
-      <key>style1</key>
-      <value>1</value>
+      <key>label10</key>
+      <value></value>
     </param>
     <param>
-      <key>marker1</key>
+      <key>marker10</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha1</key>
-      <value>1.0</value>
+      <key>style10</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label2</key>
-      <value></value>
+      <key>width10</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width2</key>
-      <value>1</value>
+      <key>alpha2</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color2</key>
       <value>"red"</value>
     </param>
     <param>
-      <key>style2</key>
-      <value>1</value>
+      <key>label2</key>
+      <value></value>
     </param>
     <param>
       <key>marker2</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha2</key>
-      <value>1.0</value>
+      <key>style2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label3</key>
-      <value></value>
+      <key>width2</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width3</key>
-      <value>1</value>
+      <key>alpha3</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color3</key>
       <value>"green"</value>
     </param>
     <param>
-      <key>style3</key>
-      <value>1</value>
+      <key>label3</key>
+      <value></value>
     </param>
     <param>
       <key>marker3</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha3</key>
-      <value>1.0</value>
+      <key>style3</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label4</key>
-      <value></value>
+      <key>width3</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width4</key>
-      <value>1</value>
+      <key>alpha4</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color4</key>
       <value>"black"</value>
     </param>
     <param>
-      <key>style4</key>
-      <value>1</value>
+      <key>label4</key>
+      <value></value>
     </param>
     <param>
       <key>marker4</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha4</key>
-      <value>1.0</value>
+      <key>style4</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label5</key>
-      <value></value>
+      <key>width4</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width5</key>
-      <value>1</value>
+      <key>alpha5</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color5</key>
       <value>"cyan"</value>
     </param>
     <param>
-      <key>style5</key>
-      <value>1</value>
+      <key>label5</key>
+      <value></value>
     </param>
     <param>
       <key>marker5</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha5</key>
-      <value>1.0</value>
+      <key>style5</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label6</key>
-      <value></value>
+      <key>width5</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width6</key>
-      <value>1</value>
+      <key>alpha6</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color6</key>
       <value>"magenta"</value>
     </param>
     <param>
-      <key>style6</key>
-      <value>1</value>
+      <key>label6</key>
+      <value></value>
     </param>
     <param>
       <key>marker6</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha6</key>
-      <value>1.0</value>
+      <key>style6</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label7</key>
-      <value></value>
+      <key>width6</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width7</key>
-      <value>1</value>
+      <key>alpha7</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color7</key>
       <value>"yellow"</value>
     </param>
     <param>
-      <key>style7</key>
-      <value>1</value>
+      <key>label7</key>
+      <value></value>
     </param>
     <param>
       <key>marker7</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha7</key>
-      <value>1.0</value>
+      <key>style7</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label8</key>
-      <value></value>
+      <key>width7</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width8</key>
-      <value>1</value>
+      <key>alpha8</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color8</key>
       <value>"dark red"</value>
     </param>
     <param>
-      <key>style8</key>
-      <value>1</value>
+      <key>label8</key>
+      <value></value>
     </param>
     <param>
       <key>marker8</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha8</key>
-      <value>1.0</value>
+      <key>style8</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label9</key>
-      <value></value>
+      <key>width8</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width9</key>
-      <value>1</value>
+      <key>alpha9</key>
+      <value>1.0</value>
     </param>
     <param>
       <key>color9</key>
       <value>"dark green"</value>
     </param>
     <param>
-      <key>style9</key>
-      <value>1</value>
-    </param>
+      <key>label9</key>
+      <value></value>
+    </param>
     <param>
       <key>marker9</key>
       <value>-1</value>
     </param>
     <param>
-      <key>alpha9</key>
-      <value>1.0</value>
+      <key>style9</key>
+      <value>1</value>
     </param>
     <param>
-      <key>label10</key>
-      <value></value>
+      <key>width9</key>
+      <value>1</value>
     </param>
     <param>
-      <key>width10</key>
+      <key>name</key>
+      <value>Scope Plot</value>
+    </param>
+    <param>
+      <key>nconnections</key>
       <value>1</value>
     </param>
     <param>
-      <key>color10</key>
-      <value>"blue"</value>
+      <key>size</key>
+      <value>1024</value>
     </param>
     <param>
-      <key>style10</key>
+      <key>srate</key>
+      <value>samp_rate</value>
+    </param>
+    <param>
+      <key>tr_chan</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>tr_delay</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>tr_level</key>
+      <value>0.0</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>
+    </param>
+    <param>
+      <key>tr_tag</key>
+      <value>""</value>
+    </param>
+    <param>
+      <key>type</key>
+      <value>complex</value>
+    </param>
+    <param>
+      <key>update_time</key>
+      <value>0.10</value>
+    </param>
+    <param>
+      <key>ylabel</key>
+      <value>Amplitude</value>
+    </param>
+    <param>
+      <key>yunit</key>
+      <value>""</value>
+    </param>
+    <param>
+      <key>ymax</key>
       <value>1</value>
     </param>
     <param>
-      <key>marker10</key>
+      <key>ymin</key>
       <value>-1</value>
     </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
     <param>
-      <key>alpha10</key>
-      <value>1.0</value>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>alias</key>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(856, 524)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Time Domain</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
+    <param>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>affinity</key>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(856, 252)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0_0</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Payload Bits</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_sink</key>
+    <param>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(962, 714)</value>
+      <value>(744, 388)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
+    <param>
+      <key>id</key>
+      <value>virtual_sink_0_0_0</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Pre-OFDM</value>
+    </param>
   </block>
   <block>
-    <key>options</key>
+    <key>virtual_sink</key>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(960, 620)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
     <param>
       <key>id</key>
-      <value>tx_ofdm</value>
+      <value>virtual_sink_1</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Tx Signal</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
+    <param>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
       <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>title</key>
-      <value>OFDM Tx</value>
+      <key>_coordinate</key>
+      <value>(0, 324)</value>
     </param>
     <param>
-      <key>author</key>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>virtual_source_0</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Header Bits</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
+    <param>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>description</key>
-      <value>Example of an OFDM Transmitter</value>
+      <key>_enabled</key>
+      <value>True</value>
     </param>
     <param>
-      <key>window_size</key>
-      <value>1280, 1024</value>
+      <key>_coordinate</key>
+      <value>(0, 404)</value>
     </param>
     <param>
-      <key>generate_options</key>
-      <value>qt_gui</value>
+      <key>_rotation</key>
+      <value>0</value>
     </param>
     <param>
-      <key>category</key>
-      <value>Custom</value>
+      <key>id</key>
+      <value>virtual_source_0_0</value>
     </param>
     <param>
-      <key>run_options</key>
-      <value>run</value>
+      <key>stream_id</key>
+      <value>Payload Bits</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
+    <param>
+      <key>comment</key>
+      <value></value>
     </param>
     <param>
-      <key>run</key>
+      <key>_enabled</key>
       <value>True</value>
     </param>
     <param>
-      <key>max_nouts</key>
+      <key>_coordinate</key>
+      <value>(0, 524)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
       <value>0</value>
     </param>
     <param>
-      <key>realtime_scheduling</key>
+      <key>id</key>
+      <value>virtual_source_0_0_0</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Pre-OFDM</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
+    <param>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
-      <key>alias</key>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(0, 692)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>virtual_source_0_0_0_0</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Time Domain</value>
+    </param>
+  </block>
+  <block>
+    <key>virtual_source</key>
+    <param>
+      <key>comment</key>
       <value></value>
     </param>
     <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
       <key>_coordinate</key>
-      <value>(1, 0)</value>
+      <value>(0, 836)</value>
     </param>
     <param>
       <key>_rotation</key>
       <value>0</value>
     </param>
+    <param>
+      <key>id</key>
+      <value>virtual_source_1</value>
+    </param>
+    <param>
+      <key>stream_id</key>
+      <value>Tx Signal</value>
+    </param>
   </block>
   <connection>
-    <source_block_id>blocks_tagged_stream_mux_0</source_block_id>
-    <sink_block_id>virtual_sink_0_0_0</sink_block_id>
+    <source_block_id>analog_random_source_x_0</source_block_id>
+    <sink_block_id>blocks_stream_to_tagged_stream_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>digital_chunks_to_symbols_xx_0_0</sink_block_id>
+    <source_block_id>blocks_multiply_const_vxx_0</source_block_id>
+    <sink_block_id>blocks_tag_gate_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>digital_chunks_to_symbols_xx_0</sink_block_id>
+    <source_block_id>blocks_repack_bits_bb_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>digital_chunks_to_symbols_xx_0_0</source_block_id>
-    <sink_block_id>blocks_tagged_stream_mux_0</sink_block_id>
+    <source_block_id>blocks_repack_bits_bb_0_0</source_block_id>
+    <sink_block_id>header_bits</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_0_0</source_block_id>
-    <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id>
+    <source_block_id>blocks_stream_to_tagged_stream_0</source_block_id>
+    <sink_block_id>digital_crc32_bb_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>digital_ofdm_carrier_allocator_cvc_0</sink_block_id>
+    <source_block_id>blocks_tag_gate_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>digital_ofdm_carrier_allocator_cvc_0</source_block_id>
-    <sink_block_id>fft_vxx_0</sink_block_id>
+    <source_block_id>blocks_tagged_stream_mux_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>fft_vxx_0</source_block_id>
-    <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_ofdm_cyclic_prefixer_0</source_block_id>
-    <sink_block_id>virtual_sink_0</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>qtgui_time_sink_x_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_tag_gate_0</sink_block_id>
+    <source_block_id>blocks_throttle_0</source_block_id>
+    <sink_block_id>virtual_sink_1</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>blocks_tag_gate_0</source_block_id>
-    <sink_block_id>blocks_throttle_0</sink_block_id>
+    <source_block_id>channels_channel_model_0</source_block_id>
+    <sink_block_id>digital_ofdm_rx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
@@ -2288,74 +2487,80 @@
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>analog_random_source_x_0</source_block_id>
-    <sink_block_id>blocks_stream_to_tagged_stream_0</sink_block_id>
+    <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id>
+    <sink_block_id>blocks_tagged_stream_mux_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_stream_to_tagged_stream_0</source_block_id>
-    <sink_block_id>digital_crc32_bb_0</sink_block_id>
+    <source_block_id>digital_crc32_bb_0</source_block_id>
+    <sink_block_id>blocks_repack_bits_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
     <source_block_id>digital_crc32_bb_0</source_block_id>
-    <sink_block_id>digital_packet_headergenerator_bb_0</sink_block_id>
+    <sink_block_id>digital_packet_format_bb_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_crc32_bb_0</source_block_id>
-    <sink_block_id>blocks_repack_bits_bb_0</sink_block_id>
+    <source_block_id>digital_ofdm_carrier_allocator_cvc_0</source_block_id>
+    <sink_block_id>fft_vxx_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>digital_packet_headergenerator_bb_0</source_block_id>
-    <sink_block_id>header_bits</sink_block_id>
+    <source_block_id>digital_ofdm_cyclic_prefixer_0</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>blocks_repack_bits_bb_0</source_block_id>
-    <sink_block_id>virtual_sink_0_0</sink_block_id>
+    <source_block_id>digital_ofdm_rx_0</source_block_id>
+    <sink_block_id>blocks_tag_debug_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>virtual_sink_1</sink_block_id>
+    <source_block_id>digital_packet_format_bb_0</source_block_id>
+    <sink_block_id>blocks_repack_bits_bb_0_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>virtual_source_1</source_block_id>
-    <sink_block_id>channels_channel_model_0</sink_block_id>
+    <source_block_id>fft_vxx_0</source_block_id>
+    <sink_block_id>digital_ofdm_cyclic_prefixer_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
   <connection>
-    <source_block_id>channels_channel_model_0</source_block_id>
-    <sink_block_id>digital_ofdm_rx_0</sink_block_id>
+    <source_block_id>virtual_source_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_ofdm_rx_0</source_block_id>
-    <sink_block_id>blocks_tag_debug_0</sink_block_id>
+    <source_block_id>virtual_source_0_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_throttle_0</source_block_id>
-    <sink_block_id>qtgui_freq_sink_x_0</sink_block_id>
+    <source_block_id>virtual_source_0_0_0</source_block_id>
+    <sink_block_id>digital_ofdm_carrier_allocator_cvc_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>qtgui_time_sink_x_0</sink_block_id>
+    <source_block_id>virtual_source_0_0_0_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>virtual_source_1</source_block_id>
+    <sink_block_id>channels_channel_model_0</sink_block_id>
     <source_key>0</source_key>
     <sink_key>0</sink_key>
   </connection>
diff --git a/gr-digital/examples/packet/formatter_crc.grc 
b/gr-digital/examples/packet/formatter_crc.grc
index 39a76f1..3e5f98b 100644
--- a/gr-digital/examples/packet/formatter_crc.grc
+++ b/gr-digital/examples/packet/formatter_crc.grc
@@ -93,7 +93,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(176, 13)</value>
+      <value>(168, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -121,7 +121,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(288, 517)</value>
+      <value>(296, 477)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -148,7 +148,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(368, 13)</value>
+      <value>(352, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -175,7 +175,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(488, 13)</value>
+      <value>(464, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -272,7 +272,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(992, 449)</value>
+      <value>(992, 425)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -397,7 +397,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(64, 444)</value>
+      <value>(64, 420)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -472,7 +472,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>minsize</key>
-      <value>40</value>
+      <value>50</value>
     </param>
     <param>
       <key>minoutbuf</key>
@@ -507,7 +507,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
+      <value>gr.GR_LSB_FIRST</value>
     </param>
     <param>
       <key>_coordinate</key>
@@ -566,11 +566,11 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>endianness</key>
-      <value>gr.GR_MSB_FIRST</value>
+      <value>gr.GR_LSB_FIRST</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(528, 437)</value>
+      <value>(544, 413)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -617,11 +617,11 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>1</value>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(752, 526)</value>
+      <value>(752, 502)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -754,7 +754,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>1</value>
     </param>
     <param>
       <key>formatter</key>
@@ -762,7 +762,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(288, 437)</value>
+      <value>(296, 413)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -852,7 +852,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(736, 444)</value>
+      <value>(752, 420)</value>
     </param>
     <param>
       <key>_rotation</key>
diff --git a/gr-digital/examples/packet/formatter_crc.grc 
b/gr-digital/examples/packet/formatter_ofdm.grc
similarity index 80%
copy from gr-digital/examples/packet/formatter_crc.grc
copy to gr-digital/examples/packet/formatter_ofdm.grc
index 39a76f1..2a44c27 100644
--- a/gr-digital/examples/packet/formatter_crc.grc
+++ b/gr-digital/examples/packet/formatter_ofdm.grc
@@ -46,7 +46,7 @@
     </param>
     <param>
       <key>id</key>
-      <value>formatter_crc</value>
+      <value>formatter_ofdm</value>
     </param>
     <param>
       <key>max_nouts</key>
@@ -93,7 +93,7 @@
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(176, 13)</value>
+      <value>(168, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -105,7 +105,7 @@
     </param>
     <param>
       <key>value</key>
-      <value>digital.packet_formatter_crc(len_key, num_key)</value>
+      <value>digital.packet_formatter_ofdm(occupied_carriers, 1, len_key, 
frame_key, num_key, header_mod.bits_per_symbol(), 
payload_mod.bits_per_symbol(), scramble)</value>
     </param>
   </block>
   <block>
@@ -121,7 +121,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(288, 517)</value>
+      <value>(296, 477)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -133,7 +133,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>value</key>
-      <value>digital.packet_formatter_crc(len_key, num_key)</value>
+      <value>digital.packet_formatter_ofdm(occupied_carriers, 1, len_key, 
frame_key, num_key, header_mod.bits_per_symbol(), 
payload_mod.bits_per_symbol(), scramble)</value>
     </param>
   </block>
   <block>
@@ -148,7 +148,93 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(368, 13)</value>
+      <value>(584, 13)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>frame_key</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>"frame_len"</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_constellation_rect</key>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>const_points</key>
+      <value>[1, -1]</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(944, 11)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>header_mod</value>
+    </param>
+    <param>
+      <key>imag_sect</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>real_sect</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>rot_sym</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>soft_dec_lut</key>
+      <value>None</value>
+    </param>
+    <param>
+      <key>precision</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>sym_map</key>
+      <value>[0, 1]</value>
+    </param>
+    <param>
+      <key>w_imag_sect</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>w_real_sect</key>
+      <value>1</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(352, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -175,7 +261,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(488, 13)</value>
+      <value>(464, 13)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -191,6 +277,119 @@ as the formatters keep state.</value>
     </param>
   </block>
   <block>
+    <key>variable</key>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(784, 13)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>occupied_carriers</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>(range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + 
range(8, 21) + range(22, 27),)</value>
+    </param>
+  </block>
+  <block>
+    <key>variable_constellation_rect</key>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>const_points</key>
+      <value>[-1-1j, -1+1j, 1+1j, 1-1j]</value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>True</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(1128, 11)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>payload_mod</value>
+    </param>
+    <param>
+      <key>imag_sect</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>real_sect</key>
+      <value>2</value>
+    </param>
+    <param>
+      <key>rot_sym</key>
+      <value>4</value>
+    </param>
+    <param>
+      <key>soft_dec_lut</key>
+      <value>None</value>
+    </param>
+    <param>
+      <key>precision</key>
+      <value>8</value>
+    </param>
+    <param>
+      <key>sym_map</key>
+      <value>[0, 1, 3, 2]</value>
+    </param>
+    <param>
+      <key>w_imag_sect</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>w_real_sect</key>
+      <value>1</value>
+    </param>
+  </block>
+  <block>
+    <key>variable</key>
+    <param>
+      <key>comment</key>
+      <value></value>
+    </param>
+    <param>
+      <key>_enabled</key>
+      <value>1</value>
+    </param>
+    <param>
+      <key>_coordinate</key>
+      <value>(696, 13)</value>
+    </param>
+    <param>
+      <key>_rotation</key>
+      <value>0</value>
+    </param>
+    <param>
+      <key>id</key>
+      <value>scramble</value>
+    </param>
+    <param>
+      <key>value</key>
+      <value>False</value>
+    </param>
+  </block>
+  <block>
     <key>blocks_message_debug</key>
     <param>
       <key>alias</key>
@@ -272,7 +471,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(992, 449)</value>
+      <value>(992, 425)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -397,7 +596,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(64, 444)</value>
+      <value>(64, 420)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -472,7 +671,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>minsize</key>
-      <value>40</value>
+      <value>50</value>
     </param>
     <param>
       <key>minoutbuf</key>
@@ -570,7 +769,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(528, 437)</value>
+      <value>(544, 413)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -617,11 +816,11 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>1</value>
+      <value>0</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(752, 526)</value>
+      <value>(752, 502)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -754,7 +953,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_enabled</key>
-      <value>True</value>
+      <value>1</value>
     </param>
     <param>
       <key>formatter</key>
@@ -762,7 +961,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(288, 437)</value>
+      <value>(296, 413)</value>
     </param>
     <param>
       <key>_rotation</key>
@@ -852,7 +1051,7 @@ as the formatters keep state.</value>
     </param>
     <param>
       <key>_coordinate</key>
-      <value>(736, 444)</value>
+      <value>(752, 420)</value>
     </param>
     <param>
       <key>_rotation</key>
diff --git a/gr-digital/include/gnuradio/digital/CMakeLists.txt 
b/gr-digital/include/gnuradio/digital/CMakeLists.txt
index 3e4e981..1aaa389 100644
--- a/gr-digital/include/gnuradio/digital/CMakeLists.txt
+++ b/gr-digital/include/gnuradio/digital/CMakeLists.txt
@@ -95,6 +95,7 @@ install(FILES
     packet_formatter_default.h
     packet_formatter_counter.h
     packet_formatter_crc.h
+    packet_formatter_ofdm.h
     packet_format_async.h
     packet_format_bb.h
     packet_parse_b.h
diff --git a/gr-digital/include/gnuradio/digital/packet_formatter_ofdm.h 
b/gr-digital/include/gnuradio/digital/packet_formatter_ofdm.h
new file mode 100644
index 0000000..b8117f2
--- /dev/null
+++ b/gr-digital/include/gnuradio/digital/packet_formatter_ofdm.h
@@ -0,0 +1,127 @@
+/* -*- c++ -*- */
+/* Copyright 2016 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.
+ */
+
+#ifndef INCLUDED_DIGITAL_PACKET_FORMATTER_OFDM_H
+#define INCLUDED_DIGITAL_PACKET_FORMATTER_OFDM_H
+
+#include <pmt/pmt.h>
+#include <gnuradio/digital/api.h>
+#include <gnuradio/digital/packet_formatter_crc.h>
+#include <boost/crc.hpp>
+
+namespace gr {
+  namespace digital {
+
+    /*!
+     * \brief Header formatter that includes the payload length,
+     * packet number, and a CRC check on the header.
+     * \ingroup packet_operators_blk
+     *
+     * \details
+     *
+     * Child class of packet_formatter_base. This version's header
+     * format looks like:
+     *
+     * \li length (12 bits): length of the payload
+     * \li number (12 bits): packet number
+     * \li CRC8 (8 bits): A CRC8 check on the header contents
+     *
+     * Instead of duplicating the payload length, we only add it once
+     * and use the CRC8 to make sure it's correctly received.
+     *
+     * \verbatim
+         |  0 -- 11 | 12 -- 23 | 24 -- 31 |
+         |    len   | pkt len  |   CRC8   |
+       \endverbatim
+     *
+     * Reimplements packet_header_default in the style of the
+     * packet_formatter_base.
+     */
+    class DIGITAL_API packet_formatter_ofdm
+      : public packet_formatter_crc
+    {
+     public:
+      packet_formatter_ofdm(const std::vector<std::vector<int> > 
&occupied_carriers,
+                            int n_syms,
+                            const std::string &len_key_name="packet_len",
+                            const std::string &frame_key_name="frame_len",
+                            const std::string &num_key_name="packet_num",
+                            int bits_per_header_sym=1,
+                            int bits_per_payload_sym=1,
+                            bool scramble_header=false);
+      virtual ~packet_formatter_ofdm();
+
+      /*!
+       * \brief Encodes the header information in the given tags into
+       * bits and places them into \p out.
+       *
+       * \details
+       * Uses the following header format:
+       *  - Bits 0-11: The packet length (what was stored in the tag with key 
\p len_tag_key)
+       *  - Bits 12-23: The header number (counts up everytime this function 
is called)
+       *  - Bit 24-31: 8-Bit CRC
+       */
+      virtual bool format(int nbytes_in,
+                          const unsigned char *input,
+                          pmt::pmt_t &output,
+                          pmt::pmt_t &info);
+
+      virtual bool parse(int nbits_in,
+                         const unsigned char *input,
+                         std::vector<pmt::pmt_t> &info,
+                         int &nbits_processed);
+
+      /*!
+       * Returns the length of the formatted header in bits.
+       */
+      virtual size_t header_nbits() const;
+
+      /*!
+       * Factory to create an async packet header formatter; returns
+       * an sptr to the object.
+       */
+      static sptr make(const std::vector<std::vector<int> > &occupied_carriers,
+                       int n_syms,
+                       const std::string &len_key_name="packet_len",
+                       const std::string &frame_key_name="frame_len",
+                       const std::string &num_key_name="packet_num",
+                       int bits_per_header_sym=1,
+                       int bits_per_payload_sym=1,
+                       bool scramble_header=false);
+
+    protected:
+      pmt::pmt_t d_frame_key_name; //!< Tag key of the additional frame length 
tag
+      const std::vector<std::vector<int> > d_occupied_carriers; //!< Which 
carriers/symbols carry data
+      int d_syms_per_set; //!< Helper variable: Total number of elements in 
d_occupied_carriers
+      int d_bits_per_payload_sym;
+      std::vector<uint8_t> d_scramble_mask; //!< Bits are xor'd with this 
before tx'ing
+      size_t d_header_len;
+
+      /*! Get info from the header; return payload length and package
+       *  rest of data in d_info dictionary.
+       */
+      virtual int header_payload();
+    };
+
+  } // namespace digital
+} // namespace gr
+
+#endif /* INCLUDED_DIGITAL_PACKET_FORMATTER_OFDM_H */
diff --git a/gr-digital/lib/CMakeLists.txt b/gr-digital/lib/CMakeLists.txt
index 45fd65f..4aa387b 100644
--- a/gr-digital/lib/CMakeLists.txt
+++ b/gr-digital/lib/CMakeLists.txt
@@ -111,6 +111,7 @@ list(APPEND digital_sources
     packet_formatter_default.cc
     packet_formatter_counter.cc
     packet_formatter_crc.cc
+    packet_formatter_ofdm.cc
     packet_format_async_impl.cc
     packet_format_bb_impl.cc
     packet_parse_b_impl.cc
diff --git a/gr-digital/lib/packet_formatter_crc.cc 
b/gr-digital/lib/packet_formatter_crc.cc
index 9da8215..799f465 100644
--- a/gr-digital/lib/packet_formatter_crc.cc
+++ b/gr-digital/lib/packet_formatter_crc.cc
@@ -60,6 +60,7 @@ namespace gr {
     {
       uint8_t* bytes_out = (uint8_t*)volk_malloc(header_nbytes(),
                                                  volk_get_alignment());
+      memset(bytes_out, 0, header_nbytes());
 
       // Should this throw instead of mask if the payload is too big
       // for 12-bit representation?
@@ -75,7 +76,7 @@ namespace gr {
       concat = (d_header_number << 12) | (nbytes_in);
 
       header_buffer header(bytes_out);
-      header.add_field32(concat, 24);
+      header.add_field32(concat, 24, true);
       header.add_field8(crc);
 
       d_header_number++;
@@ -127,8 +128,9 @@ namespace gr {
     bool
     packet_formatter_crc::header_ok()
     {
-      uint16_t pktnum = d_hdr_reg.extract_field16(0, 12);
-      uint16_t pktlen = d_hdr_reg.extract_field16(12, 12);
+      uint32_t pkt = d_hdr_reg.extract_field32(0, 24, true);
+      uint16_t pktlen = static_cast<uint16_t>((pkt >> 8) & 0x0fff);
+      uint16_t pktnum = static_cast<uint16_t>((pkt >> 20) & 0x0fff);
       uint8_t crc_rcvd = d_hdr_reg.extract_field8(24);
 
       // Check CRC8
@@ -143,8 +145,9 @@ namespace gr {
     int
     packet_formatter_crc::header_payload()
     {
-      uint16_t pktnum = d_hdr_reg.extract_field16(0, 12);
-      uint16_t pktlen = d_hdr_reg.extract_field16(12, 12);
+      uint32_t pkt = d_hdr_reg.extract_field32(0, 24, true);
+      uint16_t pktlen = static_cast<uint16_t>((pkt >> 8) & 0x0fff);
+      uint16_t pktnum = static_cast<uint16_t>((pkt >> 20) & 0x0fff);
 
       d_info = pmt::make_dict();
       d_info = pmt::dict_add(d_info, d_len_key_name,
diff --git a/gr-digital/lib/packet_formatter_ofdm.cc 
b/gr-digital/lib/packet_formatter_ofdm.cc
new file mode 100644
index 0000000..e4d52a4
--- /dev/null
+++ b/gr-digital/lib/packet_formatter_ofdm.cc
@@ -0,0 +1,180 @@
+/* -*- c++ -*- */
+/* Copyright 2016 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <volk/volk.h>
+#include <gnuradio/digital/packet_formatter_ofdm.h>
+#include <gnuradio/digital/header_buffer.h>
+#include <gnuradio/digital/lfsr.h>
+
+namespace gr {
+  namespace digital {
+
+    packet_formatter_ofdm::sptr
+    packet_formatter_ofdm::make(const std::vector<std::vector<int> > 
&occupied_carriers,
+                                int n_syms,
+                                const std::string &len_key_name,
+                                const std::string &frame_key_name,
+                                const std::string &num_key_name,
+                                int bits_per_header_sym,
+                                int bits_per_payload_sym,
+                                bool scramble_header)
+    {
+      return packet_formatter_ofdm::sptr
+        (new packet_formatter_ofdm(occupied_carriers, n_syms,
+                                   len_key_name, frame_key_name, num_key_name,
+                                   bits_per_header_sym,
+                                   bits_per_payload_sym,
+                                   scramble_header));
+    }
+
+    packet_formatter_ofdm::packet_formatter_ofdm(const 
std::vector<std::vector<int> > &occupied_carriers,
+                                                 int n_syms,
+                                                 const std::string 
&len_key_name,
+                                                 const std::string 
&frame_key_name,
+                                                 const std::string 
&num_key_name,
+                                                 int bits_per_header_sym,
+                                                 int bits_per_payload_sym,
+                                                 bool scramble_header)
+    : packet_formatter_crc(len_key_name, num_key_name),
+      d_frame_key_name(pmt::intern(frame_key_name)),
+      d_occupied_carriers(occupied_carriers),
+      d_bits_per_payload_sym(bits_per_payload_sym)
+    {
+      d_header_len = 0;
+      for(int i = 0; i < n_syms; i++) {
+       d_header_len += occupied_carriers[i].size();
+      }
+
+      d_syms_per_set = 0;
+      for(unsigned i = 0; i < d_occupied_carriers.size(); i++) {
+        d_syms_per_set += d_occupied_carriers[i].size();
+      }
+
+      // Init scrambler mask
+      d_scramble_mask = std::vector<uint8_t>(header_nbits(), 0);
+      if(scramble_header) {
+       // These are just random values which already have OK PAPR:
+       gr::digital::lfsr shift_reg(0x8a, 0x6f, 7);
+       for(size_t i = 0; i < header_nbytes(); i++) {
+         for(int k = 0; k < bits_per_header_sym; k++) {
+           d_scramble_mask[i] ^= shift_reg.next_bit() << k;
+         }
+       }
+      }
+    }
+
+    packet_formatter_ofdm::~packet_formatter_ofdm()
+    {
+    }
+
+    bool
+    packet_formatter_ofdm::format(int nbytes_in,
+                                  const unsigned char *input,
+                                  pmt::pmt_t &output,
+                                  pmt::pmt_t &info)
+    {
+      bool ret_val = packet_formatter_crc::format(nbytes_in, input,
+                                                  output, info);
+
+      //size_t len;
+      //uint8_t *out = pmt::u8vector_writable_elements(output, len);
+      //for(size_t i = 0; i < len; i++) {
+      //       out[i] ^= d_scramble_mask[i];
+      //}
+
+      return ret_val;
+    }
+
+    bool
+    packet_formatter_ofdm::parse(int nbits_in,
+                                 const unsigned char *input,
+                                 std::vector<pmt::pmt_t> &info,
+                                 int &nbits_processed)
+    {
+      int index = 0;
+      while(nbits_processed <= nbits_in) {
+        d_hdr_reg.insert_bit(input[nbits_processed++] ^ 
d_scramble_mask[index++]);
+        if(d_hdr_reg.length() == header_nbits()) {
+          if(header_ok()) {
+            int payload_len = header_payload();
+            enter_have_header(payload_len);
+            info.push_back(d_info);
+            d_hdr_reg.clear_input();
+            return true;
+          }
+          else {
+            d_hdr_reg.clear_input();
+            return false;
+          }
+          break;
+        }
+      }
+
+      return true;
+    }
+
+    size_t
+    packet_formatter_ofdm::header_nbits() const
+    {
+      return d_header_len;
+    }
+
+    int
+    packet_formatter_ofdm::header_payload()
+    {
+      uint32_t pkt = d_hdr_reg.extract_field32(0, 24, true);
+      uint16_t pktlen = static_cast<uint16_t>((pkt >> 8) & 0x0fff);
+      uint16_t pktnum = static_cast<uint16_t>((pkt >> 20) & 0x0fff);
+
+      // Convert num bytes to num complex symbols in payload
+      pktlen *= 8;
+      uint16_t pldlen = pktlen / d_bits_per_payload_sym;
+      if(pktlen % d_bits_per_payload_sym) {
+        pldlen++;
+      }
+
+      // frame_len = # of OFDM symbols in this frame
+      int framelen = pldlen / d_syms_per_set;
+      int k = 0;
+      int i = framelen * d_syms_per_set;
+      while(i < pldlen) {
+       framelen++;
+       //i += d_occupied_carriers[k++].size();
+        i += d_occupied_carriers[k].size();
+      }
+
+      d_info = pmt::make_dict();
+      d_info = pmt::dict_add(d_info, d_len_key_name,
+                             pmt::from_long(pldlen));
+      d_info = pmt::dict_add(d_info, d_num_key_name,
+                             pmt::from_long(pktnum));
+      d_info = pmt::dict_add(d_info, d_frame_key_name,
+                             pmt::from_long(framelen));
+      return static_cast<int>(pldlen);
+    }
+
+  } /* namespace digital */
+} /* namespace gr */
diff --git a/gr-digital/swig/digital_swig.i b/gr-digital/swig/digital_swig.i
index 12e8e90..b4b3e41 100644
--- a/gr-digital/swig/digital_swig.i
+++ b/gr-digital/swig/digital_swig.i
@@ -104,6 +104,7 @@
 #include "gnuradio/digital/packet_formatter_default.h"
 #include "gnuradio/digital/packet_formatter_counter.h"
 #include "gnuradio/digital/packet_formatter_crc.h"
+#include "gnuradio/digital/packet_formatter_ofdm.h"
 #include "gnuradio/digital/packet_format_async.h"
 #include "gnuradio/digital/packet_format_bb.h"
 #include "gnuradio/digital/packet_parse_b.h"
@@ -192,6 +193,7 @@
 %include "gnuradio/digital/packet_formatter_default.h"
 %include "gnuradio/digital/packet_formatter_counter.h"
 %include "gnuradio/digital/packet_formatter_crc.h"
+%include "gnuradio/digital/packet_formatter_ofdm.h"
 %include "gnuradio/digital/packet_format_async.h"
 %include "gnuradio/digital/packet_format_bb.h"
 %include "gnuradio/digital/packet_parse_b.h"
diff --git a/gr-digital/swig/packet_header.i b/gr-digital/swig/packet_header.i
index bc1075e..32bb334 100644
--- a/gr-digital/swig/packet_header.i
+++ b/gr-digital/swig/packet_header.i
@@ -52,3 +52,9 @@ packet_formatter_counter = packet_formatter_counter .make;
 packet_formatter_crc_sptr.__repr__ = lambda self: "<packet_formatter_crc>"
 packet_formatter_crc = packet_formatter_crc .make;
 %}
+
+%template(packet_formatter_ofdm_sptr) 
boost::shared_ptr<gr::digital::packet_formatter_ofdm>;
+%pythoncode %{
+packet_formatter_ofdm_sptr.__repr__ = lambda self: "<packet_formatter_ofdm>"
+packet_formatter_ofdm = packet_formatter_ofdm .make;
+%}



reply via email to

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