diff options
author | Ron Economos <w6rz@comcast.net> | 2017-06-18 14:44:22 -0700 |
---|---|---|
committer | Ron Economos <w6rz@comcast.net> | 2017-06-18 14:44:22 -0700 |
commit | 15713fdf6b783e73fa0ac54bfa5c55c897f2af28 (patch) | |
tree | 6810ce785868b94f5a2b5201ad3141ae15ff12c1 | |
parent | 37d373acee2112b0bb350e5abe09aca0115e5cc6 (diff) |
dtv: Add 256QAM mode to ITU-T J.83B transmitter.
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" |