summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Economos <w6rz@comcast.net>2017-06-18 14:44:22 -0700
committerRon Economos <w6rz@comcast.net>2017-06-18 14:44:22 -0700
commit15713fdf6b783e73fa0ac54bfa5c55c897f2af28 (patch)
tree6810ce785868b94f5a2b5201ad3141ae15ff12c1
parent37d373acee2112b0bb350e5abe09aca0115e5cc6 (diff)
dtv: Add 256QAM mode to ITU-T J.83B transmitter.
-rw-r--r--gr-dtv/examples/README.catv9
-rw-r--r--gr-dtv/examples/catv_tx_256qam.grc3195
-rw-r--r--gr-dtv/examples/catv_tx_64qam.grc22
-rw-r--r--gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml17
-rw-r--r--gr-dtv/grc/dtv_catv_randomizer_bb.xml17
-rw-r--r--gr-dtv/grc/dtv_catv_trellis_enc_bb.xml17
-rw-r--r--gr-dtv/grc/dtv_dvbs2_modulator_bc.xml12
-rw-r--r--gr-dtv/include/gnuradio/dtv/CMakeLists.txt1
-rw-r--r--gr-dtv/include/gnuradio/dtv/catv_config.h37
-rw-r--r--gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h5
-rw-r--r--gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h5
-rw-r--r--gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h5
-rw-r--r--gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc101
-rw-r--r--gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h5
-rw-r--r--gr-dtv/lib/catv/catv_randomizer_bb_impl.cc20
-rw-r--r--gr-dtv/lib/catv/catv_randomizer_bb_impl.h6
-rw-r--r--gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc202
-rw-r--r--gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h9
-rw-r--r--gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc262
-rw-r--r--gr-dtv/swig/dtv_swig.i2
20 files changed, 3875 insertions, 74 deletions
diff --git a/gr-dtv/examples/README.catv b/gr-dtv/examples/README.catv
index 84c4cd0b26..c39d8ae03a 100644
--- a/gr-dtv/examples/README.catv
+++ b/gr-dtv/examples/README.catv
@@ -1,10 +1,17 @@
-A test Transport Stream (26.970352 Mbps) for the example flow graph
+A test Transport Stream (26.970352 Mbps) for the 64QAM example flow graph
is available here:
http://www.w6rz.net/advqam64.ts
It is 357,356,980 bytes.
+A test Transport Stream (38.810701 Mbps) for the 256QAM example flow graph
+is available here:
+
+http://www.w6rz.net/advqam256.ts
+
+It is 514,241,664 bytes.
+
The three parameters Control_Word, I_taps and J_increment can be
used to control the interleaver from the following table.
diff --git a/gr-dtv/examples/catv_tx_256qam.grc b/gr-dtv/examples/catv_tx_256qam.grc
new file mode 100644
index 0000000000..554d0b6bed
--- /dev/null
+++ b/gr-dtv/examples/catv_tx_256qam.grc
@@ -0,0 +1,3195 @@
+<?xml version='1.0' encoding='utf-8'?>
+<?grc format='1' created='3.7.12'?>
+<flow_graph>
+ <timestamp>Thu Feb 20 21:02:41 2014</timestamp>
+ <block>
+ <key>options</key>
+ <param>
+ <key>author</key>
+ <value></value>
+ </param>
+ <param>
+ <key>window_size</key>
+ <value>1280, 1024</value>
+ </param>
+ <param>
+ <key>category</key>
+ <value>Custom</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>description</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(8, 12)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>generate_options</key>
+ <value>qt_gui</value>
+ </param>
+ <param>
+ <key>hier_block_src_path</key>
+ <value>.:</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>catv_tx_256qam</value>
+ </param>
+ <param>
+ <key>max_nouts</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>qt_qss_theme</key>
+ <value></value>
+ </param>
+ <param>
+ <key>realtime_scheduling</key>
+ <value></value>
+ </param>
+ <param>
+ <key>run_command</key>
+ <value>{python} -u {filename}</value>
+ </param>
+ <param>
+ <key>run_options</key>
+ <value>prompt</value>
+ </param>
+ <param>
+ <key>run</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>thread_safe_setters</key>
+ <value></value>
+ </param>
+ <param>
+ <key>title</key>
+ <value></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>(8, 268)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>Control_Word</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>6</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>(8, 332)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>I_taps</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>128</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>(8, 396)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>J_increment</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>4</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>(8, 140)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>429e6</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>(8, 204)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>rrc_taps</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>100</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>(8, 76)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>5360537 * 2</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>50</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(544, 16)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>89</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>float</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>-8</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(296, 16)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>vga1_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>-35</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>-4</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>variable_qtgui_range</key>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>value</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(416, 16)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>vga2_gain</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value></value>
+ </param>
+ <param>
+ <key>min_len</key>
+ <value>200</value>
+ </param>
+ <param>
+ <key>orient</key>
+ <value>Qt.Horizontal</value>
+ </param>
+ <param>
+ <key>start</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>step</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>stop</key>
+ <value>25</value>
+ </param>
+ <param>
+ <key>rangeType</key>
+ <value>int</value>
+ </param>
+ <param>
+ <key>widget</key>
+ <value>counter_slider</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_file_source</key>
+ <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>file</key>
+ <value>/run/shm/advqam256.ts</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(144, 148)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_file_source_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>repeat</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_packed_to_unpacked_xx</key>
+ <param>
+ <key>bits_per_chunk</key>
+ <value>7</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>endianness</key>
+ <value>gr.GR_MSB_FIRST</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(640, 148)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_packed_to_unpacked_xx_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_ports</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ </block>
+ <block>
+ <key>blocks_stream_to_vector</key>
+ <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>_coordinate</key>
+ <value>(536, 244)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>180</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>blocks_stream_to_vector_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>byte</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>num_items</key>
+ <value>I_taps</value>
+ </param>
+ <param>
+ <key>vlen</key>
+ <value>1</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_catv_frame_sync_enc_bb</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>CATV_MOD_256QAM</value>
+ </param>
+ <param>
+ <key>ctrlword</key>
+ <value>Control_Word</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(648, 332)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_catv_frame_sync_enc_bb_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_catv_randomizer_bb</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>CATV_MOD_256QAM</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(440, 340)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_catv_randomizer_bb_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_catv_reed_solomon_enc_bb</key>
+ <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>_coordinate</key>
+ <value>(880, 160)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_catv_reed_solomon_enc_bb_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_catv_transport_framing_enc_bb</key>
+ <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>_coordinate</key>
+ <value>(376, 160)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_catv_transport_framing_enc_bb_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_catv_trellis_enc_bb</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>CATV_MOD_256QAM</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(176, 500)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_catv_trellis_enc_bb_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbs2_modulator_bc</key>
+ <param>
+ <key>interpolation</key>
+ <value>INTERPOLATION_ON</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>rate1</key>
+ <value>C1_4</value>
+ </param>
+ <param>
+ <key>rate2</key>
+ <value>C1_5_MEDIUM</value>
+ </param>
+ <param>
+ <key>rate3</key>
+ <value>C1_4</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>constellation</key>
+ <value>MOD_256QAM</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>framesize</key>
+ <value>FECFRAME_NORMAL</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(384, 492)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbs2_modulator_bc_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ </block>
+ <block>
+ <key>dtv_dvbt_convolutional_interleaver</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>blocks</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>M</key>
+ <value>J_increment</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(176, 332)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>dtv_dvbt_convolutional_interleaver_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>I</key>
+ <value>I_taps</value>
+ </param>
+ </block>
+ <block>
+ <key>fft_filter_xxx</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>decim</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(664, 484)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>fft_filter_xxx_0</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>nthreads</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_delay</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>taps</key>
+ <value>firdes.root_raised_cosine(0.06, samp_rate, samp_rate/2, 0.12, rrc_taps)</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>ccf</value>
+ </param>
+ </block>
+ <block>
+ <key>osmosdr_sink</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain0</key>
+ <value>vga1_gain</value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>6000000</value>
+ </param>
+ <param>
+ <key>corr0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq0</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>if_gain0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>gain0</key>
+ <value>vga2_gain</value>
+ </param>
+ <param>
+ <key>ant10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain10</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq10</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain10</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain10</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant11</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain11</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq11</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain11</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant12</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain12</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq12</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain12</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain12</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant13</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain13</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq13</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain13</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant14</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain14</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq14</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain14</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant15</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain15</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq15</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain15</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant16</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain16</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq16</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain16</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant17</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain17</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq17</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain17</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant18</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain18</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq18</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain18</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant19</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain19</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq19</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain19</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain1</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq1</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain1</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant20</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain20</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq20</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain20</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant21</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain21</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq21</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain21</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant22</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain22</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq22</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain22</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant23</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain23</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq23</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain23</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant24</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain24</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq24</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain24</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant25</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain25</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq25</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain25</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant26</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain26</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq26</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain26</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain27</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq27</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain27</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant28</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain28</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq28</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain28</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain29</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq29</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain29</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain2</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq2</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain2</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain30</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq30</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain30</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain31</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq31</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain31</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain3</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq3</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain3</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain4</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq4</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain4</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain5</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq5</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain5</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain6</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq6</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain6</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain7</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq7</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain7</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain8</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq8</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain8</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ant9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bb_gain9</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>corr9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>freq9</key>
+ <value>100e6</value>
+ </param>
+ <param>
+ <key>if_gain9</key>
+ <value>20</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>args</key>
+ <value>bladerf=0,buffers=128,buflen=32768</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1072, 452)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>osmosdr_sink_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>sample_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ </block>
+ <block>
+ <key>qtgui_freq_sink_x</key>
+ <param>
+ <key>autoscale</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>average</key>
+ <value>0.2</value>
+ </param>
+ <param>
+ <key>axislabels</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>bw</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>fc</key>
+ <value>center_freq</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ctrlpanel</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>fftsize</key>
+ <value>1024</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(880, 284)</value>
+ </param>
+ <param>
+ <key>gui_hint</key>
+ <value></value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>grid</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>qtgui_freq_sink_x_0</value>
+ </param>
+ <param>
+ <key>legend</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>alpha1</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color1</key>
+ <value>"blue"</value>
+ </param>
+ <param>
+ <key>label1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width1</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha10</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color10</key>
+ <value>"dark blue"</value>
+ </param>
+ <param>
+ <key>label10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width10</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha2</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color2</key>
+ <value>"red"</value>
+ </param>
+ <param>
+ <key>label2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width2</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha3</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color3</key>
+ <value>"green"</value>
+ </param>
+ <param>
+ <key>label3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width3</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha4</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color4</key>
+ <value>"black"</value>
+ </param>
+ <param>
+ <key>label4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width4</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha5</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color5</key>
+ <value>"cyan"</value>
+ </param>
+ <param>
+ <key>label5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width5</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha6</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color6</key>
+ <value>"magenta"</value>
+ </param>
+ <param>
+ <key>label6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width6</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha7</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color7</key>
+ <value>"yellow"</value>
+ </param>
+ <param>
+ <key>label7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width7</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha8</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color8</key>
+ <value>"dark red"</value>
+ </param>
+ <param>
+ <key>label8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width8</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>alpha9</key>
+ <value>1.0</value>
+ </param>
+ <param>
+ <key>color9</key>
+ <value>"dark green"</value>
+ </param>
+ <param>
+ <key>label9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>width9</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>maxoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>minoutbuf</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>name</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>nconnections</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>showports</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>freqhalf</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>tr_chan</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_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>wintype</key>
+ <value>firdes.WIN_BLACKMAN_hARRIS</value>
+ </param>
+ <param>
+ <key>label</key>
+ <value>Relative Gain</value>
+ </param>
+ <param>
+ <key>ymax</key>
+ <value>10</value>
+ </param>
+ <param>
+ <key>ymin</key>
+ <value>-140</value>
+ </param>
+ <param>
+ <key>units</key>
+ <value>dB</value>
+ </param>
+ </block>
+ <block>
+ <key>uhd_usrp_sink</key>
+ <param>
+ <key>alias</key>
+ <value></value>
+ </param>
+ <param>
+ <key>ant0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw0</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq0</key>
+ <value>uhd.tune_request(center_freq, 3500000)</value>
+ </param>
+ <param>
+ <key>norm_gain0</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain0</key>
+ <value>tx_gain</value>
+ </param>
+ <param>
+ <key>ant10</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain10</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain10</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant11</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain11</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain11</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant12</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain12</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain12</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant13</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain13</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain13</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant14</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain14</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain14</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant15</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain15</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain15</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant16</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain16</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain16</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant17</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain17</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain17</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant18</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain18</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain18</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant19</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain19</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain19</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain1</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain1</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant20</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain20</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain20</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant21</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain21</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain21</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant22</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain22</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain22</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant23</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain23</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain23</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant24</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain24</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain24</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant25</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain25</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain25</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant26</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain26</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain26</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant27</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain27</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain27</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant28</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain28</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain28</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant29</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain29</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain29</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain2</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain2</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant30</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain30</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain30</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant31</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain31</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain31</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain3</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain3</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain4</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain4</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain5</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain5</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain6</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain6</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain7</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain7</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant8</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain8</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain8</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>ant9</key>
+ <value></value>
+ </param>
+ <param>
+ <key>bw9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>center_freq9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>norm_gain9</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>gain9</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>clock_rate</key>
+ <value>0.0</value>
+ </param>
+ <param>
+ <key>comment</key>
+ <value></value>
+ </param>
+ <param>
+ <key>affinity</key>
+ <value></value>
+ </param>
+ <param>
+ <key>dev_addr</key>
+ <value>"send_frame_size=65536,num_send_frames=128,master_clock_rate=" + str(samp_rate*4)</value>
+ </param>
+ <param>
+ <key>dev_args</key>
+ <value>""</value>
+ </param>
+ <param>
+ <key>_enabled</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>_coordinate</key>
+ <value>(1072, 336)</value>
+ </param>
+ <param>
+ <key>_rotation</key>
+ <value>0</value>
+ </param>
+ <param>
+ <key>id</key>
+ <value>uhd_usrp_sink_0</value>
+ </param>
+ <param>
+ <key>type</key>
+ <value>fc32</value>
+ </param>
+ <param>
+ <key>clock_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source0</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source1</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source2</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source3</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source4</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source5</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source6</key>
+ <value></value>
+ </param>
+ <param>
+ <key>clock_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>sd_spec7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>time_source7</key>
+ <value></value>
+ </param>
+ <param>
+ <key>nchan</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>num_mboards</key>
+ <value>1</value>
+ </param>
+ <param>
+ <key>samp_rate</key>
+ <value>samp_rate</value>
+ </param>
+ <param>
+ <key>hide_cmd_port</key>
+ <value>False</value>
+ </param>
+ <param>
+ <key>hide_lo_controls</key>
+ <value>True</value>
+ </param>
+ <param>
+ <key>stream_args</key>
+ <value></value>
+ </param>
+ <param>
+ <key>stream_chans</key>
+ <value>[]</value>
+ </param>
+ <param>
+ <key>sync</key>
+ <value></value>
+ </param>
+ <param>
+ <key>len_tag_name</key>
+ <value></value>
+ </param>
+ <param>
+ <key>otw</key>
+ <value></value>
+ </param>
+ </block>
+ <connection>
+ <source_block_id>blocks_file_source_0</source_block_id>
+ <sink_block_id>dtv_catv_transport_framing_enc_bb_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id>
+ <sink_block_id>dtv_catv_reed_solomon_enc_bb_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>blocks_stream_to_vector_0</source_block_id>
+ <sink_block_id>dtv_dvbt_convolutional_interleaver_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_catv_frame_sync_enc_bb_0</source_block_id>
+ <sink_block_id>dtv_catv_trellis_enc_bb_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_catv_randomizer_bb_0</source_block_id>
+ <sink_block_id>dtv_catv_frame_sync_enc_bb_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_catv_reed_solomon_enc_bb_0</source_block_id>
+ <sink_block_id>blocks_stream_to_vector_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_catv_transport_framing_enc_bb_0</source_block_id>
+ <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_catv_trellis_enc_bb_0</source_block_id>
+ <sink_block_id>dtv_dvbs2_modulator_bc_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_dvbs2_modulator_bc_0</source_block_id>
+ <sink_block_id>fft_filter_xxx_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>dtv_dvbt_convolutional_interleaver_0</source_block_id>
+ <sink_block_id>dtv_catv_randomizer_bb_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fft_filter_xxx_0</source_block_id>
+ <sink_block_id>osmosdr_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+ <connection>
+ <source_block_id>fft_filter_xxx_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>fft_filter_xxx_0</source_block_id>
+ <sink_block_id>uhd_usrp_sink_0</sink_block_id>
+ <source_key>0</source_key>
+ <sink_key>0</sink_key>
+ </connection>
+</flow_graph>
diff --git a/gr-dtv/examples/catv_tx_64qam.grc b/gr-dtv/examples/catv_tx_64qam.grc
index 0a59580479..dc9f539b49 100644
--- a/gr-dtv/examples/catv_tx_64qam.grc
+++ b/gr-dtv/examples/catv_tx_64qam.grc
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
-<?grc format='1' created='3.7.11'?>
+<?grc format='1' created='3.7.12'?>
<flow_graph>
<timestamp>Thu Feb 20 21:02:41 2014</timestamp>
<block>
@@ -604,6 +604,10 @@
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>CATV_MOD_64QAM</value>
+ </param>
+ <param>
<key>ctrlword</key>
<value>Control_Word</value>
</param>
@@ -617,7 +621,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(624, 340)</value>
+ <value>(640, 332)</value>
</param>
<param>
<key>_rotation</key>
@@ -647,6 +651,10 @@
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>CATV_MOD_64QAM</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -656,7 +664,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(440, 344)</value>
+ <value>(440, 340)</value>
</param>
<param>
<key>_rotation</key>
@@ -764,6 +772,10 @@
<value></value>
</param>
<param>
+ <key>constellation</key>
+ <value>CATV_MOD_64QAM</value>
+ </param>
+ <param>
<key>affinity</key>
<value></value>
</param>
@@ -773,7 +785,7 @@
</param>
<param>
<key>_coordinate</key>
- <value>(176, 504)</value>
+ <value>(176, 500)</value>
</param>
<param>
<key>_rotation</key>
@@ -2295,7 +2307,7 @@
</param>
<param>
<key>center_freq0</key>
- <value>center_freq</value>
+ <value>uhd.tune_request(center_freq, 3500000)</value>
</param>
<param>
<key>norm_gain0</key>
diff --git a/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml
index e7c1392960..11f05164b3 100644
--- a/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml
+++ b/gr-dtv/grc/dtv_catv_frame_sync_enc_bb.xml
@@ -8,7 +8,22 @@
<name>Frame Sync Encoder</name>
<key>dtv_catv_frame_sync_enc_bb</key>
<import>from gnuradio import dtv</import>
- <make>dtv.catv_frame_sync_enc_bb($ctrlword)</make>
+ <make>dtv.catv_frame_sync_enc_bb($constellation.val, $ctrlword)</make>
+ <param>
+ <name>Constellation</name>
+ <key>constellation</key>
+ <type>enum</type>
+ <option>
+ <name>64QAM</name>
+ <key>CATV_MOD_64QAM</key>
+ <opt>val:dtv.CATV_MOD_64QAM</opt>
+ </option>
+ <option>
+ <name>256QAM</name>
+ <key>CATV_MOD_256QAM</key>
+ <opt>val:dtv.CATV_MOD_256QAM</opt>
+ </option>
+ </param>
<param>
<name>Control Word</name>
<key>ctrlword</key>
diff --git a/gr-dtv/grc/dtv_catv_randomizer_bb.xml b/gr-dtv/grc/dtv_catv_randomizer_bb.xml
index ca4787d786..d0da5a2516 100644
--- a/gr-dtv/grc/dtv_catv_randomizer_bb.xml
+++ b/gr-dtv/grc/dtv_catv_randomizer_bb.xml
@@ -8,7 +8,22 @@
<name>Randomizer</name>
<key>dtv_catv_randomizer_bb</key>
<import>from gnuradio import dtv</import>
- <make>dtv.catv_randomizer_bb()</make>
+ <make>dtv.catv_randomizer_bb($constellation.val)</make>
+ <param>
+ <name>Constellation</name>
+ <key>constellation</key>
+ <type>enum</type>
+ <option>
+ <name>64QAM</name>
+ <key>CATV_MOD_64QAM</key>
+ <opt>val:dtv.CATV_MOD_64QAM</opt>
+ </option>
+ <option>
+ <name>256QAM</name>
+ <key>CATV_MOD_256QAM</key>
+ <opt>val:dtv.CATV_MOD_256QAM</opt>
+ </option>
+ </param>
<sink>
<name>in</name>
<type>byte</type>
diff --git a/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml b/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml
index a96d60c895..a1d2d4619c 100644
--- a/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml
+++ b/gr-dtv/grc/dtv_catv_trellis_enc_bb.xml
@@ -8,7 +8,22 @@
<name>Trellis Encoder</name>
<key>dtv_catv_trellis_enc_bb</key>
<import>from gnuradio import dtv</import>
- <make>dtv.catv_trellis_enc_bb()</make>
+ <make>dtv.catv_trellis_enc_bb($constellation.val)</make>
+ <param>
+ <name>Constellation</name>
+ <key>constellation</key>
+ <type>enum</type>
+ <option>
+ <name>64QAM</name>
+ <key>CATV_MOD_64QAM</key>
+ <opt>val:dtv.CATV_MOD_64QAM</opt>
+ </option>
+ <option>
+ <name>256QAM</name>
+ <key>CATV_MOD_256QAM</key>
+ <opt>val:dtv.CATV_MOD_256QAM</opt>
+ </option>
+ </param>
<sink>
<name>in</name>
<type>byte</type>
diff --git a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
index 28284169fd..d6b9f10048 100644
--- a/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
+++ b/gr-dtv/grc/dtv_dvbs2_modulator_bc.xml
@@ -51,7 +51,7 @@ $constellation.val, $interpolation.val)</make>
<name>Code rate</name>
<key>rate1</key>
<type>enum</type>
- <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' then $constellation.hide_dvb else $framesize.hide_normal</hide>
+ <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' or str($constellation) == 'MOD_256QAM' then $constellation.hide_dvb else $framesize.hide_normal</hide>
<option>
<name>1/4</name>
<key>C1_4</key>
@@ -232,7 +232,7 @@ $constellation.val, $interpolation.val)</make>
<name>Code rate</name>
<key>rate2</key>
<type>enum</type>
- <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' then $constellation.hide_dvb else $framesize.hide_medium</hide>
+ <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' or str($constellation) == 'MOD_256QAM' then $constellation.hide_dvb else $framesize.hide_medium</hide>
<option>
<name>1/5</name>
<key>C1_5_MEDIUM</key>
@@ -253,7 +253,7 @@ $constellation.val, $interpolation.val)</make>
<name>Code rate</name>
<key>rate3</key>
<type>enum</type>
- <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' then $constellation.hide_dvb else $framesize.hide_short</hide>
+ <hide>#if str($constellation) == 'MOD_8VSB' or str($constellation) == 'MOD_64QAM' or str($constellation) == 'MOD_256QAM' then $constellation.hide_dvb else $framesize.hide_short</hide>
<option>
<name>1/4</name>
<key>C1_4</key>
@@ -454,6 +454,12 @@ $constellation.val, $interpolation.val)</make>
<opt>hide_dvb:all</opt>
</option>
<option>
+ <name>256QAM (ITU-T J.83B)</name>
+ <key>MOD_256QAM</key>
+ <opt>val:dtv.MOD_256QAM</opt>
+ <opt>hide_dvb:all</opt>
+ </option>
+ <option>
<name>PI/2 BPSK</name>
<key>MOD_BPSK</key>
<opt>val:dtv.MOD_BPSK</opt>
diff --git a/gr-dtv/include/gnuradio/dtv/CMakeLists.txt b/gr-dtv/include/gnuradio/dtv/CMakeLists.txt
index 620dd55879..efe9b5e12a 100644
--- a/gr-dtv/include/gnuradio/dtv/CMakeLists.txt
+++ b/gr-dtv/include/gnuradio/dtv/CMakeLists.txt
@@ -42,6 +42,7 @@ install(FILES
dvbt_config.h
dvbs2_config.h
dvbt2_config.h
+ catv_config.h
dvb_bbheader_bb.h
dvb_bbscrambler_bb.h
dvb_bch_bb.h
diff --git a/gr-dtv/include/gnuradio/dtv/catv_config.h b/gr-dtv/include/gnuradio/dtv/catv_config.h
new file mode 100644
index 0000000000..a5da46cb5d
--- /dev/null
+++ b/gr-dtv/include/gnuradio/dtv/catv_config.h
@@ -0,0 +1,37 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2017 Free Software Foundation, Inc.
+ *
+ * This 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.
+ *
+ * This software 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 this software; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_DTV_CATV_CONFIG_H
+#define INCLUDED_DTV_CATV_CONFIG_H
+
+namespace gr {
+ namespace dtv {
+ enum catv_constellation_t {
+ CATV_MOD_64QAM = 0,
+ CATV_MOD_256QAM,
+ };
+
+ } // namespace dtv
+} // namespace gr
+
+typedef gr::dtv::catv_constellation_t catv_constellation_t;
+
+#endif /* INCLUDED_DTV_CATV_CONFIG_H */
+
diff --git a/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h b/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h
index 799a2d3c55..99ea428aed 100644
--- a/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h
+++ b/gr-dtv/include/gnuradio/dtv/catv_frame_sync_enc_bb.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@
#include <gnuradio/dtv/api.h>
#include <gnuradio/block.h>
+#include <gnuradio/dtv/catv_config.h>
namespace gr {
namespace dtv {
@@ -44,7 +45,7 @@ namespace gr {
*
* \param ctrlword convolutional interleaver control word.
*/
- static sptr make(int ctrlword);
+ static sptr make(catv_constellation_t constellation, int ctrlword);
};
} // namespace dtv
diff --git a/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h b/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h
index 83230b8167..cf9ad39c6d 100644
--- a/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h
+++ b/gr-dtv/include/gnuradio/dtv/catv_randomizer_bb.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@
#include <gnuradio/dtv/api.h>
#include <gnuradio/sync_block.h>
+#include <gnuradio/dtv/catv_config.h>
namespace gr {
namespace dtv {
@@ -43,7 +44,7 @@ namespace gr {
* \brief Create an ITU-T J.83B randomizer.
*
*/
- static sptr make();
+ static sptr make(catv_constellation_t constellation);
};
} // namespace dtv
diff --git a/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h b/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h
index aa6cec1703..e048af80ee 100644
--- a/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h
+++ b/gr-dtv/include/gnuradio/dtv/catv_trellis_enc_bb.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -23,6 +23,7 @@
#include <gnuradio/dtv/api.h>
#include <gnuradio/block.h>
+#include <gnuradio/dtv/catv_config.h>
namespace gr {
namespace dtv {
@@ -43,7 +44,7 @@ namespace gr {
* \brief Create an ITU-T J.83B Trellis Encoder.
*
*/
- static sptr make();
+ static sptr make(catv_constellation_t constellation);
};
} // namespace dtv
diff --git a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc
index 87c706b445..3dd4881a77 100644
--- a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc
+++ b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,22 +29,28 @@ namespace gr {
namespace dtv {
catv_frame_sync_enc_bb::sptr
- catv_frame_sync_enc_bb::make(int ctrlword)
+ catv_frame_sync_enc_bb::make(catv_constellation_t constellation, int ctrlword)
{
return gnuradio::get_initial_sptr
- (new catv_frame_sync_enc_bb_impl(ctrlword));
+ (new catv_frame_sync_enc_bb_impl(constellation, ctrlword));
}
/*
* The private constructor
*/
- catv_frame_sync_enc_bb_impl::catv_frame_sync_enc_bb_impl(int ctrlword)
+ catv_frame_sync_enc_bb_impl::catv_frame_sync_enc_bb_impl(catv_constellation_t constellation, int ctrlword)
: gr::block("catv_frame_sync_enc_bb",
gr::io_signature::make(1, 1, sizeof(unsigned char)),
gr::io_signature::make(1, 1, sizeof(unsigned char)))
{
- set_output_multiple(60 * 128 + 6);
+ if (constellation == CATV_MOD_64QAM) {
+ set_output_multiple((60 * 128 * 7) + 42);
+ }
+ else {
+ set_output_multiple((88 * 128 * 7) + 40);
+ }
control_word = ctrlword;
+ signal_constellation = constellation;
}
/*
@@ -57,7 +63,12 @@ namespace gr {
void
catv_frame_sync_enc_bb_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required)
{
- ninput_items_required[0] = noutput_items / (60 * 128 + 6) * (60 * 128);
+ if (signal_constellation == CATV_MOD_64QAM) {
+ ninput_items_required[0] = noutput_items / ((60 * 128 * 7) + 42) * (60 * 128);
+ }
+ else {
+ ninput_items_required[0] = noutput_items / ((88 * 128 * 7) + 40) * (88 * 128);
+ }
}
int
@@ -68,24 +79,78 @@ namespace gr {
{
const unsigned char *in = (const unsigned char *) input_items[0];
unsigned char *out = (unsigned char *) output_items[0];
+ int consumed = 0;
+ int i = 0;
+ unsigned char b;
- int i = 0, j = 0;
while (i < noutput_items) {
- memcpy(out + i, in + j, 60 * 128);
- i += 60 * 128;
- j += 60 * 128;
-
- out[i++] = 0x75;
- out[i++] = 0x2C;
- out[i++] = 0x0D;
- out[i++] = 0x6C;
- out[i++] = control_word << 3;
- out[i++] = 0x00;
+ if (signal_constellation == CATV_MOD_64QAM) {
+ for (int j = 0; j < 60 * 128; j++) {
+ b = *in++;
+ consumed++;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ }
+ b = 0x75;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = 0x2c;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = 0x0d;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = 0x6c;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = control_word << 3;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = 0x00;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ }
+ else {
+ for (int j = 0; j < 88 * 128; j++) {
+ b = *in++;
+ consumed++;
+ for (int n = 6; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ }
+ b = 0x71;
+ for (int n = 7; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = 0xe8;
+ for (int n = 7; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = 0x4d;
+ for (int n = 7; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = 0xd4;
+ for (int n = 7; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ b = control_word << 4;
+ for (int n = 7; n >= 0; n--) {
+ out[i++] = b & (1 << n) ? 1 : 0;
+ }
+ }
}
// Tell runtime system how many input items we consumed on
// each input stream.
- consume_each (j);
+ consume_each (consumed);
// Tell runtime system how many output items we produced.
return noutput_items;
diff --git a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h
index fb924f7a14..38458a04cd 100644
--- a/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h
+++ b/gr-dtv/lib/catv/catv_frame_sync_enc_bb_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -30,9 +30,10 @@ namespace gr {
{
private:
int control_word;
+ int signal_constellation;
public:
- catv_frame_sync_enc_bb_impl(int ctrlword);
+ catv_frame_sync_enc_bb_impl(catv_constellation_t constellation, int ctrlword);
~catv_frame_sync_enc_bb_impl();
void forecast (int noutput_items, gr_vector_int &ninput_items_required);
diff --git a/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc b/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc
index 698288dcd3..833e3a0959 100644
--- a/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc
+++ b/gr-dtv/lib/catv/catv_randomizer_bb_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,24 +29,28 @@ namespace gr {
namespace dtv {
catv_randomizer_bb::sptr
- catv_randomizer_bb::make()
+ catv_randomizer_bb::make(catv_constellation_t constellation)
{
return gnuradio::get_initial_sptr
- (new catv_randomizer_bb_impl());
+ (new catv_randomizer_bb_impl(constellation));
}
/*
* The private constructor
*/
- catv_randomizer_bb_impl::catv_randomizer_bb_impl()
+ catv_randomizer_bb_impl::catv_randomizer_bb_impl(catv_constellation_t constellation)
: gr::sync_block("catv_randomizer_bb",
gr::io_signature::make(1, 1, sizeof(unsigned char)),
gr::io_signature::make(1, 1, sizeof(unsigned char)))
{
- init_rand();
-
offset = 0;
- max_offset = 60 * 128;
+ if (constellation == CATV_MOD_64QAM) {
+ max_offset = 60 * 128;
+ }
+ else {
+ max_offset = 88 * 128;
+ }
+ init_rand();
}
/*
@@ -63,7 +67,7 @@ namespace gr {
unsigned char c2_new, c1_new, c0_new;
int n, i;
- for (n = 0; n < 60 * 128; n++) {
+ for (n = 0; n < max_offset; n++) {
rseq[n] = c2;
c2_new = c1;
c1_new = c0 ^ c2;
diff --git a/gr-dtv/lib/catv/catv_randomizer_bb_impl.h b/gr-dtv/lib/catv/catv_randomizer_bb_impl.h
index e4e40f8f6e..06ce886d9a 100644
--- a/gr-dtv/lib/catv/catv_randomizer_bb_impl.h
+++ b/gr-dtv/lib/catv/catv_randomizer_bb_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,12 +29,12 @@ namespace gr {
class catv_randomizer_bb_impl : public catv_randomizer_bb
{
private:
- unsigned char rseq[60 * 128];
+ unsigned char rseq[88 * 128];
int offset, max_offset;
void init_rand();
public:
- catv_randomizer_bb_impl();
+ catv_randomizer_bb_impl(catv_constellation_t constellation);
~catv_randomizer_bb_impl();
int work(int noutput_items,
diff --git a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
index 66aff00fee..88cfd5ee5d 100644
--- a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
+++ b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -29,27 +29,34 @@ namespace gr {
namespace dtv {
catv_trellis_enc_bb::sptr
- catv_trellis_enc_bb::make()
+ catv_trellis_enc_bb::make(catv_constellation_t constellation)
{
return gnuradio::get_initial_sptr
- (new catv_trellis_enc_bb_impl());
+ (new catv_trellis_enc_bb_impl(constellation));
}
/*
* The private constructor
*/
- catv_trellis_enc_bb_impl::catv_trellis_enc_bb_impl()
+ catv_trellis_enc_bb_impl::catv_trellis_enc_bb_impl(catv_constellation_t constellation)
: gr::block("catv_trellis_enc_bb",
gr::io_signature::make(1, 1, sizeof(unsigned char)),
gr::io_signature::make(1, 1, sizeof(unsigned char)))
{
- set_output_multiple(5);
+ if (constellation == CATV_MOD_64QAM) {
+ set_output_multiple(5);
+ }
+ else {
+ set_output_multiple(5 * 6);
+ }
init_trellis();
Xq = 0;
Yq = 0;
XYp = 0;
+ signal_constellation = constellation;
+ trellis_group = 0;
}
/*
@@ -62,7 +69,12 @@ namespace gr {
void
catv_trellis_enc_bb_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required)
{
- ninput_items_required[0] = noutput_items / 5 * 4;
+ if (signal_constellation == CATV_MOD_64QAM) {
+ ninput_items_required[0] = noutput_items / 5 * 28;
+ }
+ else {
+ ninput_items_required[0] = (noutput_items / (5 * 6)) * (38 * 6);
+ }
}
void
@@ -136,24 +148,39 @@ namespace gr {
}
void
- catv_trellis_enc_bb_impl::trellis_code(const unsigned char *rs, unsigned char *qs)
+ catv_trellis_enc_bb_impl::trellis_code_64qam(const unsigned char *rs, unsigned char *qs)
{
unsigned char X, Y;
int A, B, n;
- A = (rs[1] << 7) | rs[0];
- B = (rs[3] << 7) | rs[2];
-
memset(qs, 0, 5);
- for (n = 0; n < 5; n++) {
- qs[n] |= ((A >> (2*n)) & 3) << 4;
- qs[n] |= ((B >> (2*n)) & 3) << 1;
- }
-
- X = diff_precoder_table[XYp][A >> 10][B >> 10][1];
- Y = diff_precoder_table[XYp][A >> 10][B >> 10][2];
- XYp = diff_precoder_table[XYp][A >> 10][B >> 10][0];
+ qs[0] |= rs[6] << 4; /* A1 */
+ qs[0] |= rs[5] << 5; /* A2 */
+ qs[0] |= rs[20] << 1; /* B1 */
+ qs[0] |= rs[19] << 2; /* B2 */
+ qs[1] |= rs[4] << 4; /* A4 */
+ qs[1] |= rs[3] << 5; /* A5 */
+ qs[1] |= rs[18] << 1; /* B4 */
+ qs[1] |= rs[17] << 2; /* B5 */
+ qs[2] |= rs[2] << 4; /* A7 */
+ qs[2] |= rs[1] << 5; /* A8 */
+ qs[2] |= rs[16] << 1; /* B7 */
+ qs[2] |= rs[15] << 2; /* B8 */
+ qs[3] |= rs[0] << 4; /* A10 */
+ qs[3] |= rs[13] << 5; /* A11 */
+ qs[3] |= rs[14] << 1; /* B10 */
+ qs[3] |= rs[27] << 2; /* B11 */
+ qs[4] |= rs[12] << 4; /* A12 */
+ qs[4] |= rs[11] << 5; /* A13 */
+ qs[4] |= rs[26] << 1; /* B12 */
+ qs[4] |= rs[25] << 2; /* B13 */
+
+ A = (rs[7] << 3) | (rs[8] << 2) | (rs[9] << 1) | rs[10];
+ B = (rs[21] << 3) | (rs[22] << 2) | (rs[23] << 1) | rs[24];
+ X = diff_precoder_table[XYp][A][B][1];
+ Y = diff_precoder_table[XYp][A][B][2];
+ XYp = diff_precoder_table[XYp][A][B][0];
for (n = 0; n < 5; n++) {
qs[n] |= trellis_table_x[Xq][X][1+n];
@@ -163,6 +190,132 @@ namespace gr {
Yq = trellis_table_y[Yq][Y][0];
}
+ void
+ catv_trellis_enc_bb_impl::trellis_code_256qam(const unsigned char *rs, unsigned char *qs)
+ {
+ unsigned char X, Y;
+ int A, B, n;
+
+ for (int i = 0; i < 6; i++) {
+ memset(&qs[0 + (i * 5)], 0, 5);
+ if (trellis_group == 2071) {
+ for (int j = 0; j < 5; j++) {
+ qs[j + (i * 5)] |= rs[38 + (j * 6)] << 5;
+ qs[j + (i * 5)] |= rs[39 + (j * 6)] << 6;
+ qs[j + (i * 5)] |= rs[40 + (j * 6)] << 7;
+ qs[j + (i * 5)] |= rs[41 + (j * 6)] << 1;
+ qs[j + (i * 5)] |= rs[42 + (j * 6)] << 2;
+ qs[j + (i * 5)] |= rs[43 + (j * 6)] << 3;
+ }
+
+ A = (rs[194] << 3) | (rs[192] << 2) | (rs[190] << 1) | rs[188];
+ B = (rs[195] << 3) | (rs[193] << 2) | (rs[191] << 1) | rs[189];
+ }
+ else if (trellis_group == 2072) {
+ for (int j = 0; j < 5; j++) {
+ qs[j + (i * 5)] |= rs[68 + (j * 6)] << 5;
+ qs[j + (i * 5)] |= rs[69 + (j * 6)] << 6;
+ qs[j + (i * 5)] |= rs[70 + (j * 6)] << 7;
+ qs[j + (i * 5)] |= rs[71 + (j * 6)] << 1;
+ qs[j + (i * 5)] |= rs[72 + (j * 6)] << 2;
+ qs[j + (i * 5)] |= rs[73 + (j * 6)] << 3;
+ }
+
+ A = (rs[202] << 3) | (rs[200] << 2) | (rs[198] << 1) | rs[196];
+ B = (rs[203] << 3) | (rs[201] << 2) | (rs[199] << 1) | rs[197];
+ }
+ else if (trellis_group == 2073) {
+ for (int j = 0; j < 5; j++) {
+ qs[j + (i * 5)] |= rs[98 + (j * 6)] << 5;
+ qs[j + (i * 5)] |= rs[99 + (j * 6)] << 6;
+ qs[j + (i * 5)] |= rs[100 + (j * 6)] << 7;
+ qs[j + (i * 5)] |= rs[101 + (j * 6)] << 1;
+ qs[j + (i * 5)] |= rs[102 + (j * 6)] << 2;
+ qs[j + (i * 5)] |= rs[103 + (j * 6)] << 3;
+ }
+
+ A = (rs[210] << 3) | (rs[208] << 2) | (rs[206] << 1) | rs[204];
+ B = (rs[211] << 3) | (rs[209] << 2) | (rs[207] << 1) | rs[205];
+ }
+ else if (trellis_group == 2074) {
+ for (int j = 0; j < 5; j++) {
+ qs[j + (i * 5)] |= rs[128 + (j * 6)] << 5;
+ qs[j + (i * 5)] |= rs[129 + (j * 6)] << 6;
+ qs[j + (i * 5)] |= rs[130 + (j * 6)] << 7;
+ qs[j + (i * 5)] |= rs[131 + (j * 6)] << 1;
+ qs[j + (i * 5)] |= rs[132 + (j * 6)] << 2;
+ qs[j + (i * 5)] |= rs[133 + (j * 6)] << 3;
+ }
+
+ A = (rs[218] << 3) | (rs[216] << 2) | (rs[214] << 1) | rs[212];
+ B = (rs[219] << 3) | (rs[217] << 2) | (rs[215] << 1) | rs[213];
+ }
+ else if (trellis_group == 2075) {
+ for (int j = 0; j < 5; j++) {
+ qs[j + (i * 5)] |= rs[158 + (j * 6)] << 5;
+ qs[j + (i * 5)] |= rs[159 + (j * 6)] << 6;
+ qs[j + (i * 5)] |= rs[160 + (j * 6)] << 7;
+ qs[j + (i * 5)] |= rs[161 + (j * 6)] << 1;
+ qs[j + (i * 5)] |= rs[162 + (j * 6)] << 2;
+ qs[j + (i * 5)] |= rs[163 + (j * 6)] << 3;
+ }
+
+ A = (rs[226] << 3) | (rs[224] << 2) | (rs[222] << 1) | rs[220];
+ B = (rs[227] << 3) | (rs[225] << 2) | (rs[223] << 1) | rs[221];
+ }
+ else {
+ qs[0 + (i * 5)] |= rs[2 + (i * 38)] << 5; /* A1 */
+ qs[0 + (i * 5)] |= rs[3 + (i * 38)] << 6; /* A2 */
+ qs[0 + (i * 5)] |= rs[4 + (i * 38)] << 7; /* A3 */
+ qs[0 + (i * 5)] |= rs[5 + (i * 38)] << 1; /* B1 */
+ qs[0 + (i * 5)] |= rs[6 + (i * 38)] << 2; /* B2 */
+ qs[0 + (i * 5)] |= rs[7 + (i * 38)] << 3; /* B3 */
+ qs[1 + (i * 5)] |= rs[10 + (i * 38)] << 5; /* A5 */
+ qs[1 + (i * 5)] |= rs[11 + (i * 38)] << 6; /* A6 */
+ qs[1 + (i * 5)] |= rs[12 + (i * 38)] << 7; /* A7 */
+ qs[1 + (i * 5)] |= rs[13 + (i * 38)] << 1; /* B5 */
+ qs[1 + (i * 5)] |= rs[14 + (i * 38)] << 2; /* B6 */
+ qs[1 + (i * 5)] |= rs[15 + (i * 38)] << 3; /* B7 */
+ qs[2 + (i * 5)] |= rs[18 + (i * 38)] << 5; /* A9 */
+ qs[2 + (i * 5)] |= rs[19 + (i * 38)] << 6; /* A10 */
+ qs[2 + (i * 5)] |= rs[20 + (i * 38)] << 7; /* A11 */
+ qs[2 + (i * 5)] |= rs[21 + (i * 38)] << 1; /* B9 */
+ qs[2 + (i * 5)] |= rs[22 + (i * 38)] << 2; /* B10 */
+ qs[2 + (i * 5)] |= rs[23 + (i * 38)] << 3; /* B11 */
+ qs[3 + (i * 5)] |= rs[26 + (i * 38)] << 5; /* A13 */
+ qs[3 + (i * 5)] |= rs[27 + (i * 38)] << 6; /* A14 */
+ qs[3 + (i * 5)] |= rs[28 + (i * 38)] << 7; /* A15 */
+ qs[3 + (i * 5)] |= rs[29 + (i * 38)] << 1; /* B13 */
+ qs[3 + (i * 5)] |= rs[30 + (i * 38)] << 2; /* B14 */
+ qs[3 + (i * 5)] |= rs[31 + (i * 38)] << 3; /* B15 */
+ qs[4 + (i * 5)] |= rs[32 + (i * 38)] << 5; /* A16 */
+ qs[4 + (i * 5)] |= rs[33 + (i * 38)] << 6; /* A17 */
+ qs[4 + (i * 5)] |= rs[34 + (i * 38)] << 7; /* A18 */
+ qs[4 + (i * 5)] |= rs[35 + (i * 38)] << 1; /* B16 */
+ qs[4 + (i * 5)] |= rs[36 + (i * 38)] << 2; /* B17 */
+ qs[4 + (i * 5)] |= rs[37 + (i * 38)] << 3; /* B18 */
+
+ A = (rs[24 + (i * 38)] << 3) | (rs[16 + (i * 38)] << 2) | (rs[8 + (i * 38)] << 1) | rs[0 + (i * 38)];
+ B = (rs[25 + (i * 38)] << 3) | (rs[17 + (i * 38)] << 2) | (rs[9 + (i * 38)] << 1) | rs[1 + (i * 38)];
+ }
+
+ X = diff_precoder_table[XYp][A][B][1];
+ Y = diff_precoder_table[XYp][A][B][2];
+ XYp = diff_precoder_table[XYp][A][B][0];
+
+ for (n = 0; n < 5; n++) {
+ qs[n + (i * 5)] |= trellis_table_x[Xq][X][1+n] << 1;
+ qs[n + (i * 5)] |= trellis_table_y[Yq][Y][1+n];
+ }
+ Xq = trellis_table_x[Xq][X][0];
+ Yq = trellis_table_y[Yq][Y][0];
+ trellis_group++;
+ if (trellis_group == 2076) {
+ trellis_group = 0;
+ }
+ }
+ }
+
int
catv_trellis_enc_bb_impl::general_work (int noutput_items,
gr_vector_int &ninput_items,
@@ -175,9 +328,16 @@ namespace gr {
int i = 0, j = 0;
while (i < noutput_items) {
- trellis_code(in + j, out + i);
- i += 5;
- j += 4;
+ if (signal_constellation == CATV_MOD_64QAM) {
+ trellis_code_64qam(in + j, out + i);
+ i += 5;
+ j += 28;
+ }
+ else {
+ trellis_code_256qam(in + j, out + i);
+ i += 5 * 6;
+ j += 38 * 6;
+ }
}
// Tell runtime system how many input items we consumed on
diff --git a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h
index aa7874d929..6a94945460 100644
--- a/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h
+++ b/gr-dtv/lib/catv/catv_trellis_enc_bb_impl.h
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2016 Free Software Foundation, Inc.
+ * Copyright 2016,2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -35,13 +35,16 @@ namespace gr {
unsigned char trellis_table_x[16][16][6];
unsigned char trellis_table_y[16][16][6];
unsigned char Xq, Yq, XYp;
+ int signal_constellation;
+ int trellis_group;
void diff_precoder(unsigned char W, unsigned char Z, unsigned char *Xp, unsigned char *Yp);
void init_trellis();
- void trellis_code(const unsigned char *rs, unsigned char *qs);
+ void trellis_code_64qam(const unsigned char *rs, unsigned char *qs);
+ void trellis_code_256qam(const unsigned char *rs, unsigned char *qs);
public:
- catv_trellis_enc_bb_impl();
+ catv_trellis_enc_bb_impl(catv_constellation_t constellation);
~catv_trellis_enc_bb_impl();
// Where all the action really happens
diff --git a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc
index e3fb039c50..4ceefa1503 100644
--- a/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc
+++ b/gr-dtv/lib/dvbs2/dvbs2_modulator_bc_impl.cc
@@ -1,6 +1,6 @@
/* -*- c++ -*- */
/*
- * Copyright 2015,2016 Free Software Foundation, Inc.
+ * Copyright 2015-2017 Free Software Foundation, Inc.
*
* This is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -1721,6 +1721,264 @@ namespace gr {
m_64apsk[62] = gr_complex( 7.0, -7.0);
m_64apsk[63] = gr_complex( 7.0, 7.0);
break;
+ case MOD_256QAM:
+ m_256apsk[0] = gr_complex( 1.0, 1.0);
+ m_256apsk[1] = gr_complex( 1.0, -1.0);
+ m_256apsk[2] = gr_complex( -3.0, 1.0);
+ m_256apsk[3] = gr_complex( 1.0, 3.0);
+ m_256apsk[4] = gr_complex( 1.0, 5.0);
+ m_256apsk[5] = gr_complex( 5.0, -1.0);
+ m_256apsk[6] = gr_complex( -7.0, 1.0);
+ m_256apsk[7] = gr_complex( 1.0, 7.0);
+ m_256apsk[8] = gr_complex( 1.0, 9.0);
+ m_256apsk[9] = gr_complex( 9.0, -1.0);
+ m_256apsk[10] = gr_complex( -11.0, 1.0);
+ m_256apsk[11] = gr_complex( 1.0, 11.0);
+ m_256apsk[12] = gr_complex( 1.0, 13.0);
+ m_256apsk[13] = gr_complex( 13.0, -1.0);
+ m_256apsk[14] = gr_complex( -15.0, 1.0);
+ m_256apsk[15] = gr_complex( 1.0, 15.0);
+ m_256apsk[16] = gr_complex( -1.0, 1.0);
+ m_256apsk[17] = gr_complex( -1.0, -1.0);
+ m_256apsk[18] = gr_complex( -1.0, -3.0);
+ m_256apsk[19] = gr_complex( 3.0, -1.0);
+ m_256apsk[20] = gr_complex( -5.0, 1.0);
+ m_256apsk[21] = gr_complex( -1.0, -5.0);
+ m_256apsk[22] = gr_complex( -1.0, -7.0);
+ m_256apsk[23] = gr_complex( 7.0, -1.0);
+ m_256apsk[24] = gr_complex( -9.0, 1.0);
+ m_256apsk[25] = gr_complex( -1.0, -9.0);
+ m_256apsk[26] = gr_complex( -1.0, -11.0);
+ m_256apsk[27] = gr_complex( 11.0, -1.0);
+ m_256apsk[28] = gr_complex( -13.0, 1.0);
+ m_256apsk[29] = gr_complex( -1.0, -13.0);
+ m_256apsk[30] = gr_complex( -1.0, -15.0);
+ m_256apsk[31] = gr_complex( 15.0, -1.0);
+ m_256apsk[32] = gr_complex( 1.0, -3.0);
+ m_256apsk[33] = gr_complex( -3.0, -1.0);
+ m_256apsk[34] = gr_complex( -3.0, -3.0);
+ m_256apsk[35] = gr_complex( -3.0, 3.0);
+ m_256apsk[36] = gr_complex( 5.0, -3.0);
+ m_256apsk[37] = gr_complex( -3.0, -5.0);
+ m_256apsk[38] = gr_complex( -3.0, -7.0);
+ m_256apsk[39] = gr_complex( -7.0, 3.0);
+ m_256apsk[40] = gr_complex( 9.0, -3.0);
+ m_256apsk[41] = gr_complex( -3.0, -9.0);
+ m_256apsk[42] = gr_complex( -3.0, -11.0);
+ m_256apsk[43] = gr_complex( -11.0, 3.0);
+ m_256apsk[44] = gr_complex( 13.0, -3.0);
+ m_256apsk[45] = gr_complex( -3.0, -13.0);
+ m_256apsk[46] = gr_complex( -3.0, -15.0);
+ m_256apsk[47] = gr_complex( -15.0, 3.0);
+ m_256apsk[48] = gr_complex( 3.0, 1.0);
+ m_256apsk[49] = gr_complex( -1.0, 3.0);
+ m_256apsk[50] = gr_complex( 3.0, -3.0);
+ m_256apsk[51] = gr_complex( 3.0, 3.0);
+ m_256apsk[52] = gr_complex( 3.0, 5.0);
+ m_256apsk[53] = gr_complex( -5.0, 3.0);
+ m_256apsk[54] = gr_complex( 7.0, -3.0);
+ m_256apsk[55] = gr_complex( 3.0, 7.0);
+ m_256apsk[56] = gr_complex( 3.0, 9.0);
+ m_256apsk[57] = gr_complex( -9.0, 3.0);
+ m_256apsk[58] = gr_complex( 11.0, -3.0);
+ m_256apsk[59] = gr_complex( 3.0, 11.0);
+ m_256apsk[60] = gr_complex( 3.0, 13.0);
+ m_256apsk[61] = gr_complex( -13.0, 3.0);
+ m_256apsk[62] = gr_complex( 15.0, -3.0);
+ m_256apsk[63] = gr_complex( 3.0, 15.0);
+ m_256apsk[64] = gr_complex( 5.0, 1.0);
+ m_256apsk[65] = gr_complex( 1.0, -5.0);
+ m_256apsk[66] = gr_complex( -3.0, 5.0);
+ m_256apsk[67] = gr_complex( 5.0, 3.0);
+ m_256apsk[68] = gr_complex( 5.0, 5.0);
+ m_256apsk[69] = gr_complex( 5.0, -5.0);
+ m_256apsk[70] = gr_complex( -7.0, 5.0);
+ m_256apsk[71] = gr_complex( 5.0, 7.0);
+ m_256apsk[72] = gr_complex( 5.0, 9.0);
+ m_256apsk[73] = gr_complex( 9.0, -5.0);
+ m_256apsk[74] = gr_complex( -11.0, 5.0);
+ m_256apsk[75] = gr_complex( 5.0, 11.0);
+ m_256apsk[76] = gr_complex( 5.0, 13.0);
+ m_256apsk[77] = gr_complex( 13.0, -5.0);
+ m_256apsk[78] = gr_complex( -15.0, 5.0);
+ m_256apsk[79] = gr_complex( 5.0, 15.0);
+ m_256apsk[80] = gr_complex( -1.0, 5.0);
+ m_256apsk[81] = gr_complex( -5.0, -1.0);
+ m_256apsk[82] = gr_complex( -5.0, -3.0);
+ m_256apsk[83] = gr_complex( 3.0, -5.0);
+ m_256apsk[84] = gr_complex( -5.0, 5.0);
+ m_256apsk[85] = gr_complex( -5.0, -5.0);
+ m_256apsk[86] = gr_complex( -5.0, -7.0);
+ m_256apsk[87] = gr_complex( 7.0, -5.0);
+ m_256apsk[88] = gr_complex( -9.0, 5.0);
+ m_256apsk[89] = gr_complex( -5.0, -9.0);
+ m_256apsk[90] = gr_complex( -5.0, -11.0);
+ m_256apsk[91] = gr_complex( 11.0, -5.0);
+ m_256apsk[92] = gr_complex( -13.0, 5.0);
+ m_256apsk[93] = gr_complex( -5.0, -13.0);
+ m_256apsk[94] = gr_complex( -5.0, -15.0);
+ m_256apsk[95] = gr_complex( 15.0, -5.0);
+ m_256apsk[96] = gr_complex( 1.0, -7.0);
+ m_256apsk[97] = gr_complex( -7.0, -1.0);
+ m_256apsk[98] = gr_complex( -7.0, -3.0);
+ m_256apsk[99] = gr_complex( -3.0, 7.0);
+ m_256apsk[100] = gr_complex( 5.0, -7.0);
+ m_256apsk[101] = gr_complex( -7.0, -5.0);
+ m_256apsk[102] = gr_complex( -7.0, -7.0);
+ m_256apsk[103] = gr_complex( -7.0, 7.0);
+ m_256apsk[104] = gr_complex( 9.0, -7.0);
+ m_256apsk[105] = gr_complex( -7.0, -9.0);
+ m_256apsk[106] = gr_complex( -7.0, -11.0);
+ m_256apsk[107] = gr_complex(-11.0, 7.0);
+ m_256apsk[108] = gr_complex( 13.0, -7.0);
+ m_256apsk[109] = gr_complex( -7.0, -13.0);
+ m_256apsk[110] = gr_complex( -7.0, -15.0);
+ m_256apsk[111] = gr_complex(-15.0, 7.0);
+ m_256apsk[112] = gr_complex( 7.0, 1.0);
+ m_256apsk[113] = gr_complex( -1.0, 7.0);
+ m_256apsk[114] = gr_complex( 3.0, -7.0);
+ m_256apsk[115] = gr_complex( 7.0, 3.0);
+ m_256apsk[116] = gr_complex( 7.0, 5.0);
+ m_256apsk[117] = gr_complex( -5.0, 7.0);
+ m_256apsk[118] = gr_complex( 7.0, -7.0);
+ m_256apsk[119] = gr_complex( 7.0, 7.0);
+ m_256apsk[120] = gr_complex( 7.0, 9.0);
+ m_256apsk[121] = gr_complex( -9.0, 7.0);
+ m_256apsk[122] = gr_complex( 11.0, -7.0);
+ m_256apsk[123] = gr_complex( 7.0, 11.0);
+ m_256apsk[124] = gr_complex( 7.0, 13.0);
+ m_256apsk[125] = gr_complex(-13.0, 7.0);
+ m_256apsk[126] = gr_complex( 15.0, -7.0);
+ m_256apsk[127] = gr_complex( 7.0, 15.0);
+ m_256apsk[128] = gr_complex( 9.0, 1.0);
+ m_256apsk[129] = gr_complex( 1.0, -9.0);
+ m_256apsk[130] = gr_complex( -3.0, 9.0);
+ m_256apsk[131] = gr_complex( 9.0, 3.0);
+ m_256apsk[132] = gr_complex( 9.0, 5.0);
+ m_256apsk[133] = gr_complex( 5.0, -9.0);
+ m_256apsk[134] = gr_complex( -7.0, 9.0);
+ m_256apsk[135] = gr_complex( 9.0, 7.0);
+ m_256apsk[136] = gr_complex( 9.0, 9.0);
+ m_256apsk[137] = gr_complex( 9.0, -9.0);
+ m_256apsk[138] = gr_complex(-11.0, 9.0);
+ m_256apsk[139] = gr_complex( 9.0, 11.0);
+ m_256apsk[140] = gr_complex( 9.0, 13.0);
+ m_256apsk[141] = gr_complex( 13.0, -9.0);
+ m_256apsk[142] = gr_complex(-15.0, 9.0);
+ m_256apsk[143] = gr_complex( 9.0, 15.0);
+ m_256apsk[144] = gr_complex( -1.0, 9.0);
+ m_256apsk[145] = gr_complex( -9.0, -1.0);
+ m_256apsk[146] = gr_complex( -9.0, -3.0);
+ m_256apsk[147] = gr_complex( 3.0, -9.0);
+ m_256apsk[148] = gr_complex( -5.0, 9.0);
+ m_256apsk[149] = gr_complex( -9.0, -5.0);
+ m_256apsk[150] = gr_complex( -9.0, -7.0);
+ m_256apsk[151] = gr_complex( 7.0, -9.0);
+ m_256apsk[152] = gr_complex( -9.0, 9.0);
+ m_256apsk[153] = gr_complex( -9.0, -9.0);
+ m_256apsk[154] = gr_complex( -9.0, -11.0);
+ m_256apsk[155] = gr_complex( 11.0, -9.0);
+ m_256apsk[156] = gr_complex(-13.0, 9.0);
+ m_256apsk[157] = gr_complex( -9.0, -13.0);
+ m_256apsk[158] = gr_complex( -9.0, -15.0);
+ m_256apsk[159] = gr_complex( 15.0, -9.0);
+ m_256apsk[160] = gr_complex( 1.0, -11.0);
+ m_256apsk[161] = gr_complex(-11.0, -1.0);
+ m_256apsk[162] = gr_complex(-11.0, -3.0);
+ m_256apsk[163] = gr_complex( -3.0, 11.0);
+ m_256apsk[164] = gr_complex( 5.0, -11.0);
+ m_256apsk[165] = gr_complex(-11.0, -5.0);
+ m_256apsk[166] = gr_complex(-11.0, -7.0);
+ m_256apsk[167] = gr_complex( -7.0, 11.0);
+ m_256apsk[168] = gr_complex( 9.0, -11.0);
+ m_256apsk[169] = gr_complex(-11.0, -9.0);
+ m_256apsk[170] = gr_complex(-11.0, -11.0);
+ m_256apsk[171] = gr_complex(-11.0, 11.0);
+ m_256apsk[172] = gr_complex( 13.0, -11.0);
+ m_256apsk[173] = gr_complex(-11.0, -13.0);
+ m_256apsk[174] = gr_complex(-11.0, -15.0);
+ m_256apsk[175] = gr_complex(-15.0, 11.0);
+ m_256apsk[176] = gr_complex( 11.0, 1.0);
+ m_256apsk[177] = gr_complex( -1.0, 11.0);
+ m_256apsk[178] = gr_complex( 3.0, -11.0);
+ m_256apsk[179] = gr_complex( 11.0, 3.0);
+ m_256apsk[180] = gr_complex( 11.0, 5.0);
+ m_256apsk[181] = gr_complex( -5.0, 11.0);
+ m_256apsk[182] = gr_complex( 7.0, -11.0);
+ m_256apsk[183] = gr_complex( 11.0, 7.0);
+ m_256apsk[184] = gr_complex( 11.0, 9.0);
+ m_256apsk[185] = gr_complex( -9.0, 11.0);
+ m_256apsk[186] = gr_complex( 11.0, -11.0);
+ m_256apsk[187] = gr_complex( 11.0, 11.0);
+ m_256apsk[188] = gr_complex( 11.0, 13.0);
+ m_256apsk[189] = gr_complex(-13.0, 11.0);
+ m_256apsk[190] = gr_complex( 15.0, -11.0);
+ m_256apsk[191] = gr_complex( 11.0, 15.0);
+ m_256apsk[192] = gr_complex( 13.0, 1.0);
+ m_256apsk[193] = gr_complex( 1.0, -13.0);
+ m_256apsk[194] = gr_complex( -3.0, 13.0);
+ m_256apsk[195] = gr_complex( 13.0, 3.0);
+ m_256apsk[196] = gr_complex( 13.0, 5.0);
+ m_256apsk[197] = gr_complex( 5.0, -13.0);
+ m_256apsk[198] = gr_complex( -7.0, 13.0);
+ m_256apsk[199] = gr_complex( 13.0, 7.0);
+ m_256apsk[200] = gr_complex( 13.0, 9.0);
+ m_256apsk[201] = gr_complex( 9.0, -13.0);
+ m_256apsk[202] = gr_complex(-11.0, 13.0);
+ m_256apsk[203] = gr_complex( 13.0, 11.0);
+ m_256apsk[204] = gr_complex( 13.0, 13.0);
+ m_256apsk[205] = gr_complex( 13.0, -13.0);
+ m_256apsk[206] = gr_complex(-15.0, 13.0);
+ m_256apsk[207] = gr_complex( 13.0, 15.0);
+ m_256apsk[208] = gr_complex( -1.0, 13.0);
+ m_256apsk[209] = gr_complex(-13.0, -1.0);
+ m_256apsk[210] = gr_complex(-13.0, -3.0);
+ m_256apsk[211] = gr_complex( 3.0, -13.0);
+ m_256apsk[212] = gr_complex( -5.0, 13.0);
+ m_256apsk[213] = gr_complex(-13.0, -5.0);
+ m_256apsk[214] = gr_complex(-13.0, -7.0);
+ m_256apsk[215] = gr_complex( 7.0, -13.0);
+ m_256apsk[216] = gr_complex( -9.0, 13.0);
+ m_256apsk[217] = gr_complex(-13.0, -9.0);
+ m_256apsk[218] = gr_complex(-13.0, -11.0);
+ m_256apsk[219] = gr_complex( 11.0, -13.0);
+ m_256apsk[220] = gr_complex(-13.0, 13.0);
+ m_256apsk[221] = gr_complex(-13.0, -13.0);
+ m_256apsk[222] = gr_complex(-13.0, -15.0);
+ m_256apsk[223] = gr_complex( 15.0, -13.0);
+ m_256apsk[224] = gr_complex( 1.0, -15.0);
+ m_256apsk[225] = gr_complex(-15.0, -1.0);
+ m_256apsk[226] = gr_complex(-15.0, -3.0);
+ m_256apsk[227] = gr_complex( -3.0, 15.0);
+ m_256apsk[228] = gr_complex( 5.0, -15.0);
+ m_256apsk[229] = gr_complex(-15.0, -5.0);
+ m_256apsk[230] = gr_complex(-15.0, -7.0);
+ m_256apsk[231] = gr_complex( -7.0, 15.0);
+ m_256apsk[232] = gr_complex( 9.0, -15.0);
+ m_256apsk[233] = gr_complex(-15.0, -9.0);
+ m_256apsk[234] = gr_complex(-15.0, -11.0);
+ m_256apsk[235] = gr_complex(-11.0, 15.0);
+ m_256apsk[236] = gr_complex( 13.0, -15.0);
+ m_256apsk[237] = gr_complex(-15.0, -13.0);
+ m_256apsk[238] = gr_complex(-15.0, -15.0);
+ m_256apsk[239] = gr_complex(-15.0, 15.0);
+ m_256apsk[240] = gr_complex( 15.0, 1.0);
+ m_256apsk[241] = gr_complex( -1.0, 15.0);
+ m_256apsk[242] = gr_complex( 3.0, -15.0);
+ m_256apsk[243] = gr_complex( 15.0, 3.0);
+ m_256apsk[244] = gr_complex( 15.0, 5.0);
+ m_256apsk[245] = gr_complex( -5.0, 15.0);
+ m_256apsk[246] = gr_complex( 7.0, -15.0);
+ m_256apsk[247] = gr_complex( 15.0, 7.0);
+ m_256apsk[248] = gr_complex( 15.0, 9.0);
+ m_256apsk[249] = gr_complex( -9.0, 15.0);
+ m_256apsk[250] = gr_complex( 11.0, -15.0);
+ m_256apsk[251] = gr_complex( 15.0, 11.0);
+ m_256apsk[252] = gr_complex( 15.0, 13.0);
+ m_256apsk[253] = gr_complex(-13.0, 15.0);
+ m_256apsk[254] = gr_complex( 15.0, -15.0);
+ m_256apsk[255] = gr_complex( 15.0, 15.0);
+ break;
case MOD_8VSB:
m_8psk[0] = gr_complex(-7.0 + 1.25, 0.0);
m_8psk[1] = gr_complex(-5.0 + 1.25, 0.0);
@@ -1828,6 +2086,7 @@ namespace gr {
}
break;
case MOD_256APSK:
+ case MOD_256QAM:
for (int i = 0; i < noutput_items; i++) {
index = *in++;
*out++ = m_256apsk[index & 0xff];
@@ -1901,6 +2160,7 @@ namespace gr {
}
break;
case MOD_256APSK:
+ case MOD_256QAM:
for (int i = 0; i < noutput_items / 2; i++) {
index = *in++;
*out++ = m_256apsk[index & 0xff];
diff --git a/gr-dtv/swig/dtv_swig.i b/gr-dtv/swig/dtv_swig.i
index 24960bd2be..5e11d7fbaa 100644
--- a/gr-dtv/swig/dtv_swig.i
+++ b/gr-dtv/swig/dtv_swig.i
@@ -47,6 +47,7 @@
#include "gnuradio/dtv/dvbt_config.h"
#include "gnuradio/dtv/dvbt2_config.h"
#include "gnuradio/dtv/dvbs2_config.h"
+#include "gnuradio/dtv/catv_config.h"
#include "gnuradio/dtv/dvb_bbheader_bb.h"
#include "gnuradio/dtv/dvb_bbscrambler_bb.h"
#include "gnuradio/dtv/dvb_bch_bb.h"
@@ -105,6 +106,7 @@
%include "gnuradio/dtv/dvbt_config.h"
%include "gnuradio/dtv/dvbt2_config.h"
%include "gnuradio/dtv/dvbs2_config.h"
+%include "gnuradio/dtv/catv_config.h"
%include "gnuradio/dtv/dvb_bbheader_bb.h"
%include "gnuradio/dtv/dvb_bbscrambler_bb.h"
%include "gnuradio/dtv/dvb_bch_bb.h"