diff options
Diffstat (limited to 'gr-trellis/examples')
42 files changed, 6157 insertions, 6423 deletions
diff --git a/gr-trellis/examples/grc/CMakeLists.txt b/gr-trellis/examples/grc/CMakeLists.txt index 35280d515f..c5d4fc8965 100644 --- a/gr-trellis/examples/grc/CMakeLists.txt +++ b/gr-trellis/examples/grc/CMakeLists.txt @@ -20,13 +20,18 @@ ## Configure GRC examples to point to the right fsm_files directory set(FSM_FILE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/${GR_PKG_TRELLIS_EXAMPLES_DIR}/fsm_files/") configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/pccc.grc" - "${CMAKE_CURRENT_BINARY_DIR}/pccc.grc" + "${CMAKE_CURRENT_SOURCE_DIR}/tcm.grc" + "${CMAKE_CURRENT_BINARY_DIR}/tcm.grc" +) + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/viterbi_equalization.grc" + "${CMAKE_CURRENT_BINARY_DIR}/viterbi_equalization.grc" ) configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/pccc1.grc" - "${CMAKE_CURRENT_BINARY_DIR}/pccc1.grc" + "${CMAKE_CURRENT_SOURCE_DIR}/turbo_equalization.grc" + "${CMAKE_CURRENT_BINARY_DIR}/turbo_equalization.grc" ) configure_file( @@ -35,8 +40,8 @@ configure_file( ) configure_file( - "${CMAKE_CURRENT_SOURCE_DIR}/sccc1.grc" - "${CMAKE_CURRENT_BINARY_DIR}/sccc1.grc" + "${CMAKE_CURRENT_SOURCE_DIR}/pccc.grc" + "${CMAKE_CURRENT_BINARY_DIR}/pccc.grc" ) configure_file( @@ -46,11 +51,12 @@ configure_file( install( FILES - ${CMAKE_CURRENT_BINARY_DIR}/interference_cancellation.grc - ${CMAKE_CURRENT_BINARY_DIR}/pccc.grc - ${CMAKE_CURRENT_BINARY_DIR}/pccc1.grc - ${CMAKE_CURRENT_BINARY_DIR}/sccc1.grc + ${CMAKE_CURRENT_BINARY_DIR}/tcm.grc + ${CMAKE_CURRENT_BINARY_DIR}/viterbi_equalization.grc + ${CMAKE_CURRENT_BINARY_DIR}/turbo_equalization.grc ${CMAKE_CURRENT_BINARY_DIR}/sccc.grc + ${CMAKE_CURRENT_BINARY_DIR}/pccc.grc + ${CMAKE_CURRENT_BINARY_DIR}/interference_cancellation.grc readme.txt DESTINATION ${GR_PKG_TRELLIS_EXAMPLES_DIR} COMPONENT "trellis-examples" diff --git a/gr-trellis/examples/grc/interference_cancellation.grc b/gr-trellis/examples/grc/interference_cancellation.grc index 2ccc723235..1dbcf69b86 100644 --- a/gr-trellis/examples/grc/interference_cancellation.grc +++ b/gr-trellis/examples/grc/interference_cancellation.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Mon Jul 28 14:00:18 2014</timestamp> + <timestamp>Fri Sep 26 18:21:00 2014</timestamp> <block> <key>options</key> <param> @@ -29,7 +29,7 @@ </param> <param> <key>generate_options</key> - <value>qt_gui</value> + <value>wx_gui</value> </param> <param> <key>category</key> @@ -52,10 +52,6 @@ <value></value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>_coordinate</key> <value>(10, 10)</value> </param> @@ -79,12 +75,8 @@ <value>"@FSM_FILE_INSTALL_DIR@"</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>_coordinate</key> - <value>(660, 11)</value> + <value>(871, 14)</value> </param> <param> <key>_rotation</key> @@ -95,7 +87,7 @@ <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>R</value> </param> <param> <key>_enabled</key> @@ -103,15 +95,11 @@ </param> <param> <key>value</key> - <value>1000</value> - </param> - <param> - <key>alias</key> - <value></value> + <value>100e3</value> </param> <param> <key>_coordinate</key> - <value>(583, 10)</value> + <value>(748, 12)</value> </param> <param> <key>_rotation</key> @@ -122,7 +110,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>noisevar</value> </param> <param> <key>_enabled</key> @@ -130,15 +118,11 @@ </param> <param> <key>value</key> - <value>100e3</value> - </param> - <param> - <key>alias</key> - <value></value> + <value>10**(-snr_db/10)</value> </param> <param> <key>_coordinate</key> - <value>(502, 10)</value> + <value>(637, 13)</value> </param> <param> <key>_rotation</key> @@ -149,7 +133,7 @@ <key>variable</key> <param> <key>id</key> - <value>noisevar</value> + <value>fsm1</value> </param> <param> <key>_enabled</key> @@ -157,15 +141,11 @@ </param> <param> <key>value</key> - <value>10**(-snr_db/10)</value> - </param> - <param> - <key>alias</key> - <value></value> + <value>"awgn1o2_16.fsm"</value> </param> <param> <key>_coordinate</key> - <value>(428, 10)</value> + <value>(849, 87)</value> </param> <param> <key>_rotation</key> @@ -173,54 +153,45 @@ </param> </block> <block> - <key>analog_random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>analog_random_source_x_0</value> + <value>fsm2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> + <key>value</key> + <value>"awgn1o2_4.fsm"</value> </param> <param> - <key>min</key> - <value>0</value> + <key>_coordinate</key> + <value>(849, 153)</value> </param> <param> - <key>max</key> - <value>2</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>num_samps</key> - <value>1000</value> + <key>id</key> + <value>block</value> </param> <param> - <key>repeat</key> + <key>_enabled</key> <value>True</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>value</key> + <value>1000</value> </param> <param> <key>_coordinate</key> - <value>(21, 170)</value> + <value>(752, 85)</value> </param> <param> <key>_rotation</key> @@ -228,38 +199,34 @@ </param> </block> <block> - <key>analog_random_source_x</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>analog_random_source_x_1</value> + <value>digital_chunks_to_symbols_xx_0_0_1</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>min</key> - <value>0</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>max</key> - <value>2</value> + <key>out_type</key> + <value>complex</value> </param> <param> - <key>num_samps</key> - <value>1000</value> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>dimension</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>num_ports</key> + <value>1</value> </param> <param> <key>affinity</key> @@ -270,12 +237,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(25, 291)</value> + <value>(408, 1719)</value> </param> <param> <key>_rotation</key> @@ -283,46 +246,22 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_sub_xx_0</value> + <value>virtual_source_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>user1</value> </param> <param> <key>_coordinate</key> - <value>(536, 529)</value> + <value>(356, 1844)</value> </param> <param> <key>_rotation</key> @@ -330,46 +269,22 @@ </param> </block> <block> - <key>blocks_multiply_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_multiply_xx_0</value> + <value>virtual_source_0_2_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>user2_est</value> </param> <param> <key>_coordinate</key> - <value>(771, 525)</value> + <value>(10, 1649)</value> </param> <param> <key>_rotation</key> @@ -380,7 +295,7 @@ <key>blocks_sub_xx</key> <param> <key>id</key> - <value>blocks_sub_xx_3</value> + <value>blocks_sub_xx_2_0</value> </param> <param> <key>_enabled</key> @@ -388,7 +303,7 @@ </param> <param> <key>type</key> - <value>short</value> + <value>complex</value> </param> <param> <key>vlen</key> @@ -399,10 +314,6 @@ <value>2</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>affinity</key> <value></value> </param> @@ -411,12 +322,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(535, 792)</value> + <value>(963, 1695)</value> </param> <param> <key>_rotation</key> @@ -424,46 +331,22 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_sub_xx_2</value> + <value>virtual_source_0_1_2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>observation</value> </param> <param> <key>_coordinate</key> - <value>(944, 978)</value> + <value>(705, 1660)</value> </param> <param> <key>_rotation</key> @@ -471,10 +354,10 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>blocks_multiply_const_vxx</key> <param> <key>id</key> - <value>blocks_sub_xx_1</value> + <value>blocks_multiply_const_vxx_2_0</value> </param> <param> <key>_enabled</key> @@ -482,19 +365,15 @@ </param> <param> <key>type</key> - <value>short</value> - </param> - <param> - <key>vlen</key> - <value>1</value> + <value>complex</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>const</key> + <value>(1-alpha)**0.5</value> </param> <param> - <key>alias</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> <param> <key>affinity</key> @@ -505,12 +384,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(540, 1141)</value> + <value>(721, 1727)</value> </param> <param> <key>_rotation</key> @@ -518,30 +393,34 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>blocks_sub_xx_2_0</value> + <value>digital_chunks_to_symbols_xx_0_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> + <key>in_type</key> + <value>byte</value> + </param> + <param> + <key>out_type</key> <value>complex</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>dimension</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>num_ports</key> + <value>1</value> </param> <param> <key>affinity</key> @@ -552,12 +431,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(975, 1342)</value> + <value>(416, 1251)</value> </param> <param> <key>_rotation</key> @@ -565,46 +440,22 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_sub_xx_1_0</value> + <value>virtual_source_0_4</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>user2</value> </param> <param> <key>_coordinate</key> - <value>(559, 1536)</value> + <value>(359, 1373)</value> </param> <param> <key>_rotation</key> @@ -612,46 +463,22 @@ </param> </block> <block> - <key>blocks_add_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_add_xx_0</value> + <value>virtual_source_0_2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>user1_est</value> </param> <param> <key>_coordinate</key> - <value>(1224, 245)</value> + <value>(33, 1187)</value> </param> <param> <key>_rotation</key> @@ -659,10 +486,10 @@ </param> </block> <block> - <key>analog_noise_source_x</key> + <key>blocks_sub_xx</key> <param> <key>id</key> - <value>analog_noise_source_x_0</value> + <value>blocks_sub_xx_2</value> </param> <param> <key>_enabled</key> @@ -673,20 +500,12 @@ <value>complex</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> - </param> - <param> - <key>amp</key> - <value>noisevar</value> - </param> - <param> - <key>seed</key> - <value>-42</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>alias</key> - <value></value> + <key>num_inputs</key> + <value>2</value> </param> <param> <key>affinity</key> @@ -697,12 +516,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(1178, 321)</value> + <value>(942, 1229)</value> </param> <param> <key>_rotation</key> @@ -710,50 +525,22 @@ </param> </block> <block> - <key>blocks_throttle</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_throttle_0</value> + <value>virtual_source_0_1_1</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>samples_per_second</key> - <value>R</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>ignoretag</key> - <value>True</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>observation</value> </param> <param> <key>_coordinate</key> - <value>(579, 143)</value> + <value>(698, 1198)</value> </param> <param> <key>_rotation</key> @@ -764,7 +551,7 @@ <key>blocks_multiply_const_vxx</key> <param> <key>id</key> - <value>blocks_multiply_const_vxx_0</value> + <value>blocks_multiply_const_vxx_2</value> </param> <param> <key>_enabled</key> @@ -783,10 +570,6 @@ <value>1</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>affinity</key> <value></value> </param> @@ -795,12 +578,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(988, 196)</value> + <value>(708, 1259)</value> </param> <param> <key>_rotation</key> @@ -808,54 +587,45 @@ </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>virtual_source_0_3</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> - </param> - <param> - <key>out_type</key> - <value>complex</value> - </param> - <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> - </param> - <param> - <key>dimension</key> - <value>1</value> + <key>stream_id</key> + <value>user2</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>_coordinate</key> + <value>(342, 928)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>virtual_sink_0_2_0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>user2_est</value> </param> <param> <key>_coordinate</key> - <value>(703, 211)</value> + <value>(341, 1025)</value> </param> <param> <key>_rotation</key> @@ -863,46 +633,45 @@ </param> </block> <block> - <key>blocks_multiply_const_vxx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_multiply_const_vxx_1</value> + <value>virtual_source_0_1_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>const</key> - <value>(1-alpha)**0.5</value> + <key>stream_id</key> + <value>observation</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>_coordinate</key> + <value>(11, 873)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>user1</value> </param> <param> <key>_coordinate</key> - <value>(994, 319)</value> + <value>(348, 566)</value> </param> <param> <key>_rotation</key> @@ -910,54 +679,45 @@ </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>virtual_sink</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0</value> + <value>virtual_sink_0_2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> - </param> - <param> - <key>out_type</key> - <value>complex</value> - </param> - <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> + <key>stream_id</key> + <value>user1_est</value> </param> <param> - <key>dimension</key> - <value>1</value> - </param> - <param> - <key>num_ports</key> - <value>1</value> + <key>_coordinate</key> + <value>(355, 687)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>virtual_source_0_1</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>observation</value> </param> <param> <key>_coordinate</key> - <value>(703, 311)</value> + <value>(13, 530)</value> </param> <param> <key>_rotation</key> @@ -965,84 +725,81 @@ </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0_0</value> + <value>wxgui_numbersink2_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> + <key>type</key> + <value>float</value> </param> <param> - <key>out_type</key> - <value>complex</value> + <key>title</key> + <value>BER 1 (raw)</value> </param> <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> + <key>units</key> + <value>BER</value> </param> <param> - <key>dimension</key> - <value>1</value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>min_value</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>max_value</key> + <value>1</value> </param> <param> - <key>affinity</key> - <value></value> + <key>factor</key> + <value>1.0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>decimal_places</key> + <value>6</value> </param> <param> - <key>maxoutbuf</key> + <key>ref_level</key> <value>0</value> </param> <param> - <key>_coordinate</key> - <value>(418, 1000)</value> + <key>number_rate</key> + <value>15</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>peak_hold</key> + <value>False</value> </param> - </block> - <block> - <key>blocks_multiply_const_vxx</key> <param> - <key>id</key> - <value>blocks_multiply_const_vxx_2</value> + <key>average</key> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>avg_alpha</key> + <value>0.001</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>show_gauge</key> + <value>True</value> </param> <param> - <key>const</key> - <value>alpha**0.5</value> + <key>win_size</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>grid_pos</key> + <value>0,0,1,1</value> </param> <param> - <key>alias</key> + <key>notebook</key> <value></value> </param> <param> @@ -1050,16 +807,8 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(710, 1008)</value> + <value>(944, 556)</value> </param> <param> <key>_rotation</key> @@ -1067,10 +816,10 @@ </param> </block> <block> - <key>blocks_multiply_const_vxx</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>blocks_multiply_const_vxx_2_0</value> + <value>wxgui_numbersink2_2</value> </param> <param> <key>_enabled</key> @@ -1078,73 +827,70 @@ </param> <param> <key>type</key> - <value>complex</value> + <value>float</value> </param> <param> - <key>const</key> - <value>(1-alpha)**0.5</value> + <key>title</key> + <value>BER 2 (raw)</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>units</key> + <value>BER</value> </param> <param> - <key>alias</key> - <value></value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>affinity</key> - <value></value> + <key>min_value</key> + <value>0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>max_value</key> + <value>1.0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>factor</key> + <value>1.0</value> </param> <param> - <key>_coordinate</key> - <value>(733, 1374)</value> + <key>decimal_places</key> + <value>6</value> </param> <param> - <key>_rotation</key> + <key>ref_level</key> <value>0</value> </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0_0_1</value> + <key>number_rate</key> + <value>15</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>peak_hold</key> + <value>False</value> </param> <param> - <key>in_type</key> - <value>short</value> + <key>average</key> + <value>False</value> </param> <param> - <key>out_type</key> - <value>complex</value> + <key>avg_alpha</key> + <value>0.001</value> </param> <param> - <key>symbol_table</key> - <value>1,1j,-1j,-1</value> + <key>show_gauge</key> + <value>True</value> </param> <param> - <key>dimension</key> - <value>1</value> + <key>win_size</key> + <value></value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>grid_pos</key> + <value>0,1,1,1</value> </param> <param> - <key>alias</key> + <key>notebook</key> <value></value> </param> <param> @@ -1152,16 +898,8 @@ <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(420, 1366)</value> + <value>(944, 886)</value> </param> <param> <key>_rotation</key> @@ -1169,128 +907,101 @@ </param> </block> <block> - <key>variable_qtgui_range</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>alpha</value> + <value>wxgui_numbersink2_3</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>P1/P</value> + <key>type</key> + <value>float</value> </param> <param> - <key>value</key> - <value>0.6</value> + <key>title</key> + <value>BER 2 (after cancelling user 1)</value> </param> <param> - <key>start</key> - <value>0</value> + <key>units</key> + <value>BER</value> </param> <param> - <key>stop</key> - <value>1</value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>step</key> - <value>0.01</value> + <key>min_value</key> + <value>0</value> </param> <param> - <key>widget</key> - <value>counter_slider</value> + <key>max_value</key> + <value>1.0</value> </param> <param> - <key>orient</key> - <value>Qt.Horizontal</value> + <key>factor</key> + <value>1.0</value> </param> <param> - <key>min_len</key> - <value>200</value> + <key>decimal_places</key> + <value>6</value> </param> <param> - <key>gui_hint</key> - <value></value> + <key>ref_level</key> + <value>0</value> </param> <param> - <key>alias</key> - <value></value> + <key>number_rate</key> + <value>15</value> </param> <param> - <key>_coordinate</key> - <value>(177, 10)</value> + <key>peak_hold</key> + <value>False</value> </param> <param> - <key>_rotation</key> - <value>180</value> + <key>average</key> + <value>False</value> </param> - </block> - <block> - <key>variable_qtgui_range</key> <param> - <key>id</key> - <value>snr_db</value> + <key>avg_alpha</key> + <value>0.001</value> </param> <param> - <key>_enabled</key> + <key>show_gauge</key> <value>True</value> </param> <param> - <key>label</key> - <value>P/sigma^2 (dB)</value> - </param> - <param> - <key>value</key> - <value>16</value> - </param> - <param> - <key>start</key> - <value>0</value> - </param> - <param> - <key>stop</key> - <value>20</value> - </param> - <param> - <key>step</key> - <value>0.01</value> - </param> - <param> - <key>widget</key> - <value>counter_slider</value> - </param> - <param> - <key>orient</key> - <value>Qt.Horizontal</value> + <key>win_size</key> + <value></value> </param> <param> - <key>min_len</key> - <value>200</value> + <key>grid_pos</key> + <value>1,1,1,1</value> </param> <param> - <key>gui_hint</key> + <key>notebook</key> <value></value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> <key>_coordinate</key> - <value>(300, 10)</value> + <value>(945, 1351)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>blocks_add_xx</key> + <key>blocks_multiply_const_vxx</key> <param> <key>id</key> - <value>blocks_add_xx_1</value> + <value>blocks_multiply_const_vxx_1</value> </param> <param> <key>_enabled</key> @@ -1301,18 +1012,14 @@ <value>complex</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>const</key> + <value>(1-alpha)**0.5</value> </param> <param> <key>vlen</key> <value>1</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>affinity</key> <value></value> </param> @@ -1321,12 +1028,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(1400, 262)</value> + <value>(943, 402)</value> </param> <param> <key>_rotation</key> @@ -1334,10 +1037,10 @@ </param> </block> <block> - <key>qtgui_const_sink_x</key> + <key>blocks_multiply_const_vxx</key> <param> <key>id</key> - <value>qtgui_const_sink_x_0</value> + <value>blocks_multiply_const_vxx_0</value> </param> <param> <key>_enabled</key> @@ -1348,320 +1051,141 @@ <value>complex</value> </param> <param> - <key>name</key> - <value>Constellation</value> - </param> - <param> - <key>size</key> - <value>1024</value> - </param> - <param> - <key>grid</key> - <value>False</value> - </param> - <param> - <key>autoscale</key> - <value>False</value> - </param> - <param> - <key>ymin</key> - <value>-2</value> - </param> - <param> - <key>ymax</key> - <value>2</value> - </param> - <param> - <key>xmin</key> - <value>-2</value> - </param> - <param> - <key>xmax</key> - <value>2</value> + <key>const</key> + <value>alpha**0.5</value> </param> <param> - <key>nconnections</key> + <key>vlen</key> <value>1</value> </param> <param> - <key>update_time</key> - <value>0.10</value> - </param> - <param> - <key>gui_hint</key> + <key>affinity</key> <value></value> </param> <param> - <key>tr_mode</key> - <value>qtgui.TRIG_MODE_FREE</value> - </param> - <param> - <key>tr_slope</key> - <value>qtgui.TRIG_SLOPE_POS</value> - </param> - <param> - <key>tr_level</key> - <value>0.0</value> - </param> - <param> - <key>tr_chan</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>tr_tag</key> - <value>""</value> - </param> - <param> - <key>label1</key> - <value></value> - </param> - <param> - <key>width1</key> - <value>1</value> - </param> - <param> - <key>color1</key> - <value>"blue"</value> - </param> - <param> - <key>style1</key> - <value>0</value> + <key>_coordinate</key> + <value>(947, 301)</value> </param> <param> - <key>marker1</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>alpha1</key> - <value>1.0</value> - </param> - <param> - <key>label2</key> - <value></value> + <key>id</key> + <value>virtual_sink_0_0</value> </param> <param> - <key>width2</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>color2</key> - <value>"red"</value> + <key>stream_id</key> + <value>user2</value> </param> <param> - <key>style2</key> - <value>0</value> + <key>_coordinate</key> + <value>(208, 340)</value> </param> <param> - <key>marker2</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>analog_random_source_x</key> <param> - <key>alpha2</key> - <value>1.0</value> - </param> - <param> - <key>label3</key> - <value></value> - </param> - <param> - <key>width3</key> - <value>1</value> + <key>id</key> + <value>analog_random_source_x_1</value> </param> <param> - <key>color3</key> - <value>"red"</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>style3</key> - <value>0</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>marker3</key> + <key>min</key> <value>0</value> </param> <param> - <key>alpha3</key> - <value>1.0</value> - </param> - <param> - <key>label4</key> - <value></value> - </param> - <param> - <key>width4</key> - <value>1</value> - </param> - <param> - <key>color4</key> - <value>"red"</value> - </param> - <param> - <key>style4</key> - <value>0</value> + <key>max</key> + <value>2</value> </param> <param> - <key>marker4</key> - <value>0</value> + <key>num_samps</key> + <value>block</value> </param> <param> - <key>alpha4</key> - <value>1.0</value> + <key>repeat</key> + <value>True</value> </param> <param> - <key>label5</key> + <key>affinity</key> <value></value> </param> <param> - <key>width5</key> - <value>1</value> - </param> - <param> - <key>color5</key> - <value>"red"</value> - </param> - <param> - <key>style5</key> - <value>0</value> - </param> - <param> - <key>marker5</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>alpha5</key> - <value>1.0</value> - </param> - <param> - <key>label6</key> - <value></value> - </param> - <param> - <key>width6</key> - <value>1</value> - </param> - <param> - <key>color6</key> - <value>"red"</value> - </param> - <param> - <key>style6</key> - <value>0</value> + <key>_coordinate</key> + <value>(22, 374)</value> </param> <param> - <key>marker6</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>digital_chunks_to_symbols_xx</key> <param> - <key>alpha6</key> - <value>1.0</value> - </param> - <param> - <key>label7</key> - <value></value> - </param> - <param> - <key>width7</key> - <value>1</value> - </param> - <param> - <key>color7</key> - <value>"red"</value> + <key>id</key> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> - <key>style7</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>marker7</key> - <value>0</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>alpha7</key> - <value>1.0</value> + <key>out_type</key> + <value>complex</value> </param> <param> - <key>label8</key> - <value></value> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> </param> <param> - <key>width8</key> + <key>dimension</key> <value>1</value> </param> <param> - <key>color8</key> - <value>"red"</value> - </param> - <param> - <key>style8</key> - <value>0</value> - </param> - <param> - <key>marker8</key> - <value>0</value> - </param> - <param> - <key>alpha8</key> - <value>1.0</value> - </param> - <param> - <key>label9</key> - <value></value> - </param> - <param> - <key>width9</key> + <key>num_ports</key> <value>1</value> </param> <param> - <key>color9</key> - <value>"red"</value> - </param> - <param> - <key>style9</key> - <value>0</value> - </param> - <param> - <key>marker9</key> - <value>0</value> - </param> - <param> - <key>alpha9</key> - <value>1.0</value> - </param> - <param> - <key>label10</key> + <key>affinity</key> <value></value> </param> <param> - <key>width10</key> - <value>1</value> - </param> - <param> - <key>color10</key> - <value>"red"</value> - </param> - <param> - <key>style10</key> - <value>0</value> - </param> - <param> - <key>marker10</key> + <key>minoutbuf</key> <value>0</value> </param> <param> - <key>alpha10</key> - <value>1.0</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> <key>_coordinate</key> - <value>(0, 0)</value> + <value>(700, 294)</value> </param> <param> <key>_rotation</key> @@ -1669,26 +1193,26 @@ </param> </block> <block> - <key>blocks_short_to_float</key> + <key>blocks_throttle</key> <param> <key>id</key> - <value>blocks_short_to_float_0</value> + <value>blocks_throttle_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>scale</key> - <value>1</value> + <key>samples_per_second</key> + <value>R</value> </param> <param> - <key>alias</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> <param> <key>affinity</key> @@ -1699,12 +1223,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(1010, 1551)</value> + <value>(576, 226)</value> </param> <param> <key>_rotation</key> @@ -1712,226 +1232,194 @@ </param> </block> <block> - <key>qtgui_number_sink</key> + <key>analog_random_source_x</key> <param> <key>id</key> - <value>qtgui_number_sink_0</value> + <value>analog_random_source_x_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>name</key> - <value>""</value> - </param> - <param> <key>type</key> - <value>float</value> - </param> - <param> - <key>autoscale</key> - <value>False</value> - </param> - <param> - <key>avg</key> - <value>0.001</value> - </param> - <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> - </param> - <param> - <key>nconnections</key> - <value>1</value> + <value>byte</value> </param> <param> <key>min</key> - <value>-1</value> + <value>0</value> </param> <param> <key>max</key> - <value>1</value> - </param> - <param> - <key>update_time</key> - <value>0.10</value> + <value>2</value> </param> <param> - <key>gui_hint</key> - <value>0,0,1,1</value> + <key>num_samps</key> + <value>block</value> </param> <param> - <key>label1</key> - <value></value> + <key>repeat</key> + <value>True</value> </param> <param> - <key>unit1</key> + <key>affinity</key> <value></value> </param> <param> - <key>color1</key> - <value>("black", "black")</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>factor1</key> - <value>1</value> + <key>_coordinate</key> + <value>(18, 253)</value> </param> <param> - <key>label2</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>unit2</key> - <value></value> + <key>id</key> + <value>virtual_sink_0</value> </param> <param> - <key>color2</key> - <value>("black", "black")</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>factor2</key> - <value>1</value> + <key>stream_id</key> + <value>user1</value> </param> <param> - <key>label3</key> - <value></value> + <key>_coordinate</key> + <value>(208, 229)</value> </param> <param> - <key>unit3</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>digital_chunks_to_symbols_xx</key> <param> - <key>color3</key> - <value>("black", "black")</value> + <key>id</key> + <value>digital_chunks_to_symbols_xx_0_0</value> </param> <param> - <key>factor3</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>label4</key> - <value></value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>unit4</key> - <value></value> + <key>out_type</key> + <value>complex</value> </param> <param> - <key>color4</key> - <value>("black", "black")</value> + <key>symbol_table</key> + <value>1,1j,-1j,-1</value> </param> <param> - <key>factor4</key> + <key>dimension</key> <value>1</value> </param> <param> - <key>label5</key> - <value></value> - </param> - <param> - <key>unit5</key> - <value></value> - </param> - <param> - <key>color5</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor5</key> + <key>num_ports</key> <value>1</value> </param> <param> - <key>label6</key> + <key>affinity</key> <value></value> </param> <param> - <key>unit6</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>color6</key> - <value>("black", "black")</value> + <key>_coordinate</key> + <value>(700, 394)</value> </param> <param> - <key>factor6</key> - <value>1</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>blocks_add_xx</key> <param> - <key>label7</key> - <value></value> + <key>id</key> + <value>blocks_add_xx_1</value> </param> <param> - <key>unit7</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>color7</key> - <value>("black", "black")</value> + <key>type</key> + <value>complex</value> </param> <param> - <key>factor7</key> - <value>1</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>label8</key> - <value></value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>unit8</key> + <key>affinity</key> <value></value> </param> <param> - <key>color8</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor8</key> - <value>1</value> - </param> - <param> - <key>label9</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>unit9</key> - <value></value> + <key>_coordinate</key> + <value>(1400, 341)</value> </param> <param> - <key>color9</key> - <value>("black", "black")</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>blocks_add_xx</key> <param> - <key>factor9</key> - <value>1</value> + <key>id</key> + <value>blocks_add_xx_0</value> </param> <param> - <key>label10</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>unit10</key> - <value></value> + <key>type</key> + <value>complex</value> </param> <param> - <key>color10</key> - <value>("black", "black")</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>factor10</key> + <key>vlen</key> <value>1</value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(1257, 471)</value> + <value>(1224, 324)</value> </param> <param> <key>_rotation</key> @@ -1939,10 +1427,10 @@ </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>analog_noise_source_x</key> <param> <key>id</key> - <value>trellis_encoder_xx_1</value> + <value>analog_noise_source_x_0</value> </param> <param> <key>_enabled</key> @@ -1950,19 +1438,19 @@ </param> <param> <key>type</key> - <value>ss</value> + <value>complex</value> </param> <param> - <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>init_state</key> - <value>0</value> + <key>amp</key> + <value>noisevar</value> </param> <param> - <key>alias</key> - <value></value> + <key>seed</key> + <value>-42</value> </param> <param> <key>affinity</key> @@ -1973,12 +1461,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(336, 311)</value> + <value>(1178, 400)</value> </param> <param> <key>_rotation</key> @@ -1986,46 +1470,22 @@ </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>virtual_sink</key> <param> <key>id</key> - <value>trellis_encoder_xx_0</value> + <value>virtual_sink_0_1</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>ss</value> - </param> - <param> - <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> - </param> - <param> - <key>init_state</key> - <value>0</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>observation</value> </param> <param> <key>_coordinate</key> - <value>(340, 187)</value> + <value>(1407, 453)</value> </param> <param> <key>_rotation</key> @@ -2033,10 +1493,10 @@ </param> </block> <block> - <key>trellis_viterbi_combined_xx</key> + <key>wxgui_scopesink2</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_1</value> + <value>wxgui_scopesink2_0</value> </param> <param> <key>_enabled</key> @@ -2044,59 +1504,67 @@ </param> <param> <key>type</key> - <value>c</value> + <value>complex</value> </param> <param> - <key>out_type</key> - <value>s</value> + <key>title</key> + <value>Scope Plot</value> </param> <param> - <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>block_size</key> - <value>1000</value> + <key>v_scale</key> + <value>0</value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>v_offset</key> + <value>0</value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>t_scale</key> + <value>0</value> </param> <param> - <key>dim</key> - <value>1</value> + <key>ac_couple</key> + <value>False</value> </param> <param> - <key>table</key> - <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> + <key>xy_mode</key> + <value>True</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>num_inputs</key> + <value>1</value> </param> <param> - <key>alias</key> + <key>win_size</key> <value></value> </param> <param> - <key>affinity</key> + <key>grid_pos</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>notebook</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>trig_mode</key> + <value>wxgui.TRIG_MODE_AUTO</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(79, 501)</value> + <value>(1383, 208)</value> </param> <param> <key>_rotation</key> @@ -2107,7 +1575,7 @@ <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_2</value> + <value>trellis_viterbi_combined_xx_1</value> </param> <param> <key>_enabled</key> @@ -2119,15 +1587,15 @@ </param> <param> <key>out_type</key> - <value>s</value> + <value>b</value> </param> <param> <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> + <value>prefix+fsm1</value> </param> <param> <key>block_size</key> - <value>1000</value> + <value>block</value> </param> <param> <key>init_state</key> @@ -2143,17 +1611,13 @@ </param> <param> <key>table</key> - <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> + <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> </param> <param> <key>metric_type</key> <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>affinity</key> <value></value> </param> @@ -2162,12 +1626,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(82, 766)</value> + <value>(75, 583)</value> </param> <param> <key>_rotation</key> @@ -2178,7 +1638,7 @@ <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_0</value> + <value>trellis_viterbi_combined_xx_0_0</value> </param> <param> <key>_enabled</key> @@ -2190,15 +1650,15 @@ </param> <param> <key>out_type</key> - <value>s</value> + <value>b</value> </param> <param> <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> + <value>prefix+fsm1</value> </param> <param> <key>block_size</key> - <value>1000</value> + <value>block</value> </param> <param> <key>init_state</key> @@ -2214,17 +1674,13 @@ </param> <param> <key>table</key> - <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> + <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> </param> <param> <key>metric_type</key> <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>alias</key> - <value></value> - </param> - <param> <key>affinity</key> <value></value> </param> @@ -2233,12 +1689,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(83, 1111)</value> + <value>(63, 1848)</value> </param> <param> <key>_rotation</key> @@ -2246,10 +1698,10 @@ </param> </block> <block> - <key>trellis_viterbi_combined_xx</key> + <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_0_0</value> + <value>trellis_encoder_xx_0</value> </param> <param> <key>_enabled</key> @@ -2257,43 +1709,15 @@ </param> <param> <key>type</key> - <value>c</value> - </param> - <param> - <key>out_type</key> - <value>s</value> + <value>bb</value> </param> <param> <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> - </param> - <param> - <key>block_size</key> - <value>1000</value> + <value>prefix+fsm1</value> </param> <param> <key>init_state</key> - <value>-1</value> - </param> - <param> - <key>final_state</key> - <value>-1</value> - </param> - <param> - <key>dim</key> - <value>1</value> - </param> - <param> - <key>table</key> - <value>alpha**0.5*1,alpha**0.5*1j,alpha**0.5*(-1j),alpha**0.5*(-1)</value> - </param> - <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> - </param> - <param> - <key>alias</key> - <value></value> + <value>0</value> </param> <param> <key>affinity</key> @@ -2304,12 +1728,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(75, 1495)</value> + <value>(337, 270)</value> </param> <param> <key>_rotation</key> @@ -2317,10 +1737,10 @@ </param> </block> <block> - <key>blocks_multiply_xx</key> + <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>blocks_multiply_xx_2_0</value> + <value>trellis_encoder_xx_2</value> </param> <param> <key>_enabled</key> @@ -2328,19 +1748,15 @@ </param> <param> <key>type</key> - <value>short</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> + <value>bb</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>fsm_args</key> + <value>prefix+fsm1</value> </param> <param> - <key>alias</key> - <value></value> + <key>init_state</key> + <value>0</value> </param> <param> <key>affinity</key> @@ -2351,12 +1767,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(771, 1530)</value> + <value>(87, 1251)</value> </param> <param> <key>_rotation</key> @@ -2364,26 +1776,26 @@ </param> </block> <block> - <key>blocks_short_to_float</key> + <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>blocks_short_to_float_1</value> + <value>trellis_encoder_xx_1</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>type</key> + <value>bb</value> </param> <param> - <key>scale</key> - <value>1</value> + <key>fsm_args</key> + <value>prefix+fsm2</value> </param> <param> - <key>alias</key> - <value></value> + <key>init_state</key> + <value>0</value> </param> <param> <key>affinity</key> @@ -2394,12 +1806,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(985, 1608)</value> + <value>(376, 381)</value> </param> <param> <key>_rotation</key> @@ -2407,226 +1815,62 @@ </param> </block> <block> - <key>qtgui_number_sink</key> + <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>qtgui_number_sink_0_0_0_0</value> + <value>trellis_viterbi_combined_xx_2</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>name</key> - <value>""</value> - </param> - <param> <key>type</key> - <value>float</value> - </param> - <param> - <key>autoscale</key> - <value>False</value> + <value>c</value> </param> <param> - <key>avg</key> - <value>0.001</value> + <key>out_type</key> + <value>b</value> </param> <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> + <key>fsm_args</key> + <value>prefix+fsm2</value> </param> <param> - <key>nconnections</key> - <value>1</value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>min</key> + <key>init_state</key> <value>-1</value> </param> <param> - <key>max</key> - <value>1</value> - </param> - <param> - <key>update_time</key> - <value>0.10</value> - </param> - <param> - <key>gui_hint</key> - <value>1,0,1,1</value> - </param> - <param> - <key>label1</key> - <value>BER 2 (raw)</value> - </param> - <param> - <key>unit1</key> - <value></value> - </param> - <param> - <key>color1</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor1</key> - <value>1</value> - </param> - <param> - <key>label2</key> - <value></value> - </param> - <param> - <key>unit2</key> - <value></value> - </param> - <param> - <key>color2</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor2</key> - <value>1</value> - </param> - <param> - <key>label3</key> - <value></value> - </param> - <param> - <key>unit3</key> - <value></value> - </param> - <param> - <key>color3</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor3</key> - <value>1</value> - </param> - <param> - <key>label4</key> - <value></value> - </param> - <param> - <key>unit4</key> - <value></value> - </param> - <param> - <key>color4</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor4</key> - <value>1</value> - </param> - <param> - <key>label5</key> - <value></value> - </param> - <param> - <key>unit5</key> - <value></value> - </param> - <param> - <key>color5</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor5</key> - <value>1</value> - </param> - <param> - <key>label6</key> - <value></value> - </param> - <param> - <key>unit6</key> - <value></value> - </param> - <param> - <key>color6</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor6</key> - <value>1</value> - </param> - <param> - <key>label7</key> - <value></value> - </param> - <param> - <key>unit7</key> - <value></value> - </param> - <param> - <key>color7</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor7</key> - <value>1</value> - </param> - <param> - <key>label8</key> - <value></value> - </param> - <param> - <key>unit8</key> - <value></value> - </param> - <param> - <key>color8</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor8</key> - <value>1</value> - </param> - <param> - <key>label9</key> - <value></value> - </param> - <param> - <key>unit9</key> - <value></value> - </param> - <param> - <key>color9</key> - <value>("black", "black")</value> + <key>final_state</key> + <value>-1</value> </param> <param> - <key>factor9</key> + <key>dim</key> <value>1</value> </param> <param> - <key>label10</key> - <value></value> - </param> - <param> - <key>unit10</key> - <value></value> - </param> - <param> - <key>color10</key> - <value>("black", "black")</value> + <key>table</key> + <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> </param> <param> - <key>factor10</key> - <value>1</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(1272, 1551)</value> + <value>(85, 931)</value> </param> <param> <key>_rotation</key> @@ -2634,10 +1878,10 @@ </param> </block> <block> - <key>blocks_multiply_xx</key> + <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>blocks_multiply_xx_1</value> + <value>trellis_viterbi_combined_xx_0</value> </param> <param> <key>_enabled</key> @@ -2645,62 +1889,39 @@ </param> <param> <key>type</key> - <value>short</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> + <value>c</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>out_type</key> + <value>b</value> </param> <param> - <key>_coordinate</key> - <value>(785, 779)</value> + <key>fsm_args</key> + <value>prefix+fsm2</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>block_size</key> + <value>block</value> </param> - </block> - <block> - <key>blocks_short_to_float</key> <param> - <key>id</key> - <value>blocks_short_to_float_2</value> + <key>init_state</key> + <value>-1</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>final_state</key> + <value>-1</value> </param> <param> - <key>vlen</key> + <key>dim</key> <value>1</value> </param> <param> - <key>scale</key> - <value>1</value> + <key>table</key> + <value>(1-alpha)**0.5*1,(1-alpha)**0.5*1j,(1-alpha)**0.5*(-1j),(1-alpha)**0.5*(-1)</value> </param> <param> - <key>alias</key> - <value></value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> <key>affinity</key> @@ -2711,12 +1932,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(1013, 735)</value> + <value>(81, 1362)</value> </param> <param> <key>_rotation</key> @@ -2724,10 +1941,10 @@ </param> </block> <block> - <key>blocks_multiply_xx</key> + <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>blocks_multiply_xx_2</value> + <value>trellis_encoder_xx_2_0</value> </param> <param> <key>_enabled</key> @@ -2735,63 +1952,16 @@ </param> <param> <key>type</key> - <value>short</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <value>bb</value> </param> <param> - <key>_coordinate</key> - <value>(796, 1136)</value> + <key>fsm_args</key> + <value>prefix+fsm2</value> </param> <param> - <key>_rotation</key> + <key>init_state</key> <value>0</value> </param> - </block> - <block> - <key>blocks_short_to_float</key> - <param> - <key>id</key> - <value>blocks_short_to_float_3</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>scale</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> <param> <key>affinity</key> <value></value> @@ -2801,12 +1971,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(1002, 1149)</value> + <value>(91, 1719)</value> </param> <param> <key>_rotation</key> @@ -2814,226 +1980,200 @@ </param> </block> <block> - <key>qtgui_number_sink</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>qtgui_number_sink_0_0</value> + <value>wxgui_numbersink2_3_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>name</key> - <value>""</value> - </param> - <param> <key>type</key> <value>float</value> </param> <param> - <key>autoscale</key> - <value>False</value> - </param> - <param> - <key>avg</key> - <value>0.001</value> - </param> - <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> - </param> - <param> - <key>nconnections</key> - <value>1</value> - </param> - <param> - <key>min</key> - <value>-1</value> + <key>title</key> + <value>BER 1 (after cancelling user 2)</value> </param> <param> - <key>max</key> - <value>1</value> + <key>units</key> + <value>BER</value> </param> <param> - <key>update_time</key> - <value>0.10</value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>gui_hint</key> - <value>0,1,1,1</value> + <key>min_value</key> + <value>0</value> </param> <param> - <key>label1</key> - <value>BER 2 (raw)</value> + <key>max_value</key> + <value>1.0</value> </param> <param> - <key>unit1</key> - <value></value> + <key>factor</key> + <value>1.0</value> </param> <param> - <key>color1</key> - <value>("black", "black")</value> + <key>decimal_places</key> + <value>6</value> </param> <param> - <key>factor1</key> - <value>1</value> + <key>ref_level</key> + <value>0</value> </param> <param> - <key>label2</key> - <value></value> + <key>number_rate</key> + <value>15</value> </param> <param> - <key>unit2</key> - <value></value> + <key>peak_hold</key> + <value>False</value> </param> <param> - <key>color2</key> - <value>("black", "black")</value> + <key>average</key> + <value>False</value> </param> <param> - <key>factor2</key> - <value>1</value> + <key>avg_alpha</key> + <value>0.001</value> </param> <param> - <key>label3</key> - <value></value> + <key>show_gauge</key> + <value>True</value> </param> <param> - <key>unit3</key> + <key>win_size</key> <value></value> </param> <param> - <key>color3</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor3</key> - <value>1</value> + <key>grid_pos</key> + <value>1,0,1,1</value> </param> <param> - <key>label4</key> + <key>notebook</key> <value></value> </param> <param> - <key>unit4</key> + <key>affinity</key> <value></value> </param> <param> - <key>color4</key> - <value>("black", "black")</value> + <key>_coordinate</key> + <value>(929, 1816)</value> </param> <param> - <key>factor4</key> - <value>1</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable_slider</key> <param> - <key>label5</key> - <value></value> + <key>id</key> + <value>alpha</value> </param> <param> - <key>unit5</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>color5</key> - <value>("black", "black")</value> + <key>label</key> + <value>P1/P</value> </param> <param> - <key>factor5</key> - <value>1</value> + <key>value</key> + <value>0.1</value> </param> <param> - <key>label6</key> - <value></value> + <key>min</key> + <value>0</value> </param> <param> - <key>unit6</key> - <value></value> + <key>max</key> + <value>1.0</value> </param> <param> - <key>color6</key> - <value>("black", "black")</value> + <key>num_steps</key> + <value>100</value> </param> <param> - <key>factor6</key> - <value>1</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>label7</key> - <value></value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>unit7</key> + <key>grid_pos</key> <value></value> </param> <param> - <key>color7</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor7</key> - <value>1</value> - </param> - <param> - <key>label8</key> + <key>notebook</key> <value></value> </param> <param> - <key>unit8</key> - <value></value> + <key>_coordinate</key> + <value>(243, 11)</value> </param> <param> - <key>color8</key> - <value>("black", "black")</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable_slider</key> <param> - <key>factor8</key> - <value>1</value> + <key>id</key> + <value>snr_db</value> </param> <param> - <key>label9</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>unit9</key> - <value></value> + <key>label</key> + <value>P/sigma^2 (dB)</value> </param> <param> - <key>color9</key> - <value>("black", "black")</value> + <key>value</key> + <value>10</value> </param> <param> - <key>factor9</key> - <value>1</value> + <key>min</key> + <value>0</value> </param> <param> - <key>label10</key> - <value></value> + <key>max</key> + <value>20</value> </param> <param> - <key>unit10</key> - <value></value> + <key>num_steps</key> + <value>100</value> </param> <param> - <key>color10</key> - <value>("black", "black")</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>factor10</key> - <value>1</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>alias</key> + <key>grid_pos</key> <value></value> </param> <param> - <key>affinity</key> + <key>notebook</key> <value></value> </param> <param> <key>_coordinate</key> - <value>(1223, 1133)</value> + <value>(447, 14)</value> </param> <param> <key>_rotation</key> @@ -3041,10 +2181,10 @@ </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>blks2_error_rate</key> <param> <key>id</key> - <value>trellis_encoder_xx_2_0</value> + <value>blks2_error_rate_0</value> </param> <param> <key>_enabled</key> @@ -3052,19 +2192,15 @@ </param> <param> <key>type</key> - <value>ss</value> + <value>'BER'</value> </param> <param> - <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> + <key>win_size</key> + <value>block*100</value> </param> <param> - <key>init_state</key> - <value>0</value> - </param> - <param> - <key>alias</key> - <value></value> + <key>bits_per_symbol</key> + <value>2</value> </param> <param> <key>affinity</key> @@ -3075,12 +2211,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(103, 1366)</value> + <value>(724, 613)</value> </param> <param> <key>_rotation</key> @@ -3088,10 +2220,10 @@ </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>blks2_error_rate</key> <param> <key>id</key> - <value>trellis_encoder_xx_2</value> + <value>blks2_error_rate_0_0</value> </param> <param> <key>_enabled</key> @@ -3099,19 +2231,15 @@ </param> <param> <key>type</key> - <value>ss</value> + <value>'BER'</value> </param> <param> - <key>fsm_args</key> - <value>prefix+"/awgn1o2_16.fsm"</value> - </param> - <param> - <key>init_state</key> - <value>0</value> + <key>win_size</key> + <value>block*100</value> </param> <param> - <key>alias</key> - <value></value> + <key>bits_per_symbol</key> + <value>2</value> </param> <param> <key>affinity</key> @@ -3122,12 +2250,8 @@ <value>0</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(89, 1000)</value> + <value>(719, 943)</value> </param> <param> <key>_rotation</key> @@ -3135,226 +2259,77 @@ </param> </block> <block> - <key>qtgui_number_sink</key> + <key>blks2_error_rate</key> <param> <key>id</key> - <value>qtgui_number_sink_0_0_0</value> + <value>blks2_error_rate_0_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>name</key> - <value>""</value> - </param> - <param> <key>type</key> - <value>float</value> - </param> - <param> - <key>autoscale</key> - <value>False</value> - </param> - <param> - <key>avg</key> - <value>0.001</value> - </param> - <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> - </param> - <param> - <key>nconnections</key> - <value>1</value> - </param> - <param> - <key>min</key> - <value>-1</value> - </param> - <param> - <key>max</key> - <value>1</value> - </param> - <param> - <key>update_time</key> - <value>0.10</value> - </param> - <param> - <key>gui_hint</key> - <value>1,1,1,1</value> - </param> - <param> - <key>label1</key> - <value></value> - </param> - <param> - <key>unit1</key> - <value></value> - </param> - <param> - <key>color1</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor1</key> - <value>1</value> - </param> - <param> - <key>label2</key> - <value></value> - </param> - <param> - <key>unit2</key> - <value></value> - </param> - <param> - <key>color2</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor2</key> - <value>1</value> - </param> - <param> - <key>label3</key> - <value></value> - </param> - <param> - <key>unit3</key> - <value></value> - </param> - <param> - <key>color3</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor3</key> - <value>1</value> - </param> - <param> - <key>label4</key> - <value></value> - </param> - <param> - <key>unit4</key> - <value></value> - </param> - <param> - <key>color4</key> - <value>("black", "black")</value> + <value>'BER'</value> </param> <param> - <key>factor4</key> - <value>1</value> - </param> - <param> - <key>label5</key> - <value></value> - </param> - <param> - <key>unit5</key> - <value></value> - </param> - <param> - <key>color5</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor5</key> - <value>1</value> - </param> - <param> - <key>label6</key> - <value></value> - </param> - <param> - <key>unit6</key> - <value></value> - </param> - <param> - <key>color6</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor6</key> - <value>1</value> - </param> - <param> - <key>label7</key> - <value></value> - </param> - <param> - <key>unit7</key> - <value></value> - </param> - <param> - <key>color7</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor7</key> - <value>1</value> + <key>win_size</key> + <value>block*100</value> </param> <param> - <key>label8</key> - <value></value> + <key>bits_per_symbol</key> + <value>2</value> </param> <param> - <key>unit8</key> + <key>affinity</key> <value></value> </param> <param> - <key>color8</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor8</key> - <value>1</value> - </param> - <param> - <key>label9</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>unit9</key> - <value></value> + <key>_coordinate</key> + <value>(725, 1399)</value> </param> <param> - <key>color9</key> - <value>("black", "black")</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>factor9</key> - <value>1</value> + <key>id</key> + <value>blks2_error_rate_0_0_0_0</value> </param> <param> - <key>label10</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>unit10</key> - <value></value> + <key>type</key> + <value>'BER'</value> </param> <param> - <key>color10</key> - <value>("black", "black")</value> + <key>win_size</key> + <value>block*100</value> </param> <param> - <key>factor10</key> - <value>1</value> + <key>bits_per_symbol</key> + <value>2</value> </param> <param> - <key>alias</key> + <key>affinity</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>minoutbuf</key> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(1266, 720)</value> + <value>(724, 1880)</value> </param> <param> <key>_rotation</key> @@ -3362,218 +2337,194 @@ </param> </block> <connection> - <source_block_id>analog_random_source_x_1</source_block_id> - <sink_block_id>trellis_encoder_xx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_multiply_const_vxx_0</source_block_id> - <sink_block_id>blocks_add_xx_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>wxgui_scopesink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_const_vxx_1</source_block_id> - <sink_block_id>blocks_add_xx_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_0</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_0</sink_block_id> + <source_block_id>blks2_error_rate_0_0_0_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_xx_0</source_block_id> - <sink_block_id>blocks_short_to_float_0</sink_block_id> + <source_block_id>virtual_source_0_2_0</source_block_id> + <sink_block_id>trellis_encoder_xx_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>trellis_encoder_xx_0</sink_block_id> + <source_block_id>virtual_source_0_1_2</source_block_id> + <sink_block_id>blocks_sub_xx_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>trellis_encoder_xx_2_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_1</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id> + <sink_block_id>blocks_sub_xx_2_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> - <sink_block_id>blocks_sub_xx_1</sink_block_id> + <source_block_id>blocks_sub_xx_2_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_1</source_block_id> - <sink_block_id>blocks_sub_xx_1</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_1</source_block_id> - <sink_block_id>blocks_multiply_xx_2</sink_block_id> + <source_block_id>virtual_source_0_4</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_1</source_block_id> - <sink_block_id>blocks_multiply_xx_2</sink_block_id> + <source_block_id>blks2_error_rate_0_0_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_2</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> + <source_block_id>virtual_source_0_2</source_block_id> + <sink_block_id>trellis_encoder_xx_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> + <source_block_id>virtual_source_0_1_1</source_block_id> <sink_block_id>blocks_sub_xx_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_const_vxx_2</source_block_id> - <sink_block_id>blocks_sub_xx_2</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_1</source_block_id> - <sink_block_id>trellis_encoder_xx_2</sink_block_id> + <source_block_id>trellis_encoder_xx_2</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> - <sink_block_id>blocks_sub_xx_3</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_2</source_block_id> + <sink_block_id>blocks_sub_xx_2</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_3</source_block_id> - <sink_block_id>blocks_multiply_xx_1</sink_block_id> + <source_block_id>blocks_sub_xx_2</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_3</source_block_id> - <sink_block_id>blocks_multiply_xx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>analog_random_source_x_1</source_block_id> - <sink_block_id>blocks_sub_xx_3</sink_block_id> + <source_block_id>blks2_error_rate_0_0</source_block_id> + <sink_block_id>wxgui_numbersink2_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> - <sink_block_id>trellis_encoder_xx_2_0</sink_block_id> + <source_block_id>virtual_source_0_3</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0_0</source_block_id> - <sink_block_id>blocks_sub_xx_1_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_1_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_2</source_block_id> + <sink_block_id>virtual_sink_0_2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_1_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_sub_xx_2_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0_0</sink_block_id> + <source_block_id>virtual_source_0_1_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>blocks_sub_xx_2_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>wxgui_numbersink2_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_1_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_const_vxx_2_0</source_block_id> - <sink_block_id>blocks_sub_xx_2_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_1</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>trellis_encoder_xx_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_1</source_block_id> + <sink_block_id>virtual_sink_0_2</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>virtual_source_0_1</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id> + <source_block_id>analog_random_source_x_1</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> @@ -3584,80 +2535,62 @@ <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_encoder_xx_2</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0_0_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>digital_chunks_to_symbols_xx_0_0_0</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_2</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>trellis_encoder_xx_2_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0_0_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>digital_chunks_to_symbols_xx_0_0_1</source_block_id> - <sink_block_id>blocks_multiply_const_vxx_2_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>qtgui_const_sink_x_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_multiply_const_vxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_2</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_short_to_float_0</source_block_id> - <sink_block_id>qtgui_number_sink_0</sink_block_id> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_xx_2_0</source_block_id> - <sink_block_id>blocks_short_to_float_1</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>trellis_encoder_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_short_to_float_1</source_block_id> - <sink_block_id>qtgui_number_sink_0_0_0_0</sink_block_id> + <source_block_id>analog_random_source_x_1</source_block_id> + <sink_block_id>trellis_encoder_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_xx_1</source_block_id> - <sink_block_id>blocks_short_to_float_2</sink_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_short_to_float_2</source_block_id> - <sink_block_id>qtgui_number_sink_0_0_0</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_1</source_block_id> + <sink_block_id>blocks_add_xx_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_xx_2</source_block_id> - <sink_block_id>blocks_short_to_float_3</sink_block_id> + <source_block_id>blocks_add_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_short_to_float_3</source_block_id> - <sink_block_id>qtgui_number_sink_0_0</sink_block_id> + <source_block_id>blocks_multiply_const_vxx_0</source_block_id> + <sink_block_id>blocks_add_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc index c642a71940..9d966031cf 100644 --- a/gr-trellis/examples/grc/pccc.grc +++ b/gr-trellis/examples/grc/pccc.grc @@ -1,6 +1,7 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> - <timestamp>Mon Jul 28 14:02:43 2014</timestamp> + <timestamp>Fri Sep 26 12:26:16 2014</timestamp> <block> <key>options</key> <param> @@ -29,7 +30,7 @@ </param> <param> <key>generate_options</key> - <value>qt_gui</value> + <value>wx_gui</value> </param> <param> <key>category</key> @@ -68,7 +69,7 @@ <key>variable</key> <param> <key>id</key> - <value>prefix</value> + <value>fsm2</value> </param> <param> <key>_enabled</key> @@ -76,7 +77,7 @@ </param> <param> <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> + <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value> </param> <param> <key>alias</key> @@ -84,7 +85,7 @@ </param> <param> <key>_coordinate</key> - <value>(520, 11)</value> + <value>(320, 149)</value> </param> <param> <key>_rotation</key> @@ -95,7 +96,7 @@ <key>variable</key> <param> <key>id</key> - <value>noisevar</value> + <value>fsm1</value> </param> <param> <key>_enabled</key> @@ -103,7 +104,7 @@ </param> <param> <key>value</key> - <value>10**(-snr_db/10)</value> + <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value> </param> <param> <key>alias</key> @@ -111,7 +112,7 @@ </param> <param> <key>_coordinate</key> - <value>(279, 10)</value> + <value>(320, 85)</value> </param> <param> <key>_rotation</key> @@ -122,7 +123,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>prefix</value> </param> <param> <key>_enabled</key> @@ -130,7 +131,7 @@ </param> <param> <key>value</key> - <value>100e3</value> + <value>"@FSM_FILE_INSTALL_DIR@"</value> </param> <param> <key>alias</key> @@ -138,7 +139,7 @@ </param> <param> <key>_coordinate</key> - <value>(358, 10)</value> + <value>(320, 21)</value> </param> <param> <key>_rotation</key> @@ -149,7 +150,7 @@ <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>interleaver</value> </param> <param> <key>_enabled</key> @@ -157,7 +158,7 @@ </param> <param> <key>value</key> - <value>1000</value> + <value>trellis.interleaver(block,666)</value> </param> <param> <key>alias</key> @@ -165,7 +166,7 @@ </param> <param> <key>_coordinate</key> - <value>(438, 10)</value> + <value>(320, 213)</value> </param> <param> <key>_rotation</key> @@ -173,54 +174,80 @@ </param> </block> <block> - <key>analog_random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>analog_random_source_x_0</value> + <value>Es</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> + <key>value</key> + <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value> </param> <param> - <key>min</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> - <key>max</key> - <value>2</value> + <key>_coordinate</key> + <value>(776, 141)</value> </param> <param> - <key>num_samps</key> - <value>1000</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>repeat</key> + <key>id</key> + <value>block</value> + </param> + <param> + <key>_enabled</key> <value>True</value> </param> <param> + <key>value</key> + <value>1000</value> + </param> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_coordinate</key> + <value>(200, 37)</value> </param> <param> - <key>minoutbuf</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>R</value> + </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>10e3</value> + </param> + <param> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(21, 170)</value> + <value>(200, 101)</value> </param> <param> <key>_rotation</key> @@ -228,50 +255,53 @@ </param> </block> <block> - <key>blocks_throttle</key> + <key>variable</key> <param> <key>id</key> - <value>blocks_throttle_0</value> + <value>noisevar</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> + <key>value</key> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>alias</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>_coordinate</key> + <value>(1032, 149)</value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>constellation</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>value</key> + <value>-3,-3,-1,-3,1,-3,3,-3, -3,-1,-1,-1,1,-1,3,-1, -3,1,-1,1,1,1,3,1, -3,3,-1,3,1,3,3,3 </value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(559, 104)</value> + <value>(528, 189)</value> </param> <param> <key>_rotation</key> @@ -279,113 +309,167 @@ </param> </block> <block> - <key>variable_qtgui_range</key> + <key>variable</key> <param> <key>id</key> - <value>snr_db</value> + <value>dim</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>SNR (dB)</value> + <key>value</key> + <value>2</value> </param> <param> - <key>value</key> - <value>5</value> + <key>alias</key> + <value></value> </param> <param> - <key>start</key> - <value>-10</value> + <key>_coordinate</key> + <value>(688, 189)</value> </param> <param> - <key>stop</key> - <value>10</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>step</key> - <value>0.01</value> + <key>id</key> + <value>virtual_source_0_0</value> </param> <param> - <key>widget</key> - <value>counter_slider</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>orient</key> - <value>Qt.Horizontal</value> + <key>stream_id</key> + <value>info</value> </param> <param> - <key>min_len</key> - <value>200</value> + <key>_coordinate</key> + <value>(104, 1220)</value> </param> <param> - <key>gui_hint</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>virtual_source_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate</value> </param> <param> <key>_coordinate</key> - <value>(177, 10)</value> + <value>(88, 1292)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>wxgui_numbersink2_3_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> + <key>type</key> + <value>float</value> </param> <param> - <key>out_type</key> - <value>complex</value> + <key>title</key> + <value>BER</value> </param> <param> - <key>symbol_table</key> - <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0</value> + <key>units</key> + <value>BER</value> </param> <param> - <key>dimension</key> - <value>2</value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>min_value</key> + <value>0</value> </param> <param> - <key>alias</key> + <key>max_value</key> + <value>1.0</value> + </param> + <param> + <key>factor</key> + <value>1.0</value> + </param> + <param> + <key>decimal_places</key> + <value>6</value> + </param> + <param> + <key>ref_level</key> + <value>0</value> + </param> + <param> + <key>number_rate</key> + <value>15</value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>False</value> + </param> + <param> + <key>avg_alpha</key> + <value>0.001</value> + </param> + <param> + <key>show_gauge</key> + <value>False</value> + </param> + <param> + <key>win_size</key> <value></value> </param> <param> - <key>affinity</key> + <key>grid_pos</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>notebook</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(559, 180)</value> + <value>(680, 1205)</value> </param> <param> <key>_rotation</key> @@ -393,10 +477,10 @@ </param> </block> <block> - <key>trellis_pccc_encoder_xx</key> + <key>blks2_error_rate</key> <param> <key>id</key> - <value>trellis_pccc_encoder_xx_0</value> + <value>blks2_error_rate_0</value> </param> <param> <key>_enabled</key> @@ -404,31 +488,15 @@ </param> <param> <key>type</key> - <value>ss</value> - </param> - <param> - <key>o_fsm_args</key> - <value>prefix + "/awgn1o2_4.fsm"</value> - </param> - <param> - <key>o_init_state</key> - <value>0</value> + <value>'SER'</value> </param> <param> - <key>i_fsm_args</key> - <value>prefix + "/awgn1o2_4.fsm"</value> - </param> - <param> - <key>i_init_state</key> - <value>0</value> - </param> - <param> - <key>interleaver_args</key> - <value>trellis.interleaver(block,666)</value> + <key>win_size</key> + <value>block*100</value> </param> <param> - <key>bl</key> - <value>block</value> + <key>bits_per_symbol</key> + <value>1</value> </param> <param> <key>alias</key> @@ -448,7 +516,7 @@ </param> <param> <key>_coordinate</key> - <value>(234, 154)</value> + <value>(304, 1256)</value> </param> <param> <key>_rotation</key> @@ -456,109 +524,138 @@ </param> </block> <block> - <key>trellis_pccc_decoder_combined_xx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>trellis_pccc_decoder_combined_xx_0</value> + <value>EsN0_dB</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>c</value> + <key>label</key> + <value>EsN0 (dB)</value> </param> <param> - <key>out_type</key> - <value>s</value> + <key>value</key> + <value>2</value> </param> <param> - <key>o_fsm_args</key> - <value>prefix + "/awgn1o2_4.fsm"</value> + <key>min</key> + <value>-10</value> </param> <param> - <key>o_init_state</key> - <value>0</value> + <key>max</key> + <value>10</value> </param> <param> - <key>o_final_state</key> - <value>-1</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>i_fsm_args</key> - <value>prefix + "/awgn1o2_4.fsm"</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>i_init_state</key> - <value>0</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>i_final_state</key> - <value>-1</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>interleaver</key> - <value>trellis.interleaver(block,666)</value> + <key>notebook</key> + <value></value> </param> <param> - <key>block_size</key> - <value>block</value> + <key>alias</key> + <value></value> </param> <param> - <key>iterations</key> - <value>10</value> + <key>_coordinate</key> + <value>(896, 129)</value> </param> <param> - <key>dim</key> - <value>2</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>table</key> - <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0</value> + <key>id</key> + <value>virtual_sink_0_1</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>siso_type</key> - <value>trellis.TRELLIS_MIN_SUM</value> + <key>stream_id</key> + <value>estimate</value> </param> <param> - <key>scaling</key> - <value>1.0</value> + <key>_coordinate</key> + <value>(768, 940)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> + <key>stream_id</key> + <value>observation</value> + </param> + <param> + <key>_coordinate</key> + <value>(104, 940)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> <param> <key>_coordinate</key> - <value>(234, 299)</value> + <value>(224, 412)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>blocks_multiply_xx</key> + <key>analog_random_source_x</key> <param> <key>id</key> - <value>blocks_multiply_xx_2_0</value> + <value>analog_random_source_x_0_0</value> </param> <param> <key>_enabled</key> @@ -566,15 +663,23 @@ </param> <param> <key>type</key> - <value>short</value> + <value>byte</value> </param> <param> - <key>num_inputs</key> + <key>min</key> + <value>0</value> + </param> + <param> + <key>max</key> <value>2</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>num_samps</key> + <value>1007</value> + </param> + <param> + <key>repeat</key> + <value>True</value> </param> <param> <key>alias</key> @@ -594,7 +699,7 @@ </param> <param> <key>_coordinate</key> - <value>(421, 574)</value> + <value>(8, 471)</value> </param> <param> <key>_rotation</key> @@ -602,10 +707,10 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>blocks_throttle</key> <param> <key>id</key> - <value>blocks_sub_xx_0</value> + <value>blocks_throttle_0_0</value> </param> <param> <key>_enabled</key> @@ -613,15 +718,19 @@ </param> <param> <key>type</key> - <value>short</value> + <value>byte</value> + </param> + <param> + <key>samples_per_second</key> + <value>R</value> </param> <param> <key>vlen</key> <value>1</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>ignoretag</key> + <value>True</value> </param> <param> <key>alias</key> @@ -641,7 +750,7 @@ </param> <param> <key>_coordinate</key> - <value>(246, 580)</value> + <value>(208, 492)</value> </param> <param> <key>_rotation</key> @@ -649,21 +758,33 @@ </param> </block> <block> - <key>blocks_short_to_float</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>blocks_short_to_float_1_0</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>in_type</key> + <value>byte</value> + </param> + <param> + <key>out_type</key> + <value>float</value> + </param> + <param> + <key>symbol_table</key> + <value>constellation</value> </param> <param> - <key>scale</key> + <key>dimension</key> + <value>2</value> + </param> + <param> + <key>num_ports</key> <value>1</value> </param> <param> @@ -684,7 +805,7 @@ </param> <param> <key>_coordinate</key> - <value>(564, 592)</value> + <value>(632, 485)</value> </param> <param> <key>_rotation</key> @@ -703,7 +824,7 @@ </param> <param> <key>type</key> - <value>complex</value> + <value>float</value> </param> <param> <key>noise_type</key> @@ -711,7 +832,7 @@ </param> <param> <key>amp</key> - <value>noisevar</value> + <value>noisevar**0.5</value> </param> <param> <key>seed</key> @@ -735,7 +856,7 @@ </param> <param> <key>_coordinate</key> - <value>(520, 309)</value> + <value>(656, 646)</value> </param> <param> <key>_rotation</key> @@ -754,7 +875,7 @@ </param> <param> <key>type</key> - <value>complex</value> + <value>float</value> </param> <param> <key>num_inputs</key> @@ -782,7 +903,7 @@ </param> <param> <key>_coordinate</key> - <value>(816, 192)</value> + <value>(880, 552)</value> </param> <param> <key>_rotation</key> @@ -790,226 +911,211 @@ </param> </block> <block> - <key>qtgui_number_sink</key> + <key>virtual_sink</key> <param> <key>id</key> - <value>qtgui_number_sink_0</value> + <value>virtual_sink_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>name</key> - <value>""</value> - </param> - <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>autoscale</key> - <value>True</value> + <key>stream_id</key> + <value>observation</value> </param> <param> - <key>avg</key> - <value>0.001</value> - </param> - <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> - </param> - <param> - <key>nconnections</key> - <value>1</value> + <key>_coordinate</key> + <value>(896, 676)</value> </param> <param> - <key>min</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>trellis_pccc_encoder_xx</key> <param> - <key>max</key> - <value>1</value> - </param> - <param> - <key>update_time</key> - <value>0.01</value> - </param> - <param> - <key>gui_hint</key> - <value></value> + <key>id</key> + <value>trellis_pccc_encoder_xx_0</value> </param> <param> - <key>label1</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>unit1</key> - <value></value> + <key>type</key> + <value>bb</value> </param> <param> - <key>color1</key> - <value>("black", "black")</value> + <key>o_fsm_args</key> + <value>fsm1</value> </param> <param> - <key>factor1</key> - <value>1</value> + <key>o_init_state</key> + <value>0</value> </param> <param> - <key>label2</key> - <value></value> + <key>i_fsm_args</key> + <value>fsm2</value> </param> <param> - <key>unit2</key> - <value></value> + <key>i_init_state</key> + <value>0</value> </param> <param> - <key>color2</key> - <value>("black", "black")</value> + <key>interleaver_args</key> + <value>interleaver</value> </param> <param> - <key>factor2</key> - <value>1</value> + <key>bl</key> + <value>block</value> </param> <param> - <key>label3</key> + <key>alias</key> <value></value> </param> <param> - <key>unit3</key> + <key>affinity</key> <value></value> </param> <param> - <key>color3</key> - <value>("black", "black")</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>factor3</key> - <value>1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>label4</key> - <value></value> + <key>_coordinate</key> + <value>(400, 457)</value> </param> <param> - <key>unit4</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>trellis_pccc_decoder_combined_xx</key> <param> - <key>color4</key> - <value>("black", "black")</value> + <key>id</key> + <value>trellis_pccc_decoder_combined_xx_0</value> </param> <param> - <key>factor4</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>label5</key> - <value></value> + <key>type</key> + <value>f</value> </param> <param> - <key>unit5</key> - <value></value> + <key>out_type</key> + <value>b</value> </param> <param> - <key>color5</key> - <value>("black", "black")</value> + <key>o_fsm_args</key> + <value>fsm1</value> </param> <param> - <key>factor5</key> - <value>1</value> + <key>o_init_state</key> + <value>0</value> </param> <param> - <key>label6</key> - <value></value> + <key>o_final_state</key> + <value>-1</value> </param> <param> - <key>unit6</key> - <value></value> + <key>i_fsm_args</key> + <value>fsm2</value> </param> <param> - <key>color6</key> - <value>("black", "black")</value> + <key>i_init_state</key> + <value>0</value> </param> <param> - <key>factor6</key> - <value>1</value> + <key>i_final_state</key> + <value>-1</value> </param> <param> - <key>label7</key> - <value></value> + <key>interleaver</key> + <value>interleaver</value> </param> <param> - <key>unit7</key> - <value></value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>color7</key> - <value>("black", "black")</value> + <key>iterations</key> + <value>10</value> </param> <param> - <key>factor7</key> - <value>1</value> + <key>dim</key> + <value>2</value> </param> <param> - <key>label8</key> - <value></value> + <key>table</key> + <value>constellation</value> </param> <param> - <key>unit8</key> - <value></value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>color8</key> - <value>("black", "black")</value> + <key>siso_type</key> + <value>trellis.TRELLIS_SUM_PRODUCT</value> </param> <param> - <key>factor8</key> - <value>1</value> + <key>scaling</key> + <value>1.0/noisevar</value> </param> <param> - <key>label9</key> + <key>alias</key> <value></value> </param> <param> - <key>unit9</key> + <key>affinity</key> <value></value> </param> <param> - <key>color9</key> - <value>("black", "black")</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>factor9</key> - <value>1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>label10</key> - <value></value> + <key>_coordinate</key> + <value>(400, 849)</value> </param> <param> - <key>unit10</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>import</key> <param> - <key>color10</key> - <value>("black", "black")</value> + <key>id</key> + <value>import_0_0</value> </param> <param> - <key>factor10</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>alias</key> - <value></value> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> </param> <param> - <key>affinity</key> + <key>alias</key> <value></value> </param> <param> <key>_coordinate</key> - <value>(571, 477)</value> + <value>(48, 132)</value> </param> <param> <key>_rotation</key> @@ -1017,75 +1123,75 @@ </param> </block> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_pccc_encoder_xx_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_pccc_decoder_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_short_to_float_1_0</source_block_id> - <sink_block_id>qtgui_number_sink_0</sink_block_id> + <source_block_id>trellis_pccc_encoder_xx_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_pccc_decoder_combined_xx_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>blocks_throttle_0_0</source_block_id> + <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> + <source_block_id>analog_random_source_x_0_0</source_block_id> + <sink_block_id>blocks_throttle_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> + <source_block_id>analog_random_source_x_0_0</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_xx_2_0</source_block_id> - <sink_block_id>blocks_short_to_float_1_0</sink_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> </flow_graph> diff --git a/gr-trellis/examples/grc/readme.txt b/gr-trellis/examples/grc/readme.txt index a5261ac0b2..3d32e046dd 100644 --- a/gr-trellis/examples/grc/readme.txt +++ b/gr-trellis/examples/grc/readme.txt @@ -1,6 +1,6 @@ These are examples of using gr-trellis in grc. -INTERFERENCE CANCELLATION +Interference Cancellation ------------------------- Two users are transmitting simultaneously using convolutionally encoded QPSK, each with power P1=alpha*P and P2=(1-alpha)*P. The combined signal is observed in noise and four different receivers are considered: @@ -20,13 +20,13 @@ Serially Concatenated Convolutional Codes ----------------------------------------- An SCCC can be defined by an outer and an inner FSM together with an interleaver and a modulation type. You can change the SNR and observe the estimated BER. -In sccc.grc the decoding and metric calculation are combined; in sccc1.grc they are separate. Parallel Concatenated Convolutional Codes ----------------------------------------- A PCCC can be defined by two FSMs together with an interleaver and a modulation type. You can change the SNR and observe the estimated BER. -In pccc1.grc the decoding and metric calculation are separate. + +...and a few other examples including turbo equalization, etc Enjoy. diff --git a/gr-trellis/examples/grc/sccc.grc b/gr-trellis/examples/grc/sccc.grc index 9d516743b6..0bcaa6c00a 100644 --- a/gr-trellis/examples/grc/sccc.grc +++ b/gr-trellis/examples/grc/sccc.grc @@ -1,6 +1,7 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> - <timestamp>Mon Jul 28 14:09:50 2014</timestamp> + <timestamp>Wed Oct 1 11:04:18 2014</timestamp> <block> <key>options</key> <param> @@ -29,7 +30,7 @@ </param> <param> <key>generate_options</key> - <value>qt_gui</value> + <value>wx_gui</value> </param> <param> <key>category</key> @@ -68,6 +69,33 @@ <key>variable</key> <param> <key>id</key> + <value>mod</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>fu.psk2x3</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(632, 101)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> <value>prefix</value> </param> <param> @@ -84,7 +112,7 @@ </param> <param> <key>_coordinate</key> - <value>(514, 10)</value> + <value>(344, 13)</value> </param> <param> <key>_rotation</key> @@ -95,7 +123,7 @@ <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>R</value> </param> <param> <key>_enabled</key> @@ -103,7 +131,7 @@ </param> <param> <key>value</key> - <value>1000</value> + <value>10e3</value> </param> <param> <key>alias</key> @@ -111,7 +139,7 @@ </param> <param> <key>_coordinate</key> - <value>(441, 10)</value> + <value>(224, 93)</value> </param> <param> <key>_rotation</key> @@ -122,7 +150,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>interleaver</value> </param> <param> <key>_enabled</key> @@ -130,7 +158,7 @@ </param> <param> <key>value</key> - <value>100e3</value> + <value>trellis.interleaver(block,666)</value> </param> <param> <key>alias</key> @@ -138,7 +166,7 @@ </param> <param> <key>_coordinate</key> - <value>(358, 10)</value> + <value>(344, 205)</value> </param> <param> <key>_rotation</key> @@ -149,7 +177,7 @@ <key>variable</key> <param> <key>id</key> - <value>noisevar</value> + <value>Es</value> </param> <param> <key>_enabled</key> @@ -157,7 +185,7 @@ </param> <param> <key>value</key> - <value>10**(-snr_db/10)</value> + <value>sum(numpy.square(constellation))/(len(constellation)/(1.0*dim))</value> </param> <param> <key>alias</key> @@ -165,7 +193,7 @@ </param> <param> <key>_coordinate</key> - <value>(279, 10)</value> + <value>(800, 133)</value> </param> <param> <key>_rotation</key> @@ -173,54 +201,107 @@ </param> </block> <block> - <key>analog_random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>analog_random_source_x_0</value> + <value>noisevar</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> + <key>value</key> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> <param> - <key>min</key> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1056, 141)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>max</key> - <value>2</value> + <key>id</key> + <value>block</value> </param> <param> - <key>num_samps</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> <value>1000</value> </param> <param> - <key>repeat</key> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(224, 29)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>fsm_o</value> + </param> + <param> + <key>_enabled</key> <value>True</value> </param> <param> + <key>value</key> + <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value> + </param> + <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_coordinate</key> + <value>(344, 77)</value> </param> <param> - <key>minoutbuf</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>id</key> + <value>fsm_i</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>trellis.fsm(prefix+"/awgn2o3_4.fsm")</value> + </param> + <param> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(21, 170)</value> + <value>(344, 141)</value> </param> <param> <key>_rotation</key> @@ -228,46 +309,103 @@ </param> </block> <block> - <key>blocks_add_xx</key> + <key>variable</key> <param> <key>id</key> - <value>blocks_add_xx_1</value> + <value>constellation</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>complex</value> + <key>value</key> + <value>mod[1]</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>alias</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>_coordinate</key> + <value>(568, 173)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>dim</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>mod[0]</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> + <key>_coordinate</key> + <value>(720, 173)</value> </param> <param> - <key>minoutbuf</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>import</key> + <param> + <key>id</key> + <value>import_0</value> + </param> <param> - <key>maxoutbuf</key> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>import</key> + <value>import numpy</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(32, 148)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> <param> <key>_coordinate</key> - <value>(951, 256)</value> + <value>(192, 332)</value> </param> <param> <key>_rotation</key> @@ -275,10 +413,10 @@ </param> </block> <block> - <key>analog_noise_source_x</key> + <key>analog_random_source_x</key> <param> <key>id</key> - <value>analog_noise_source_x_0</value> + <value>analog_random_source_x_0</value> </param> <param> <key>_enabled</key> @@ -286,19 +424,23 @@ </param> <param> <key>type</key> - <value>complex</value> + <value>byte</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>min</key> + <value>0</value> </param> <param> - <key>amp</key> - <value>noisevar</value> + <key>max</key> + <value>2</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>num_samps</key> + <value>1007</value> + </param> + <param> + <key>repeat</key> + <value>True</value> </param> <param> <key>alias</key> @@ -318,7 +460,7 @@ </param> <param> <key>_coordinate</key> - <value>(549, 250)</value> + <value>(5, 384)</value> </param> <param> <key>_rotation</key> @@ -337,7 +479,7 @@ </param> <param> <key>type</key> - <value>short</value> + <value>byte</value> </param> <param> <key>samples_per_second</key> @@ -369,7 +511,7 @@ </param> <param> <key>_coordinate</key> - <value>(551, 116)</value> + <value>(232, 404)</value> </param> <param> <key>_rotation</key> @@ -377,26 +519,34 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>blocks_sub_xx_0</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>out_type</key> + <value>float</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>symbol_table</key> + <value>constellation</value> + </param> + <param> + <key>dimension</key> + <value>dim</value> + </param> + <param> + <key>num_ports</key> + <value>1</value> </param> <param> <key>alias</key> @@ -416,7 +566,7 @@ </param> <param> <key>_coordinate</key> - <value>(239, 548)</value> + <value>(672, 397)</value> </param> <param> <key>_rotation</key> @@ -424,10 +574,10 @@ </param> </block> <block> - <key>blocks_multiply_xx</key> + <key>blocks_add_xx</key> <param> <key>id</key> - <value>blocks_multiply_xx_2_0</value> + <value>blocks_add_xx_1</value> </param> <param> <key>_enabled</key> @@ -435,7 +585,7 @@ </param> <param> <key>type</key> - <value>short</value> + <value>float</value> </param> <param> <key>num_inputs</key> @@ -463,7 +613,7 @@ </param> <param> <key>_coordinate</key> - <value>(418, 551)</value> + <value>(960, 472)</value> </param> <param> <key>_rotation</key> @@ -471,21 +621,25 @@ </param> </block> <block> - <key>blocks_short_to_float</key> + <key>blks2_error_rate</key> <param> <key>id</key> - <value>blocks_short_to_float_1_0</value> + <value>blks2_error_rate_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>type</key> + <value>'SER'</value> + </param> + <param> + <key>win_size</key> + <value>block*100</value> </param> <param> - <key>scale</key> + <key>bits_per_symbol</key> <value>1</value> </param> <param> @@ -506,7 +660,7 @@ </param> <param> <key>_coordinate</key> - <value>(605, 564)</value> + <value>(312, 1168)</value> </param> <param> <key>_rotation</key> @@ -514,54 +668,45 @@ </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>virtual_source_0_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> - </param> - <param> - <key>out_type</key> - <value>complex</value> - </param> - <param> - <key>symbol_table</key> - <value>1,0,1j,0,-1j,0,-1,0,1,0,1j,0,-1j,0,-1,0</value> - </param> - <param> - <key>dimension</key> - <value>2</value> + <key>stream_id</key> + <value>estimate</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>_coordinate</key> + <value>(96, 1204)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>virtual_source_0_0</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>info</value> </param> <param> <key>_coordinate</key> - <value>(551, 181)</value> + <value>(112, 1132)</value> </param> <param> <key>_rotation</key> @@ -569,214 +714,219 @@ </param> </block> <block> - <key>qtgui_number_sink</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>qtgui_number_sink_0</value> + <value>wxgui_numbersink2_3_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>name</key> - <value>""</value> - </param> - <param> <key>type</key> <value>float</value> </param> <param> - <key>autoscale</key> - <value>False</value> + <key>title</key> + <value>BER</value> </param> <param> - <key>avg</key> - <value>0.001</value> + <key>units</key> + <value>BER</value> </param> <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>nconnections</key> - <value>1</value> + <key>min_value</key> + <value>0</value> </param> <param> - <key>min</key> - <value>0</value> + <key>max_value</key> + <value>1.0</value> </param> <param> - <key>max</key> - <value>1</value> + <key>factor</key> + <value>1.0</value> </param> <param> - <key>update_time</key> - <value>0.10</value> + <key>decimal_places</key> + <value>6</value> </param> <param> - <key>gui_hint</key> - <value>1,0,1,1</value> + <key>ref_level</key> + <value>0</value> </param> <param> - <key>label1</key> - <value></value> + <key>number_rate</key> + <value>15</value> </param> <param> - <key>unit1</key> - <value></value> + <key>peak_hold</key> + <value>False</value> </param> <param> - <key>color1</key> - <value>("black", "black")</value> + <key>average</key> + <value>False</value> </param> <param> - <key>factor1</key> - <value>1</value> + <key>avg_alpha</key> + <value>0.001</value> </param> <param> - <key>label2</key> - <value></value> + <key>show_gauge</key> + <value>False</value> </param> <param> - <key>unit2</key> + <key>win_size</key> <value></value> </param> <param> - <key>color2</key> - <value>("black", "black")</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>factor2</key> - <value>1</value> + <key>notebook</key> + <value></value> </param> <param> - <key>label3</key> + <key>alias</key> <value></value> </param> <param> - <key>unit3</key> + <key>affinity</key> <value></value> </param> <param> - <key>color3</key> - <value>("black", "black")</value> + <key>_coordinate</key> + <value>(688, 1117)</value> </param> <param> - <key>factor3</key> - <value>1</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>label4</key> - <value></value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>unit4</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>color4</key> - <value>("black", "black")</value> + <key>stream_id</key> + <value>observation</value> </param> <param> - <key>factor4</key> - <value>1</value> + <key>_coordinate</key> + <value>(88, 836)</value> </param> <param> - <key>label5</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>unit5</key> - <value></value> + <key>id</key> + <value>virtual_sink_0_1</value> </param> <param> - <key>color5</key> - <value>("black", "black")</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>factor5</key> - <value>1</value> + <key>stream_id</key> + <value>estimate</value> </param> <param> - <key>label6</key> - <value></value> + <key>_coordinate</key> + <value>(744, 836)</value> </param> <param> - <key>unit6</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>trellis_sccc_decoder_combined_xx</key> <param> - <key>color6</key> - <value>("black", "black")</value> + <key>id</key> + <value>trellis_sccc_decoder_combined_xx_0</value> </param> <param> - <key>factor6</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>label7</key> - <value></value> + <key>type</key> + <value>f</value> </param> <param> - <key>unit7</key> - <value></value> + <key>out_type</key> + <value>b</value> </param> <param> - <key>color7</key> - <value>("black", "black")</value> + <key>o_fsm_args</key> + <value>fsm_o</value> </param> <param> - <key>factor7</key> - <value>1</value> + <key>o_init_state</key> + <value>0</value> </param> <param> - <key>label8</key> - <value></value> + <key>o_final_state</key> + <value>-1</value> </param> <param> - <key>unit8</key> - <value></value> + <key>i_fsm_args</key> + <value>fsm_i</value> </param> <param> - <key>color8</key> - <value>("black", "black")</value> + <key>i_init_state</key> + <value>0</value> </param> <param> - <key>factor8</key> - <value>1</value> + <key>i_final_state</key> + <value>-1</value> </param> <param> - <key>label9</key> - <value></value> + <key>interleaver</key> + <value>interleaver</value> </param> <param> - <key>unit9</key> - <value></value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>color9</key> - <value>("black", "black")</value> + <key>iterations</key> + <value>5</value> </param> <param> - <key>factor9</key> - <value>1</value> + <key>dim</key> + <value>dim</value> </param> <param> - <key>label10</key> - <value></value> + <key>table</key> + <value>constellation</value> </param> <param> - <key>unit10</key> - <value></value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>color10</key> - <value>("black", "black")</value> + <key>siso_type</key> + <value>trellis.TRELLIS_SUM_PRODUCT</value> </param> <param> - <key>factor10</key> - <value>1</value> + <key>scaling</key> + <value>1.0/noisevar</value> </param> <param> <key>alias</key> @@ -787,8 +937,16 @@ <value></value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> <key>_coordinate</key> - <value>(788, 548)</value> + <value>(400, 745)</value> </param> <param> <key>_rotation</key> @@ -796,132 +954,143 @@ </param> </block> <block> - <key>variable_qtgui_range</key> + <key>analog_noise_source_x</key> <param> <key>id</key> - <value>snr_db</value> + <value>analog_noise_source_x_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>SNR (dB)</value> + <key>type</key> + <value>float</value> </param> <param> - <key>value</key> - <value>5</value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>start</key> - <value>-10</value> + <key>amp</key> + <value>noisevar**0.5</value> </param> <param> - <key>stop</key> - <value>10</value> + <key>seed</key> + <value>-42</value> + </param> + <param> + <key>alias</key> + <value></value> </param> <param> - <key>step</key> - <value>0.01</value> + <key>affinity</key> + <value></value> </param> <param> - <key>widget</key> - <value>counter_slider</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>orient</key> - <value>Qt.Horizontal</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>min_len</key> - <value>200</value> + <key>_coordinate</key> + <value>(608, 510)</value> </param> <param> - <key>gui_hint</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>virtual_sink_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> </param> <param> <key>_coordinate</key> - <value>(177, 10)</value> + <value>(1064, 484)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>trellis_sccc_encoder_xx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>trellis_sccc_encoder_xx_0</value> + <value>EsN0_dB</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>ss</value> + <key>label</key> + <value>EsN0 (dB)</value> </param> <param> - <key>o_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> + <key>value</key> + <value>2</value> </param> <param> - <key>o_init_state</key> - <value>0</value> + <key>min</key> + <value>-10</value> </param> <param> - <key>i_fsm_args</key> - <value>prefix+"/awgn2o3_4.fsm"</value> + <key>max</key> + <value>10</value> </param> <param> - <key>i_init_state</key> - <value>0</value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>interleaver_args</key> - <value>trellis.interleaver(block,666)</value> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> </param> <param> - <key>bl</key> - <value>block</value> + <key>converver</key> + <value>float_converter</value> </param> <param> - <key>alias</key> + <key>grid_pos</key> <value></value> </param> <param> - <key>affinity</key> + <key>notebook</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(242, 154)</value> + <value>(920, 113)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>trellis_sccc_decoder_combined_xx</key> + <key>trellis_sccc_encoder_xx</key> <param> <key>id</key> - <value>trellis_sccc_decoder_combined_xx_0</value> + <value>trellis_sccc_encoder_xx_0</value> </param> <param> <key>_enabled</key> @@ -929,87 +1098,78 @@ </param> <param> <key>type</key> - <value>c</value> - </param> - <param> - <key>out_type</key> - <value>s</value> + <value>bb</value> </param> <param> <key>o_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> + <value>fsm_o</value> </param> <param> <key>o_init_state</key> <value>0</value> </param> <param> - <key>o_final_state</key> - <value>-1</value> - </param> - <param> <key>i_fsm_args</key> - <value>prefix+"/awgn2o3_4.fsm"</value> + <value>fsm_i</value> </param> <param> <key>i_init_state</key> <value>0</value> </param> <param> - <key>i_final_state</key> - <value>-1</value> - </param> - <param> - <key>interleaver</key> - <value>trellis.interleaver(block,666)</value> + <key>interleaver_args</key> + <value>interleaver</value> </param> <param> - <key>block_size</key> + <key>bl</key> <value>block</value> </param> <param> - <key>iterations</key> - <value>5</value> + <key>alias</key> + <value></value> </param> <param> - <key>dim</key> - <value>2</value> + <key>affinity</key> + <value></value> </param> <param> - <key>table</key> - <value>1,0,1j,0,-1j,0,-1,0,1,0,1j,0,-1j,0,-1,0</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>siso_type</key> - <value>trellis.TRELLIS_SUM_PRODUCT</value> + <key>_coordinate</key> + <value>(416, 369)</value> </param> <param> - <key>scaling</key> - <value>1.0</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>import</key> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>import_0_0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(241, 287)</value> + <value>(40, 204)</value> </param> <param> <key>_rotation</key> @@ -1017,74 +1177,74 @@ </param> </block> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_sccc_encoder_xx_0</source_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>trellis_sccc_encoder_xx_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>1</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_xx_2_0</source_block_id> - <sink_block_id>blocks_short_to_float_1_0</sink_block_id> + <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_short_to_float_1_0</source_block_id> - <sink_block_id>qtgui_number_sink_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-trellis/examples/grc/sccc1.grc b/gr-trellis/examples/grc/sccc1.grc deleted file mode 100644 index 71b3f76625..0000000000 --- a/gr-trellis/examples/grc/sccc1.grc +++ /dev/null @@ -1,1132 +0,0 @@ -<?xml version='1.0' encoding='ASCII'?> -<flow_graph> - <timestamp>Mon Jul 28 14:10:35 2014</timestamp> - <block> - <key>options</key> - <param> - <key>id</key> - <value>sccc1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>title</key> - <value>Serially Concatenated Convolutional Code</value> - </param> - <param> - <key>author</key> - <value>AA</value> - </param> - <param> - <key>description</key> - <value>gnuradio flow graph</value> - </param> - <param> - <key>window_size</key> - <value>2048, 2048</value> - </param> - <param> - <key>generate_options</key> - <value>qt_gui</value> - </param> - <param> - <key>category</key> - <value>Custom</value> - </param> - <param> - <key>run_options</key> - <value>prompt</value> - </param> - <param> - <key>run</key> - <value>True</value> - </param> - <param> - <key>max_nouts</key> - <value>0</value> - </param> - <param> - <key>realtime_scheduling</key> - <value></value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(10, 10)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>prefix</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(513, 10)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>block</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>1000</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(441, 10)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>R</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>100e3</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(358, 10)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable</key> - <param> - <key>id</key> - <value>noisevar</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>value</key> - <value>10**(-snr_db/10)</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(279, 10)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>analog_random_source_x</key> - <param> - <key>id</key> - <value>analog_random_source_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>2</value> - </param> - <param> - <key>num_samps</key> - <value>1000</value> - </param> - <param> - <key>repeat</key> - <value>True</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(21, 170)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_throttle</key> - <param> - <key>id</key> - <value>blocks_throttle_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>samples_per_second</key> - <value>R</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>ignoretag</key> - <value>True</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(607, 110)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_add_xx</key> - <param> - <key>id</key> - <value>blocks_add_xx_1</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(932, 187)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_multiply_xx</key> - <param> - <key>id</key> - <value>blocks_multiply_xx_2_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(233, 480)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_sub_xx</key> - <param> - <key>id</key> - <value>blocks_sub_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(58, 486)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_short_to_float</key> - <param> - <key>id</key> - <value>blocks_short_to_float_1_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>scale</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(376, 498)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>trellis_metrics_x</key> - <param> - <key>id</key> - <value>trellis_metrics_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>f</value> - </param> - <param> - <key>card</key> - <value>8</value> - </param> - <param> - <key>dim</key> - <value>1</value> - </param> - <param> - <key>table</key> - <value>-7, -5, -3, -1, 1, 3, 5, 7</value> - </param> - <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(63, 328)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>digital_chunks_to_symbols_xx</key> - <param> - <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>in_type</key> - <value>short</value> - </param> - <param> - <key>out_type</key> - <value>float</value> - </param> - <param> - <key>symbol_table</key> - <value>-7,-5,-3,-1,1,3,5,7</value> - </param> - <param> - <key>dimension</key> - <value>1</value> - </param> - <param> - <key>num_ports</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(607, 175)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>analog_noise_source_x</key> - <param> - <key>id</key> - <value>analog_noise_source_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> - </param> - <param> - <key>amp</key> - <value>noisevar</value> - </param> - <param> - <key>seed</key> - <value>-42</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(606, 242)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>qtgui_number_sink</key> - <param> - <key>id</key> - <value>qtgui_number_sink_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>name</key> - <value>""</value> - </param> - <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>autoscale</key> - <value>False</value> - </param> - <param> - <key>avg</key> - <value>0.001</value> - </param> - <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> - </param> - <param> - <key>nconnections</key> - <value>1</value> - </param> - <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>1</value> - </param> - <param> - <key>update_time</key> - <value>0.10</value> - </param> - <param> - <key>gui_hint</key> - <value>1,0,1,1</value> - </param> - <param> - <key>label1</key> - <value></value> - </param> - <param> - <key>unit1</key> - <value></value> - </param> - <param> - <key>color1</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor1</key> - <value>1</value> - </param> - <param> - <key>label2</key> - <value></value> - </param> - <param> - <key>unit2</key> - <value></value> - </param> - <param> - <key>color2</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor2</key> - <value>1</value> - </param> - <param> - <key>label3</key> - <value></value> - </param> - <param> - <key>unit3</key> - <value></value> - </param> - <param> - <key>color3</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor3</key> - <value>1</value> - </param> - <param> - <key>label4</key> - <value></value> - </param> - <param> - <key>unit4</key> - <value></value> - </param> - <param> - <key>color4</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor4</key> - <value>1</value> - </param> - <param> - <key>label5</key> - <value></value> - </param> - <param> - <key>unit5</key> - <value></value> - </param> - <param> - <key>color5</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor5</key> - <value>1</value> - </param> - <param> - <key>label6</key> - <value></value> - </param> - <param> - <key>unit6</key> - <value></value> - </param> - <param> - <key>color6</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor6</key> - <value>1</value> - </param> - <param> - <key>label7</key> - <value></value> - </param> - <param> - <key>unit7</key> - <value></value> - </param> - <param> - <key>color7</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor7</key> - <value>1</value> - </param> - <param> - <key>label8</key> - <value></value> - </param> - <param> - <key>unit8</key> - <value></value> - </param> - <param> - <key>color8</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor8</key> - <value>1</value> - </param> - <param> - <key>label9</key> - <value></value> - </param> - <param> - <key>unit9</key> - <value></value> - </param> - <param> - <key>color9</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor9</key> - <value>1</value> - </param> - <param> - <key>label10</key> - <value></value> - </param> - <param> - <key>unit10</key> - <value></value> - </param> - <param> - <key>color10</key> - <value>("black", "black")</value> - </param> - <param> - <key>factor10</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(609, 482)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>variable_qtgui_range</key> - <param> - <key>id</key> - <value>snr_db</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>label</key> - <value>SNR (dB)</value> - </param> - <param> - <key>value</key> - <value>5</value> - </param> - <param> - <key>start</key> - <value>-10</value> - </param> - <param> - <key>stop</key> - <value>10</value> - </param> - <param> - <key>step</key> - <value>0.01</value> - </param> - <param> - <key>widget</key> - <value>counter_slider</value> - </param> - <param> - <key>orient</key> - <value>Qt.Horizontal</value> - </param> - <param> - <key>min_len</key> - <value>200</value> - </param> - <param> - <key>gui_hint</key> - <value></value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>_coordinate</key> - <value>(177, 10)</value> - </param> - <param> - <key>_rotation</key> - <value>180</value> - </param> - </block> - <block> - <key>trellis_sccc_encoder_xx</key> - <param> - <key>id</key> - <value>trellis_sccc_encoder_xx_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>ss</value> - </param> - <param> - <key>o_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> - </param> - <param> - <key>o_init_state</key> - <value>0</value> - </param> - <param> - <key>i_fsm_args</key> - <value>prefix+"/awgn2o3_4.fsm"</value> - </param> - <param> - <key>i_init_state</key> - <value>0</value> - </param> - <param> - <key>interleaver_args</key> - <value>trellis.interleaver(block,666)</value> - </param> - <param> - <key>bl</key> - <value>block</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(294, 154)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>trellis_sccc_decoder_x</key> - <param> - <key>id</key> - <value>trellis_sccc_decoder_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>out_type</key> - <value>s</value> - </param> - <param> - <key>o_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> - </param> - <param> - <key>o_init_state</key> - <value>0</value> - </param> - <param> - <key>o_final_state</key> - <value>-1</value> - </param> - <param> - <key>i_fsm_args</key> - <value>prefix+"/awgn2o3_4.fsm"</value> - </param> - <param> - <key>i_init_state</key> - <value>0</value> - </param> - <param> - <key>i_final_state</key> - <value>-1</value> - </param> - <param> - <key>interleaver</key> - <value>trellis.interleaver(block,666)</value> - </param> - <param> - <key>block_size</key> - <value>block</value> - </param> - <param> - <key>iterations</key> - <value>10</value> - </param> - <param> - <key>siso_type</key> - <value>trellis.TRELLIS_MIN_SUM</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(292, 280)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>trellis_sccc_encoder_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>trellis_sccc_encoder_xx_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>trellis_metrics_x_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>trellis_metrics_x_0</source_block_id> - <sink_block_id>trellis_sccc_decoder_x_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>trellis_sccc_decoder_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> - <source_key>0</source_key> - <sink_key>1</sink_key> - </connection> - <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_multiply_xx_2_0</source_block_id> - <sink_block_id>blocks_short_to_float_1_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> - <connection> - <source_block_id>blocks_short_to_float_1_0</source_block_id> - <sink_block_id>qtgui_number_sink_0</sink_block_id> - <source_key>0</source_key> - <sink_key>0</sink_key> - </connection> -</flow_graph> diff --git a/gr-trellis/examples/grc/pccc1.grc b/gr-trellis/examples/grc/tcm.grc index acb112d255..451d940962 100644 --- a/gr-trellis/examples/grc/pccc1.grc +++ b/gr-trellis/examples/grc/tcm.grc @@ -1,11 +1,12 @@ <?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> <flow_graph> - <timestamp>Mon Jul 28 14:09:00 2014</timestamp> + <timestamp>Wed Oct 1 11:04:18 2014</timestamp> <block> <key>options</key> <param> <key>id</key> - <value>sccc1</value> + <value>tcm</value> </param> <param> <key>_enabled</key> @@ -13,7 +14,7 @@ </param> <param> <key>title</key> - <value>Parallel Concatenated Convolutional Code</value> + <value>Trellis Coded Modulation</value> </param> <param> <key>author</key> @@ -29,7 +30,7 @@ </param> <param> <key>generate_options</key> - <value>qt_gui</value> + <value>wx_gui</value> </param> <param> <key>category</key> @@ -84,7 +85,7 @@ </param> <param> <key>_coordinate</key> - <value>(513, 10)</value> + <value>(320, 13)</value> </param> <param> <key>_rotation</key> @@ -95,7 +96,7 @@ <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>dim</value> </param> <param> <key>_enabled</key> @@ -103,7 +104,7 @@ </param> <param> <key>value</key> - <value>1000</value> + <value>mod[0]</value> </param> <param> <key>alias</key> @@ -111,7 +112,7 @@ </param> <param> <key>_coordinate</key> - <value>(441, 10)</value> + <value>(464, 229)</value> </param> <param> <key>_rotation</key> @@ -122,7 +123,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>constellation</value> </param> <param> <key>_enabled</key> @@ -130,7 +131,7 @@ </param> <param> <key>value</key> - <value>100e3</value> + <value>mod[1]</value> </param> <param> <key>alias</key> @@ -138,7 +139,7 @@ </param> <param> <key>_coordinate</key> - <value>(358, 10)</value> + <value>(312, 229)</value> </param> <param> <key>_rotation</key> @@ -149,7 +150,7 @@ <key>variable</key> <param> <key>id</key> - <value>noisevar</value> + <value>mod</value> </param> <param> <key>_enabled</key> @@ -157,7 +158,7 @@ </param> <param> <key>value</key> - <value>10**(-snr_db/10)</value> + <value>fu.psk4</value> </param> <param> <key>alias</key> @@ -165,7 +166,7 @@ </param> <param> <key>_coordinate</key> - <value>(279, 10)</value> + <value>(336, 157)</value> </param> <param> <key>_rotation</key> @@ -173,54 +174,53 @@ </param> </block> <block> - <key>analog_random_source_x</key> + <key>variable</key> <param> <key>id</key> - <value>analog_random_source_x_0</value> + <value>fsm</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> - </param> - <param> - <key>min</key> - <value>0</value> + <key>value</key> + <value>"awgn1o2_4.fsm"</value> </param> <param> - <key>max</key> - <value>2</value> + <key>alias</key> + <value></value> </param> <param> - <key>num_samps</key> - <value>1000</value> + <key>_coordinate</key> + <value>(320, 77)</value> </param> <param> - <key>repeat</key> - <value>True</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>R</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>value</key> + <value>100e3</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(21, 170)</value> + <value>(216, 109)</value> </param> <param> <key>_rotation</key> @@ -228,226 +228,270 @@ </param> </block> <block> - <key>qtgui_number_sink</key> + <key>variable</key> <param> <key>id</key> - <value>qtgui_number_sink_0</value> + <value>noisevar</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>name</key> - <value>""</value> + <key>value</key> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> <param> - <key>type</key> - <value>float</value> + <key>alias</key> + <value></value> </param> <param> - <key>autoscale</key> - <value>False</value> + <key>_coordinate</key> + <value>(728, 157)</value> </param> <param> - <key>avg</key> - <value>0.001</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>graph_type</key> - <value>qtgui.NUM_GRAPH_HORIZ</value> + <key>id</key> + <value>Es</value> </param> <param> - <key>nconnections</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>min</key> + <key>value</key> + <value>sum(numpy.square(numpy.abs(constellation)))/(len(constellation)/(1.0*dim))</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(528, 157)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>variable</key> <param> - <key>max</key> - <value>1</value> + <key>id</key> + <value>block</value> </param> <param> - <key>update_time</key> - <value>0.10</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>gui_hint</key> - <value>1,0,1,1</value> + <key>value</key> + <value>500*16</value> </param> <param> - <key>label1</key> + <key>alias</key> <value></value> </param> <param> - <key>unit1</key> - <value></value> + <key>_coordinate</key> + <value>(216, 29)</value> </param> <param> - <key>color1</key> - <value>("black", "black")</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>blocks_throttle</key> <param> - <key>factor1</key> - <value>1</value> + <key>id</key> + <value>blocks_throttle_0</value> </param> <param> - <key>label2</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>unit2</key> - <value></value> + <key>type</key> + <value>byte</value> </param> <param> - <key>color2</key> - <value>("black", "black")</value> + <key>samples_per_second</key> + <value>R</value> </param> <param> - <key>factor2</key> + <key>vlen</key> <value>1</value> </param> <param> - <key>label3</key> - <value></value> + <key>ignoretag</key> + <value>True</value> </param> <param> - <key>unit3</key> + <key>alias</key> <value></value> </param> <param> - <key>color3</key> - <value>("black", "black")</value> + <key>affinity</key> + <value></value> </param> <param> - <key>factor3</key> - <value>1</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>label4</key> - <value></value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>unit4</key> - <value></value> + <key>_coordinate</key> + <value>(208, 380)</value> </param> <param> - <key>color4</key> - <value>("black", "black")</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>blocks_add_xx</key> <param> - <key>factor4</key> - <value>1</value> + <key>id</key> + <value>blocks_add_xx_1</value> </param> <param> - <key>label5</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>unit5</key> - <value></value> + <key>type</key> + <value>float</value> </param> <param> - <key>color5</key> - <value>("black", "black")</value> + <key>num_inputs</key> + <value>2</value> </param> <param> - <key>factor5</key> + <key>vlen</key> <value>1</value> </param> <param> - <key>label6</key> + <key>alias</key> <value></value> </param> <param> - <key>unit6</key> + <key>affinity</key> <value></value> </param> <param> - <key>color6</key> - <value>("black", "black")</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>factor6</key> - <value>1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>label7</key> - <value></value> + <key>_coordinate</key> + <value>(912, 488)</value> </param> <param> - <key>unit7</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>color7</key> - <value>("black", "black")</value> + <key>id</key> + <value>virtual_sink_0_0</value> </param> <param> - <key>factor7</key> - <value>1</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>label8</key> - <value></value> + <key>stream_id</key> + <value>info</value> </param> <param> - <key>unit8</key> - <value></value> + <key>_coordinate</key> + <value>(224, 316)</value> </param> <param> - <key>color8</key> - <value>("black", "black")</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>factor8</key> - <value>1</value> + <key>id</key> + <value>virtual_sink_0</value> </param> <param> - <key>label9</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>unit9</key> - <value></value> + <key>stream_id</key> + <value>observation</value> </param> <param> - <key>color9</key> - <value>("black", "black")</value> + <key>_coordinate</key> + <value>(832, 620)</value> </param> <param> - <key>factor9</key> - <value>1</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>label10</key> - <value></value> + <key>id</key> + <value>virtual_source_0</value> </param> <param> - <key>unit10</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>color10</key> - <value>("black", "black")</value> + <key>stream_id</key> + <value>observation</value> </param> <param> - <key>factor10</key> - <value>1</value> + <key>_coordinate</key> + <value>(64, 732)</value> </param> <param> - <key>alias</key> - <value></value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>affinity</key> - <value></value> + <key>id</key> + <value>virtual_sink_0_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate</value> </param> <param> <key>_coordinate</key> - <value>(632, 509)</value> + <value>(800, 732)</value> </param> <param> <key>_rotation</key> @@ -455,22 +499,30 @@ </param> </block> <block> - <key>blocks_short_to_float</key> + <key>analog_noise_source_x</key> <param> <key>id</key> - <value>blocks_short_to_float_1_0</value> + <value>analog_noise_source_x_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>type</key> + <value>float</value> </param> <param> - <key>scale</key> - <value>1</value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> + </param> + <param> + <key>amp</key> + <value>noisevar**0.5</value> + </param> + <param> + <key>seed</key> + <value>-42</value> </param> <param> <key>alias</key> @@ -490,7 +542,7 @@ </param> <param> <key>_coordinate</key> - <value>(375, 525)</value> + <value>(384, 502)</value> </param> <param> <key>_rotation</key> @@ -498,46 +550,58 @@ </param> </block> <block> - <key>blocks_multiply_xx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>blocks_multiply_xx_2_0</value> + <value>EsN0_dB</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> + <key>label</key> + <value>Es/N0 (dB)</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>value</key> + <value>4.0</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>min</key> + <value>-10</value> </param> <param> - <key>alias</key> - <value></value> + <key>max</key> + <value>30</value> </param> <param> - <key>affinity</key> + <key>num_steps</key> + <value>1000</value> + </param> + <param> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + <param> + <key>converver</key> + <value>float_converter</value> + </param> + <param> + <key>grid_pos</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>notebook</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(232, 507)</value> + <value>(608, 105)</value> </param> <param> <key>_rotation</key> @@ -545,10 +609,10 @@ </param> </block> <block> - <key>blocks_sub_xx</key> + <key>analog_random_source_x</key> <param> <key>id</key> - <value>blocks_sub_xx_0</value> + <value>analog_random_source_x_0</value> </param> <param> <key>_enabled</key> @@ -556,17 +620,25 @@ </param> <param> <key>type</key> - <value>short</value> + <value>byte</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>min</key> + <value>0</value> </param> <param> - <key>num_inputs</key> + <key>max</key> <value>2</value> </param> <param> + <key>num_samps</key> + <value>1007</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + <param> <key>alias</key> <value></value> </param> @@ -584,7 +656,7 @@ </param> <param> <key>_coordinate</key> - <value>(57, 513)</value> + <value>(8, 359)</value> </param> <param> <key>_rotation</key> @@ -592,49 +664,81 @@ </param> </block> <block> - <key>variable_qtgui_range</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>snr_db</value> + <value>wxgui_numbersink2_3_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>SNR (dB)</value> + <key>type</key> + <value>float</value> </param> <param> - <key>value</key> - <value>5</value> + <key>title</key> + <value>BER</value> </param> <param> - <key>start</key> - <value>-10</value> + <key>units</key> + <value>BER</value> + </param> + <param> + <key>samp_rate</key> + <value>R</value> + </param> + <param> + <key>min_value</key> + <value>0</value> + </param> + <param> + <key>max_value</key> + <value>1.0</value> + </param> + <param> + <key>factor</key> + <value>1.0</value> + </param> + <param> + <key>decimal_places</key> + <value>6</value> + </param> + <param> + <key>ref_level</key> + <value>0</value> + </param> + <param> + <key>number_rate</key> + <value>15</value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> </param> <param> - <key>stop</key> - <value>10</value> + <key>average</key> + <value>False</value> </param> <param> - <key>step</key> - <value>0.01</value> + <key>avg_alpha</key> + <value>0.001</value> </param> <param> - <key>widget</key> - <value>counter_slider</value> + <key>show_gauge</key> + <value>False</value> </param> <param> - <key>orient</key> - <value>Qt.Horizontal</value> + <key>win_size</key> + <value></value> </param> <param> - <key>min_len</key> - <value>200</value> + <key>grid_pos</key> + <value></value> </param> <param> - <key>gui_hint</key> + <key>notebook</key> <value></value> </param> <param> @@ -642,51 +746,85 @@ <value></value> </param> <param> + <key>affinity</key> + <value></value> + </param> + <param> <key>_coordinate</key> - <value>(177, 10)</value> + <value>(728, 1133)</value> </param> <param> <key>_rotation</key> - <value>180</value> + <value>0</value> </param> </block> <block> - <key>trellis_pccc_encoder_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>trellis_pccc_encoder_xx_0</value> + <value>virtual_source_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>ss</value> + <key>stream_id</key> + <value>info</value> </param> <param> - <key>o_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> + <key>_coordinate</key> + <value>(80, 1148)</value> </param> <param> - <key>o_init_state</key> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>virtual_source</key> <param> - <key>i_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> + <key>id</key> + <value>virtual_source_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate</value> </param> <param> - <key>i_init_state</key> + <key>_coordinate</key> + <value>(72, 1244)</value> + </param> + <param> + <key>_rotation</key> <value>0</value> </param> + </block> + <block> + <key>blks2_error_rate</key> <param> - <key>interleaver_args</key> - <value>trellis.interleaver(block,666)</value> + <key>id</key> + <value>blks2_error_rate_0</value> </param> <param> - <key>bl</key> - <value>block</value> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>'SER'</value> + </param> + <param> + <key>win_size</key> + <value>block*100</value> + </param> + <param> + <key>bits_per_symbol</key> + <value>1</value> </param> <param> <key>alias</key> @@ -706,7 +844,34 @@ </param> <param> <key>_coordinate</key> - <value>(235, 154)</value> + <value>(312, 1184)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>note</key> + <param> + <key>id</key> + <value>note_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>note</key> + <value>Substititue the metrics/Viterbi block with Viterbi_combo</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(712, 868)</value> </param> <param> <key>_rotation</key> @@ -721,7 +886,7 @@ </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> <key>type</key> @@ -729,15 +894,15 @@ </param> <param> <key>card</key> - <value>16</value> + <value>trellis.fsm(prefix+fsm).O()</value> </param> <param> <key>dim</key> - <value>2</value> + <value>dim</value> </param> <param> <key>table</key> - <value>-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0, 0,-7,0, -5,0, -3,0, -1,0, 1,0, 3,0, 5,0, 7,0</value> + <value>constellation</value> </param> <param> <key>metric_type</key> @@ -761,7 +926,7 @@ </param> <param> <key>_coordinate</key> - <value>(89, 380)</value> + <value>(304, 711)</value> </param> <param> <key>_rotation</key> @@ -769,58 +934,34 @@ </param> </block> <block> - <key>trellis_pccc_decoder_x</key> + <key>trellis_viterbi_x</key> <param> <key>id</key> - <value>trellis_pccc_decoder_x_0</value> + <value>trellis_viterbi_x_0</value> </param> <param> <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>out_type</key> - <value>s</value> - </param> - <param> - <key>o_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> - </param> - <param> - <key>o_init_state</key> - <value>0</value> - </param> - <param> - <key>o_final_state</key> - <value>-1</value> - </param> - <param> - <key>i_fsm_args</key> - <value>prefix+"/awgn1o2_4.fsm"</value> - </param> - <param> - <key>i_init_state</key> - <value>0</value> + <value>False</value> </param> <param> - <key>i_final_state</key> - <value>-1</value> + <key>type</key> + <value>b</value> </param> <param> - <key>interleaver</key> - <value>trellis.interleaver(block,666)</value> + <key>fsm_args</key> + <value>prefix+fsm</value> </param> <param> <key>block_size</key> <value>block</value> </param> <param> - <key>iterations</key> - <value>10</value> + <key>init_state</key> + <value>-1</value> </param> <param> - <key>siso_type</key> - <value>trellis.TRELLIS_MIN_SUM</value> + <key>final_state</key> + <value>-1</value> </param> <param> <key>alias</key> @@ -840,7 +981,7 @@ </param> <param> <key>_coordinate</key> - <value>(379, 332)</value> + <value>(544, 711)</value> </param> <param> <key>_rotation</key> @@ -848,34 +989,50 @@ </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>trellis_viterbi_combined_xx_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> + <key>type</key> + <value>f</value> </param> <param> <key>out_type</key> - <value>float</value> + <value>b</value> </param> <param> - <key>symbol_table</key> - <value>-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0,-7,0,-5,0,-3,0,-1,0,1,0,3,0,5,0,7,0</value> + <key>fsm_args</key> + <value>prefix+fsm</value> </param> <param> - <key>dimension</key> - <value>2</value> + <key>block_size</key> + <value>block</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>init_state</key> + <value>-1</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> + </param> + <param> + <key>dim</key> + <value>dim</value> + </param> + <param> + <key>table</key> + <value>constellation</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> <key>alias</key> @@ -895,7 +1052,7 @@ </param> <param> <key>_coordinate</key> - <value>(552, 164)</value> + <value>(440, 866)</value> </param> <param> <key>_rotation</key> @@ -903,50 +1060,53 @@ </param> </block> <block> - <key>blocks_throttle</key> + <key>import</key> <param> <key>id</key> - <value>blocks_throttle_0</value> + <value>import_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>short</value> + <key>import</key> + <value>import numpy</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>alias</key> + <value></value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>_coordinate</key> + <value>(16, 140)</value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>import</key> <param> - <key>alias</key> - <value></value> + <key>id</key> + <value>import_0_0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(553, 89)</value> + <value>(24, 196)</value> </param> <param> <key>_rotation</key> @@ -954,30 +1114,34 @@ </param> </block> <block> - <key>analog_noise_source_x</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>analog_noise_source_x_0</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> + <key>in_type</key> + <value>byte</value> + </param> + <param> + <key>out_type</key> <value>float</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>symbol_table</key> + <value>constellation</value> </param> <param> - <key>amp</key> - <value>noisevar</value> + <key>dimension</key> + <value>dim</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>num_ports</key> + <value>1</value> </param> <param> <key>alias</key> @@ -997,7 +1161,7 @@ </param> <param> <key>_coordinate</key> - <value>(551, 230)</value> + <value>(696, 373)</value> </param> <param> <key>_rotation</key> @@ -1005,10 +1169,10 @@ </param> </block> <block> - <key>blocks_add_xx</key> + <key>trellis_encoder_xx</key> <param> <key>id</key> - <value>blocks_add_xx_1</value> + <value>trellis_encoder_xx_0</value> </param> <param> <key>_enabled</key> @@ -1016,15 +1180,23 @@ </param> <param> <key>type</key> - <value>float</value> + <value>bb</value> </param> <param> - <key>num_inputs</key> - <value>2</value> + <key>fsm_args</key> + <value>prefix+fsm</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>init_state</key> + <value>0</value> + </param> + <param> + <key>blockwise</key> + <value>False</value> + </param> + <param> + <key>blocklength</key> + <value>0</value> </param> <param> <key>alias</key> @@ -1044,7 +1216,7 @@ </param> <param> <key>_coordinate</key> - <value>(839, 176)</value> + <value>(424, 373)</value> </param> <param> <key>_rotation</key> @@ -1052,81 +1224,93 @@ </param> </block> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>trellis_metrics_x_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>trellis_pccc_encoder_xx_0</sink_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_pccc_encoder_xx_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>trellis_encoder_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_metrics_x_0</source_block_id> - <sink_block_id>trellis_pccc_decoder_x_0</sink_block_id> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_pccc_decoder_x_0</source_block_id> - <sink_block_id>blocks_sub_xx_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_short_to_float_1_0</source_block_id> - <sink_block_id>qtgui_number_sink_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_metrics_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> + <source_block_id>trellis_metrics_x_0</source_block_id> + <sink_block_id>trellis_viterbi_x_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_sub_xx_0</source_block_id> - <sink_block_id>blocks_multiply_xx_2_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_multiply_xx_2_0</source_block_id> - <sink_block_id>blocks_short_to_float_1_0</sink_block_id> + <source_block_id>trellis_viterbi_x_0</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> + <connection> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> </flow_graph> diff --git a/gr-trellis/examples/grc/turbo_equalization.grc b/gr-trellis/examples/grc/turbo_equalization.grc new file mode 100644 index 0000000000..b2c3b20c6a --- /dev/null +++ b/gr-trellis/examples/grc/turbo_equalization.grc @@ -0,0 +1,2758 @@ +<?xml version='1.0' encoding='ASCII'?> +<?grc format='1' created='3.7.6'?> +<flow_graph> + <timestamp>Wed Oct 1 11:04:18 2014</timestamp> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>fsm_i</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>trellis.fsm(len(modulation[1]),len(channel))</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(320, 293)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>prefix</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>"@FSM_FILE_INSTALL_DIR@"</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(768, 21)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>tot_mod</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>fu.make_isi_lookup(modulation,channel,False)</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(320, 381)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>R</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>100e3</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(216, 109)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>modulation</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>fu.pam4</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(320, 117)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>channel</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>fu.c_channel</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(320, 205)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>bpsym</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>int(round(math.log(fsm_o.I())/math.log(2)))</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(528, 29)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>noisevar</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1080, 181)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>Es</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(776, 181)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>interleaver</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>trellis.interleaver(block_b/bpsym,666)</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(528, 117)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>fsm_o</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>trellis.fsm(prefix+"/awgn1o2_4.fsm")</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(328, 29)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>block_b</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>bpsym*1000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(216, 21)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>id</key> + <value>import_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>import</key> + <value>import gnuradio.trellis.fsm_utils as fu</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(24, 252)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>id</key> + <value>import_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>import</key> + <value>import numpy</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(16, 140)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>id</key> + <value>import_0_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>import</key> + <value>import math</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(24, 188)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> + <param> + <key>_coordinate</key> + <value>(608, 1076)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_add_xx</key> + <param> + <key>id</key> + <value>blocks_add_xx_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>num_inputs</key> + <value>2</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(688, 944)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>analog_noise_source_x</key> + <param> + <key>id</key> + <value>analog_noise_source_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> + </param> + <param> + <key>amp</key> + <value>noisevar**0.5</value> + </param> + <param> + <key>seed</key> + <value>-42</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(288, 958)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>fir_filter_xxx</key> + <param> + <key>id</key> + <value>fir_filter_xxx_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>fff</value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>taps</key> + <value>fu.c_channel</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(448, 861)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>digital_chunks_to_symbols_xx</key> + <param> + <key>id</key> + <value>digital_chunks_to_symbols_xx_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>in_type</key> + <value>byte</value> + </param> + <param> + <key>out_type</key> + <value>float</value> + </param> + <param> + <key>symbol_table</key> + <value>modulation[1]</value> + </param> + <param> + <key>dimension</key> + <value>modulation[0]</value> + </param> + <param> + <key>num_ports</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(480, 733)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_permutation</key> + <param> + <key>id</key> + <value>trellis_permutation_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>interleaver_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>table</key> + <value>interleaver.INTER()</value> + </param> + <param> + <key>syms_per_block</key> + <value>1</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(208, 726)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>info_i</value> + </param> + <param> + <key>_coordinate</key> + <value>(968, 572)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_throttle</key> + <param> + <key>id</key> + <value>blocks_throttle_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>samples_per_second</key> + <value>R</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>ignoretag</key> + <value>True</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(256, 580)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>analog_random_source_x</key> + <param> + <key>id</key> + <value>analog_random_source_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>min</key> + <value>0</value> + </param> + <param> + <key>max</key> + <value>2</value> + </param> + <param> + <key>num_samps</key> + <value>1007</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(16, 559)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_pack_k_bits_bb</key> + <param> + <key>id</key> + <value>blocks_pack_k_bits_bb_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>k</key> + <value>bpsym</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(440, 580)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_encoder_xx</key> + <param> + <key>id</key> + <value>trellis_encoder_xx_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>bb</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm_o</value> + </param> + <param> + <key>init_state</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(672, 573)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> + <param> + <key>_coordinate</key> + <value>(248, 524)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate</value> + </param> + <param> + <key>_coordinate</key> + <value>(864, 1380)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_unpack_k_bits_bb</key> + <param> + <key>id</key> + <value>blocks_unpack_k_bits_bb_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>k</key> + <value>bpsym</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(552, 1380)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_char_to_float</key> + <param> + <key>id</key> + <value>blocks_char_to_float_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>scale</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(72, 1380)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_permutation</key> + <param> + <key>id</key> + <value>trellis_permutation_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>interleaver_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>table</key> + <value>interleaver.DEINTER()</value> + </param> + <param> + <key>syms_per_block</key> + <value>1</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(568, 1222)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_viterbi_combined_xx</key> + <param> + <key>id</key> + <value>trellis_viterbi_combined_xx_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>f</value> + </param> + <param> + <key>out_type</key> + <value>b</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm_i</value> + </param> + <param> + <key>block_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>init_state</key> + <value>-1</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> + </param> + <param> + <key>dim</key> + <value>tot_mod[0]</value> + </param> + <param> + <key>table</key> + <value>tot_mod[1]</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(288, 1194)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_1_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate_i</value> + </param> + <param> + <key>_coordinate</key> + <value>(896, 1228)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> + <param> + <key>_coordinate</key> + <value>(40, 1236)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>analog_const_source_x</key> + <param> + <key>id</key> + <value>analog_const_source_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>const</key> + <value>0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(88, 1788)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_viterbi_combined_xx</key> + <param> + <key>id</key> + <value>trellis_viterbi_combined_xx_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>f</value> + </param> + <param> + <key>out_type</key> + <value>b</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm_o</value> + </param> + <param> + <key>block_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>init_state</key> + <value>-1</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> + </param> + <param> + <key>dim</key> + <value>1</value> + </param> + <param> + <key>table</key> + <value>0,1,2,3</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_HARD_SYMBOL</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(256, 1338)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_siso_combined_f</key> + <param> + <key>id</key> + <value>trellis_siso_combined_f_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm_i</value> + </param> + <param> + <key>block_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>init_state</key> + <value>-1</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> + </param> + <param> + <key>a_post_in</key> + <value>True</value> + </param> + <param> + <key>a_post_out</key> + <value>False</value> + </param> + <param> + <key>siso_type</key> + <value>trellis.TRELLIS_MIN_SUM</value> + </param> + <param> + <key>dim</key> + <value>tot_mod[0]</value> + </param> + <param> + <key>table</key> + <value>tot_mod[1]</value> + </param> + <param> + <key>metric_type</key> + <value>trellis.TRELLIS_EUCLIDEAN</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(280, 1765)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_permutation</key> + <param> + <key>id</key> + <value>trellis_permutation_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>interleaver_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>table</key> + <value>interleaver.DEINTER()</value> + </param> + <param> + <key>syms_per_block</key> + <value>fsm_o.O()</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(616, 1814)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_viterbi_x</key> + <param> + <key>id</key> + <value>trellis_viterbi_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>b</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm_o</value> + </param> + <param> + <key>block_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>init_state</key> + <value>0</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(288, 2023)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> + <param> + <key>_coordinate</key> + <value>(72, 1860)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_1_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>observation</value> + </param> + <param> + <key>_coordinate</key> + <value>(88, 2564)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_unpack_k_bits_bb</key> + <param> + <key>id</key> + <value>blocks_unpack_k_bits_bb_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>k</key> + <value>bpsym</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(584, 2044)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_1_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate1</value> + </param> + <param> + <key>_coordinate</key> + <value>(896, 2044)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_0_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate1</value> + </param> + <param> + <key>_coordinate</key> + <value>(144, 2284)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_0_1_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> + <param> + <key>_coordinate</key> + <value>(152, 2188)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_0_1_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> + <param> + <key>_coordinate</key> + <value>(176, 2732)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_0_0_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate2</value> + </param> + <param> + <key>_coordinate</key> + <value>(168, 2828)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_0_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>info</value> + </param> + <param> + <key>_coordinate</key> + <value>(80, 1556)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_source</key> + <param> + <key>id</key> + <value>virtual_source_0_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate</value> + </param> + <param> + <key>_coordinate</key> + <value>(72, 1652)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>wxgui_numbersink2</key> + <param> + <key>id</key> + <value>wxgui_numbersink2_3_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>title</key> + <value>BER_hard</value> + </param> + <param> + <key>units</key> + <value>BER</value> + </param> + <param> + <key>samp_rate</key> + <value>R</value> + </param> + <param> + <key>min_value</key> + <value>0</value> + </param> + <param> + <key>max_value</key> + <value>1.0</value> + </param> + <param> + <key>factor</key> + <value>1.0</value> + </param> + <param> + <key>decimal_places</key> + <value>6</value> + </param> + <param> + <key>ref_level</key> + <value>0</value> + </param> + <param> + <key>number_rate</key> + <value>15</value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>False</value> + </param> + <param> + <key>avg_alpha</key> + <value>0.001</value> + </param> + <param> + <key>show_gauge</key> + <value>False</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(504, 1549)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>wxgui_numbersink2</key> + <param> + <key>id</key> + <value>wxgui_numbersink2_3_0_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>title</key> + <value>BER_soft</value> + </param> + <param> + <key>units</key> + <value>BER</value> + </param> + <param> + <key>samp_rate</key> + <value>R</value> + </param> + <param> + <key>min_value</key> + <value>0</value> + </param> + <param> + <key>max_value</key> + <value>1.0</value> + </param> + <param> + <key>factor</key> + <value>1.0</value> + </param> + <param> + <key>decimal_places</key> + <value>6</value> + </param> + <param> + <key>ref_level</key> + <value>0</value> + </param> + <param> + <key>number_rate</key> + <value>15</value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>False</value> + </param> + <param> + <key>avg_alpha</key> + <value>0.001</value> + </param> + <param> + <key>show_gauge</key> + <value>False</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(576, 2181)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>wxgui_numbersink2</key> + <param> + <key>id</key> + <value>wxgui_numbersink2_3_0_0_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>title</key> + <value>BER_turbo</value> + </param> + <param> + <key>units</key> + <value>BER</value> + </param> + <param> + <key>samp_rate</key> + <value>R</value> + </param> + <param> + <key>min_value</key> + <value>0</value> + </param> + <param> + <key>max_value</key> + <value>1.0</value> + </param> + <param> + <key>factor</key> + <value>1.0</value> + </param> + <param> + <key>decimal_places</key> + <value>6</value> + </param> + <param> + <key>ref_level</key> + <value>0</value> + </param> + <param> + <key>number_rate</key> + <value>15</value> + </param> + <param> + <key>peak_hold</key> + <value>False</value> + </param> + <param> + <key>average</key> + <value>False</value> + </param> + <param> + <key>avg_alpha</key> + <value>0.001</value> + </param> + <param> + <key>show_gauge</key> + <value>False</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(600, 2725)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_sccc_decoder_combined_xx</key> + <param> + <key>id</key> + <value>trellis_sccc_decoder_combined_xx_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>f</value> + </param> + <param> + <key>out_type</key> + <value>b</value> + </param> + <param> + <key>o_fsm_args</key> + <value>fsm_o</value> + </param> + <param> + <key>o_init_state</key> + <value>-1</value> + </param> + <param> + <key>o_final_state</key> + <value>-1</value> + </param> + <param> + <key>i_fsm_args</key> + <value>fsm_i</value> + </param> + <param> + <key>i_init_state</key> + <value>-1</value> + </param> + <param> + <key>i_final_state</key> + <value>-1</value> + </param> + <param> + <key>interleaver</key> + <value>interleaver</value> + </param> + <param> + <key>block_size</key> + <value>interleaver.K()</value> + </param> + <param> + <key>iterations</key> + <value>5</value> + </param> + <param> + <key>dim</key> + <value>tot_mod[0]</value> + </param> + <param> + <key>table</key> + <value>tot_mod[1]</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> + </param> + <param> + <key>siso_type</key> + <value>trellis.TRELLIS_MIN_SUM</value> + </param> + <param> + <key>scaling</key> + <value>1.0</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(456, 2481)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blks2_error_rate</key> + <param> + <key>id</key> + <value>blks2_error_rate_0_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>'BER'</value> + </param> + <param> + <key>win_size</key> + <value>block_b*100</value> + </param> + <param> + <key>bits_per_symbol</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(408, 2766)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blks2_error_rate</key> + <param> + <key>id</key> + <value>blks2_error_rate_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>'BER'</value> + </param> + <param> + <key>win_size</key> + <value>block_b*100</value> + </param> + <param> + <key>bits_per_symbol</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(384, 2230)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blks2_error_rate</key> + <param> + <key>id</key> + <value>blks2_error_rate_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>'BER'</value> + </param> + <param> + <key>win_size</key> + <value>block_b*100</value> + </param> + <param> + <key>bits_per_symbol</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(312, 1598)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable_slider</key> + <param> + <key>id</key> + <value>EsN0_dB</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>label</key> + <value>Es/N0 (dB)</value> + </param> + <param> + <key>value</key> + <value>13.0</value> + </param> + <param> + <key>min</key> + <value>-10</value> + </param> + <param> + <key>max</key> + <value>30</value> + </param> + <param> + <key>num_steps</key> + <value>1000</value> + </param> + <param> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + <param> + <key>converver</key> + <value>float_converter</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(936, 129)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>options</key> + <param> + <key>id</key> + <value>turbo_equalization</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>title</key> + <value>Hard/Soft/Turbo Equalization</value> + </param> + <param> + <key>author</key> + <value>AA</value> + </param> + <param> + <key>description</key> + <value>gnuradio flow graph</value> + </param> + <param> + <key>window_size</key> + <value>2048, 3048</value> + </param> + <param> + <key>generate_options</key> + <value>wx_gui</value> + </param> + <param> + <key>category</key> + <value>Custom</value> + </param> + <param> + <key>run_options</key> + <value>prompt</value> + </param> + <param> + <key>run</key> + <value>True</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(10, 10)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_unpack_k_bits_bb</key> + <param> + <key>id</key> + <value>blocks_unpack_k_bits_bb_0_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>k</key> + <value>bpsym</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(720, 2572)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>virtual_sink</key> + <param> + <key>id</key> + <value>virtual_sink_0_1_1_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>stream_id</key> + <value>estimate2</value> + </param> + <param> + <key>_coordinate</key> + <value>(920, 2572)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>note</key> + <param> + <key>id</key> + <value>note_0_1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>note</key> + <value>This is the full-fledged turbo equalizer/decoder</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1144, 2572)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>note</key> + <param> + <key>id</key> + <value>note_0_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>note</key> + <value>This is a better soft-equalizer/Viterbi decoder</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1016, 1908)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>note</key> + <param> + <key>id</key> + <value>note_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>note</key> + <value>This is the simplest hard Viterbi equalizer/hard Viterbi decoder</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(1096, 1316)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <connection> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> + <sink_block_id>fir_filter_xxx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>fir_filter_xxx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_pack_k_bits_bb_0</source_block_id> + <sink_block_id>trellis_encoder_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>trellis_permutation_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_permutation_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>virtual_sink_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_char_to_float_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_permutation_0_0</source_block_id> + <sink_block_id>blocks_char_to_float_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_permutation_0_0</source_block_id> + <sink_block_id>virtual_sink_0_1_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id> + <sink_block_id>virtual_sink_0_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_viterbi_combined_xx_1</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> + <sink_block_id>trellis_permutation_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_unpack_k_bits_bb_0_0</source_block_id> + <sink_block_id>virtual_sink_0_1_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_1</source_block_id> + <sink_block_id>trellis_siso_combined_f_0</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>analog_const_source_x_0</source_block_id> + <sink_block_id>trellis_siso_combined_f_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_siso_combined_f_0</source_block_id> + <sink_block_id>trellis_permutation_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_permutation_0_0_0</source_block_id> + <sink_block_id>trellis_viterbi_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_viterbi_x_0</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_1_0</source_block_id> + <sink_block_id>trellis_sccc_decoder_combined_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_unpack_k_bits_bb_0_0_0</source_block_id> + <sink_block_id>virtual_sink_0_1_1_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>trellis_sccc_decoder_combined_xx_0</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blks2_error_rate_0_0_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_0_1_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_0_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>blks2_error_rate_0_0_0_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0_0_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_0_1_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_0_0_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>blks2_error_rate_0_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_0_1</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>virtual_source_0_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> +</flow_graph> diff --git a/gr-trellis/examples/grc/equalization.grc b/gr-trellis/examples/grc/viterbi_equalization.grc index 0e9c1bd5f5..2f69ead429 100644 --- a/gr-trellis/examples/grc/equalization.grc +++ b/gr-trellis/examples/grc/viterbi_equalization.grc @@ -69,7 +69,7 @@ <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>noisevar</value> </param> <param> <key>_enabled</key> @@ -77,7 +77,7 @@ </param> <param> <key>value</key> - <value>bpsym*1000</value> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> <param> <key>alias</key> @@ -85,7 +85,7 @@ </param> <param> <key>_coordinate</key> - <value>(216, 21)</value> + <value>(872, 157)</value> </param> <param> <key>_rotation</key> @@ -96,7 +96,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>bpsym</value> </param> <param> <key>_enabled</key> @@ -104,7 +104,7 @@ </param> <param> <key>value</key> - <value>100e3</value> + <value>int(round(math.log(fsm.I())/math.log(2)))</value> </param> <param> <key>alias</key> @@ -112,7 +112,7 @@ </param> <param> <key>_coordinate</key> - <value>(216, 109)</value> + <value>(528, 13)</value> </param> <param> <key>_rotation</key> @@ -150,7 +150,7 @@ <key>variable</key> <param> <key>id</key> - <value>modulation</value> + <value>R</value> </param> <param> <key>_enabled</key> @@ -158,7 +158,7 @@ </param> <param> <key>value</key> - <value>fu.pam4</value> + <value>100e3</value> </param> <param> <key>alias</key> @@ -166,7 +166,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 21)</value> + <value>(216, 109)</value> </param> <param> <key>_rotation</key> @@ -177,7 +177,7 @@ <key>variable</key> <param> <key>id</key> - <value>fsm</value> + <value>block</value> </param> <param> <key>_enabled</key> @@ -185,7 +185,7 @@ </param> <param> <key>value</key> - <value>trellis.fsm(len(modulation[1]),len(channel))</value> + <value>bpsym*1000</value> </param> <param> <key>alias</key> @@ -193,7 +193,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 157)</value> + <value>(216, 21)</value> </param> <param> <key>_rotation</key> @@ -204,7 +204,7 @@ <key>variable</key> <param> <key>id</key> - <value>tot_channel</value> + <value>fsm</value> </param> <param> <key>_enabled</key> @@ -212,7 +212,7 @@ </param> <param> <key>value</key> - <value>fu.make_isi_lookup(modulation,channel,True)</value> + <value>trellis.fsm(len(modulation[1]),len(channel))</value> </param> <param> <key>alias</key> @@ -220,7 +220,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 229)</value> + <value>(320, 157)</value> </param> <param> <key>_rotation</key> @@ -231,7 +231,7 @@ <key>variable</key> <param> <key>id</key> - <value>bpsym</value> + <value>tot_mod</value> </param> <param> <key>_enabled</key> @@ -239,7 +239,7 @@ </param> <param> <key>value</key> - <value>int(round(math.log(fsm.I())/math.log(2)))</value> + <value>fu.make_isi_lookup(modulation,channel,False)</value> </param> <param> <key>alias</key> @@ -247,7 +247,7 @@ </param> <param> <key>_coordinate</key> - <value>(528, 13)</value> + <value>(320, 229)</value> </param> <param> <key>_rotation</key> @@ -258,7 +258,7 @@ <key>variable</key> <param> <key>id</key> - <value>Es</value> + <value>modulation</value> </param> <param> <key>_enabled</key> @@ -266,7 +266,7 @@ </param> <param> <key>value</key> - <value>1</value> + <value>fu.pam4</value> </param> <param> <key>alias</key> @@ -274,7 +274,7 @@ </param> <param> <key>_coordinate</key> - <value>(608, 157)</value> + <value>(320, 21)</value> </param> <param> <key>_rotation</key> @@ -285,7 +285,7 @@ <key>variable</key> <param> <key>id</key> - <value>noisevar</value> + <value>Es</value> </param> <param> <key>_enabled</key> @@ -293,7 +293,7 @@ </param> <param> <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> </param> <param> <key>alias</key> @@ -301,7 +301,7 @@ </param> <param> <key>_coordinate</key> - <value>(872, 157)</value> + <value>(568, 157)</value> </param> <param> <key>_rotation</key> @@ -390,10 +390,10 @@ </param> </block> <block> - <key>blocks_throttle</key> + <key>blks2_error_rate</key> <param> <key>id</key> - <value>blocks_throttle_0</value> + <value>blks2_error_rate_0</value> </param> <param> <key>_enabled</key> @@ -401,21 +401,17 @@ </param> <param> <key>type</key> - <value>byte</value> + <value>'BER'</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>win_size</key> + <value>block*100</value> </param> <param> - <key>vlen</key> + <key>bits_per_symbol</key> <value>1</value> </param> <param> - <key>ignoretag</key> - <value>True</value> - </param> - <param> <key>alias</key> <value></value> </param> @@ -433,7 +429,7 @@ </param> <param> <key>_coordinate</key> - <value>(216, 380)</value> + <value>(312, 1766)</value> </param> <param> <key>_rotation</key> @@ -441,54 +437,22 @@ </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>virtual_source_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>short</value> - </param> - <param> - <key>out_type</key> - <value>float</value> - </param> - <param> - <key>symbol_table</key> - <value>tot_channel[1]</value> - </param> - <param> - <key>dimension</key> - <value>tot_channel[0]</value> - </param> - <param> - <key>num_ports</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>info</value> </param> <param> <key>_coordinate</key> - <value>(920, 373)</value> + <value>(80, 1724)</value> </param> <param> <key>_rotation</key> @@ -496,46 +460,22 @@ </param> </block> <block> - <key>blocks_add_xx</key> + <key>virtual_source</key> <param> <key>id</key> - <value>blocks_add_xx_1</value> + <value>virtual_source_0_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>float</value> - </param> - <param> - <key>num_inputs</key> - <value>2</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> + <key>stream_id</key> + <value>estimate</value> </param> <param> <key>_coordinate</key> - <value>(912, 488)</value> + <value>(72, 1820)</value> </param> <param> <key>_rotation</key> @@ -543,10 +483,10 @@ </param> </block> <block> - <key>blocks_null_sink</key> + <key>wxgui_numbersink2</key> <param> <key>id</key> - <value>blocks_null_sink_1</value> + <value>wxgui_numbersink2_3_0_0</value> </param> <param> <key>_enabled</key> @@ -557,79 +497,80 @@ <value>float</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>title</key> + <value>BER</value> </param> <param> - <key>num_inputs</key> - <value>1</value> + <key>units</key> + <value>BER</value> </param> <param> - <key>bus_conns</key> - <value>[[0,],]</value> + <key>samp_rate</key> + <value>R</value> </param> <param> - <key>alias</key> - <value></value> + <key>min_value</key> + <value>0</value> </param> <param> - <key>affinity</key> - <value></value> + <key>max_value</key> + <value>1.0</value> </param> <param> - <key>_coordinate</key> - <value>(1024, 552)</value> + <key>factor</key> + <value>1.0</value> </param> <param> - <key>_rotation</key> + <key>decimal_places</key> + <value>6</value> + </param> + <param> + <key>ref_level</key> <value>0</value> </param> - </block> - <block> - <key>analog_noise_source_x</key> <param> - <key>id</key> - <value>analog_noise_source_x_0</value> + <key>number_rate</key> + <value>15</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>peak_hold</key> + <value>False</value> </param> <param> - <key>type</key> - <value>float</value> + <key>average</key> + <value>False</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>avg_alpha</key> + <value>0.001</value> </param> <param> - <key>amp</key> - <value>noisevar**0.5</value> + <key>show_gauge</key> + <value>False</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>win_size</key> + <value></value> </param> <param> - <key>alias</key> + <key>grid_pos</key> <value></value> </param> <param> - <key>affinity</key> + <key>notebook</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>affinity</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(520, 494)</value> + <value>(728, 1709)</value> </param> <param> <key>_rotation</key> @@ -637,46 +578,26 @@ </param> </block> <block> - <key>trellis_encoder_xx</key> + <key>note</key> <param> <key>id</key> - <value>trellis_encoder_xx_0</value> + <value>note_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>bs</value> - </param> - <param> - <key>fsm_args</key> - <value>fsm</value> - </param> - <param> - <key>init_state</key> - <value>0</value> + <key>note</key> + <value>Substititue the metrics/Viterbi block with Viterbi_combo</value> </param> <param> <key>alias</key> <value></value> </param> <param> - <key>affinity</key> - <value></value> - </param> - <param> - <key>minoutbuf</key> - <value>0</value> - </param> - <param> - <key>maxoutbuf</key> - <value>0</value> - </param> - <param> <key>_coordinate</key> - <value>(648, 373)</value> + <value>(704, 1468)</value> </param> <param> <key>_rotation</key> @@ -699,7 +620,7 @@ </param> <param> <key>_coordinate</key> - <value>(16, 732)</value> + <value>(40, 1236)</value> </param> <param> <key>_rotation</key> @@ -710,7 +631,7 @@ <key>virtual_sink</key> <param> <key>id</key> - <value>virtual_sink_0</value> + <value>virtual_sink_0_0</value> </param> <param> <key>_enabled</key> @@ -718,11 +639,11 @@ </param> <param> <key>stream_id</key> - <value>observation</value> + <value>info</value> </param> <param> <key>_coordinate</key> - <value>(832, 620)</value> + <value>(232, 524)</value> </param> <param> <key>_rotation</key> @@ -730,45 +651,54 @@ </param> </block> <block> - <key>virtual_source</key> + <key>analog_random_source_x</key> <param> <key>id</key> - <value>virtual_source_0_0_0</value> + <value>analog_random_source_x_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>type</key> + <value>byte</value> </param> <param> - <key>_coordinate</key> - <value>(72, 1244)</value> + <key>min</key> + <value>0</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>max</key> + <value>2</value> </param> - </block> - <block> - <key>virtual_source</key> <param> - <key>id</key> - <value>virtual_source_0_0</value> + <key>num_samps</key> + <value>1007</value> </param> <param> - <key>_enabled</key> + <key>repeat</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>info</value> + <key>alias</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(80, 1148)</value> + <value>(16, 559)</value> </param> <param> <key>_rotation</key> @@ -776,10 +706,10 @@ </param> </block> <block> - <key>wxgui_numbersink2</key> + <key>blocks_null_sink</key> <param> <key>id</key> - <value>wxgui_numbersink2_3_0_0</value> + <value>blocks_null_sink_1</value> </param> <param> <key>_enabled</key> @@ -790,68 +720,82 @@ <value>float</value> </param> <param> - <key>title</key> - <value>BER</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>units</key> - <value>BER</value> + <key>num_inputs</key> + <value>1</value> </param> <param> - <key>samp_rate</key> - <value>R</value> + <key>bus_conns</key> + <value>[[0,],]</value> </param> <param> - <key>min_value</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> - <key>max_value</key> - <value>1.0</value> + <key>affinity</key> + <value></value> </param> <param> - <key>factor</key> - <value>1.0</value> + <key>_coordinate</key> + <value>(800, 1008)</value> </param> <param> - <key>decimal_places</key> - <value>6</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>virtual_sink</key> <param> - <key>ref_level</key> - <value>0</value> + <key>id</key> + <value>virtual_sink_0</value> </param> <param> - <key>number_rate</key> - <value>15</value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>peak_hold</key> - <value>False</value> + <key>stream_id</key> + <value>observation</value> </param> <param> - <key>average</key> - <value>False</value> + <key>_coordinate</key> + <value>(608, 1076)</value> </param> <param> - <key>avg_alpha</key> - <value>0.001</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>fir_filter_xxx</key> <param> - <key>show_gauge</key> - <value>False</value> + <key>id</key> + <value>fir_filter_xxx_0</value> </param> <param> - <key>win_size</key> - <value></value> + <key>_enabled</key> + <value>True</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>type</key> + <value>fff</value> </param> <param> - <key>notebook</key> - <value></value> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>taps</key> + <value>fu.c_channel</value> + </param> + <param> + <key>samp_delay</key> + <value>0</value> </param> <param> <key>alias</key> @@ -862,8 +806,16 @@ <value></value> </param> <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> <key>_coordinate</key> - <value>(728, 1133)</value> + <value>(904, 613)</value> </param> <param> <key>_rotation</key> @@ -871,10 +823,10 @@ </param> </block> <block> - <key>analog_random_source_x</key> + <key>blocks_add_xx</key> <param> <key>id</key> - <value>analog_random_source_x_0</value> + <value>blocks_add_xx_1</value> </param> <param> <key>_enabled</key> @@ -882,23 +834,15 @@ </param> <param> <key>type</key> - <value>byte</value> - </param> - <param> - <key>min</key> - <value>0</value> + <value>float</value> </param> <param> - <key>max</key> + <key>num_inputs</key> <value>2</value> </param> <param> - <key>num_samps</key> - <value>1007</value> - </param> - <param> - <key>repeat</key> - <value>True</value> + <key>vlen</key> + <value>1</value> </param> <param> <key>alias</key> @@ -918,7 +862,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 359)</value> + <value>(688, 944)</value> </param> <param> <key>_rotation</key> @@ -926,49 +870,30 @@ </param> </block> <block> - <key>virtual_sink</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>virtual_sink_0_0</value> + <value>digital_chunks_to_symbols_xx_0</value> </param> <param> <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>stream_id</key> - <value>info</value> - </param> - <param> - <key>_coordinate</key> - <value>(208, 324)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> - <key>blocks_packed_to_unpacked_xx</key> - <param> - <key>id</key> - <value>blocks_packed_to_unpacked_xx_0</value> + <value>False</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>in_type</key> + <value>short</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>out_type</key> + <value>float</value> </param> <param> - <key>bits_per_chunk</key> - <value>bpsym</value> + <key>symbol_table</key> + <value>tot_mod[1]</value> </param> <param> - <key>endianness</key> - <value>gr.GR_MSB_FIRST</value> + <key>dimension</key> + <value>tot_mod[0]</value> </param> <param> <key>num_ports</key> @@ -992,7 +917,7 @@ </param> <param> <key>_coordinate</key> - <value>(408, 397)</value> + <value>(944, 461)</value> </param> <param> <key>_rotation</key> @@ -1000,10 +925,10 @@ </param> </block> <block> - <key>blocks_unpacked_to_packed_xx</key> + <key>analog_noise_source_x</key> <param> <key>id</key> - <value>blocks_unpacked_to_packed_xx_0</value> + <value>analog_noise_source_x_0</value> </param> <param> <key>_enabled</key> @@ -1011,19 +936,19 @@ </param> <param> <key>type</key> - <value>byte</value> + <value>float</value> </param> <param> - <key>bits_per_chunk</key> - <value>1</value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>endianness</key> - <value>gr.GR_MSB_FIRST</value> + <key>amp</key> + <value>noisevar**0.5</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>seed</key> + <value>-42</value> </param> <param> <key>alias</key> @@ -1043,7 +968,7 @@ </param> <param> <key>_coordinate</key> - <value>(400, 309)</value> + <value>(288, 958)</value> </param> <param> <key>_rotation</key> @@ -1051,49 +976,54 @@ </param> </block> <block> - <key>note</key> + <key>trellis_metrics_x</key> <param> <key>id</key> - <value>note_0</value> + <value>trellis_metrics_x_0</value> </param> <param> <key>_enabled</key> - <value>True</value> + <value>False</value> </param> <param> - <key>note</key> - <value>Substititue the metrics/Viterbi block with Viterbi_combo</value> + <key>type</key> + <value>f</value> </param> <param> - <key>alias</key> - <value></value> + <key>card</key> + <value>fsm.O()</value> </param> <param> - <key>_coordinate</key> - <value>(720, 908)</value> + <key>dim</key> + <value>tot_mod[0]</value> </param> <param> - <key>_rotation</key> - <value>0</value> + <key>table</key> + <value>tot_mod[1]</value> </param> - </block> - <block> - <key>virtual_sink</key> <param> - <key>id</key> - <value>virtual_sink_0_1</value> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> </param> <param> - <key>_enabled</key> - <value>True</value> + <key>alias</key> + <value></value> </param> <param> - <key>stream_id</key> - <value>estimate</value> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> </param> <param> <key>_coordinate</key> - <value>(984, 812)</value> + <value>(272, 1271)</value> </param> <param> <key>_rotation</key> @@ -1101,50 +1031,58 @@ </param> </block> <block> - <key>blocks_packed_to_unpacked_xx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>blocks_packed_to_unpacked_xx_0_0</value> + <value>EsN0_dB</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>byte</value> + <key>label</key> + <value>Es/N0 (dB)</value> </param> <param> - <key>bits_per_chunk</key> - <value>1</value> + <key>value</key> + <value>20.0</value> </param> <param> - <key>endianness</key> - <value>gr.GR_MSB_FIRST</value> + <key>min</key> + <value>-10</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>max</key> + <value>30</value> </param> <param> - <key>alias</key> - <value></value> + <key>num_steps</key> + <value>1000</value> </param> <param> - <key>affinity</key> + <key>style</key> + <value>wx.SL_HORIZONTAL</value> + </param> + <param> + <key>converver</key> + <value>float_converter</value> + </param> + <param> + <key>grid_pos</key> <value></value> </param> <param> - <key>minoutbuf</key> - <value>0</value> + <key>notebook</key> + <value></value> </param> <param> - <key>maxoutbuf</key> - <value>0</value> + <key>alias</key> + <value></value> </param> <param> <key>_coordinate</key> - <value>(768, 813)</value> + <value>(728, 105)</value> </param> <param> <key>_rotation</key> @@ -1152,10 +1090,10 @@ </param> </block> <block> - <key>blocks_unpacked_to_packed_xx</key> + <key>blocks_throttle</key> <param> <key>id</key> - <value>blocks_unpacked_to_packed_xx_0_0</value> + <value>blocks_throttle_0</value> </param> <param> <key>_enabled</key> @@ -1166,16 +1104,16 @@ <value>byte</value> </param> <param> - <key>bits_per_chunk</key> - <value>bpsym</value> + <key>samples_per_second</key> + <value>R</value> </param> <param> - <key>endianness</key> - <value>gr.GR_MSB_FIRST</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>num_ports</key> - <value>1</value> + <key>ignoretag</key> + <value>True</value> </param> <param> <key>alias</key> @@ -1195,7 +1133,7 @@ </param> <param> <key>_coordinate</key> - <value>(760, 749)</value> + <value>(240, 580)</value> </param> <param> <key>_rotation</key> @@ -1203,25 +1141,33 @@ </param> </block> <block> - <key>blks2_error_rate</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>blks2_error_rate_0</value> + <value>digital_chunks_to_symbols_xx_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>'BER'</value> + <key>in_type</key> + <value>byte</value> </param> <param> - <key>win_size</key> - <value>block*100</value> + <key>out_type</key> + <value>float</value> </param> <param> - <key>bits_per_symbol</key> + <key>symbol_table</key> + <value>modulation[1]</value> + </param> + <param> + <key>dimension</key> + <value>modulation[0]</value> + </param> + <param> + <key>num_ports</key> <value>1</value> </param> <param> @@ -1242,7 +1188,7 @@ </param> <param> <key>_coordinate</key> - <value>(312, 1184)</value> + <value>(672, 613)</value> </param> <param> <key>_rotation</key> @@ -1250,58 +1196,77 @@ </param> </block> <block> - <key>variable_slider</key> + <key>virtual_sink</key> <param> <key>id</key> - <value>EsN0_dB</value> + <value>virtual_sink_0_1</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>label</key> - <value>Es/N0 (dB)</value> + <key>stream_id</key> + <value>estimate</value> </param> <param> - <key>value</key> - <value>14.0</value> + <key>_coordinate</key> + <value>(944, 1436)</value> </param> <param> - <key>min</key> - <value>-10</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>trellis_viterbi_x</key> <param> - <key>max</key> - <value>30</value> + <key>id</key> + <value>trellis_viterbi_x_0</value> </param> <param> - <key>num_steps</key> - <value>1000</value> + <key>_enabled</key> + <value>False</value> </param> <param> - <key>style</key> - <value>wx.SL_HORIZONTAL</value> + <key>type</key> + <value>b</value> </param> <param> - <key>converver</key> - <value>float_converter</value> + <key>fsm_args</key> + <value>fsm</value> </param> <param> - <key>grid_pos</key> - <value></value> + <key>block_size</key> + <value>block/bpsym</value> </param> <param> - <key>notebook</key> - <value></value> + <key>init_state</key> + <value>-1</value> + </param> + <param> + <key>final_state</key> + <value>-1</value> </param> <param> <key>alias</key> <value></value> </param> <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> <key>_coordinate</key> - <value>(728, 105)</value> + <value>(480, 1271)</value> </param> <param> <key>_rotation</key> @@ -1309,17 +1274,21 @@ </param> </block> <block> - <key>trellis_viterbi_x</key> + <key>trellis_viterbi_combined_xx</key> <param> <key>id</key> - <value>trellis_viterbi_x_0</value> + <value>trellis_viterbi_combined_xx_0</value> </param> <param> <key>_enabled</key> - <value>False</value> + <value>True</value> </param> <param> <key>type</key> + <value>f</value> + </param> + <param> + <key>out_type</key> <value>b</value> </param> <param> @@ -1339,6 +1308,18 @@ <value>-1</value> </param> <param> + <key>dim</key> + <value>tot_mod[0]</value> + </param> + <param> + <key>table</key> + <value>tot_mod[1]</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> + </param> + <param> <key>alias</key> <value></value> </param> @@ -1356,7 +1337,7 @@ </param> <param> <key>_coordinate</key> - <value>(496, 711)</value> + <value>(352, 1410)</value> </param> <param> <key>_rotation</key> @@ -1364,34 +1345,18 @@ </param> </block> <block> - <key>trellis_metrics_x</key> + <key>blocks_unpack_k_bits_bb</key> <param> <key>id</key> - <value>trellis_metrics_x_0</value> + <value>blocks_unpack_k_bits_bb_0</value> </param> <param> <key>_enabled</key> - <value>False</value> - </param> - <param> - <key>type</key> - <value>f</value> - </param> - <param> - <key>card</key> - <value>fsm.O()</value> - </param> - <param> - <key>dim</key> - <value>tot_channel[0]</value> - </param> - <param> - <key>table</key> - <value>tot_channel[1]</value> + <value>True</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>k</key> + <value>bpsym</value> </param> <param> <key>alias</key> @@ -1411,7 +1376,7 @@ </param> <param> <key>_coordinate</key> - <value>(288, 711)</value> + <value>(728, 1364)</value> </param> <param> <key>_rotation</key> @@ -1419,50 +1384,65 @@ </param> </block> <block> - <key>trellis_viterbi_combined_xx</key> + <key>blocks_pack_k_bits_bb</key> <param> <key>id</key> - <value>trellis_viterbi_combined_xx_0</value> + <value>blocks_pack_k_bits_bb_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>f</value> + <key>k</key> + <value>bpsym</value> </param> <param> - <key>out_type</key> - <value>b</value> + <key>alias</key> + <value></value> </param> <param> - <key>fsm_args</key> - <value>fsm</value> + <key>affinity</key> + <value></value> </param> <param> - <key>block_size</key> - <value>block/bpsym</value> + <key>minoutbuf</key> + <value>0</value> </param> <param> - <key>init_state</key> - <value>-1</value> + <key>maxoutbuf</key> + <value>0</value> </param> <param> - <key>final_state</key> - <value>-1</value> + <key>_coordinate</key> + <value>(456, 572)</value> </param> <param> - <key>dim</key> - <value>tot_channel[0]</value> + <key>_rotation</key> + <value>0</value> </param> + </block> + <block> + <key>trellis_encoder_xx</key> <param> - <key>table</key> - <value>tot_channel[1]</value> + <key>id</key> + <value>trellis_encoder_xx_0</value> </param> <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> + <key>_enabled</key> + <value>False</value> + </param> + <param> + <key>type</key> + <value>bs</value> + </param> + <param> + <key>fsm_args</key> + <value>fsm</value> + </param> + <param> + <key>init_state</key> + <value>0</value> </param> <param> <key>alias</key> @@ -1482,7 +1462,7 @@ </param> <param> <key>_coordinate</key> - <value>(368, 850)</value> + <value>(672, 461)</value> </param> <param> <key>_rotation</key> @@ -1490,122 +1470,128 @@ </param> </block> <connection> - <source_block_id>analog_noise_source_x_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>blks2_error_rate_0</source_block_id> + <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> - <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_block_id>virtual_source_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>blocks_throttle_0</sink_block_id> + <source_block_id>virtual_source_0_0_0</source_block_id> + <sink_block_id>blks2_error_rate_0</sink_block_id> <source_key>0</source_key> - <sink_key>0</sink_key> + <sink_key>1</sink_key> </connection> <connection> - <source_block_id>trellis_encoder_xx_0</source_block_id> - <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_metrics_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_throttle_0</source_block_id> - <sink_block_id>blocks_unpacked_to_packed_xx_0</sink_block_id> + <source_block_id>trellis_metrics_x_0</source_block_id> + <sink_block_id>trellis_viterbi_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>blocks_null_sink_1</sink_block_id> + <source_block_id>virtual_source_0</source_block_id> + <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_unpacked_to_packed_xx_0</source_block_id> - <sink_block_id>blocks_packed_to_unpacked_xx_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>virtual_sink_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_packed_to_unpacked_xx_0</source_block_id> - <sink_block_id>trellis_encoder_xx_0</sink_block_id> + <source_block_id>analog_random_source_x_0</source_block_id> + <sink_block_id>blocks_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_viterbi_combined_xx_0</sink_block_id> + <source_block_id>analog_noise_source_x_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>blocks_null_sink_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_metrics_x_0</source_block_id> - <sink_block_id>trellis_viterbi_x_0</sink_block_id> + <source_block_id>blocks_add_xx_1</source_block_id> + <sink_block_id>virtual_sink_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0</source_block_id> - <sink_block_id>trellis_metrics_x_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0_0</source_block_id> + <sink_block_id>fir_filter_xxx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_add_xx_1</source_block_id> - <sink_block_id>virtual_sink_0</sink_block_id> + <source_block_id>fir_filter_xxx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> + <sink_block_id>blocks_add_xx_1</sink_block_id> <source_key>0</source_key> - <sink_key>1</sink_key> + <sink_key>0</sink_key> </connection> <connection> - <source_block_id>virtual_source_0_0</source_block_id> - <sink_block_id>blks2_error_rate_0</sink_block_id> + <source_block_id>trellis_encoder_xx_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blks2_error_rate_0</source_block_id> - <sink_block_id>wxgui_numbersink2_3_0_0</sink_block_id> + <source_block_id>blocks_throttle_0</source_block_id> + <sink_block_id>blocks_pack_k_bits_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>analog_random_source_x_0</source_block_id> - <sink_block_id>virtual_sink_0_0</sink_block_id> + <source_block_id>blocks_pack_k_bits_bb_0</source_block_id> + <sink_block_id>digital_chunks_to_symbols_xx_0_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_packed_to_unpacked_xx_0_0</source_block_id> + <source_block_id>blocks_unpack_k_bits_bb_0</source_block_id> <sink_block_id>virtual_sink_0_1</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> - <sink_block_id>blocks_unpacked_to_packed_xx_0_0</sink_block_id> + <source_block_id>trellis_viterbi_x_0</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>blocks_unpacked_to_packed_xx_0_0</source_block_id> - <sink_block_id>blocks_packed_to_unpacked_xx_0_0</sink_block_id> + <source_block_id>trellis_viterbi_combined_xx_0</source_block_id> + <sink_block_id>blocks_unpack_k_bits_bb_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>trellis_viterbi_x_0</source_block_id> - <sink_block_id>blocks_unpacked_to_packed_xx_0_0</sink_block_id> + <source_block_id>blocks_pack_k_bits_bb_0</source_block_id> + <sink_block_id>trellis_encoder_xx_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-trellis/examples/python/CMakeLists.txt b/gr-trellis/examples/python/CMakeLists.txt index e2c7e70ff7..0e27a9540d 100644 --- a/gr-trellis/examples/python/CMakeLists.txt +++ b/gr-trellis/examples/python/CMakeLists.txt @@ -21,18 +21,8 @@ include(GrPython) GR_PYTHON_INSTALL( PROGRAMS - fsm_utils.py test_tcm.py - test_tcm_parallel.py - test_tcm_combined.py - test_sccc_hard.py - test_sccc_soft.py - test_sccc_turbo.py - test_viterbi_equalization1.py - test_viterbi_equalization.py - test_turbo_equalization.py - test_turbo_equalization1.py - test_turbo_equalization2.py + test_cpm.py DESTINATION ${GR_PKG_TRELLIS_EXAMPLES_DIR} COMPONENT "trellis_examples" ) @@ -50,15 +40,29 @@ install( fsm_files/awgn1o2_4.fsm fsm_files/awgn1o2_8.fsm fsm_files/awgn2o3_16.fsm + fsm_files/awgn2o3_16ungerboecka.fsm + fsm_files/awgn2o3_16ungerboeck.fsm + fsm_files/awgn2o3_32ungerboecka.fsm + fsm_files/awgn2o3_32ungerboeck.fsm fsm_files/awgn2o3_4.fsm fsm_files/awgn2o3_4_msb.fsm fsm_files/awgn2o3_4_msbG.fsm + fsm_files/awgn2o3_4ungerboecka.fsm + fsm_files/awgn2o3_4ungerboeck.fsm + fsm_files/awgn2o3_64ungerboecka.fsm + fsm_files/awgn2o3_64ungerboeck.fsm fsm_files/awgn2o3_8.fsm + fsm_files/awgn2o3_8ungerboecka.fsm + fsm_files/awgn2o3_8ungerboeck.fsm fsm_files/awgn2o4_4.fsm fsm_files/disconnected.fsm + fsm_files/irregular.fsm + fsm_files/joint_16_16.fsm + fsm_files/joint_4_16.fsm fsm_files/rep3.fsm fsm_files/rep5.fsm fsm_files/simple.fsm + fsm_files/uncoded4.fsm DESTINATION ${GR_PKG_TRELLIS_EXAMPLES_DIR}/fsm_files COMPONENT "trellis_examples" ) diff --git a/gr-trellis/examples/python/README b/gr-trellis/examples/python/README index 155b0a9416..8b4e0f0abb 100644 --- a/gr-trellis/examples/python/README +++ b/gr-trellis/examples/python/README @@ -2,8 +2,6 @@ Here we have several test programs for use with the gr-trellis implementation. Documentation can be found in http://gnuradio.org/doc/doxygen/group__trellis__coding__blk.html -fsm_utils.py contains several useful functions. - fsm_files is a directory with some FSM definitions If you just want to see what these programs do run them; @@ -26,10 +24,12 @@ which gives you information about the: number of transmitted packets number of packets in error estimated packet error rate -number of transmitted shorts (or symbols, or bits, depending on the specific program) -number of shorts (or symbols, or bits) in error -estimated short (or symbol, or bit) error rate +number of transmitted symbols, or bits, depending on the specific program +number of symbols, or bits in error +estimated symbol, or bit error rate for instance, the final number 1.10e-03 is the error rate estimate by sending 1000 packets of 1024 shorts each, using an 1/2 4-state convolutional code and QPSK modulation through an AWGN with Es/N0 = 6.0 dB + +There is a similar example in the ../grc/ directory diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboeck.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboeck.fsm new file mode 100644 index 0000000000..70ead4f17a --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboeck.fsm @@ -0,0 +1,50 @@ +4 16 8
+
+0 1 2 3
+4 5 6 7
+8 9 10 11
+12 13 14 15
+0 1 2 3
+4 5 6 7
+8 9 10 11
+12 13 14 15
+0 1 2 3
+4 5 6 7
+8 9 10 11
+12 13 14 15
+0 1 2 3
+4 5 6 7
+8 9 10 11
+12 13 14 15
+
+
+0 4 2 6
+1 5 3 7
+4 0 6 2
+5 1 7 3
+2 6 0 4
+3 7 1 5
+6 2 4 0
+7 3 5 1
+4 0 6 2
+5 1 7 3
+0 4 2 6
+1 5 3 7
+6 2 4 0
+7 3 5 1
+2 6 0 4
+3 7 1 5
+
+This is the rate 2/3 Ungerboeck code with 16 states for 8-PSK (natural mapping).
+The states are defined in Ungerboeck's way.
+
+d_free^2 = 2.274^2 Es --> 7.13 dB (so gain of 4.13 dB over uncoded QPSK)
+
+Parity check matrix in octal: [16 04 23]
+
+Generator Matrix:
+
+[ D 1+D+D^2 0
+ 1+D^2 D^2 D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboecka.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboecka.fsm new file mode 100644 index 0000000000..523384362f --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_16ungerboecka.fsm @@ -0,0 +1,48 @@ +4 16 8
+
+0 8 2 10
+0 8 2 10
+1 9 3 11
+1 9 3 11
+0 8 2 10
+0 8 2 10
+1 9 3 11
+1 9 3 11
+4 12 6 14
+4 12 6 14
+5 13 7 15
+5 13 7 15
+4 12 6 14
+4 12 6 14
+5 13 7 15
+5 13 7 15
+
+
+0 6 2 4
+2 4 0 6
+6 0 4 2
+4 2 6 0
+4 2 6 0
+6 0 4 2
+2 4 0 6
+0 6 2 4
+1 7 3 5
+3 5 1 7
+7 1 5 3
+5 3 7 1
+5 3 7 1
+7 1 5 3
+3 5 1 7
+1 7 3 5
+
+This is the rate 2/3 Ungerboeck code with 16 states for 8-PSK (natural mapping).
+The states are defined in typical way.
+
+d_free^2 = 2.274^2Es --> 7.13 dB (so gain of 4.13 dB over uncoded QPSK)
+
+Parity check matrix in octal: [16 04 23]
+
+Generator Matrix:
+
+[ D 1+D+D^2 0
+ 1+D^2 D^2 D]
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboeck.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboeck.fsm new file mode 100644 index 0000000000..a00f9c2e8d --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboeck.fsm @@ -0,0 +1,83 @@ +4 32 8
+
+0 16 1 17
+0 16 1 17
+0 16 1 17
+0 16 1 17
+2 18 3 19
+2 18 3 19
+2 18 3 19
+2 18 3 19
+4 20 5 21
+4 20 5 21
+4 20 5 21
+4 20 5 21
+6 22 7 23
+6 22 7 23
+6 22 7 23
+6 22 7 23
+8 24 9 25
+8 24 9 25
+8 24 9 25
+8 24 9 25
+10 26 11 27
+10 26 11 27
+10 26 11 27
+10 26 11 27
+12 28 13 29
+12 28 13 29
+12 28 13 29
+12 28 13 29
+14 30 15 31
+14 30 15 31
+14 30 15 31
+14 30 15 31
+
+
+
+
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+5 1 7 3
+1 5 3 7
+7 3 5 1
+3 7 1 5
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+4 0 6 2
+0 4 2 6
+6 2 4 0
+2 6 0 4
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+4 0 6 2
+0 4 2 6
+6 2 4 0
+2 6 0 4
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+5 1 7 3
+1 5 3 7
+7 3 5 1
+3 7 1 5
+
+This is the rate 2/3 Ungerboeck code with 32 states for 8-PSK (natural mapping).
+The states are defined in typical way.
+
+d_free^2 = 2.405^2 Es --> 7.59 dB (so gain of 4.59 dB over uncoded QPSK)
+
+Parity check matrix in octal: [34 16 45]
+
+Generator Matrix:
+
+[ 1 D 0
+ D^4 D^2+1 D^3+D^2+D]
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboecka.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboecka.fsm new file mode 100644 index 0000000000..b2e6ebdf44 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_32ungerboecka.fsm @@ -0,0 +1,84 @@ +4 32 8
+0 16 1 17
+0 16 1 17
+0 16 1 17
+0 16 1 17
+2 18 3 19
+2 18 3 19
+2 18 3 19
+2 18 3 19
+4 20 5 21
+4 20 5 21
+4 20 5 21
+4 20 5 21
+6 22 7 23
+6 22 7 23
+6 22 7 23
+6 22 7 23
+8 24 9 25
+8 24 9 25
+8 24 9 25
+8 24 9 25
+10 26 11 27
+10 26 11 27
+10 26 11 27
+10 26 11 27
+12 28 13 29
+12 28 13 29
+12 28 13 29
+12 28 13 29
+14 30 15 31
+14 30 15 31
+14 30 15 31
+14 30 15 31
+
+
+
+
+
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+3 7 1 5
+7 3 5 1
+1 5 3 7
+5 1 7 3
+2 6 0 4
+6 2 4 0
+0 4 2 6
+4 0 6 2
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+2 6 0 4
+6 2 4 0
+0 4 2 6
+4 0 6 2
+3 7 1 5
+7 3 5 1
+1 5 3 7
+5 1 7 3
+
+This is the rate 2/3 Ungerboeck code with 32 states for 8-PSK (natural mapping).
+The states are defined in typical way.
+
+d_free^2 = 2.405^2 Es --> 7.59 dB (so gain of 4.59 dB over uncoded QPSK)
+
+Parity check matrix in octal: [34 16 45]
+
+Generator Matrix:
+
+[ 1 D 0
+ D^4+D 1 D^3+D^2+D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm index d834c52718..ff6e2a763b 100644 --- a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msb.fsm @@ -12,7 +12,7 @@ This is generated by the 1/2 AWGN code (5 7) operated twice, ie, -(xk+1 xki) [xk-1 xk-2] -> [xk+1 xki]. +(xk+1 xk) [xk-1 xk-2] -> [xk+1 xk]. We also puncture the first (MSB) bit. This code is worse than awgn2o3_4_msbG and slightly worse than awgn2o3_4, BUT seems to be a good innner code for sctcm (with 8PSK natural). diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm index 8956c53da2..54f9cbc3cc 100644 --- a/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4_msbG.fsm @@ -11,7 +11,7 @@ This is generated by the 1/2 AWGN code (5 7) operated twice, ie, -(xk+1 xki) [xk-1 xk-2] -> [xk+1 xki]. +(xk+1 xk) [xk-1 xk-2] -> [xk+1 xk]. We also puncture the first (MSB) bit and Gray map the symbols. intermediate states: @@ -45,7 +45,7 @@ and in decimal: After Gray mapping: label -> phase 0 -> 0 -1 -> 0 +1 -> 1 2 -> 7 3 -> 2 4 -> 5 diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboeck.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboeck.fsm new file mode 100644 index 0000000000..160f4ea30f --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboeck.fsm @@ -0,0 +1,26 @@ +4 4 8 + +0 0 1 1 +2 2 3 3 +0 0 1 1 +2 2 3 3 + + +0 4 2 6 +1 5 3 7 +2 6 0 4 +3 7 1 5 + + + +This is the Ungerboeck code for 8-PSK (natural mapping). +The states are defined in Ungerboeck's way. + +d_free^2=4 Es -> 3.0 dB over uncoded QPSK + +Parity check matrix in octal: [0 2 5] + +Generator matrix: + +[1 0 0 + 0 1+D^2 D] diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboecka.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboecka.fsm new file mode 100644 index 0000000000..d9c210a0e9 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_4ungerboecka.fsm @@ -0,0 +1,23 @@ +4 4 8 + +0 2 0 2 +0 2 0 2 +1 3 1 3 +1 3 1 3 + +0 2 4 6 +2 0 6 4 +1 3 5 7 +3 1 7 5 + +This is the rate 2/3 Ungerboeck's code with 4 states. +The states are defined in typical way. + +d_free^2=4 Es -> 3.0 dB over uncoded QPSK + +Parity check matrix in octal: [0 2 5] + +Generator matrix: + +[1 0 0 + 0 1+D^2 D] diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboeck.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboeck.fsm new file mode 100644 index 0000000000..62c75c31c1 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboeck.fsm @@ -0,0 +1,150 @@ +4 64 8
+
+
+0 32 1 33
+0 32 1 33
+0 32 1 33
+0 32 1 33
+2 34 3 35
+2 34 3 35
+2 34 3 35
+2 34 3 35
+4 36 5 37
+4 36 5 37
+4 36 5 37
+4 36 5 37
+6 38 7 39
+6 38 7 39
+6 38 7 39
+6 38 7 39
+8 40 9 41
+8 40 9 41
+8 40 9 41
+8 40 9 41
+10 42 11 43
+10 42 11 43
+10 42 11 43
+10 42 11 43
+12 44 13 45
+12 44 13 45
+12 44 13 45
+12 44 13 45
+14 46 15 47
+14 46 15 47
+14 46 15 47
+14 46 15 47
+16 48 17 49
+16 48 17 49
+16 48 17 49
+16 48 17 49
+18 50 19 51
+18 50 19 51
+18 50 19 51
+18 50 19 51
+20 52 21 53
+20 52 21 53
+20 52 21 53
+20 52 21 53
+22 54 23 55
+22 54 23 55
+22 54 23 55
+22 54 23 55
+24 56 25 57
+24 56 25 57
+24 56 25 57
+24 56 25 57
+26 58 27 59
+26 58 27 59
+26 58 27 59
+26 58 27 59
+28 60 29 61
+28 60 29 61
+28 60 29 61
+28 60 29 61
+30 62 31 63
+30 62 31 63
+30 62 31 63
+30 62 31 63
+
+
+
+
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+3 7 1 5
+7 3 5 1
+1 5 3 7
+5 1 7 3
+2 6 0 4
+6 2 4 0
+0 4 2 6
+4 0 6 2
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+2 6 0 4
+6 2 4 0
+0 4 2 6
+4 0 6 2
+3 7 1 5
+7 3 5 1
+1 5 3 7
+5 1 7 3
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+2 6 0 4
+6 2 4 0
+0 4 2 6
+4 0 6 2
+3 7 1 5
+7 3 5 1
+1 5 3 7
+5 1 7 3
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+3 7 1 5
+7 3 5 1
+1 5 3 7
+5 1 7 3
+2 6 0 4
+6 2 4 0
+0 4 2 6
+4 0 6 2
+
+
+This is the rate 2/3 Ungerboeck code with 64 states for 8-PSK (natural mapping).
+The states are defined in typical way.
+
+d_free^2 = 2.52^2 Es --> 8.01 dB (so gain of 5.01 dB over uncoded QPSK)
+
+parity check matrix in octal: [074 036 105]
+
+generator matrix:
+
+[1 D 0
+ D^5 D^2+1 D^4+D^3+D^2+D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboecka.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboecka.fsm new file mode 100644 index 0000000000..137091f1f6 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_64ungerboecka.fsm @@ -0,0 +1,154 @@ +4 64 8
+
+
+0 32 1 33
+0 32 1 33
+0 32 1 33
+0 32 1 33
+2 34 3 35
+2 34 3 35
+2 34 3 35
+2 34 3 35
+4 36 5 37
+4 36 5 37
+4 36 5 37
+4 36 5 37
+6 38 7 39
+6 38 7 39
+6 38 7 39
+6 38 7 39
+8 40 9 41
+8 40 9 41
+8 40 9 41
+8 40 9 41
+10 42 11 43
+10 42 11 43
+10 42 11 43
+10 42 11 43
+12 44 13 45
+12 44 13 45
+12 44 13 45
+12 44 13 45
+14 46 15 47
+14 46 15 47
+14 46 15 47
+14 46 15 47
+16 48 17 49
+16 48 17 49
+16 48 17 49
+16 48 17 49
+18 50 19 51
+18 50 19 51
+18 50 19 51
+18 50 19 51
+20 52 21 53
+20 52 21 53
+20 52 21 53
+20 52 21 53
+22 54 23 55
+22 54 23 55
+22 54 23 55
+22 54 23 55
+24 56 25 57
+24 56 25 57
+24 56 25 57
+24 56 25 57
+26 58 27 59
+26 58 27 59
+26 58 27 59
+26 58 27 59
+28 60 29 61
+28 60 29 61
+28 60 29 61
+28 60 29 61
+30 62 31 63
+30 62 31 63
+30 62 31 63
+30 62 31 63
+
+
+
+
+
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+5 1 7 3
+1 5 3 7
+7 3 5 1
+3 7 1 5
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+4 0 6 2
+0 4 2 6
+6 2 4 0
+2 6 0 4
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+4 0 6 2
+0 4 2 6
+6 2 4 0
+2 6 0 4
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+5 1 7 3
+1 5 3 7
+7 3 5 1
+3 7 1 5
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+4 0 6 2
+0 4 2 6
+6 2 4 0
+2 6 0 4
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+5 1 7 3
+1 5 3 7
+7 3 5 1
+3 7 1 5
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+5 1 7 3
+1 5 3 7
+7 3 5 1
+3 7 1 5
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+4 0 6 2
+0 4 2 6
+6 2 4 0
+2 6 0 4
+
+
+
+
+
+This is the rate 2/3 Ungerboeck code with 64 states for 8-PSK (natural mapping).
+The states are defined in typical way.
+
+d_free^2 = 2.52^2 Es --> 8.01 dB (so gain of 5.01 dB over uncoded QPSK)
+
+parity check matrix in octal: [074 036 105]
+
+generator matrix:
+
+[1 D 0
+ D^5+D 1 D^4+D^3+D^2+D]
+
+
diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm index 34deeb68cb..6ace4f5e14 100644 --- a/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_8.fsm @@ -21,5 +21,6 @@ -This is generated by the 1/2 8-state AWGN code (15 17) by puncturing the fourth bit. +This is generated by the 1/2 8-state AWGN code (15 17) by operating it twice and +puncturing the fourth bit. --> d_free=??? diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboeck.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboeck.fsm new file mode 100644 index 0000000000..e2f08eba25 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboeck.fsm @@ -0,0 +1,35 @@ +4 8 8 + +0 1 2 3 +4 5 6 7 +0 1 2 3 +4 5 6 7 +0 1 2 3 +4 5 6 7 +0 1 2 3 +4 5 6 7 + + +0 4 2 6 +1 5 3 7 +4 0 6 2 +5 1 7 3 +2 6 0 4 +3 7 1 5 +6 2 4 0 +7 3 5 1 + + + +This is the rate 2/3 Ungerboeck code with 8-states for 8-PSK (natural mapping). +The states are defined in Ungerboeck's way. + +d_free^2 = 4.585 Es --> 6.6 dB (so gain of 3.6 dB over uncoded QPSK) + +Parity check matrix in octal: [04 02 11] + +Generator Matrix: + +[ 1 D 0 + D^2 1 D] + diff --git a/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboecka.fsm b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboecka.fsm new file mode 100644 index 0000000000..2425e6a01a --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn2o3_8ungerboecka.fsm @@ -0,0 +1,32 @@ +4 8 8
+
+0 4 1 5
+0 4 1 5
+0 4 1 5
+0 4 1 5
+2 6 3 7
+2 6 3 7
+2 6 3 7
+2 6 3 7
+
+0 4 2 6
+4 0 6 2
+2 6 0 4
+6 2 4 0
+1 5 3 7
+5 1 7 3
+3 7 1 5
+7 3 5 1
+
+This is the rate 2/3 Ungerboeck code with 8-states for 8-PSK (natural mapping).
+The states are defined in typical way.
+
+d_free^2 = 4.585 Es --> 6.6 dB (so gain of 3.6 dB over uncoded QPSK)
+
+Parity check matrix in octal: [04 02 11]
+
+Generator Matrix:
+
+[ 1 D 0
+ D^2 1 D]
+
diff --git a/gr-trellis/examples/python/fsm_files/uncoded4.fsm b/gr-trellis/examples/python/fsm_files/uncoded4.fsm new file mode 100644 index 0000000000..67cb12ce8f --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/uncoded4.fsm @@ -0,0 +1,7 @@ +4 1 4 + +0 0 0 0 + +0 1 2 3 + +uncoded 4-ary transmission diff --git a/gr-trellis/examples/python/fsm_utils.py b/gr-trellis/examples/python/fsm_utils.py deleted file mode 100755 index 06855ea775..0000000000 --- a/gr-trellis/examples/python/fsm_utils.py +++ /dev/null @@ -1,239 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2004 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3, or (at your option) -# any later version. -# -# GNU Radio is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - - -import re -import math -import sys -import operator -import numpy - -from gnuradio import trellis - -try: - import scipy.linalg -except ImportError: - print "Error: Program requires scipy (see: www.scipy.org)." - sys.exit(1) - - - -###################################################################### -# Decimal to any base conversion. -# Convert 'num' to a list of 'l' numbers representing 'num' -# to base 'base' (most significant symbol first). -###################################################################### -def dec2base(num,base,l): - s=range(l) - n=num - for i in range(l): - s[l-i-1]=n%base - n=int(n/base) - if n!=0: - print 'Number ', num, ' requires more than ', l, 'digits.' - return s - - -###################################################################### -# Conversion from any base to decimal. -# Convert a list 's' of symbols to a decimal number -# (most significant symbol first) -###################################################################### -def base2dec(s,base): - num=0 - for i in range(len(s)): - num=num*base+s[i] - return num - - - - -###################################################################### -# Automatically generate the lookup table that maps the FSM outputs -# to channel inputs corresponding to a channel 'channel' and a modulation -# 'mod'. Optional normalization of channel to unit energy. -# This table is used by the 'metrics' block to translate -# channel outputs to metrics for use with the Viterbi algorithm. -# Limitations: currently supports only one-dimensional modulations. -###################################################################### -def make_isi_lookup(mod,channel,normalize): - dim=mod[0] - constellation = mod[1] - - if normalize: - p = 0 - for i in range(len(channel)): - p = p + channel[i]**2 - for i in range(len(channel)): - channel[i] = channel[i]/math.sqrt(p) - - lookup=range(len(constellation)**len(channel)) - for o in range(len(constellation)**len(channel)): - ss=dec2base(o,len(constellation),len(channel)) - ll=0 - for i in range(len(channel)): - ll=ll+constellation[ss[i]]*channel[i] - lookup[o]=ll - return (1,lookup) - - - - - - -###################################################################### -# Automatically generate the signals appropriate for CPM -# decomposition. -# This decomposition is based on the paper by B. Rimoldi -# "A decomposition approach to CPM", IEEE Trans. Info Theory, March 1988 -# See also my own notes at http://www.eecs.umich.edu/~anastas/docs/cpm.pdf -###################################################################### -def make_cpm_signals(K,P,M,L,q,frac): - - Q=numpy.size(q)/L - h=(1.0*K)/P - f0=-h*(M-1)/2 - dt=0.0; # maybe start at t=0.5 - t=(dt+numpy.arange(0,Q))/Q - qq=numpy.zeros(Q) - for m in range(L): - qq=qq + q[m*Q:m*Q+Q] - w=math.pi*h*(M-1)*t-2*math.pi*h*(M-1)*qq+math.pi*h*(L-1)*(M-1) - - X=(M**L)*P - PSI=numpy.empty((X,Q)) - for x in range(X): - xv=dec2base(x/P,M,L) - xv=numpy.append(xv, x%P) - qq1=numpy.zeros(Q) - for m in range(L): - qq1=qq1+xv[m]*q[m*Q:m*Q+Q] - psi=2*math.pi*h*xv[-1]+4*math.pi*h*qq1+w - #print psi - PSI[x]=psi - PSI = numpy.transpose(PSI) - SS=numpy.exp(1j*PSI) # contains all signals as columns - #print SS - - - # Now we need to orthogonalize the signals - F = scipy.linalg.orth(SS) # find an orthonormal basis for SS - #print numpy.dot(numpy.transpose(F.conjugate()),F) # check for orthonormality - S = numpy.dot(numpy.transpose(F.conjugate()),SS) - #print F - #print S - - # We only want to keep those dimensions that contain most - # of the energy of the overall constellation (eg, frac=0.9 ==> 90%) - # evaluate mean energy in each dimension - E=numpy.sum(numpy.absolute(S)**2,axis=1)/Q - E=E/numpy.sum(E) - #print E - Es = -numpy.sort(-E) - Esi = numpy.argsort(-E) - #print Es - #print Esi - Ecum=numpy.cumsum(Es) - #print Ecum - v0=numpy.searchsorted(Ecum,frac) - N = v0+1 - #print v0 - #print Esi[0:v0+1] - Ff=numpy.transpose(numpy.transpose(F)[Esi[0:v0+1]]) - #print Ff - Sf = S[Esi[0:v0+1]] - #print Sf - - - return (f0,SS,S,F,Sf,Ff,N) - #return f0 - - - - -###################################################################### -# A list of common modulations. -# Format: (dimensionality,constellation) -###################################################################### -pam2 = (1,[-1, 1]) -pam4 = (1,[-3, -1, 3, 1]) # includes Gray mapping -pam8 = (1,[-7, -5, -3, -1, 1, 3, 5, 7]) - -psk4=(2,[1, 0, \ - 0, 1, \ - 0, -1,\ - -1, 0]) # includes Gray mapping -psk8=(2,[math.cos(2*math.pi*0/8), math.sin(2*math.pi*0/8), \ - math.cos(2*math.pi*1/8), math.sin(2*math.pi*1/8), \ - math.cos(2*math.pi*2/8), math.sin(2*math.pi*2/8), \ - math.cos(2*math.pi*3/8), math.sin(2*math.pi*3/8), \ - math.cos(2*math.pi*4/8), math.sin(2*math.pi*4/8), \ - math.cos(2*math.pi*5/8), math.sin(2*math.pi*5/8), \ - math.cos(2*math.pi*6/8), math.sin(2*math.pi*6/8), \ - math.cos(2*math.pi*7/8), math.sin(2*math.pi*7/8)]) - -orth2 = (2,[1, 0, \ - 0, 1]) -orth4=(4,[1, 0, 0, 0, \ - 0, 1, 0, 0, \ - 0, 0, 1, 0, \ - 0, 0, 0, 1]) - -###################################################################### -# A list of channels to be tested -###################################################################### - -# C test channel (J. Proakis, Digital Communications, McGraw-Hill Inc., 2001) -c_channel = [0.227, 0.460, 0.688, 0.460, 0.227] - - - - - - - - - - -if __name__ == '__main__': - f1=trellis.fsm('fsm_files/awgn1o2_4.fsm') - #f2=trellis.fsm('fsm_files/awgn2o3_4.fsm') - #print f1.I(), f1.S(), f1.O() - #print f1.NS() - #print f1.OS() - #print f2.I(), f2.S(), f2.O() - #print f2.NS() - #print f2.OS() - ##f1.write_trellis_svg('f1.svg',4) - #f2.write_trellis_svg('f2.svg',4) - #f=fsm_concatenate(f1,f2) - #f=fsm_radix(f1,2) - - #print "----------\n" - #print f.I(), f.S(), f.O() - #print f.NS() - #print f.OS() - #f.write_trellis_svg('f.svg',4) - - q=numpy.arange(0,8)/(2.0*8) - (f0,SS,S,F,Sf,Ff,N) = make_cpm_signals(1,2,2,1,q,0.99) - diff --git a/gr-trellis/examples/python/test_cpm.py b/gr-trellis/examples/python/test_cpm.py index 3f5cfc4587..6fe25ec68c 100755 --- a/gr-trellis/examples/python/test_cpm.py +++ b/gr-trellis/examples/python/test_cpm.py @@ -12,8 +12,8 @@ from gnuradio import trellis, digital, filter, blocks from grc_gnuradio import blks2 as grc_blks2 import math import numpy -import fsm_utils from gnuradio import trellis +from gnuradio.trellis import fsm_utils try: from gnuradio import analog @@ -43,8 +43,9 @@ def run_test(seed,blocksize): f = trellis.fsm(P,M,L) # CPFSK signals - #p = numpy.ones(Q)/(2.0) - #q = numpy.cumsum(p)/(1.0*Q) + #p = numpy.ones(L*Q) + #q = numpy.cumsum(p) + #q = q/q[-1]/2.0; # GMSK signals BT=0.3; diff --git a/gr-trellis/examples/python/test_pccc_turbo1.py b/gr-trellis/examples/python/test_pccc_turbo1.py deleted file mode 100755 index 7104aa5039..0000000000 --- a/gr-trellis/examples/python/test_pccc_turbo1.py +++ /dev/null @@ -1,124 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed): - tb = gr.top_block () - - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - #src = blocks.vector_source_s([0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],False) - enc = trellis.pccc_encoder_ss(fo,0,fi,0,interleaver,K) - code = blocks.vector_sink_s() - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics_in = trellis.metrics_f(fi.O()*fo.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO - scale = blocks.multiply_const_ff(1.0/N0) - dec = trellis.pccc_decoder_s(fo,0,-1,fi,0,-1,interleaver,K,IT,trellis.TRELLIS_MIN_SUM) - - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s() - - tb.connect (src,src_head,s2fsmi,enc,mod) - #tb.connect (src,enc,mod) - #tb.connect(enc,code) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,metrics_in,scale,dec,fsmi2s,dst) - - tb.run() - - #print code.data() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 5: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - IT=int(args[3]) - rep=int(args[4]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_pccc_turbo.py fsm_name_1 fsm_fname_2 Es/No_db iterations repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.I() != fi.I(): - sys.stderr.write ('Incompatible input cardinality between two FSMs.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - #modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = 4 - constellation = [ 1, 0, 1, 0,\ - 1, 0,-1, 0,\ - 1, 0, 0, 1,\ - 1, 0, 0,-1,\ - -1, 0, 1, 0,\ - -1, 0,-1, 0,\ - -1, 0, 0, 1,\ - -1, 0, 0,-1,\ - 0, 1, 1, 0,\ - 0, 1,-1, 0,\ - 0, 1, 0, 1,\ - 0, 1, 0,-1,\ - 0,-1, 1, 0,\ - 0,-1,-1, 0,\ - 0,-1, 0, 1,\ - 0,-1, 0,-1,] # equivalent to 2 QPSK symbols - if len(constellation)/dimensionality != fi.O()*fo.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0): # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gr-trellis/examples/python/test_sccc_hard.py b/gr-trellis/examples/python/test_sccc_hard.py deleted file mode 100755 index 83393df4dc..0000000000 --- a/gr-trellis/examples/python/test_sccc_hard.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - tb = gr.top_block () - - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi - va_in = trellis.viterbi_s(fi,K,0,-1) # Put -1 if the Initial/Final states are not set. - deinter = trellis.permutation(interleaver.K(),interleaver.DEINTER(),1,gr.sizeof_short) - metrics_out = trellis.metrics_s(fo.O(),1,[0,1,2,3],digital.TRELLIS_HARD_SYMBOL) # data preprocessing to generate metrics for outer Viterbi (hard decisions) - va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s() - - tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,metrics_in) - tb.connect (metrics_in,va_in,deinter,metrics_out,va_out,fsmi2s,dst) - - tb.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 4: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - rep=int(args[3]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gr-trellis/examples/python/test_sccc_soft.py b/gr-trellis/examples/python/test_sccc_soft.py deleted file mode 100755 index 25d26e0025..0000000000 --- a/gr-trellis/examples/python/test_sccc_soft.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - tb = gr.top_block () - - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi - gnd = blocks.vector_source_f([0],True); - siso_in = trellis.siso_f(fi,K,0,-1,True,False,trellis.TRELLIS_MIN_SUM) # Put -1 if the Initial/Final states are not set. - deinter = trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) - va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s() - - tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,metrics_in) - tb.connect (gnd,(siso_in,0)) - tb.connect (metrics_in,(siso_in,1)) - tb.connect (siso_in,deinter,va_out,fsmi2s,dst) - - tb.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 4: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - rep=int(args[3]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gr-trellis/examples/python/test_sccc_turbo.py b/gr-trellis/examples/python/test_sccc_turbo.py deleted file mode 100755 index 08004e8a0d..0000000000 --- a/gr-trellis/examples/python/test_sccc_turbo.py +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,type): - metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner Viterbi - scale = blocks.multiply_const_ff(1.0/N0) - gnd = blocks.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - tb.connect (gnd,inter[0]) - tb.connect (metrics_in,scale) - tb.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - tb.connect (metrics_in,(siso_in[it+1],1)) - tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) - tb.connect (gnd,(siso_out[it],0)) - tb.connect (siso_out[it],inter[it+1]) - tb.connect (inter[it],(siso_in[it],0)) - else: - tb.connect (siso_in[it],deinter[it],siso_out[it]) - tb.connect (inter[it],(siso_in[it],0)) - - return (metrics_in,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed): - tb = gr.top_block () - - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - #(head,tail) = make_rx(tb,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_SUM_PRODUCT) - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s() - - tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,head) - tb.connect (tail,fsmi2s,dst) - - tb.run() - - #print enc_out.ST(), enc_in.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 5: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - IT=int(args[3]) - rep=int(args[4]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_sccc_turbo.py fsm_name_out fsm_fname_in Es/No_db iterations repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0): # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gr-trellis/examples/python/test_sccc_turbo1.py b/gr-trellis/examples/python/test_sccc_turbo1.py deleted file mode 100755 index 528a79d011..0000000000 --- a/gr-trellis/examples/python/test_sccc_turbo1.py +++ /dev/null @@ -1,104 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed): - tb = gr.top_block () - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc = trellis.sccc_encoder_ss(fo,0,fi,0,interleaver,K) - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - dec = trellis.sccc_decoder_combined_fs(fo,0,-1,fi,0,-1,interleaver,K,IT,trellis.TRELLIS_MIN_SUM,dimensionality,constellation,digital.TRELLIS_EUCLIDEAN,1.0) - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s() - - #tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - tb.connect (src,src_head,s2fsmi,enc,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - #tb.connect (add,head) - #tb.connect (tail,fsmi2s,dst) - tb.connect (add,dec,fsmi2s,dst) - - tb.run() - - #print enc_out.ST(), enc_in.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 5: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - IT=int(args[3]) - rep=int(args[4]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db iterations repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0): # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gr-trellis/examples/python/test_sccc_turbo2.py b/gr-trellis/examples/python/test_sccc_turbo2.py deleted file mode 100755 index d7f26c4e13..0000000000 --- a/gr-trellis/examples/python/test_sccc_turbo2.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed): - tb = gr.top_block () - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the outer FSM input cardinality - enc = trellis.sccc_encoder_ss(fo,0,fi,0,interleaver,K) - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics_in = trellis.metrics_f(fi.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO - scale = blocks.multiply_const_ff(1.0/N0) - dec = trellis.sccc_decoder_s(fo,0,-1,fi,0,-1,interleaver,K,IT,trellis.TRELLIS_MIN_SUM) - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s() - - #tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - tb.connect (src,src_head,s2fsmi,enc,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - #tb.connect (add,head) - #tb.connect (tail,fsmi2s,dst) - tb.connect (add,metrics_in,scale,dec,fsmi2s,dst) - - tb.run() - - #print enc_out.ST(), enc_in.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 5: - fname_out=args[0] - fname_in=args[1] - esn0_db=float(args[2]) # Es/No in dB - IT=int(args[3]) - rep=int(args[4]) # number of times the experiment is run to collect enough errors - else: - sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in Es/No_db iterations repetitions\n') - sys.exit (1) - - # system parameters - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(fname_in) # get the innner FSM specification from a file - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0): # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main (sys.argv[1:]) diff --git a/gr-trellis/examples/python/test_tcm.py b/gr-trellis/examples/python/test_tcm.py index bf9710aa1c..dfc565616e 100755 --- a/gr-trellis/examples/python/test_tcm.py +++ b/gr-trellis/examples/python/test_tcm.py @@ -6,9 +6,10 @@ from gnuradio import eng_notation import math import sys import random -import fsm_utils +from gnuradio.trellis import fsm_utils from gnuradio.eng_option import eng_option from optparse import OptionParser +import numpy try: from gnuradio import analog @@ -19,39 +20,32 @@ except ImportError: def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): tb = gr.top_block () - # TX - #packet = [0]*Kb - #for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 - #packet[i] = random.randint(0, 1) # random 0s and 1s - #src = blocks.vector_source_s(packet,False) - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts - #b2s = blocks.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts + numpy.random.seed(-seed) + packet = numpy.random.randint(0,2,Kb) # create Kb random bits + packet[Kb-10:Kb]=0 + packet[0:Kb]=0 + src = blocks.vector_source_s(packet.tolist(),False) + b2s = blocks.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality enc = trellis.encoder_ss(f,0) # initial state = 0 mod = digital.chunks_to_symbols_sf(constellation,dimensionality) # CHANNEL add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) + noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),long(seed)) # RX - metrics = trellis.metrics_f(f.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. + va = trellis.viterbi_combined_fs(f,K,0,0,dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # Put -1 if the Initial/Final states are not set. fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - #s2b = blocks.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits - #dst = blocks.vector_sink_s(); - dst = blocks.check_lfsr_32k_s() + s2b = blocks.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits + dst = blocks.vector_sink_s(); - tb.connect (src,src_head,s2fsmi,enc,mod) - #tb.connect (src,b2s,s2fsmi,enc,mod) + tb.connect (src,b2s,s2fsmi,enc,mod) tb.connect (mod,(add,0)) tb.connect (noise,(add,1)) - tb.connect (add,metrics) - tb.connect (metrics,va,fsmi2s,dst) - #tb.connect (metrics,va,fsmi2s,s2b,dst) + tb.connect (add,va,fsmi2s,s2b,dst) tb.run() @@ -61,19 +55,11 @@ def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): # Then put it as the last argument in the viterbi block #print "final state = " , enc.ST() - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - #ntotal = len(packet) - #if len(dst.data()) != ntotal: - #print "Error: not enough data\n" - #nright = 0; - #for i in range(ntotal): - #if packet[i]==dst.data()[i]: - #nright=nright+1 - #else: - #print "Error in ", i - return (ntotal,ntotal-nright) + if len(dst.data()) != len(packet): + print "Error: not enough data:", len(dst.data()), len(packet) + ntotal=len(packet) + nwrong = sum(abs(packet-numpy.array(dst.data()))); + return (ntotal,nwrong,abs(packet-numpy.array(dst.data()))) @@ -113,20 +99,26 @@ def main(): Es = Es / (len(constellation)/dimensionality) N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error + tot_b=0 # total number of transmitted bits + terr_b=0 # total number of bits in error terr_p=0 # total number of packets in error for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) + (b,e,pattern)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-(666+i)) # run experiment with different seed to get different noise realizations + tot_b=tot_b+b + terr_b=terr_b+e + terr_p=terr_p+(e!=0) if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) + print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_b,terr_b, '%.2e' % ((1.0*terr_b)/tot_b) + if e!=0: + print "rep=",i, e + for k in range(Kb): + if pattern[k]!=0: + print k + # estimate of the bit error rate + print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_b,terr_b, '%.2e' % ((1.0*terr_b)/tot_b) if __name__ == '__main__': main() + diff --git a/gr-trellis/examples/python/test_tcm_bit.py b/gr-trellis/examples/python/test_tcm_bit.py deleted file mode 100755 index 7880f0ea53..0000000000 --- a/gr-trellis/examples/python/test_tcm_bit.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils -from gnuradio.eng_option import eng_option -from optparse import OptionParser - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - tb = gr.top_block () - - # TX - packet = [0]*Kb - # this for loop is TOO slow!!! - for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0 - packet[i] = random.randint(0, 1) # random 0s and 1s - src = blocks.vector_source_s(packet,False) - #src = blocks.lfsr_32k_source_s() - #src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts - b2s = blocks.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - s2b = blocks.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits - dst = blocks.vector_sink_s(); - #dst = blocks.check_lfsr_32k_s(); - - - #tb.connect (src,src_head,s2fsmi,enc,mod) - tb.connect (src,b2s,s2fsmi,enc,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,metrics) - #tb.connect (metrics,va,fsmi2s,dst) - tb.connect (metrics,va,fsmi2s,s2b,dst) - - - tb.run() - - # A bit of cheating: run the program once and print the - # final encoder state.. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - #ntotal = dst.ntotal () - #nright = dst.nright () - #runlength = dst.runlength () - ntotal = len(packet) - if len(dst.data()) != ntotal: - print "Error: not enough data\n" - nright = 0; - # this for loop is TOO slow!!! - for i in range(ntotal): - if packet[i]==dst.data()[i]: - nright=nright+1 - #else: - #print "Error in ", i - return (ntotal,ntotal-nright) - - - - -def main(): - parser = OptionParser(option_class=eng_option) - parser.add_option("-f", "--fsm_file", type="string", default="fsm_files/awgn1o2_4.fsm", help="Filename containing the fsm specification, e.g. -f fsm_files/awgn1o2_4.fsm (default=fsm_files/awgn1o2_4.fsm)") - parser.add_option("-e", "--esn0", type="eng_float", default=10.0, help="Symbol energy to noise PSD level ratio in dB, e.g., -e 10.0 (default=10.0)") - parser.add_option("-r", "--repetitions", type="int", default=100, help="Number of packets to be generated for the simulation, e.g., -r 100 (default=100)") - - (options, args) = parser.parse_args () - if len(args) != 0: - parser.print_help() - raise SystemExit, 1 - - fname=options.fsm_file - esn0_db=float(options.esn0) - rep=int(options.repetitions) - - - # system parameters - f=trellis.fsm(fname) # get the FSM specification from a file - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%1==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main() diff --git a/gr-trellis/examples/python/test_tcm_combined.py b/gr-trellis/examples/python/test_tcm_combined.py deleted file mode 100755 index 697e3cc64a..0000000000 --- a/gr-trellis/examples/python/test_tcm_combined.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import fsm_utils -from gnuradio.eng_option import eng_option -from optparse import OptionParser - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed): - tb = gr.top_block () - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - - # RX - va = trellis.viterbi_combined_fs(f,K,0,-1,dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # Put -1 if the Initial/Final states are not set. - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s(); - - - tb.connect (src,src_head,s2fsmi,enc,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,va,fsmi2s,dst) - - - tb.run() - - # A bit of cheating: run the program once and print the - # final encoder state.. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - - return (ntotal,ntotal-nright) - - - - -def main(): - parser = OptionParser(option_class=eng_option) - parser.add_option("-f", "--fsm_file", type="string", default="fsm_files/awgn1o2_4.fsm", help="Filename containing the fsm specification, e.g. -f fsm_files/awgn1o2_4.fsm (default=fsm_files/awgn1o2_4.fsm)") - parser.add_option("-e", "--esn0", type="eng_float", default=10.0, help="Symbol energy to noise PSD level ratio in dB, e.g., -e 10.0 (default=10.0)") - parser.add_option("-r", "--repetitions", type="int", default=100, help="Number of packets to be generated for the simulation, e.g., -r 100 (default=100)") - - (options, args) = parser.parse_args () - if len(args) != 0: - parser.print_help() - raise SystemExit, 1 - - fname=options.fsm_file - esn0_db=float(options.esn0) - rep=int(options.repetitions) - - # system parameters - f=trellis.fsm(fname) # get the FSM specification from a file (will hopefully be automated in the future...) - Kb=1024*16 # packet size in bits (make it multiple of 16) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utils.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main() - diff --git a/gr-trellis/examples/python/test_tcm_parallel.py b/gr-trellis/examples/python/test_tcm_parallel.py deleted file mode 100755 index b30c80811f..0000000000 --- a/gr-trellis/examples/python/test_tcm_parallel.py +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import fsm_utils -from gnuradio.eng_option import eng_option -from optparse import OptionParser - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed,P): - tb = gr.top_block () - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16*P) # packet size in shorts - s2fsmi=blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - s2p = blocks.stream_to_streams(gr.sizeof_short,P) # serial to parallel - enc = trellis.encoder_ss(f,0) # initiali state = 0 - mod = digital.chunks_to_symbols_sf(constellation,dimensionality) - - # CHANNEL - add=[] - noise=[] - for i in range(P): - add.append(blocks.add_ff()) - noise.append(analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed)) - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - p2s = blocks.streams_to_stream(gr.sizeof_short,P) # parallel to serial - fsmi2s=blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s() - - tb.connect (src,src_head,s2fsmi,s2p) - for i in range(P): - tb.connect ((s2p,i),(enc,i),(mod,i)) - tb.connect ((mod,i),(add[i],0)) - tb.connect (noise[i],(add[i],1)) - tb.connect (add[i],(metrics,i)) - tb.connect ((metrics,i),(va,i),(p2s,i)) - tb.connect (p2s,fsmi2s,dst) - - - tb.run() - - # A bit of cheating: run the program once and print the - # final encoder state. - # Then put it as the last argument in the viterbi block - #print "final state = " , enc.ST() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - - return (ntotal,ntotal-nright) - - - -def main(): - parser = OptionParser(option_class=eng_option) - parser.add_option("-f", "--fsm_file", type="string", default="fsm_files/awgn1o2_4.fsm", help="Filename containing the fsm specification, e.g. -f fsm_files/awgn1o2_4.fsm (default=fsm_files/awgn1o2_4.fsm)") - parser.add_option("-e", "--esn0", type="eng_float", default=10.0, help="Symbol energy to noise PSD level ratio in dB, e.g., -e 10.0 (default=10.0)") - parser.add_option("-r", "--repetitions", type="int", default=100, help="Number of packets to be generated for the simulation, e.g., -r 100 (default=100)") - - (options, args) = parser.parse_args () - if len(args) != 0: - parser.print_help() - raise SystemExit, 1 - - fname=options.fsm_file - esn0_db=float(options.esn0) - rep=int(options.repetitions) - - # system parameters - f=trellis.fsm(fname) # get the FSM specification from a file - P=4 # how many parallel streams? - Kb=1024*16 # packet size in bits (make it multiple of 16 so it can be packed in a short) - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined modulations - dimensionality = modulation[0] - constellation = modulation[1] - if len(constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and modulation size.\n') - sys.exit (1) - # calculate average symbol energy - Es = 0 - for i in range(len(constellation)): - Es = Es + constellation[i]**2 - Es = Es / (len(constellation)/dimensionality) - N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i),P) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - -if __name__ == '__main__': - main() - diff --git a/gr-trellis/examples/python/test_turbo_equalization.py b/gr-trellis/examples/python/test_turbo_equalization.py deleted file mode 100755 index b2d58a6014..0000000000 --- a/gr-trellis/examples/python/test_turbo_equalization.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): - metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO - scale = blocks.multiply_const_ff(1.0/N0) - gnd = blocks.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - tb.connect (gnd,inter[0]) - tb.connect (metrics_in,scale) - tb.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - tb.connect (metrics_in,(siso_in[it+1],1)) - tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) - tb.connect (gnd,(siso_out[it],0)) - tb.connect (siso_out[it],inter[it+1]) - tb.connect (inter[it],(siso_in[it],0)) - else: - tb.connect (siso_in[it],deinter[it],siso_out[it]) - tb.connect (inter[it],(siso_in[it],0)) - - return (metrics_in,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,Es,N0,IT,seed): - tb = gr.top_block () - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head(gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the iouter FSM input cardinality - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - enc_in = trellis.encoder_ss(fi,0) # initial state = 0 - # essentially here we implement the combination of modulation and channel as a memoryless modulation (the memory induced by the channel is hidden in the innner FSM) - mod = digital.chunks_to_symbols_sf(tot_constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s(); - - tb.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,head) - tb.connect (tail,fsmi2s,dst) - - tb.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - #print ntotal,nright,runlength - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname_out=args[0] - esn0_db=float(args[1]) - rep=int(args[2]) - else: - sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=64*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - print 'size = ',K - interleaver=trellis.interleaver(K,666) # construct a random interleaver - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - if len(tot_constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - N0=pow(10.0,-esn0_db/10.0); # noise variance - IT = 3 # number of turbo iterations - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - print s - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gr-trellis/examples/python/test_turbo_equalization1.py b/gr-trellis/examples/python/test_turbo_equalization1.py deleted file mode 100755 index 5ff21ec757..0000000000 --- a/gr-trellis/examples/python/test_turbo_equalization1.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, filter, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): - metrics_in = trellis.metrics_f(fi.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for innner SISO - scale = blocks.multiply_const_ff(1.0/N0) - gnd = blocks.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - tb.connect (gnd,inter[0]) - tb.connect (metrics_in,scale) - tb.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - tb.connect (scale,(siso_in[it+1],1)) - tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) - tb.connect (gnd,(siso_out[it],0)) - tb.connect (siso_out[it],inter[it+1]) - tb.connect (inter[it],(siso_in[it],0)) - else: - tb.connect (siso_in[it],deinter[it],siso_out[it]) - tb.connect (inter[it],(siso_in[it],0)) - - return (metrics_in,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed): - tb = gr.top_block () - L = len(channel) - - # TX - # this for loop is TOO slow in python!!! - packet = [0]*(K) - random.seed(seed) - for i in range(len(packet)): - packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols - src = blocks.vector_source_s(packet,False) - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - mod = digital.chunks_to_symbols_sf(modulation[1],modulation[0]) - - # CHANNEL - isi = filter.fir_filter_fff(1,channel) - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - dst = blocks.vector_sink_s(); - - tb.connect (src,enc_out,inter,mod) - tb.connect (mod,isi,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,head) - tb.connect (tail,dst) - - tb.run() - - data = dst.data() - ntotal = len(data) - nright=0 - for i in range(ntotal): - if packet[i]==data[i]: - nright=nright+1 - #else: - #print "Error in ", i - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname_out=args[0] - esn0_db=float(args[1]) - rep=int(args[2]) - else: - sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=64*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - if len(tot_constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - N0=pow(10.0,-esn0_db/10.0); # noise variance - IT = 3 # number of turbo iterations - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gr-trellis/examples/python/test_turbo_equalization2.py b/gr-trellis/examples/python/test_turbo_equalization2.py deleted file mode 100755 index c2af9fbfca..0000000000 --- a/gr-trellis/examples/python/test_turbo_equalization2.py +++ /dev/null @@ -1,152 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, filter, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,type): - scale = blocks.multiply_const_ff(math.sqrt(1.0/N0)) - gnd = blocks.vector_source_f([0],True); - - inter=[] - deinter=[] - siso_in=[] - siso_out=[] - - # generate all blocks - for it in range(IT): - inter.append( trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) ) - siso_in.append( trellis.siso_combined_f(fi,K,0,-1,True,False,type,dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN) ) - deinter.append( trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float) ) - if it < IT-1: - siso_out.append( trellis.siso_f(fo,K,0,-1,False,True,type) ) - else: - siso_out.append( trellis.viterbi_s(fo,K,0,-1) ) # no soft outputs needed - - # connect first stage - tb.connect (gnd,inter[0]) - tb.connect (scale,(siso_in[0],1)) - - # connect the rest - for it in range(IT): - if it < IT-1: - tb.connect (scale,(siso_in[it+1],1)) - tb.connect (siso_in[it],deinter[it],(siso_out[it],1)) - tb.connect (gnd,(siso_out[it],0)) - tb.connect (siso_out[it],inter[it+1]) - tb.connect (inter[it],(siso_in[it],0)) - else: - tb.connect (siso_in[it],deinter[it],siso_out[it]) - tb.connect (inter[it],(siso_in[it],0)) - - return (scale,siso_out[IT-1]) - - -def run_test (fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,Es,N0,IT,seed): - tb = gr.top_block () - L = len(channel) - - # TX - # this for loop is TOO slow in python!!! - packet = [0]*(K) - random.seed(seed) - for i in range(len(packet)): - packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols - src = blocks.vector_source_s(packet,False) - enc_out = trellis.encoder_ss(fo,0) # initial state = 0 - inter = trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short) - mod = digital.chunks_to_symbols_sf(modulation[1],modulation[0]) - - # CHANNEL - isi = filter.fir_filter_fff(1,channel) - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - (head,tail) = make_rx(tb,fo,fi,dimensionality,tot_constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM) - dst = blocks.vector_sink_s(); - - tb.connect (src,enc_out,inter,mod) - tb.connect (mod,isi,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,head) - tb.connect (tail,dst) - - tb.run() - - data = dst.data() - ntotal = len(data) - nright=0 - for i in range(ntotal): - if packet[i]==data[i]: - nright=nright+1 - #else: - #print "Error in ", i - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 3: - fname_out=args[0] - esn0_db=float(args[1]) - rep=int(args[2]) - else: - sys.stderr.write ('usage: test_turbo_equalization.py fsm_name_out Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=64*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - fo=trellis.fsm(fname_out) # get the outer FSM specification from a file - fi=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - if fo.O() != fi.I(): - sys.stderr.write ('Incompatible cardinality between outer and inner FSM.\n') - sys.exit (1) - bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - interleaver=trellis.interleaver(K,666) # construct a random interleaver - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - N0=pow(10.0,-esn0_db/10.0); # noise variance - tot_constellation =[0]*len(tot_channel[1]) - for i in range(len(tot_channel[1])): - tot_constellation[i] = tot_channel[1][i] * math.sqrt(1.0/N0) - if len(tot_constellation)/dimensionality != fi.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - IT = 3 # number of turbo iterations - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,1,N0,IT,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%10==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gr-trellis/examples/python/test_viterbi_equalization.py b/gr-trellis/examples/python/test_viterbi_equalization.py deleted file mode 100755 index 987f171b2a..0000000000 --- a/gr-trellis/examples/python/test_viterbi_equalization.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, blocks -from gnuradio import eng_notation -import math -import sys -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,seed): - tb = gr.top_block () - - # TX - src = blocks.lfsr_32k_source_s() - src_head = blocks.head (gr.sizeof_short,Kb/16) # packet size in shorts - s2fsmi = blocks.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack shorts to symbols compatible with the FSM input cardinality - enc = trellis.encoder_ss(f,0) # initial state = 0 - # essentially here we implement the combination of modulation and channel as a memoryless modulation (the memory induced by the channel is hidden in the FSM) - mod = digital.chunks_to_symbols_sf(tot_constellation,dimensionality) - - # CHANNEL - add = blocks.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - metrics = trellis.metrics_f(f.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are not set. - fsmi2s = blocks.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM input symbols to shorts - dst = blocks.check_lfsr_32k_s(); - - tb.connect (src,src_head,s2fsmi,enc,mod) - tb.connect (mod,(add,0)) - tb.connect (noise,(add,1)) - tb.connect (add,metrics) - tb.connect (metrics,va,fsmi2s,dst) - - tb.run() - - ntotal = dst.ntotal () - nright = dst.nright () - runlength = dst.runlength () - #print ntotal,nright,runlength - - return (ntotal,ntotal-nright) - - - - -def main(args): - nargs = len (args) - if nargs == 2: - esn0_db=float(args[0]) - rep=int(args[1]) - else: - sys.stderr.write ('usage: test_viterbi_equalization.py Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=128*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - N0=pow(10.0,-esn0_db/10.0); # noise variance - if len(tot_constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,tot_constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or bit) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) - diff --git a/gr-trellis/examples/python/test_viterbi_equalization1.py b/gr-trellis/examples/python/test_viterbi_equalization1.py deleted file mode 100755 index baa6a27f1b..0000000000 --- a/gr-trellis/examples/python/test_viterbi_equalization1.py +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr -from gnuradio import trellis, digital, filter, blocks -from gnuradio import eng_notation -import math -import sys -import random -import fsm_utils - -try: - from gnuradio import analog -except ImportError: - sys.stderr.write("Error: Program requires gr-analog.\n") - sys.exit(1) - -def run_test (f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,seed): - tb = gr.top_block () - L = len(channel) - - # TX - # this for loop is TOO slow in python!!! - packet = [0]*(K+2*L) - random.seed(seed) - for i in range(len(packet)): - packet[i] = random.randint(0, 2**bitspersymbol - 1) # random symbols - for i in range(L): # first/last L symbols set to 0 - packet[i] = 0 - packet[len(packet)-i-1] = 0 - src = blocks.vector_source_s(packet,False) - mod = digital.chunks_to_symbols_sf(modulation[1],modulation[0]) - - # CHANNEL - isi = filter.fir_filter_fff(1,channel) - add = blockss.add_ff() - noise = analog.noise_source_f(analog.GR_GAUSSIAN,math.sqrt(N0/2),seed) - - # RX - skip = blocks.skiphead(gr.sizeof_float, L) # skip the first L samples since you know they are coming from the L zero symbols - #metrics = trellis.metrics_f(f.O(),dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN) # data preprocessing to generate metrics for Viterbi - #va = trellis.viterbi_s(f,K+L,-1,0) # Put -1 if the Initial/Final states are not set. - va = trellis.viterbi_combined_fs(f,K+L,0,0,dimensionality,tot_constellation,digital.TRELLIS_EUCLIDEAN) # using viterbi_combined_fs instead of metrics_f/viterbi_s allows larger packet lengths because metrics_f is complaining for not being able to allocate large buffers. This is due to the large f.O() in this application... - dst = blocks.vector_sink_s() - - tb.connect (src,mod) - tb.connect (mod,isi,(add,0)) - tb.connect (noise,(add,1)) - #tb.connect (add,metrics) - #tb.connect (metrics,va,dst) - tb.connect (add,skip,va,dst) - - tb.run() - - data = dst.data() - ntotal = len(data) - L - nright=0 - for i in range(ntotal): - if packet[i+L]==data[i]: - nright=nright+1 - #else: - #print "Error in ", i - - return (ntotal,ntotal-nright) - - -def main(args): - nargs = len (args) - if nargs == 2: - esn0_db=float(args[0]) - rep=int(args[1]) - else: - sys.stderr.write ('usage: test_viterbi_equalization1.py Es/No_db repetitions\n') - sys.exit (1) - - # system parameters - Kb=128*16 # packet size in bits (multiple of 16) - modulation = fsm_utils.pam4 # see fsm_utlis.py for available predefined modulations - channel = fsm_utils.c_channel # see fsm_utlis.py for available predefined test channels - f=trellis.fsm(len(modulation[1]),len(channel)) # generate the FSM automatically - bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM input symbol - K=Kb/bitspersymbol # packet size in trellis steps - - tot_channel = fsm_utils.make_isi_lookup(modulation,channel,True) # generate the lookup table (normalize energy to 1) - dimensionality = tot_channel[0] - tot_constellation = tot_channel[1] - N0=pow(10.0,-esn0_db/10.0); # noise variance - if len(tot_constellation)/dimensionality != f.O(): - sys.stderr.write ('Incompatible FSM output cardinality and lookup table size.\n') - sys.exit (1) - - tot_s=0 # total number of transmitted shorts - terr_s=0 # total number of shorts in error - terr_p=0 # total number of packets in error - - for i in range(rep): - (s,e)=run_test(f,Kb,bitspersymbol,K,channel,modulation,dimensionality,tot_constellation,N0,-long(666+i)) # run experiment with different seed to get different noise realizations - tot_s=tot_s+s - terr_s=terr_s+e - terr_p=terr_p+(terr_s!=0) - if ((i+1)%100==0) : # display progress - print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - # estimate of the (short or symbol) error rate - print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % ((1.0*terr_s)/tot_s) - - - -if __name__ == '__main__': - main (sys.argv[1:]) |