diff options
28 files changed, 824 insertions, 461 deletions
diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc index 9d966031cf..e10c70a614 100644 --- a/gr-trellis/examples/grc/pccc.grc +++ b/gr-trellis/examples/grc/pccc.grc @@ -69,7 +69,7 @@ <key>variable</key> <param> <key>id</key> - <value>fsm2</value> + <value>prefix</value> </param> <param> <key>_enabled</key> @@ -77,7 +77,7 @@ </param> <param> <key>value</key> - <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value> + <value>"@FSM_FILE_INSTALL_DIR@"</value> </param> <param> <key>alias</key> @@ -85,7 +85,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 149)</value> + <value>(320, 21)</value> </param> <param> <key>_rotation</key> @@ -96,7 +96,7 @@ <key>variable</key> <param> <key>id</key> - <value>fsm1</value> + <value>R</value> </param> <param> <key>_enabled</key> @@ -104,7 +104,7 @@ </param> <param> <key>value</key> - <value>trellis.fsm(prefix+"awgn1o2_4.fsm")</value> + <value>100e3</value> </param> <param> <key>alias</key> @@ -112,7 +112,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 85)</value> + <value>(200, 101)</value> </param> <param> <key>_rotation</key> @@ -123,7 +123,7 @@ <key>variable</key> <param> <key>id</key> - <value>prefix</value> + <value>block</value> </param> <param> <key>_enabled</key> @@ -131,7 +131,7 @@ </param> <param> <key>value</key> - <value>"@FSM_FILE_INSTALL_DIR@"</value> + <value>1000</value> </param> <param> <key>alias</key> @@ -139,7 +139,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 21)</value> + <value>(200, 37)</value> </param> <param> <key>_rotation</key> @@ -150,7 +150,7 @@ <key>variable</key> <param> <key>id</key> - <value>interleaver</value> + <value>dim</value> </param> <param> <key>_enabled</key> @@ -158,7 +158,7 @@ </param> <param> <key>value</key> - <value>trellis.interleaver(block,666)</value> + <value>mod[0]</value> </param> <param> <key>alias</key> @@ -166,7 +166,88 @@ </param> <param> <key>_coordinate</key> - <value>(320, 213)</value> + <value>(688, 317)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>constellation</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>value</key> + <value>mod[1]</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(528, 317)</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>False</value> + </param> + <param> + <key>value</key> + <value>2</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(688, 189)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>id</key> + <value>constellation</value> + </param> + <param> + <key>_enabled</key> + <value>False</value> + </param> + <param> + <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>alias</key> + <value></value> + </param> + <param> + <key>_coordinate</key> + <value>(528, 189)</value> </param> <param> <key>_rotation</key> @@ -204,7 +285,7 @@ <key>variable</key> <param> <key>id</key> - <value>block</value> + <value>noisevar</value> </param> <param> <key>_enabled</key> @@ -212,7 +293,7 @@ </param> <param> <key>value</key> - <value>1000</value> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> <param> <key>alias</key> @@ -220,7 +301,7 @@ </param> <param> <key>_coordinate</key> - <value>(200, 37)</value> + <value>(1032, 149)</value> </param> <param> <key>_rotation</key> @@ -231,7 +312,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>interleaver</value> </param> <param> <key>_enabled</key> @@ -239,7 +320,7 @@ </param> <param> <key>value</key> - <value>10e3</value> + <value>trellis.interleaver(block,666)</value> </param> <param> <key>alias</key> @@ -247,7 +328,7 @@ </param> <param> <key>_coordinate</key> - <value>(200, 101)</value> + <value>(320, 213)</value> </param> <param> <key>_rotation</key> @@ -258,7 +339,7 @@ <key>variable</key> <param> <key>id</key> - <value>noisevar</value> + <value>fsm1</value> </param> <param> <key>_enabled</key> @@ -266,7 +347,7 @@ </param> <param> <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + <value>trellis.fsm(prefix+"awgn1o2_4rsc.fsm")</value> </param> <param> <key>alias</key> @@ -274,7 +355,7 @@ </param> <param> <key>_coordinate</key> - <value>(1032, 149)</value> + <value>(320, 85)</value> </param> <param> <key>_rotation</key> @@ -285,7 +366,7 @@ <key>variable</key> <param> <key>id</key> - <value>constellation</value> + <value>fsm2</value> </param> <param> <key>_enabled</key> @@ -293,7 +374,7 @@ </param> <param> <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> + <value>trellis.fsm(prefix+"awgn1o1_4rsc.fsm")</value> </param> <param> <key>alias</key> @@ -301,7 +382,7 @@ </param> <param> <key>_coordinate</key> - <value>(528, 189)</value> + <value>(320, 149)</value> </param> <param> <key>_rotation</key> @@ -312,7 +393,7 @@ <key>variable</key> <param> <key>id</key> - <value>dim</value> + <value>mod</value> </param> <param> <key>_enabled</key> @@ -320,7 +401,7 @@ </param> <param> <key>value</key> - <value>2</value> + <value>fu.psk2x3</value> </param> <param> <key>alias</key> @@ -328,7 +409,7 @@ </param> <param> <key>_coordinate</key> - <value>(688, 189)</value> + <value>(576, 253)</value> </param> <param> <key>_rotation</key> @@ -524,65 +605,6 @@ </param> </block> <block> - <key>variable_slider</key> - <param> - <key>id</key> - <value>EsN0_dB</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>label</key> - <value>EsN0 (dB)</value> - </param> - <param> - <key>value</key> - <value>2</value> - </param> - <param> - <key>min</key> - <value>-10</value> - </param> - <param> - <key>max</key> - <value>10</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>(896, 129)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>virtual_sink</key> <param> <key>id</key> @@ -652,10 +674,10 @@ </param> </block> <block> - <key>analog_random_source_x</key> + <key>blocks_throttle</key> <param> <key>id</key> - <value>analog_random_source_x_0_0</value> + <value>blocks_throttle_0_0</value> </param> <param> <key>_enabled</key> @@ -666,19 +688,15 @@ <value>byte</value> </param> <param> - <key>min</key> - <value>0</value> - </param> - <param> - <key>max</key> - <value>2</value> + <key>samples_per_second</key> + <value>R</value> </param> <param> - <key>num_samps</key> - <value>1007</value> + <key>vlen</key> + <value>1</value> </param> <param> - <key>repeat</key> + <key>ignoretag</key> <value>True</value> </param> <param> @@ -699,7 +717,7 @@ </param> <param> <key>_coordinate</key> - <value>(8, 471)</value> + <value>(208, 492)</value> </param> <param> <key>_rotation</key> @@ -707,10 +725,10 @@ </param> </block> <block> - <key>blocks_throttle</key> + <key>analog_noise_source_x</key> <param> <key>id</key> - <value>blocks_throttle_0_0</value> + <value>analog_noise_source_x_0</value> </param> <param> <key>_enabled</key> @@ -718,19 +736,19 @@ </param> <param> <key>type</key> - <value>byte</value> + <value>float</value> </param> <param> - <key>samples_per_second</key> - <value>R</value> + <key>noise_type</key> + <value>analog.GR_GAUSSIAN</value> </param> <param> - <key>vlen</key> - <value>1</value> + <key>amp</key> + <value>noisevar**0.5</value> </param> <param> - <key>ignoretag</key> - <value>True</value> + <key>seed</key> + <value>-42</value> </param> <param> <key>alias</key> @@ -750,7 +768,7 @@ </param> <param> <key>_coordinate</key> - <value>(208, 492)</value> + <value>(656, 646)</value> </param> <param> <key>_rotation</key> @@ -758,33 +776,25 @@ </param> </block> <block> - <key>digital_chunks_to_symbols_xx</key> + <key>blocks_add_xx</key> <param> <key>id</key> - <value>digital_chunks_to_symbols_xx_0</value> + <value>blocks_add_xx_1</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>in_type</key> - <value>byte</value> - </param> - <param> - <key>out_type</key> + <key>type</key> <value>float</value> </param> <param> - <key>symbol_table</key> - <value>constellation</value> - </param> - <param> - <key>dimension</key> + <key>num_inputs</key> <value>2</value> </param> <param> - <key>num_ports</key> + <key>vlen</key> <value>1</value> </param> <param> @@ -805,7 +815,7 @@ </param> <param> <key>_coordinate</key> - <value>(632, 485)</value> + <value>(880, 552)</value> </param> <param> <key>_rotation</key> @@ -813,10 +823,60 @@ </param> </block> <block> - <key>analog_noise_source_x</key> + <key>virtual_sink</key> <param> <key>id</key> - <value>analog_noise_source_x_0</value> + <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>(896, 676)</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>(48, 132)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>trellis_pccc_encoder_xx</key> + <param> + <key>id</key> + <value>trellis_pccc_encoder_xx_0</value> </param> <param> <key>_enabled</key> @@ -824,19 +884,31 @@ </param> <param> <key>type</key> - <value>float</value> + <value>bb</value> </param> <param> - <key>noise_type</key> - <value>analog.GR_GAUSSIAN</value> + <key>o_fsm_args</key> + <value>fsm1</value> </param> <param> - <key>amp</key> - <value>noisevar**0.5</value> + <key>o_init_state</key> + <value>0</value> </param> <param> - <key>seed</key> - <value>-42</value> + <key>i_fsm_args</key> + <value>fsm2</value> + </param> + <param> + <key>i_init_state</key> + <value>0</value> + </param> + <param> + <key>interleaver_args</key> + <value>interleaver</value> + </param> + <param> + <key>bl</key> + <value>block</value> </param> <param> <key>alias</key> @@ -856,7 +928,7 @@ </param> <param> <key>_coordinate</key> - <value>(656, 646)</value> + <value>(400, 457)</value> </param> <param> <key>_rotation</key> @@ -864,25 +936,33 @@ </param> </block> <block> - <key>blocks_add_xx</key> + <key>digital_chunks_to_symbols_xx</key> <param> <key>id</key> - <value>blocks_add_xx_1</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>num_inputs</key> - <value>2</value> + <key>symbol_table</key> + <value>constellation</value> </param> <param> - <key>vlen</key> + <key>dimension</key> + <value>dim</value> + </param> + <param> + <key>num_ports</key> <value>1</value> </param> <param> @@ -903,7 +983,7 @@ </param> <param> <key>_coordinate</key> - <value>(880, 552)</value> + <value>(632, 485)</value> </param> <param> <key>_rotation</key> @@ -911,22 +991,54 @@ </param> </block> <block> - <key>virtual_sink</key> + <key>analog_random_source_x</key> <param> <key>id</key> - <value>virtual_sink_0</value> + <value>analog_random_source_x_0_0</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>stream_id</key> - <value>observation</value> + <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>block</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>(896, 676)</value> + <value>(8, 471)</value> </param> <param> <key>_rotation</key> @@ -934,62 +1046,58 @@ </param> </block> <block> - <key>trellis_pccc_encoder_xx</key> + <key>variable_slider</key> <param> <key>id</key> - <value>trellis_pccc_encoder_xx_0</value> + <value>EsN0_dB</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>type</key> - <value>bb</value> + <key>label</key> + <value>EsN0 (dB)</value> </param> <param> - <key>o_fsm_args</key> - <value>fsm1</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>fsm2</value> + <key>max</key> + <value>20</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>interleaver</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>(400, 457)</value> + <value>(896, 129)</value> </param> <param> <key>_rotation</key> @@ -1052,7 +1160,7 @@ </param> <param> <key>dim</key> - <value>2</value> + <value>dim</value> </param> <param> <key>table</key> @@ -1064,11 +1172,11 @@ </param> <param> <key>siso_type</key> - <value>trellis.TRELLIS_SUM_PRODUCT</value> + <value>trellis.TRELLIS_MIN_SUM</value> </param> <param> <key>scaling</key> - <value>1.0/noisevar</value> + <value>0.5/noisevar</value> </param> <param> <key>alias</key> @@ -1095,33 +1203,6 @@ <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>(48, 132)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> <connection> <source_block_id>digital_chunks_to_symbols_xx_0</source_block_id> <sink_block_id>blocks_add_xx_1</sink_block_id> diff --git a/gr-trellis/examples/grc/sccc.grc b/gr-trellis/examples/grc/sccc.grc index 0bcaa6c00a..f31f3ce86d 100644 --- a/gr-trellis/examples/grc/sccc.grc +++ b/gr-trellis/examples/grc/sccc.grc @@ -69,33 +69,6 @@ <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> @@ -123,7 +96,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>mod</value> </param> <param> <key>_enabled</key> @@ -131,7 +104,7 @@ </param> <param> <key>value</key> - <value>10e3</value> + <value>fu.psk2x3</value> </param> <param> <key>alias</key> @@ -139,7 +112,7 @@ </param> <param> <key>_coordinate</key> - <value>(224, 93)</value> + <value>(632, 101)</value> </param> <param> <key>_rotation</key> @@ -363,6 +336,33 @@ </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>(224, 93)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> <key>import</key> <param> <key>id</key> @@ -855,105 +855,6 @@ </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>0</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>0</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>block</value> - </param> - <param> - <key>iterations</key> - <value>5</value> - </param> - <param> - <key>dim</key> - <value>dim</value> - </param> - <param> - <key>table</key> - <value>constellation</value> - </param> - <param> - <key>metric_type</key> - <value>digital.TRELLIS_EUCLIDEAN</value> - </param> - <param> - <key>siso_type</key> - <value>trellis.TRELLIS_SUM_PRODUCT</value> - </param> - <param> - <key>scaling</key> - <value>1.0/noisevar</value> - </param> - <param> - <key>alias</key> - <value></value> - </param> - <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>(400, 745)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>analog_noise_source_x</key> <param> <key>id</key> @@ -1176,6 +1077,105 @@ <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>0</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>0</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>block</value> + </param> + <param> + <key>iterations</key> + <value>5</value> + </param> + <param> + <key>dim</key> + <value>dim</value> + </param> + <param> + <key>table</key> + <value>constellation</value> + </param> + <param> + <key>metric_type</key> + <value>digital.TRELLIS_EUCLIDEAN</value> + </param> + <param> + <key>siso_type</key> + <value>trellis.TRELLIS_MIN_SUM</value> + </param> + <param> + <key>scaling</key> + <value>1.0/noisevar</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>(400, 745)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> <connection> <source_block_id>analog_noise_source_x_0</source_block_id> <sink_block_id>blocks_add_xx_1</sink_block_id> diff --git a/gr-trellis/examples/grc/turbo_equalization.grc b/gr-trellis/examples/grc/turbo_equalization.grc index b2c3b20c6a..c83c59db20 100644 --- a/gr-trellis/examples/grc/turbo_equalization.grc +++ b/gr-trellis/examples/grc/turbo_equalization.grc @@ -3,18 +3,54 @@ <flow_graph> <timestamp>Wed Oct 1 11:04:18 2014</timestamp> <block> - <key>variable</key> + <key>options</key> <param> <key>id</key> - <value>fsm_i</value> + <value>turbo_equalization</value> </param> <param> <key>_enabled</key> <value>True</value> </param> <param> - <key>value</key> - <value>trellis.fsm(len(modulation[1]),len(channel))</value> + <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> @@ -22,7 +58,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 293)</value> + <value>(10, 10)</value> </param> <param> <key>_rotation</key> @@ -33,7 +69,7 @@ <key>variable</key> <param> <key>id</key> - <value>prefix</value> + <value>fsm_o</value> </param> <param> <key>_enabled</key> @@ -41,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> @@ -49,7 +85,7 @@ </param> <param> <key>_coordinate</key> - <value>(768, 21)</value> + <value>(344, 21)</value> </param> <param> <key>_rotation</key> @@ -60,7 +96,7 @@ <key>variable</key> <param> <key>id</key> - <value>tot_mod</value> + <value>block_b</value> </param> <param> <key>_enabled</key> @@ -68,7 +104,7 @@ </param> <param> <key>value</key> - <value>fu.make_isi_lookup(modulation,channel,False)</value> + <value>bpsym*1000</value> </param> <param> <key>alias</key> @@ -76,7 +112,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 381)</value> + <value>(216, 21)</value> </param> <param> <key>_rotation</key> @@ -87,7 +123,7 @@ <key>variable</key> <param> <key>id</key> - <value>R</value> + <value>interleaver</value> </param> <param> <key>_enabled</key> @@ -95,7 +131,7 @@ </param> <param> <key>value</key> - <value>100e3</value> + <value>trellis.interleaver(block_b/bpsym,666)</value> </param> <param> <key>alias</key> @@ -103,7 +139,7 @@ </param> <param> <key>_coordinate</key> - <value>(216, 109)</value> + <value>(528, 117)</value> </param> <param> <key>_rotation</key> @@ -114,7 +150,7 @@ <key>variable</key> <param> <key>id</key> - <value>modulation</value> + <value>Es</value> </param> <param> <key>_enabled</key> @@ -122,7 +158,7 @@ </param> <param> <key>value</key> - <value>fu.pam4</value> + <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> </param> <param> <key>alias</key> @@ -130,7 +166,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 117)</value> + <value>(776, 181)</value> </param> <param> <key>_rotation</key> @@ -141,7 +177,7 @@ <key>variable</key> <param> <key>id</key> - <value>channel</value> + <value>noisevar</value> </param> <param> <key>_enabled</key> @@ -149,7 +185,7 @@ </param> <param> <key>value</key> - <value>fu.c_channel</value> + <value>10**(-EsN0_dB/10.0) * Es /2.0</value> </param> <param> <key>alias</key> @@ -157,7 +193,7 @@ </param> <param> <key>_coordinate</key> - <value>(320, 205)</value> + <value>(1080, 181)</value> </param> <param> <key>_rotation</key> @@ -195,7 +231,7 @@ <key>variable</key> <param> <key>id</key> - <value>noisevar</value> + <value>channel</value> </param> <param> <key>_enabled</key> @@ -203,7 +239,7 @@ </param> <param> <key>value</key> - <value>10**(-EsN0_dB/10.0) * Es /2.0</value> + <value>fu.c_channel</value> </param> <param> <key>alias</key> @@ -211,7 +247,7 @@ </param> <param> <key>_coordinate</key> - <value>(1080, 181)</value> + <value>(320, 205)</value> </param> <param> <key>_rotation</key> @@ -222,7 +258,7 @@ <key>variable</key> <param> <key>id</key> - <value>Es</value> + <value>modulation</value> </param> <param> <key>_enabled</key> @@ -230,7 +266,7 @@ </param> <param> <key>value</key> - <value>numpy.mean((numpy.square(numpy.abs(tot_mod[1]))))</value> + <value>fu.pam4</value> </param> <param> <key>alias</key> @@ -238,7 +274,7 @@ </param> <param> <key>_coordinate</key> - <value>(776, 181)</value> + <value>(320, 117)</value> </param> <param> <key>_rotation</key> @@ -249,7 +285,7 @@ <key>variable</key> <param> <key>id</key> - <value>interleaver</value> + <value>R</value> </param> <param> <key>_enabled</key> @@ -257,7 +293,7 @@ </param> <param> <key>value</key> - <value>trellis.interleaver(block_b/bpsym,666)</value> + <value>100e3</value> </param> <param> <key>alias</key> @@ -265,7 +301,7 @@ </param> <param> <key>_coordinate</key> - <value>(528, 117)</value> + <value>(216, 109)</value> </param> <param> <key>_rotation</key> @@ -276,7 +312,7 @@ <key>variable</key> <param> <key>id</key> - <value>fsm_o</value> + <value>tot_mod</value> </param> <param> <key>_enabled</key> @@ -284,7 +320,7 @@ </param> <param> <key>value</key> - <value>trellis.fsm(prefix+"/awgn1o2_4.fsm")</value> + <value>fu.make_isi_lookup(modulation,channel,False)</value> </param> <param> <key>alias</key> @@ -292,7 +328,7 @@ </param> <param> <key>_coordinate</key> - <value>(328, 29)</value> + <value>(320, 381)</value> </param> <param> <key>_rotation</key> @@ -303,7 +339,7 @@ <key>variable</key> <param> <key>id</key> - <value>block_b</value> + <value>prefix</value> </param> <param> <key>_enabled</key> @@ -311,7 +347,7 @@ </param> <param> <key>value</key> - <value>bpsym*1000</value> + <value>"@FSM_FILE_INSTALL_DIR@"</value> </param> <param> <key>alias</key> @@ -319,7 +355,34 @@ </param> <param> <key>_coordinate</key> - <value>(216, 21)</value> + <value>(768, 21)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <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> @@ -880,6 +943,14 @@ <value>0</value> </param> <param> + <key>blockwise</key> + <value>False</value> + </param> + <param> + <key>blocklength</key> + <value>0</value> + </param> + <param> <key>alias</key> <value></value> </param> @@ -2334,69 +2405,6 @@ </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> diff --git a/gr-trellis/examples/python/CMakeLists.txt b/gr-trellis/examples/python/CMakeLists.txt index 0e27a9540d..8a05525bc4 100644 --- a/gr-trellis/examples/python/CMakeLists.txt +++ b/gr-trellis/examples/python/CMakeLists.txt @@ -35,9 +35,13 @@ install( install( FILES + fsm_files/awgn1o1_16rsc.fsm + fsm_files/awgn1o1_4rsc.fsm fsm_files/awgn1o2_128.fsm fsm_files/awgn1o2_16.fsm + fsm_files/awgn1o2_16rsc.fsm fsm_files/awgn1o2_4.fsm + fsm_files/awgn1o2_4rsc.fsm fsm_files/awgn1o2_8.fsm fsm_files/awgn2o3_16.fsm fsm_files/awgn2o3_16ungerboecka.fsm diff --git a/gr-trellis/examples/python/fsm_files/awgn1o1_16rsc.fsm b/gr-trellis/examples/python/fsm_files/awgn1o1_16rsc.fsm new file mode 100644 index 0000000000..f82d6052c2 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn1o1_16rsc.fsm @@ -0,0 +1,40 @@ +2 16 2 + +0 8 +8 0 +1 9 +9 1 +2 10 +10 2 +3 11 +11 3 +12 4 +4 12 +13 5 +5 13 +14 6 +6 14 +15 7 +7 15 + + +0 1 +0 1 +1 0 +1 0 +1 0 +1 0 +0 1 +0 1 +1 0 +1 0 +0 1 +0 1 +0 1 +0 1 +1 0 +1 0 + +Recursive Systematic Codes(RSC) +GM1o2_16rsc=[1, 1+D+D^4/1+D^2+D^3+D^4] = [1, 27/31] (in decimal); + diff --git a/gr-trellis/examples/python/fsm_files/awgn1o1_4rsc.fsm b/gr-trellis/examples/python/fsm_files/awgn1o1_4rsc.fsm new file mode 100644 index 0000000000..d5e7fe31ba --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn1o1_4rsc.fsm @@ -0,0 +1,16 @@ +2 4 2 + +0 2 +2 0 +1 3 +3 1 + +0 1 +0 1 +1 0 +1 0 + + +Recursive Systematic Codes(RSC) +GM1o2_4rsc=[1, 1+D+D^2/1+D^2] = [1, 7/5] (in decimal); +without the systematic bit diff --git a/gr-trellis/examples/python/fsm_files/awgn1o2_16rsc.fsm b/gr-trellis/examples/python/fsm_files/awgn1o2_16rsc.fsm new file mode 100644 index 0000000000..ccf1f1d4b1 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn1o2_16rsc.fsm @@ -0,0 +1,40 @@ +2 16 4 + +0 8 +8 0 +1 9 +9 1 +2 10 +10 2 +3 11 +11 3 +12 4 +4 12 +13 5 +5 13 +14 6 +6 14 +15 7 +7 15 + + +0 3 +0 3 +1 2 +1 2 +1 2 +1 2 +0 3 +0 3 +1 2 +1 2 +0 3 +0 3 +0 3 +0 3 +1 2 +1 2 + +Recursive Systematic Codes(RSC) +GM1o2_16rsc=[1, 1+D+D^4/1+D^2+D^3+D^4] = [1, 27/31] (in decimal); + diff --git a/gr-trellis/examples/python/fsm_files/awgn1o2_4rsc.fsm b/gr-trellis/examples/python/fsm_files/awgn1o2_4rsc.fsm new file mode 100644 index 0000000000..adb500a217 --- /dev/null +++ b/gr-trellis/examples/python/fsm_files/awgn1o2_4rsc.fsm @@ -0,0 +1,14 @@ +2 4 4 + +0 2 +2 0 +1 3 +3 1 + +0 3 +0 3 +1 2 +1 2 + +Recursive Systematic Codes(RSC) +GM1o2_4rsc=[1, 1+D+D^2/1+D^2] = [1, 7/5] (in decimal); diff --git a/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t b/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t index f767510935..affd62f68b 100644 --- a/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t +++ b/gr-trellis/include/gnuradio/trellis/encoder_XX.h.t @@ -46,10 +46,10 @@ namespace gr { static sptr make(const fsm &FSM, int ST, int K); - virtual fsm FSM() = 0; - virtual int ST() = 0; - virtual int K() = 0; - virtual void set_FSM(fsm &FSM) =0; + virtual fsm FSM() const = 0; + virtual int ST() const = 0; + virtual int K() const = 0; + virtual void set_FSM(const fsm &FSM) =0; virtual void set_ST(int ST) =0; virtual void set_K(int K) =0; }; diff --git a/gr-trellis/include/gnuradio/trellis/viterbi_X.h.t b/gr-trellis/include/gnuradio/trellis/viterbi_X.h.t index 61012272ec..252ffb715d 100644 --- a/gr-trellis/include/gnuradio/trellis/viterbi_X.h.t +++ b/gr-trellis/include/gnuradio/trellis/viterbi_X.h.t @@ -50,7 +50,7 @@ namespace gr { virtual int S0() const = 0; virtual int SK() const = 0; - virtual void set_FSM(fsm &FSM) =0; + virtual void set_FSM(const fsm &FSM) =0; virtual void set_K(int K) =0; virtual void set_S0(int S0) =0; virtual void set_SK(int SK) =0; diff --git a/gr-trellis/lib/core_algorithms.cc b/gr-trellis/lib/core_algorithms.cc index eb32b65de7..b26ee331f2 100644 --- a/gr-trellis/lib/core_algorithms.cc +++ b/gr-trellis/lib/core_algorithms.cc @@ -1216,17 +1216,17 @@ namespace gr { for(int k=0;k<blocklength;k++) { //std::cout << k << std::endl; for(int i=0;i<FSM1.O();i++) { - float x=cprioro[k*FSM1.O()*FSM2.O()+i*FSM1.O()+0]; + float x=cprioro[k*O+i*FSM2.O()+0]; for(int j=1;j<FSM2.O();j++) - x = (*p2mymin)(x,cprioro[k*FSM1.O()*FSM2.O()+i*FSM1.O()+j]); + x = (*p2mymin)(x,cprioro[k*O+i*FSM2.O()+j]); prioro1[k*FSM1.O()+i]=x; //std::cout << prioro1[k*FSM1.O()+i] << ", "; } //std::cout << std::endl; for(int i=0;i<FSM2.O();i++) { - float x=cprioro[k*FSM1.O()*FSM2.O()+0*FSM1.O()+i]; + float x=cprioro[k*O+0*FSM2.O()+i]; for(int j=1;j<FSM1.O();j++) - x = (*p2mymin)(x,cprioro[k*FSM1.O()*FSM2.O()+j*FSM1.O()+i]); + x = (*p2mymin)(x,cprioro[k*O+j*FSM2.O()+i]); prioro2[k*FSM2.O()+i]=x; } } diff --git a/gr-trellis/lib/encoder_XX_impl.cc.t b/gr-trellis/lib/encoder_XX_impl.cc.t index f2e19929ca..3a004a2f94 100644 --- a/gr-trellis/lib/encoder_XX_impl.cc.t +++ b/gr-trellis/lib/encoder_XX_impl.cc.t @@ -58,6 +58,24 @@ namespace gr { { } + void @IMPL_NAME@::set_FSM(const fsm &FSM) + { + gr::thread::scoped_lock guard(d_setlock); + d_FSM = FSM; + } + + void @IMPL_NAME@::set_ST(int ST) + { + gr::thread::scoped_lock guard(d_setlock); + d_ST = ST; + } + + void @IMPL_NAME@::set_K(int K) + { + gr::thread::scoped_lock guard(d_setlock); + d_K = K; + } + @IMPL_NAME@::~@IMPL_NAME@() { } @@ -67,6 +85,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int ST_tmp = 0; if (d_B){ // blockwise operation diff --git a/gr-trellis/lib/encoder_XX_impl.h.t b/gr-trellis/lib/encoder_XX_impl.h.t index 69f853d9fe..2b0ff31f4d 100644 --- a/gr-trellis/lib/encoder_XX_impl.h.t +++ b/gr-trellis/lib/encoder_XX_impl.h.t @@ -43,12 +43,12 @@ namespace gr { @IMPL_NAME@(const fsm &FSM, int ST, int K, bool B); ~@IMPL_NAME@(); - fsm FSM() { return d_FSM;; } - int ST() { return d_ST; } - int K() { return d_K; } - void set_FSM(fsm &FSM) { d_FSM = FSM; } - void set_ST(int ST) { d_ST = ST; } - void set_K(int K) { d_K = K; } + fsm FSM() const { return d_FSM;; } + int ST() const { return d_ST; } + int K() const { return d_K; } + void set_FSM(const fsm &FSM); + void set_ST(int ST); + void set_K(int K); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-trellis/lib/metrics_X_impl.cc.t b/gr-trellis/lib/metrics_X_impl.cc.t index 2b811de16f..5e74e4b2fc 100644 --- a/gr-trellis/lib/metrics_X_impl.cc.t +++ b/gr-trellis/lib/metrics_X_impl.cc.t @@ -56,6 +56,7 @@ namespace gr { void @IMPL_NAME@::set_O(int O) { + gr::thread::scoped_lock guard(d_setlock); d_O = O; set_relative_rate (1.0 * d_O / ((double) d_D)); set_output_multiple ((int)d_O); @@ -63,6 +64,7 @@ namespace gr { void @IMPL_NAME@::set_D(int D) { + gr::thread::scoped_lock guard(d_setlock); d_D = D; set_relative_rate (1.0 * d_O / ((double) d_D)); } @@ -70,12 +72,14 @@ namespace gr { void @IMPL_NAME@::set_TYPE(digital::trellis_metric_type_t type) { + gr::thread::scoped_lock guard(d_setlock); d_TYPE = type; } void @IMPL_NAME@::set_TABLE(const std::vector<@I_TYPE@> &table) { + gr::thread::scoped_lock guard(d_setlock); d_TABLE = table; } @@ -99,6 +103,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); for(int m = 0; m < nstreams; m++) { diff --git a/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t b/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t index 15ea3ceecb..5b3cdeeb62 100644 --- a/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t +++ b/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t @@ -90,6 +90,7 @@ namespace gr { void @IMPL_NAME@::set_scaling(float scaling) { + gr::thread::scoped_lock guard(d_setlock); d_scaling = scaling; } @@ -109,6 +110,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nblocks = noutput_items / d_blocklength; float (*p2min)(float, float) = NULL; diff --git a/gr-trellis/lib/pccc_encoder_XX_impl.cc.t b/gr-trellis/lib/pccc_encoder_XX_impl.cc.t index 119bff6ddb..8fd143ca9d 100644 --- a/gr-trellis/lib/pccc_encoder_XX_impl.cc.t +++ b/gr-trellis/lib/pccc_encoder_XX_impl.cc.t @@ -81,7 +81,7 @@ namespace gr { ST1_tmp = (int) d_FSM1.NS()[ST1_tmp*d_FSM1.I()+in[i]]; int o2 = d_FSM2.OS()[ST2_tmp*d_FSM2.I()+in[k]]; ST2_tmp = (int) d_FSM2.NS()[ST2_tmp*d_FSM2.I()+in[k]]; - out[i] = (@O_TYPE@) (o1*d_FSM1.O() + o2); + out[i] = (@O_TYPE@) (o1*d_FSM2.O() + o2); } } return noutput_items; diff --git a/gr-trellis/lib/permutation_impl.cc b/gr-trellis/lib/permutation_impl.cc index 0d9d3593bf..2fe0ea8cb8 100644 --- a/gr-trellis/lib/permutation_impl.cc +++ b/gr-trellis/lib/permutation_impl.cc @@ -55,12 +55,20 @@ namespace gr { void permutation_impl::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K=K; set_output_multiple(d_K*d_SYMS_PER_BLOCK); } + void permutation_impl::set_TABLE (const std::vector<int> &table) + { + gr::thread::scoped_lock guard(d_setlock); + d_TABLE = table; + } + void permutation_impl::set_SYMS_PER_BLOCK(int spb) { + gr::thread::scoped_lock guard(d_setlock); d_SYMS_PER_BLOCK=spb; set_output_multiple(d_K*d_SYMS_PER_BLOCK); } @@ -74,6 +82,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); for(int m=0;m<nstreams;m++) { diff --git a/gr-trellis/lib/permutation_impl.h b/gr-trellis/lib/permutation_impl.h index 5c74fba8fd..e013e52a20 100644 --- a/gr-trellis/lib/permutation_impl.h +++ b/gr-trellis/lib/permutation_impl.h @@ -48,7 +48,7 @@ namespace gr { size_t BYTES_PER_SYMBOL() const { return d_BYTES_PER_SYMBOL; } void set_K(int K) ; - void set_TABLE (const std::vector<int> &table) {d_TABLE = table; } + void set_TABLE (const std::vector<int> &table); void set_SYMS_PER_BLOCK(int spb) ; int work(int noutput_items, diff --git a/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t b/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t index 4acc560175..f66b1f37e7 100644 --- a/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t +++ b/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t @@ -89,6 +89,7 @@ namespace gr { void @IMPL_NAME@::set_scaling(float scaling) { + gr::thread::scoped_lock guard(d_setlock); d_scaling = scaling; } @@ -108,6 +109,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nblocks = noutput_items / d_blocklength; float (*p2min)(float, float) = NULL; diff --git a/gr-trellis/lib/siso_combined_f_impl.cc b/gr-trellis/lib/siso_combined_f_impl.cc index f9e8e28a9c..3b89684bf0 100644 --- a/gr-trellis/lib/siso_combined_f_impl.cc +++ b/gr-trellis/lib/siso_combined_f_impl.cc @@ -96,35 +96,68 @@ namespace gr { void siso_combined_f_impl::set_FSM(const fsm &FSM) { + gr::thread::scoped_lock guard(d_setlock); d_FSM=FSM; recalculate(); } void siso_combined_f_impl::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K=K; recalculate(); } void siso_combined_f_impl::set_POSTI(bool POSTI) { + gr::thread::scoped_lock guard(d_setlock); d_POSTI = POSTI; recalculate(); } void siso_combined_f_impl::set_POSTO(bool POSTO) { + gr::thread::scoped_lock guard(d_setlock); d_POSTO = POSTO; recalculate(); } void siso_combined_f_impl::set_D(int D) { + gr::thread::scoped_lock guard(d_setlock); d_D=D; recalculate(); } - + void siso_combined_f_impl::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void siso_combined_f_impl::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + + void siso_combined_f_impl::set_SISO_TYPE(trellis::siso_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_SISO_TYPE = type; + } + + void siso_combined_f_impl::set_TABLE(const std::vector<float> &table) + { + gr::thread::scoped_lock guard(d_setlock); + d_TABLE = table; + } + + void siso_combined_f_impl::set_TYPE(digital::trellis_metric_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_TYPE = type; + } siso_combined_f_impl::~siso_combined_f_impl() { @@ -163,6 +196,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = output_items.size(); //printf("general_work:Streams: %d\n",nstreams); diff --git a/gr-trellis/lib/siso_combined_f_impl.h b/gr-trellis/lib/siso_combined_f_impl.h index 9457637259..93e9aa87d2 100644 --- a/gr-trellis/lib/siso_combined_f_impl.h +++ b/gr-trellis/lib/siso_combined_f_impl.h @@ -67,14 +67,14 @@ namespace gr { void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0){ d_S0 = S0; } - void set_SK(int SK){ d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); void set_POSTI(bool POSTI); void set_POSTO(bool POSTO); - void set_SISO_TYPE(trellis::siso_type_t type) { d_SISO_TYPE = type; } + void set_SISO_TYPE(trellis::siso_type_t type); void set_D(int D); - void set_TABLE(const std::vector<float> &table){ d_TABLE = table; } - void set_TYPE(digital::trellis_metric_type_t type){ d_TYPE = type; } + void set_TABLE(const std::vector<float> &table); + void set_TYPE(digital::trellis_metric_type_t type); void forecast(int noutput_items, gr_vector_int &ninput_items_required); diff --git a/gr-trellis/lib/siso_f_impl.cc b/gr-trellis/lib/siso_f_impl.cc index a1c7ab3320..2af5a21710 100644 --- a/gr-trellis/lib/siso_f_impl.cc +++ b/gr-trellis/lib/siso_f_impl.cc @@ -91,28 +91,50 @@ namespace gr { void siso_f_impl::set_FSM(const fsm &FSM) { + gr::thread::scoped_lock guard(d_setlock); d_FSM=FSM; recalculate(); } void siso_f_impl::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K=K; recalculate(); } void siso_f_impl::set_POSTI(bool POSTI) { + gr::thread::scoped_lock guard(d_setlock); d_POSTI = POSTI; recalculate(); } void siso_f_impl::set_POSTO(bool POSTO) { + gr::thread::scoped_lock guard(d_setlock); d_POSTO = POSTO; recalculate(); } + void siso_f_impl::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void siso_f_impl::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + + void siso_f_impl::set_SISO_TYPE(trellis::siso_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_SISO_TYPE = type; + } + siso_f_impl::~siso_f_impl() { } @@ -148,6 +170,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = output_items.size(); //printf("general_work:Streams: %d\n",nstreams); int multiple; diff --git a/gr-trellis/lib/siso_f_impl.h b/gr-trellis/lib/siso_f_impl.h index c8c9e1ae41..f92616bf0a 100644 --- a/gr-trellis/lib/siso_f_impl.h +++ b/gr-trellis/lib/siso_f_impl.h @@ -63,11 +63,11 @@ namespace gr { void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0){ d_S0 = S0; } - void set_SK(int SK){ d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); void set_POSTI(bool POSTI); void set_POSTO(bool POSTO); - void set_SISO_TYPE(trellis::siso_type_t type) { d_SISO_TYPE = type; } + void set_SISO_TYPE(trellis::siso_type_t type); void forecast(int noutput_items, gr_vector_int &ninput_items_required); diff --git a/gr-trellis/lib/viterbi_X_impl.cc.t b/gr-trellis/lib/viterbi_X_impl.cc.t index bd5bdd8413..1d4864596e 100644 --- a/gr-trellis/lib/viterbi_X_impl.cc.t +++ b/gr-trellis/lib/viterbi_X_impl.cc.t @@ -55,18 +55,32 @@ namespace gr { set_output_multiple(d_K); } - void @IMPL_NAME@::set_FSM(fsm &FSM) + void @IMPL_NAME@::set_FSM(const fsm &FSM) { + gr::thread::scoped_lock guard(d_setlock); d_FSM = FSM; set_relative_rate(1.0 / ((double)d_FSM.O())); } void @IMPL_NAME@::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K = K; set_output_multiple(d_K); } + void @IMPL_NAME@::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void @IMPL_NAME@::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + @IMPL_NAME@::~@IMPL_NAME@() { } @@ -88,6 +102,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); int nblocks = noutput_items / d_K; diff --git a/gr-trellis/lib/viterbi_X_impl.h.t b/gr-trellis/lib/viterbi_X_impl.h.t index 44934a5e22..1479ad5a3f 100644 --- a/gr-trellis/lib/viterbi_X_impl.h.t +++ b/gr-trellis/lib/viterbi_X_impl.h.t @@ -49,10 +49,10 @@ namespace gr { int S0() const { return d_S0; } int SK() const { return d_SK; } - void set_FSM(fsm &FSM); + void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0) { d_S0 = S0; } - void set_SK(int SK) { d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); //std::vector<int> trace () const { return d_trace; } void forecast(int noutput_items, diff --git a/gr-trellis/lib/viterbi_combined_XX_impl.cc.t b/gr-trellis/lib/viterbi_combined_XX_impl.cc.t index 91bb4e6c34..722708bcd2 100644 --- a/gr-trellis/lib/viterbi_combined_XX_impl.cc.t +++ b/gr-trellis/lib/viterbi_combined_XX_impl.cc.t @@ -63,6 +63,7 @@ namespace gr { void @IMPL_NAME@::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K = K; set_output_multiple(d_K); } @@ -70,9 +71,42 @@ namespace gr { void @IMPL_NAME@::set_D(int D) { + gr::thread::scoped_lock guard(d_setlock); d_D = D; set_relative_rate(1.0 / ((double)d_D)); } + + void @IMPL_NAME@::set_FSM(const fsm &FSM) + { + gr::thread::scoped_lock guard(d_setlock); + d_FSM = FSM; + } + + void @IMPL_NAME@::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void @IMPL_NAME@::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + + void + @IMPL_NAME@::set_TYPE(digital::trellis_metric_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_TYPE = type; + } + + void + @IMPL_NAME@::set_TABLE(const std::vector<@I_TYPE@> &table) + { + gr::thread::scoped_lock guard(d_setlock); + d_TABLE = table; + } @IMPL_NAME@::~@IMPL_NAME@() { @@ -95,6 +129,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); int nblocks = noutput_items / d_K; diff --git a/gr-trellis/lib/viterbi_combined_XX_impl.h.t b/gr-trellis/lib/viterbi_combined_XX_impl.h.t index 7098d8b329..788e609895 100644 --- a/gr-trellis/lib/viterbi_combined_XX_impl.h.t +++ b/gr-trellis/lib/viterbi_combined_XX_impl.h.t @@ -58,13 +58,13 @@ namespace gr { digital::trellis_metric_type_t TYPE() const { return d_TYPE; } //std::vector<int> trace() const { return d_trace; } - void set_FSM(const fsm &FSM){ d_FSM = FSM; } + void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0){ d_S0 = S0; } - void set_SK(int SK){ d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); void set_D(int D); - void set_TABLE(const std::vector<@I_TYPE@> &table) { d_TABLE = table; } - void set_TYPE(digital::trellis_metric_type_t type) { d_TYPE = type; } + void set_TABLE(const std::vector<@I_TYPE@> &table); + void set_TYPE(digital::trellis_metric_type_t type); void forecast(int noutput_items, gr_vector_int &ninput_items_required); diff --git a/gr-trellis/python/trellis/fsm_utils.py b/gr-trellis/python/trellis/fsm_utils.py index 7ec88cb645..72aa1d3660 100755 --- a/gr-trellis/python/trellis/fsm_utils.py +++ b/gr-trellis/python/trellis/fsm_utils.py @@ -201,6 +201,22 @@ psk2x3 = (3,[-1,-1,-1, \ 1,1,-1, \ 1,1,1]) +psk2x4 = (4,[-1,-1,-1,-1, \ + -1,-1,-1,1, \ + -1,-1,1,-1, \ + -1,-1,1,1, \ + -1,1,-1,-1, \ + -1,1,-1,1, \ + -1,1,1,-1, \ + -1,1,1,1, \ + 1,-1,-1,-1, \ + 1,-1,-1,1, \ + 1,-1,1,-1, \ + 1,-1,1,1, \ + 1,1,-1,-1, \ + 1,1,-1,1, \ + 1,1,1,-1, \ + 1,1,1,1]) orth2 = (2,[1, 0, \ 0, 1]) |