[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 03/07: fixed a bug in pccc encoder/decoder,
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 03/07: fixed a bug in pccc encoder/decoder, and added fsm files. Also added locks in the set_ methods |
Date: |
Thu, 16 Oct 2014 16:14:04 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
jcorgan pushed a commit to branch master
in repository gnuradio.
commit 79d55f173046d87ae31f04ad1e6dbafe1c9ae5ca
Author: Achilleas Anastasopoulos <address@hidden>
Date: Tue Oct 14 10:51:31 2014 -0400
fixed a bug in pccc encoder/decoder, and added fsm files.
Also added locks in the set_ methods
---
gr-trellis/examples/grc/pccc.grc | 479 ++++++++++++---------
gr-trellis/examples/grc/sccc.grc | 258 +++++------
gr-trellis/examples/grc/turbo_equalization.grc | 204 ++++-----
gr-trellis/examples/python/CMakeLists.txt | 4 +
.../examples/python/fsm_files/awgn1o1_16rsc.fsm | 40 ++
.../examples/python/fsm_files/awgn1o1_4rsc.fsm | 16 +
.../examples/python/fsm_files/awgn1o2_16rsc.fsm | 40 ++
.../examples/python/fsm_files/awgn1o2_4rsc.fsm | 14 +
gr-trellis/include/gnuradio/trellis/encoder_XX.h.t | 8 +-
gr-trellis/include/gnuradio/trellis/viterbi_X.h.t | 2 +-
gr-trellis/lib/core_algorithms.cc | 8 +-
gr-trellis/lib/encoder_XX_impl.cc.t | 19 +
gr-trellis/lib/encoder_XX_impl.h.t | 12 +-
gr-trellis/lib/metrics_X_impl.cc.t | 5 +
gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t | 2 +
gr-trellis/lib/pccc_encoder_XX_impl.cc.t | 2 +-
gr-trellis/lib/permutation_impl.cc | 9 +
gr-trellis/lib/permutation_impl.h | 2 +-
gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t | 2 +
gr-trellis/lib/siso_combined_f_impl.cc | 36 +-
gr-trellis/lib/siso_combined_f_impl.h | 10 +-
gr-trellis/lib/siso_f_impl.cc | 23 +
gr-trellis/lib/siso_f_impl.h | 6 +-
gr-trellis/lib/viterbi_X_impl.cc.t | 17 +-
gr-trellis/lib/viterbi_X_impl.h.t | 6 +-
gr-trellis/lib/viterbi_combined_XX_impl.cc.t | 35 ++
gr-trellis/lib/viterbi_combined_XX_impl.h.t | 10 +-
gr-trellis/python/trellis/fsm_utils.py | 16 +
28 files changed, 824 insertions(+), 461 deletions(-)
diff --git a/gr-trellis/examples/grc/pccc.grc b/gr-trellis/examples/grc/pccc.grc
index 9d96603..e10c70a 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 0bcaa6c..f31f3ce 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 b2c3b20..c83c59d 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 0e27a95..8a05525 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 0000000..f82d605
--- /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 0000000..d5e7fe3
--- /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 0000000..ccf1f1d
--- /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 0000000..adb500a
--- /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 f767510..affd62f 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 6101227..252ffb7 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 eb32b65..b26ee33 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 f2e1992..3a004a2 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@::address@hidden@()
{
}
@@ -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 69f853d..2b0ff31 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);
address@hidden@();
- 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 2b811de..5e74e4b 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 15ea3ce..5b3cdee 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 119bff6..8fd143c 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 0d9d359..2fe0ea8 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 5c74fba..e013e52 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 4acc560..f66b1f3 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 f9e8e28..3b89684 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 9457637..93e9aa8 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 a1c7ab3..2af5a21 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 c8c9e1a..f92616b 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 bd5bdd8..1d48645 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@::address@hidden@()
{
}
@@ -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 44934a5..1479ad5 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 91bb4e6..722708b 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@::address@hidden@()
{
@@ -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 7098d8b..788e609 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 7ec88cb..72aa1d3 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])
- [Commit-gnuradio] [gnuradio] branch master updated (8ebe90f -> 62debd6), git, 2014/10/16
- [Commit-gnuradio] [gnuradio] 04/07: grc: append blocks path with prefix /usr/local if installed to prefix /usr, git, 2014/10/16
- [Commit-gnuradio] [gnuradio] 03/07: fixed a bug in pccc encoder/decoder, and added fsm files. Also added locks in the set_ methods,
git <=
- [Commit-gnuradio] [gnuradio] 06/07: Merge remote-tracking branch 'gnuradio-wg-grc/master_grcwg', git, 2014/10/16
- [Commit-gnuradio] [gnuradio] 07/07: Merge branch 'maint', git, 2014/10/16
- [Commit-gnuradio] [gnuradio] 01/07: Added set_ methods for most parameters in (almost) all gr-trellis blocks Added FSM functionality + minor fixes, git, 2014/10/16
- [Commit-gnuradio] [gnuradio] 05/07: Merge remote-tracking branch 'anastas/trellisupdates', git, 2014/10/16
- [Commit-gnuradio] [gnuradio] 02/07: Updated documentation and grc/python examples in gr-trellis. Removed weird pyhton examples and made them grc files., git, 2014/10/16