commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r3322 - in gnuradio/trunk: gnuradio-core/src/lib/gener


From: anastas
Subject: [Commit-gnuradio] r3322 - in gnuradio/trunk: gnuradio-core/src/lib/general gnuradio-examples/python/channel-coding gnuradio-examples/python/channel-coding/fsm_files gr-trellis/doc gr-trellis/src/lib
Date: Wed, 16 Aug 2006 14:07:36 -0600 (MDT)

Author: anastas
Date: 2006-08-16 14:07:36 -0600 (Wed, 16 Aug 2006)
New Revision: 3322

Added:
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msb.fsm
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msbG.fsm
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/disconnected.fsm
   gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_soft.py
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_turbo.py
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm2.py
   gnuradio/trunk/gr-trellis/src/lib/base.cc
   gnuradio/trunk/gr-trellis/src/lib/base.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.lo
   gnuradio/trunk/gr-trellis/src/lib/trellis_siso_type.h
Removed:
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_1.fsm
   gnuradio/trunk/gr-trellis/doc/gr-trellis.html
Modified:
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t
   gnuradio/trunk/gnuradio-examples/python/channel-coding/
   gnuradio/trunk/gnuradio-examples/python/channel-coding/README
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_128.fsm
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_16.fsm
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_4.fsm
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_8.fsm
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4.fsm
   
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o4_4.fsm
   gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/rep3.fsm
   gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_utils.py
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_hard.py
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm.py
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm1.py
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_combined.py
   gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_parallel.py
   gnuradio/trunk/gr-trellis/src/lib/
   gnuradio/trunk/gr-trellis/src/lib/Makefile.am
   gnuradio/trunk/gr-trellis/src/lib/fsm.cc
   gnuradio/trunk/gr-trellis/src/lib/fsm.h
   gnuradio/trunk/gr-trellis/src/lib/fsm.i
   gnuradio/trunk/gr-trellis/src/lib/interleaver.cc
   gnuradio/trunk/gr-trellis/src/lib/interleaver.h
   gnuradio/trunk/gr-trellis/src/lib/interleaver.i
   gnuradio/trunk/gr-trellis/src/lib/trellis.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.cc.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.h.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.i.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.h.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.i.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.cc.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.h.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.i.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.i
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.cc
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.h
   gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.i
Log:
Several enhancements to gr-trellis and gnuradio-examples/python/channel-coding:
-Added fsm constructor for generating FSM directly from the
generator matrix of binary convolutional codes.
-Added functionality to fsm class to compute the best way to
go from any state to any other state (useful for termination)
-Added soft-in-soft-out (SISO) block for turbo processing
-Added turbo decoding examples



Modified: 
gnuradio/trunk/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t   
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_chunks_to_symbols_XX.cc.t   
2006-08-16 20:07:36 UTC (rev 3322)
@@ -62,7 +62,7 @@
 
     // per stream processing
     for (int i = 0; i < noutput_items / d_D; i++){
-      assert (((unsigned int)in[i]*d_D) < d_symbol_table.size());
+      assert (((unsigned int)in[i]*d_D+d_D) <= d_symbol_table.size());
       memcpy(out, &d_symbol_table[(unsigned int)in[i]*d_D], 
d_D*sizeof(@O_TYPE@));
       out+=d_D;
     }


Property changes on: gnuradio/trunk/gnuradio-examples/python/channel-coding
___________________________________________________________________
Name: svn:ignore
   - Makefile
Makefile.in

   + Makefile
Makefile.in
.la
.lo
.deps
.libs
*.la
*.lo
*.pyc
*.pyo


Modified: gnuradio/trunk/gnuradio-examples/python/channel-coding/README
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/README       
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/README       
2006-08-16 20:07:36 UTC (rev 3322)
@@ -8,26 +8,39 @@
 
 If you just want to see what these programs do, run each of the following:
 
-./test_tcm.py fsm_files/awgn1o2_4.fsm 10.0 1000
-./test_tcm1.py fsm_files/awgn1o2_4.fsm 10.0 1000
-./test_tcm_combined.py fsm_files/awgn1o2_4.fsm 10.0 1000
-./test_tcm_parallel.py fsm_files/awgn1o2_4.fsm 10.0 1000
-./test_sccc_hard.py fsm_files/awgn1o2_4.fsm fsm_files/awgn1o2_4.fsm 10.0 1000
+./test_tcm.py  fsm_files/awgn1o2_4.fsm 6.0 1000
+./test_tcm1.py fsm_files/awgn1o2_4.fsm 6.0 1000
+./test_tcm2.py 6.0 1000
+./test_tcm_combined.py fsm_files/awgn1o2_4.fsm 6.0 1000
+./test_tcm_parallel.py fsm_files/awgn1o2_4.fsm 6.0 1000
 
+./test_sccc_hard.py  fsm_files/awgn1o2_4.fsm fsm_files/awgn1o2_4_msb.fsm 10.0 
100
+./test_sccc_soft.py  fsm_files/awgn1o2_4.fsm fsm_files/awgn1o2_4_msb.fsm  8.0 
100
+./test_sccc_turbo.py fsm_files/awgn1o2_4.fsm fsm_files/awgn1o2_4_msb.fsm  5.0 
100
+
 In your terminal you will see something like this:
 
address@hidden channel-coding]$ ./test_tcm.py fsm_files/awgn1o2_4.fsm 6.0 1000
-100 1024 1 103424 10 9.668936e-05
-200 1024 1 205824 21 1.020289e-04
-300 1024 0 308224 40 1.297757e-04
-400 1024 0 410624 1074 2.615531e-03
-500 1024 0 513024 1081 2.107114e-03
-600 1024 0 615424 1090 1.771137e-03
-700 1024 0 717824 1097 1.528230e-03
-800 1024 0 820224 1107 1.349631e-03
-900 1024 0 922624 1120 1.213929e-03
-1024000 1129 1.102539e-03
+$ ./test_tcm.py fsm_files/awgn1o2_4.fsm 6.0 1000
+100 98 9.80e-01 102400 9 8.79e-05
+200 198 9.90e-01 204800 20 9.77e-05
+300 298 9.93e-01 307200 40 1.30e-04
+400 398 9.95e-01 409600 1074 2.62e-03
+500 498 9.96e-01 512000 1081 2.11e-03
+600 598 9.97e-01 614400 1090 1.77e-03
+700 698 9.97e-01 716800 1097 1.53e-03
+800 798 9.98e-01 819200 1107 1.35e-03
+900 898 9.98e-01 921600 1120 1.22e-03
+1000 998 9.98e-01 1024000 1129 1.10e-03
+1000 998 9.98e-01 1024000 1129 1.10e-03
 
-1.102539e-03 is the error rate estimates by sending 1000 packets of
-1024x16 bits each using an 1/2 4-state convolutional code and QPSK
+which gives you information about the:
+number of transmitted packets
+number of packets in error
+iestimated packet error rate
+number of transmitted shorts
+number of shorts in error
+estimated (short) error rate 
+
+1.10e-03 is the error rate estimate by sending 1000 packets of
+1024 shorts each, using an 1/2 4-state convolutional code and QPSK
 modulation through an AWGN with Es/N0 = 6.0 dB

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_128.fsm
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_128.fsm
    2006-08-16 19:03:51 UTC (rev 3321)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_128.fsm
    2006-08-16 20:07:36 UTC (rev 3322)
@@ -260,5 +260,6 @@
 
 
 
-GM1o2_128=[1+D^3+D^4+D^5+D^6+D^7   1+D+D^2+D^5+D^7]
-         =[249 167]
+GM1o2_128=[1+D+D^2+D^5+D^7     1+D^3+D^4+D^5+D^6+D^7]
+         =[11100101            10011111]
+         =[229                 159]

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_16.fsm
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_16.fsm 
    2006-08-16 19:03:51 UTC (rev 3321)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_16.fsm 
    2006-08-16 20:07:36 UTC (rev 3322)
@@ -36,4 +36,4 @@
 
 
 
-GM1o2_16=[1+D^2+D^3+D^4   1+D+D^4];
+GM1o2_16=[1+D+D^4  1+D^2+D^3+D^4 ] = [25,23] (decimal)

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_4.fsm
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_4.fsm  
    2006-08-16 19:03:51 UTC (rev 3321)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_4.fsm  
    2006-08-16 20:07:36 UTC (rev 3322)
@@ -11,7 +11,4 @@
 2 1
 
 AWGN CC from Proakis-Salehi pg 779
-GM1o2_4=[1+D+D^2   1+D^2];
-
-
-
+GM1o2_4=[1+D^2, 1+D+D^2] = [5, 7] (in decimal);

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_8.fsm
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_8.fsm  
    2006-08-16 19:03:51 UTC (rev 3321)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn1o2_8.fsm  
    2006-08-16 20:07:36 UTC (rev 3322)
@@ -21,4 +21,4 @@
 
 
 1/2 8-state code (Proakis pg. 493)
-GM1o2_8=[ 1+D+D^2+D^3   1+D+D^3];
+GM1o2_8=[ 1+D+D^3   1+D+D^2+D^3] =[13 , 15] (decimal)

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4.fsm
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4.fsm  
    2006-08-16 19:03:51 UTC (rev 3321)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4.fsm  
    2006-08-16 20:07:36 UTC (rev 3322)
@@ -1,44 +1,15 @@
 4 4 8
 
-0      2       1       3
-0      2       1       3
-0      2       1       3
-0      2       1       3
+0       1       2       3
+0       1       2       3
+0       1       2       3
+0       1       2       3
 
-0 3 5 6
-4 7 1 2
-7 4 2 1
-3 0 6 5 
+0       7       4       3
+3       4       7       0
+5       2       1       6
+6       1       2       5
 
-
-This is generated by the 1/2 AWGN code (5 7) by puncturing the first (MSB) bit.
---> d_free=3
-
-before puncturing:
-
-00 03 31 32
-30 33 01 02
-13 10 22 21
-23 20 12 11
-
-or in decimal representation:
-
- 0  3 13 14
-12 15  1  2
- 7  4 10  9
-11  8  6  5
-
-by punturing the MSB you get (dmin=3)
-
-0 3 5 6
-4 7 1 2
-7 4 2 1
-3 0 6 5 
-
-and by puncturing the LSB (something is wrong with this code)
-
-0      1       6       7
-6      7       0       1
-3      2       5       4
-5      4       3       2
-
+I don't remeber how I generated this one...
+it is a bit better than awgn2o3_4_msb and worse
+than awgn2o3_4_msbG.

Deleted: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_1.fsm

Copied: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msb.fsm
 (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msb.fsm)
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msb.fsm
                          (rev 0)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msb.fsm
  2006-08-16 20:07:36 UTC (rev 3322)
@@ -0,0 +1,46 @@
+4 4 8
+
+0      1       2       3
+0      1       2       3
+0      1       2       3
+0      1       2       3
+
+0      5       3       6
+4      1       7       2
+7      2       4       1
+3      6       0       5 
+
+
+This is generated by the 1/2 AWGN code (5 7) operated twice, ie,
+(xk+1 xki) [xk-1 xk-2] -> [xk+1 xki].
+We also puncture the first (MSB) bit.
+This code is worse than awgn2o3_4_msbG and slightly worse than
+awgn2o3_4, BUT seems to be a good innner code for sctcm (with 8PSK natural).
+
+intermediate states:
+
+00 21 02 23
+00 21 02 23
+10 31 12 33
+10 31 12 33
+
+output before puncturing:
+
+00 31 03 32
+30 01 33 02
+13 22 10 21
+23 12 20 11
+
+output after punturing the MSB:
+
+00 11 03 12
+10 01 13 02
+13 02 10 01
+03 12 00 11
+
+and in decimal:
+
+0 5 3 6
+4 1 7 2
+7 2 4 1
+3 6 0 5

Copied: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msbG.fsm
 (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msbG.fsm)
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msbG.fsm
                         (rev 0)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o3_4_msbG.fsm
 2006-08-16 20:07:36 UTC (rev 3322)
@@ -0,0 +1,60 @@
+4 4 8
+
+0      1       2       3
+0      1       2       3
+0      1       2       3
+0      1       2       3
+
+0      4       2       6
+5      1       3       7
+3      7       5       1
+
+
+This is generated by the 1/2 AWGN code (5 7) operated twice, ie,
+(xk+1 xki) [xk-1 xk-2] -> [xk+1 xki].
+We also puncture the first (MSB) bit and Gray map the symbols.
+
+intermediate states:
+
+00 21 02 23
+00 21 02 23
+10 31 12 33
+10 31 12 33
+
+output before puncturing:
+
+00 31 03 32
+30 01 33 02
+13 22 10 21
+23 12 20 11
+
+output after punturing the MSB:
+
+00 11 03 12
+10 01 13 02
+13 02 10 01
+03 12 00 11
+
+and in decimal:
+
+0 5 3 6
+4 1 7 2
+7 2 4 1
+3 6 0 5
+
+After Gray mapping:
+label -> phase
+0 -> 0
+1 -> 0
+2 -> 7
+3 -> 2
+4 -> 5
+5 -> 4
+6 -> 6
+7 -> 3
+
+0 4 2 6
+5 1 3 7
+3 7 5 1
+2 6 0 4
+

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o4_4.fsm
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o4_4.fsm  
    2006-08-16 19:03:51 UTC (rev 3321)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/awgn2o4_4.fsm  
    2006-08-16 20:07:36 UTC (rev 3322)
@@ -1,14 +1,36 @@
-4 4 16 
+4 4 16
 
-0   2   1   3
-0   2   1   3
-0   2   1   3
-0   2   1   3
+0      1       2       3
+0      1       2       3
+0      1       2       3
+0      1       2       3
 
- 0  3 13 14
-12 15  1  2
- 7  4 10  9
-11  8  6  5
+ 0     13       3      14
+12      1      15       2
+ 7     10       4       9
+11      6       8       5
 
-generated by the awgn1o2_4.fsm code
-(two steps of the 1o2 code)
+
+This is generated by the 1/2 AWGN code (5 7) operated twice, ie,
+(xk+1 xki) [xk-1 xk-2] -> [xk+1 xki].
+
+intermediate states:
+
+00 21 02 23
+00 21 02 23
+10 31 12 33
+10 31 12 33
+
+output:
+
+00 31 03 32
+30 01 33 02
+13 22 10 21
+23 12 20 11
+
+and in decimal:
+
+ 0 13  3 14
+12  1 15  2
+ 7 10  4  9
+11  6  8  5

Copied: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/disconnected.fsm
 (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gnuradio-examples/python/channel-coding/fsm_files/disconnected.fsm)
===================================================================
--- 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/disconnected.fsm
                           (rev 0)
+++ 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/disconnected.fsm
   2006-08-16 20:07:36 UTC (rev 3322)
@@ -0,0 +1,11 @@
+1 4 1
+
+1
+0
+3
+2
+
+0
+0
+0
+0

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/rep3.fsm
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/rep3.fsm   
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/rep3.fsm   
2006-08-16 20:07:36 UTC (rev 3322)
@@ -4,4 +4,5 @@
 
 0 7
 
-1/3 repetition code (with binary input)
+1/3 repetition code (with binary input).
+There is only one state, since this is essentially a memoryless system.

Copied: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm 
(from rev 3315, 
gnuradio/branches/developers/anastas/wip/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm 
                        (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_files/simple.fsm 
2006-08-16 20:07:36 UTC (rev 3322)
@@ -0,0 +1,13 @@
+1 4 1
+
+1
+2
+3
+0
+
+0
+0
+0
+0
+
+essentially this fsm has no inputs and no outputs; it ijust cycles through all 
4 states.

Modified: gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_utils.py
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_utils.py 
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/fsm_utils.py 
2006-08-16 20:07:36 UTC (rev 3322)
@@ -60,102 +60,7 @@
 
 
 
-
-
 ######################################################################
-# Automaticaly generate the FSM structure for a binary feed-forward
-# convolutional code.
-# Input: k x n generator matrix (decimal representation)
-######################################################################
-def make_fsm_bin_cc_ff(k,n,GM):
-    mem=[[]]*k
-    max_mem_x=[-1]*k
-    max_mem = -1
-    for i in range(k):
-        memr=[0]*n
-        for j in range(n):
-            if GM[i][j]==0:
-                memr[j]=-1
-            else:
-                memr[j]=int(math.log(GM[i][j],2))
-            if memr[j]>max_mem_x[i]:
-                max_mem_x[i]=memr[j]
-            if memr[j]>max_mem:
-                max_mem=memr[j]
-        mem[i]=memr
-
-    sum_max_mem = 0
-    for i in range(k):
-       sum_max_mem = sum_max_mem+max_mem_x[i] 
-        
-
-    #print mem
-    #print max_mem_x
-    #print max_mem
-    #print sum_max_mem
-
-    I=2**k
-    S=2**sum_max_mem
-    O=2**n
-
-    #print I, S, O
-
-    NS=[0]*S*I;
-    OS=[0]*S*I;
-    for s in range(S):
-        for i in range(I):
-            ss=dec2base(s,2,sum_max_mem)
-            ind=0
-            ss_r=[]
-            for kk in range(k):
-                ss1 = [0]*max_mem
-                ss1[0:max_mem_x[kk]] = ss[ind:ind+max_mem_x[kk]]
-                ss_r.append(ss1)
-                ind=ind+max_mem_x[kk]
-            ii=dec2base(i,2,k)
-
-            tt_r = ss_r
-            for kk in range(k):
-                tt_r[kk].insert(0,ii[kk])
-            #print tt_r
-
-            ns_r = []
-            for kk in range(k):
-                ns_r.append(tt_r[kk][0:max_mem])
-
-            ns=[]
-            for kk in range(k):
-                ns = ns + ns_r[kk][0:max_mem_x[kk]]
-            NS[s*I+i]=base2dec(ns,2);
-
-            out_r=[0]*n
-            for nn in range(n):
-                out=0;
-                for kk in range(k):
-                    c=[0]*max_mem
-                    gm = dec2base(GM[kk][nn],2,max_mem_x[kk]+1)
-                    gm.reverse()
-                    c[0:len(gm)] = gm
-                    sy = 0
-                    for m in range(len(c)):
-                        sy = sy + c[m]*tt_r[kk][m];
-                    out=operator.mod(out+sy,2);
-                out_r[nn]=out;
-            out_r.reverse()
-            OS[s*I+i] = base2dec(out_r,2);
-    
-    #O=max(max(OS))+1;
-    print I, S, O
-    print NS
-    print OS
-
-    return (I,S,O,NS,OS)
-
-
-
-
-
-######################################################################
 # Automatically generate the lookup table that maps the FSM outputs
 # to channel inputs corresponding to a channel 'channel' and a modulation
 # 'mod'. Optional normalization of channel to unit energy.

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_hard.py
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_hard.py    
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_hard.py    
2006-08-16 20:07:36 UTC (rev 3322)
@@ -18,7 +18,7 @@
     src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts
     s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack 
shorts to symbols compatible with the outer FSM input cardinality
     enc_out = trellis.encoder_ss(fo,0) # initial state = 0
-    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),gr.sizeof_short)
+    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
     enc_in = trellis.encoder_ss(fi,0) # initial state = 0
     mod = gr.chunks_to_symbols_sf(constellation,dimensionality)
 
@@ -29,7 +29,7 @@
     # RX
     metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner Viterbi
     va_in = trellis.viterbi_s(fi,K,0,-1) # Put -1 if the Initial/Final states 
are not set.
-    deinter = 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),gr.sizeof_short)
+    deinter = 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),1,gr.sizeof_short)
     metrics_out = 
trellis.metrics_s(fo.O(),1,[0,1,2,3],trellis.TRELLIS_HARD_SYMBOL) # data 
preprocessing to generate metrics for outer Viterbi (hard decisions)
     va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states 
are not set.
     fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack 
FSM input symbols to shorts
@@ -85,14 +85,16 @@
     
     tot_s=0 # total number of transmitted shorts
     terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
     for i in range(rep):
         
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
         tot_s=tot_s+s
         terr_s=terr_s+e
-        if (i%100==0) & (i>0): # display progress
-            print i,s,e,tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%100==0) : # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
     # estimate of the (short or bit) error rate
-    print tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
 
 
 if __name__ == '__main__':

Copied: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_soft.py (from 
rev 3315, 
gnuradio/branches/developers/anastas/wip/gnuradio-examples/python/channel-coding/test_sccc_soft.py)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_soft.py    
                        (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_soft.py    
2006-08-16 20:07:36 UTC (rev 3322)
@@ -0,0 +1,108 @@
+#!/usr/bin/env python
+
+from gnuradio import gr
+from gnuradio import audio
+from gnuradio import trellis
+from gnuradio import eng_notation
+import math
+import sys
+import random
+import fsm_utils
+
+
+
+
+def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
+    fg = gr.flow_graph ()
+
+
+    # TX
+    src = gr.lfsr_32k_source_s()
+    src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts
+    s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack 
shorts to symbols compatible with the outer FSM input cardinality
+    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
+    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
+    enc_in = trellis.encoder_ss(fi,0) # initial state = 0
+    mod = gr.chunks_to_symbols_sf(constellation,dimensionality)
+
+    # CHANNEL
+    add = gr.add_ff()
+    noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)
+
+    # RX
+    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner Viterbi
+    gnd = gr.vector_source_f([0],True);
+    siso_in = trellis.siso_f(fi,K,0,-1,True,False,trellis.TRELLIS_MIN_SUM) # 
Put -1 if the Initial/Final states are not set.
+    deinter = 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
+    va_out = trellis.viterbi_s(fo,K,0,-1) # Put -1 if the Initial/Final states 
are not set.
+    fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack 
FSM input symbols to shorts
+    dst = gr.check_lfsr_32k_s()
+    
+    fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
+    fg.connect (mod,(add,0))
+    fg.connect (noise,(add,1))
+    fg.connect (add,metrics_in)
+    fg.connect (gnd,(siso_in,0))
+    fg.connect (metrics_in,(siso_in,1))
+    fg.connect (siso_in,deinter,va_out,fsmi2s,dst)
+
+    fg.run()
+    
+    ntotal = dst.ntotal ()
+    nright = dst.nright ()
+    runlength = dst.runlength ()
+    return (ntotal,ntotal-nright)
+
+
+def main(args):
+    nargs = len (args)
+    if nargs == 4:
+        fname_out=args[0]
+        fname_in=args[1]
+        esn0_db=float(args[2]) # Es/No in dB
+        rep=int(args[3]) # number of times the experiment is run to collect 
enough errors
+    else:
+        sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in 
Es/No_db  repetitions\n')
+        sys.exit (1)
+
+    # system parameters
+    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
+    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
+    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
+    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
+    if fo.O() != fi.I():
+        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
+        sys.exit (1)
+    K=Kb/bitspersymbol # packet size in trellis steps
+    interleaver=trellis.interleaver(K,666) # construct a random interleaver
+    modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
+    dimensionality = modulation[0]
+    constellation = modulation[1] 
+    if len(constellation)/dimensionality != fi.O():
+        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
+        sys.exit (1)
+    # calculate average symbol energy
+    Es = 0
+    for i in range(len(constellation)):
+        Es = Es + constellation[i]**2
+    Es = Es / (len(constellation)/dimensionality)
+    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
+
+
+    tot_s=0 # total number of transmitted shorts
+    terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
+    for i in range(rep):
+        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
+        tot_s=tot_s+s
+        terr_s=terr_s+e
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%100==0) : # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
+    # estimate of the (short or bit) error rate
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
+    
+
+
+if __name__ == '__main__':
+    main (sys.argv[1:])


Property changes on: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_soft.py
___________________________________________________________________
Name: svn:executable
   + *

Copied: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_turbo.py (from 
rev 3315, 
gnuradio/branches/developers/anastas/wip/gnuradio-examples/python/channel-coding/test_sccc_turbo.py)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_turbo.py   
                        (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_turbo.py   
2006-08-16 20:07:36 UTC (rev 3322)
@@ -0,0 +1,139 @@
+#!/usr/bin/env python
+
+from gnuradio import gr
+from gnuradio import audio
+from gnuradio import trellis
+from gnuradio import eng_notation
+import math
+import sys
+import random
+import fsm_utils
+
+
+
+def make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,type):
+    metrics_in = 
trellis.metrics_f(fi.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN)
 # data preprocessing to generate metrics for innner Viterbi
+    scale = gr.multiply_const_ff(1.0/N0)
+    gnd = gr.vector_source_f([0],True);
+
+    inter=[]
+    deinter=[]
+    siso_in=[]
+    siso_out=[]
+
+    for it in range(IT-1):
+      inter.append( 
trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) 
)
+      siso_in.append( trellis.siso_f(fi,K,0,3,True,False,type) )
+      deinter.append( 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
 )
+      siso_out.append( trellis.siso_f(fo,K,0,3,False,True,type) )
+      fg.connect (inter[it],(siso_in[it],0))
+      fg.connect (gnd,(siso_out[it],0))
+      fg.connect (siso_in[it],deinter[it],(siso_out[it],1))
+
+    inter.append( 
trellis.permutation(interleaver.K(),interleaver.INTER(),fi.I(),gr.sizeof_float) 
)
+    siso_in.append( trellis.siso_f(fi,K,0,-1,True,False,type) )
+    deinter.append( 
trellis.permutation(interleaver.K(),interleaver.DEINTER(),fi.I(),gr.sizeof_float)
 )
+    siso_out.append( trellis.viterbi_s(fo,K,0,-1) )
+    fg.connect (inter[IT-1],(siso_in[IT-1],0))
+    fg.connect (siso_in[IT-1],deinter[IT-1],siso_out[IT-1])
+
+    # connect first stage
+    fg.connect (gnd,inter[0])
+    fg.connect (metrics_in,scale)
+    fg.connect (scale,(siso_in[0],1))
+    for it in range(IT-1):
+      fg.connect (siso_out[it],inter[it+1])
+      fg.connect (metrics_in,(siso_in[it+1],1))
+    return (metrics_in,siso_out[IT-1])
+
+
+def run_test 
(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,seed):
+    fg = gr.flow_graph ()
+
+
+    # TX
+    src = gr.lfsr_32k_source_s()
+    src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts
+    s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack 
shorts to symbols compatible with the outer FSM input cardinality
+    enc_out = trellis.encoder_ss(fo,0) # initial state = 0
+    inter = 
trellis.permutation(interleaver.K(),interleaver.INTER(),1,gr.sizeof_short)
+    enc_in = trellis.encoder_ss(fi,0) # initial state = 0
+    mod = gr.chunks_to_symbols_sf(constellation,dimensionality)
+
+    # CHANNEL
+    add = gr.add_ff()
+    noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)
+
+    # RX
+    (head,tail) = 
make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_MIN_SUM)
+    #(head,tail) = 
make_rx(fg,fo,fi,dimensionality,constellation,K,interleaver,IT,Es,N0,trellis.TRELLIS_SUM_PRODUCT)
+    fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack 
FSM input symbols to shorts
+    dst = gr.check_lfsr_32k_s()
+    
+    fg.connect (src,src_head,s2fsmi,enc_out,inter,enc_in,mod)
+    fg.connect (mod,(add,0))
+    fg.connect (noise,(add,1))
+    fg.connect (add,head)
+    fg.connect (tail,fsmi2s,dst)
+
+    fg.run()
+ 
+    #print enc_out.ST(), enc_in.ST()
+    
+    ntotal = dst.ntotal ()
+    nright = dst.nright ()
+    runlength = dst.runlength ()
+    return (ntotal,ntotal-nright)
+
+
+def main(args):
+    nargs = len (args)
+    if nargs == 4:
+        fname_out=args[0]
+        fname_in=args[1]
+        esn0_db=float(args[2]) # Es/No in dB
+        rep=int(args[3]) # number of times the experiment is run to collect 
enough errors
+    else:
+        sys.stderr.write ('usage: test_tcm.py fsm_name_out fsm_fname_in 
Es/No_db  repetitions\n')
+        sys.exit (1)
+
+    # system parameters
+    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
+    fo=trellis.fsm(fname_out) # get the outer FSM specification from a file
+    fi=trellis.fsm(fname_in) # get the innner FSM specification from a file
+    bitspersymbol = int(round(math.log(fo.I())/math.log(2))) # bits per FSM 
input symbol
+    if fo.O() != fi.I():
+        sys.stderr.write ('Incompatible cardinality between outer and inner 
FSM.\n')
+        sys.exit (1)
+    K=Kb/bitspersymbol # packet size in trellis steps
+    interleaver=trellis.interleaver(K,666) # construct a random interleaver
+    modulation = fsm_utils.psk8 # see fsm_utlis.py for available predefined 
modulations
+    dimensionality = modulation[0]
+    constellation = modulation[1] 
+    if len(constellation)/dimensionality != fi.O():
+        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
+        sys.exit (1)
+    # calculate average symbol energy
+    Es = 0
+    for i in range(len(constellation)):
+        Es = Es + constellation[i]**2
+    Es = Es / (len(constellation)/dimensionality)
+    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
+    IT = 3 # number of turbo iterations
+    
+    tot_s=0 # total number of transmitted shorts
+    terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
+    for i in range(rep):
+        
(s,e)=run_test(fo,fi,interleaver,Kb,bitspersymbol,K,dimensionality,constellation,Es,N0,IT,-long(666+i))
 # run experiment with different seed to get different noise realizations
+        tot_s=tot_s+s
+        terr_s=terr_s+e
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%10==0): # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
+    # estimate of the (short or bit) error rate
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
+
+
+if __name__ == '__main__':
+    main (sys.argv[1:])


Property changes on: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_sccc_turbo.py
___________________________________________________________________
Name: svn:executable
   + *

Modified: gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm.py
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm.py  
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm.py  
2006-08-16 20:07:36 UTC (rev 3322)
@@ -101,15 +101,18 @@
     
     tot_s=0 # total number of transmitted shorts
     terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
     for i in range(rep):
         
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
         tot_s=tot_s+s
         terr_s=terr_s+e
-        if (i%100==0) & (i>0): # display progress
-            print i,s,e,tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%100==0) : # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
     # estimate of the (short or bit) error rate
-    print tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
 
 
+
 if __name__ == '__main__':
     main (sys.argv[1:])

Modified: gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm1.py
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm1.py 
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm1.py 
2006-08-16 20:07:36 UTC (rev 3322)
@@ -102,18 +102,20 @@
     Es = Es / (len(constellation)/dimensionality)
     N0=Es/pow(10.0,esn0_db/10.0); # noise variance
     
-
-    tot_s=0
-    terr_s=0
+    tot_s=0 # total number of transmitted shorts
+    terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
     for i in range(rep):
         
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
         tot_s=tot_s+s
         terr_s=terr_s+e
-        if (i%1==0) & (i>0):
-            print i,s,e,tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%1==0) : # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
     # estimate of the (short or bit) error rate
-    print tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
 
 
+
 if __name__ == '__main__':
     main (sys.argv[1:])

Copied: gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm2.py 
(from rev 3315, 
gnuradio/branches/developers/anastas/wip/gnuradio-examples/python/channel-coding/test_tcm2.py)
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm2.py         
                (rev 0)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm2.py 
2006-08-16 20:07:36 UTC (rev 3322)
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+
+from gnuradio import gr
+from gnuradio import audio
+from gnuradio import trellis
+from gnuradio import eng_notation
+import math
+import sys
+import random
+import fsm_utils
+
+def run_test (f,Kb,bitspersymbol,K,dimensionality,constellation,N0,seed):
+    fg = gr.flow_graph ()
+
+
+    # TX
+    #packet = [0]*Kb
+    #for i in range(Kb-1*16): # last 16 bits = 0 to drive the final state to 0
+        #packet[i] = random.randint(0, 1) # random 0s and 1s
+    #src = gr.vector_source_s(packet,False)
+    src = gr.lfsr_32k_source_s()
+    src_head = gr.head (gr.sizeof_short,Kb/16) # packet size in shorts
+    #b2s = gr.unpacked_to_packed_ss(1,gr.GR_MSB_FIRST) # pack bits in shorts
+    s2fsmi = gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack 
shorts to symbols compatible with the FSM input cardinality
+    enc = trellis.encoder_ss(f,0) # initial state = 0
+    mod = gr.chunks_to_symbols_sf(constellation,dimensionality)
+
+    # CHANNEL
+    add = gr.add_ff()
+    noise = gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed)
+
+    # RX
+    metrics = 
trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) 
# data preprocessing to generate metrics for Viterbi
+    va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are 
not set.
+    fsmi2s = gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack 
FSM input symbols to shorts
+    #s2b = gr.packed_to_unpacked_ss(1,gr.GR_MSB_FIRST) # unpack shorts to bits
+    #dst = gr.vector_sink_s(); 
+    dst = gr.check_lfsr_32k_s()
+    
+
+    fg.connect (src,src_head,s2fsmi,enc,mod)
+    #fg.connect (src,b2s,s2fsmi,enc,mod)
+    fg.connect (mod,(add,0))
+    fg.connect (noise,(add,1))
+    fg.connect (add,metrics)
+    fg.connect (metrics,va,fsmi2s,dst)
+    #fg.connect (metrics,va,fsmi2s,s2b,dst)
+    
+
+    fg.run()
+    
+    # A bit of cheating: run the program once and print the 
+    # final encoder state..
+    # Then put it as the last argument in the viterbi block
+    #print "final state = " , enc.ST()
+
+    ntotal = dst.ntotal ()
+    nright = dst.nright ()
+    runlength = dst.runlength ()
+    #ntotal = len(packet)
+    #if len(dst.data()) != ntotal:
+        #print "Error: not enough data\n"
+    #nright = 0;
+    #for i in range(ntotal):
+        #if packet[i]==dst.data()[i]:
+            #nright=nright+1
+        #else:
+            #print "Error in ", i
+    return (ntotal,ntotal-nright)
+
+
+
+
+def main(args):
+    nargs = len (args)
+    if nargs == 2:
+        esn0_db=float(args[0]) # Es/No in dB
+        rep=int(args[1]) # number of times the experiment is run to collect 
enough errors
+    else:
+        sys.stderr.write ('usage: test_tcm2.py Es/No_db  repetitions\n')
+        sys.exit (1)
+
+    # system parameters
+    f=trellis.fsm(1,2,[5,7]) # generate FSM specification from the generator 
matrix
+    Kb=1024*16  # packet size in bits (make it multiple of 16 so it can be 
packed in a short)
+    bitspersymbol = int(round(math.log(f.I())/math.log(2))) # bits per FSM 
input symbol
+    K=Kb/bitspersymbol # packet size in trellis steps
+    modulation = fsm_utils.psk4 # see fsm_utlis.py for available predefined 
modulations
+    dimensionality = modulation[0]
+    constellation = modulation[1] 
+    if len(constellation)/dimensionality != f.O():
+        sys.stderr.write ('Incompatible FSM output cardinality and modulation 
size.\n')
+        sys.exit (1)
+    # calculate average symbol energy
+    Es = 0
+    for i in range(len(constellation)):
+        Es = Es + constellation[i]**2
+    Es = Es / (len(constellation)/dimensionality)
+    N0=Es/pow(10.0,esn0_db/10.0); # calculate noise variance
+    
+    tot_s=0 # total number of transmitted shorts
+    terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
+    for i in range(rep):
+        
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
+        tot_s=tot_s+s
+        terr_s=terr_s+e
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%100==0) : # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
+    # estimate of the (short or bit) error rate
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
+
+
+if __name__ == '__main__':
+    main (sys.argv[1:])


Property changes on: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm2.py
___________________________________________________________________
Name: svn:executable
   + *

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_combined.py
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_combined.py 
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_combined.py 
2006-08-16 20:07:36 UTC (rev 3322)
@@ -80,19 +80,21 @@
     Es = Es / (len(constellation)/dimensionality)
     N0=Es/pow(10.0,esn0_db/10.0); # noise variance
 
-
-    tot_s=0
-    terr_s=0
+    tot_s=0 # total number of transmitted shorts
+    terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
     for i in range(rep):
         
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i))
 # run experiment with different seed to get different noise realizations
         tot_s=tot_s+s
         terr_s=terr_s+e
-        if (i%100==0) & (i>0):
-            print i,s,e,tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
-    # estimate of the (short) error rate
-    print tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%100==0) : # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
+    # estimate of the (short or bit) error rate
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
 
 
+
 if __name__ == '__main__':
     main (sys.argv[1:])
 

Modified: 
gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_parallel.py
===================================================================
--- gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_parallel.py 
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gnuradio-examples/python/channel-coding/test_tcm_parallel.py 
2006-08-16 20:07:36 UTC (rev 3322)
@@ -15,7 +15,7 @@
     src = gr.lfsr_32k_source_s()
     src_head = gr.head (gr.sizeof_short,Kb/16*P) # packet size in shorts
     s2fsmi=gr.packed_to_unpacked_ss(bitspersymbol,gr.GR_MSB_FIRST) # unpack 
shorts to symbols compatible with the FSM input cardinality
-    s2p = gr.stream_to_streams(2,P) # serial to parallel
+    s2p = gr.stream_to_streams(gr.sizeof_short,P) # serial to parallel
     enc = trellis.encoder_ss(f,0) # initiali state = 0
     mod = gr.chunks_to_symbols_sf(constellation,dimensionality)
 
@@ -26,11 +26,10 @@
         add.append(gr.add_ff())
         noise.append(gr.noise_source_f(gr.GR_GAUSSIAN,math.sqrt(N0/2),seed))
 
-    
     # RX
     metrics = 
trellis.metrics_f(f.O(),dimensionality,constellation,trellis.TRELLIS_EUCLIDEAN) 
# data preprocessing to generate metrics for Viterbi
     va = trellis.viterbi_s(f,K,0,-1) # Put -1 if the Initial/Final states are 
not set.
-    p2s = gr.streams_to_stream(2,P) # parallel to serial
+    p2s = gr.streams_to_stream(gr.sizeof_short,P) # parallel to serial
     fsmi2s=gr.unpacked_to_packed_ss(bitspersymbol,gr.GR_MSB_FIRST) # pack FSM 
input symbols to shorts
     dst = gr.check_lfsr_32k_s()
 
@@ -90,14 +89,16 @@
 
     tot_s=0 # total number of transmitted shorts
     terr_s=0 # total number of shorts in error
+    terr_p=0 # total number of packets in error
     for i in range(rep):
         
(s,e)=run_test(f,Kb,bitspersymbol,K,dimensionality,constellation,N0,-long(666+i),P)
 # run experiment with different seed to get different noise realizations
         tot_s=tot_s+s
         terr_s=terr_s+e
-        if (i%10==0) & (i>0): # display progress
-            print i,s,e,tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+        terr_p=terr_p+(terr_s!=0)
+        if ((i+1)%100==0) : # display progress
+            print i+1,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, 
'%.2e' % ((1.0*terr_s)/tot_s)
     # estimate of the (short or bit) error rate
-    print tot_s,terr_s, '%e' % ((1.0*terr_s)/tot_s)
+    print rep,terr_p, '%.2e' % ((1.0*terr_p)/(i+1)),tot_s,terr_s, '%.2e' % 
((1.0*terr_s)/tot_s)
 
 
 if __name__ == '__main__':

Deleted: gnuradio/trunk/gr-trellis/doc/gr-trellis.html


Property changes on: gnuradio/trunk/gr-trellis/src/lib
___________________________________________________________________
Name: svn:ignore
   - Makefile
Makefile.in
.la
.lo
.deps
.libs
*.la
*.lo
*.pyc
trellis.cc
trellis.py

   + Makefile
Makefile.in
.la
.lo
.deps
.libs
*.la
*.lo
*.pyc
trellis.cc
trellis.py
wip


Modified: gnuradio/trunk/gr-trellis/src/lib/Makefile.am
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/Makefile.am       2006-08-16 19:03:51 UTC 
(rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/Makefile.am       2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -65,9 +65,11 @@
        trellis.cc                      \
         fsm.cc                         \
         quicksort_index.cc             \
+        base.cc                                \
         interleaver.cc                 \
         trellis_calc_metric.cc         \
         trellis_permutation.cc         \
+       trellis_siso_f.cc               \
        $(GENERATED_CC)                 
 
 # magic flags
@@ -87,10 +89,13 @@
 grinclude_HEADERS =                    \
         fsm.h                          \
         quicksort_index.h              \
+        base.h                         \
         interleaver.h                  \
         trellis_metric_type.h          \
         trellis_calc_metric.h          \
         trellis_permutation.h          \
+        trellis_siso_type.h            \
+       trellis_siso_f.h                \
        $(GENERATED_H)                  
 
 

Copied: gnuradio/trunk/gr-trellis/src/lib/base.cc (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gr-trellis/src/lib/base.cc)
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/base.cc                           (rev 0)
+++ gnuradio/trunk/gr-trellis/src/lib/base.cc   2006-08-16 20:07:36 UTC (rev 
3322)
@@ -0,0 +1,92 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <cstdio>
+#include <stdexcept>
+#include <cmath>
+#include "base.h"
+
+
+bool dec2base(unsigned int num, int base, std::vector<int> &s)
+{
+  int l = s.size();
+  unsigned int n=num;
+  for(int i=0;i<l;i++) {
+    s[l-i-1] = n % base; //MSB first
+    n /= base;
+  }
+  if(n!=0) {
+    printf("Number %d requires more than %d digits.",num,l);
+    return false;
+  }
+  else
+    return true;
+}
+
+
+unsigned int base2dec(const std::vector<int> &s, int base)
+{
+  int l = s.size();
+  unsigned int num=0;
+  for(int i=0;i<l;i++)
+      num=num*base+s[i];
+  return num;
+}
+
+
+bool dec2bases(unsigned int num, const std::vector<int> &bases, 
std::vector<int> &s)
+{
+  int l = s.size();
+  unsigned int n=num;
+  for(int i=0;i<l;i++) {
+      s[l-i-1] = n % bases[l-i-1];
+      n /= bases[l-i-1];
+  }
+  if(n!=0) {
+    printf("Number %d requires more than %d digits.",num,l);
+    return false;
+  }
+  else
+    return true;
+}
+
+
+
+unsigned int bases2dec(const std::vector<int> &s, const std::vector<int> 
&bases)
+{
+  int l = s.size();
+  unsigned int num=0;
+  for(int i=0;i<l;i++)
+      num = num * bases[i] + s[i];
+  return num;
+}
+
+
+
+
+
+
+
+
+
+
+

Copied: gnuradio/trunk/gr-trellis/src/lib/base.h (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gr-trellis/src/lib/base.h)
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/base.h                            (rev 0)
+++ gnuradio/trunk/gr-trellis/src/lib/base.h    2006-08-16 20:07:36 UTC (rev 
3322)
@@ -0,0 +1,38 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2002 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef INCLUDED_TRELLIS_BASE_H
+#define INCLUDED_TRELLIS_BASE_H
+
+#include <vector>
+
+/*!
+ * \brief  change base
+ */
+
+
+bool dec2base(unsigned int num, int base, std::vector<int> &s);
+bool dec2bases(unsigned int num, const std::vector<int> &bases, 
std::vector<int> &s);
+unsigned int base2dec(const std::vector<int> &s, int base);
+unsigned int bases2dec(const std::vector<int> &s, const std::vector<int> 
&bases);
+
+#endif

Modified: gnuradio/trunk/gr-trellis/src/lib/fsm.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/fsm.cc    2006-08-16 19:03:51 UTC (rev 
3321)
+++ gnuradio/trunk/gr-trellis/src/lib/fsm.cc    2006-08-16 20:07:36 UTC (rev 
3322)
@@ -23,8 +23,10 @@
 #include <cstdio>
 #include <stdexcept>
 #include <cmath>
+#include "base.h"
 #include "fsm.h"
 
+
 fsm::fsm()
 {
   d_I=0;
@@ -34,6 +36,8 @@
   d_OS.resize(0);
   d_PS.resize(0);
   d_PI.resize(0);
+  d_TMi.resize(0);
+  d_TMl.resize(0);
 }
 
 fsm::fsm(const fsm &FSM)
@@ -45,28 +49,20 @@
   d_OS=FSM.OS();
   d_PS=FSM.PS();
   d_PI=FSM.PI();
+  d_TMi=FSM.TMi();
+  d_TMl=FSM.TMl();
 }
 
-fsm::fsm(const int I, const int S, const int O, const std::vector<int> &NS, 
const std::vector<int> &OS)
+fsm::fsm(int I, int S, int O, const std::vector<int> &NS, const 
std::vector<int> &OS)
 {
   d_I=I;
   d_S=S;
   d_O=O;
   d_NS=NS;
   d_OS=OS;
-  d_PS.resize(d_I*d_S);
-  d_PI.resize(d_I*d_S);
-  
-  // generate the PS, PI tables for later use
-  for(int i=0;i<d_S;i++) {
-    int j=0;
-    for(int ii=0;ii<d_S;ii++) for(int jj=0;jj<d_I;jj++) {
-      if(d_NS[ii*d_I+jj]!=i) continue;
-      d_PS[i*d_I+j]=ii;
-      d_PI[i*d_I+j]=jj;
-      j++;
-    }
-  }
+ 
+  generate_PS_PI();
+  generate_TM();
 }
 
 //######################################################################
@@ -84,14 +80,12 @@
   FILE *fsmfile;
 
   if((fsmfile=fopen(name,"r"))==NULL) 
-    throw std::runtime_error ("file open error in fsm()");
+    throw std::runtime_error ("fsm::fsm(const char *name): file open error\n");
     //printf("file open error in fsm()\n");
   
   fscanf(fsmfile,"%d %d %d\n",&d_I,&d_S,&d_O);
   d_NS.resize(d_I*d_S);
   d_OS.resize(d_I*d_S);
-  d_PS.resize(d_I*d_S);
-  d_PI.resize(d_I*d_S);
 
   for(int i=0;i<d_S;i++) {
     for(int j=0;j<d_I;j++) fscanf(fsmfile,"%d",&(d_NS[i*d_I+j]));
@@ -99,25 +93,128 @@
   for(int i=0;i<d_S;i++) {
     for(int j=0;j<d_I;j++) fscanf(fsmfile,"%d",&(d_OS[i*d_I+j]));
   }
+ 
+  generate_PS_PI();
+  generate_TM();
+}
+
+
+
+
+//######################################################################
+//# Automatically generate the FSM from the generator matrix
+//# of a (n,k) binary convolutional code
+//######################################################################
+fsm::fsm(int k, int n, const std::vector<int> &G)
+{
+
+  // calculate maximum memory requirements for each input stream
+  std::vector<int> max_mem_x(k,-1);
+  int max_mem = -1;
+  for(int i=0;i<k;i++) {
+    for(int j=0;j<n;j++) {
+      int mem = -1;
+      if(G[i*n+j]!=0)
+        mem=(int)(log(G[i*n+j])/log(2.0));
+      if(mem>max_mem_x[i])
+        max_mem_x[i]=mem;
+      if(mem>max_mem)
+        max_mem=mem;
+    }
+  }
   
-  // generate the PS, PI tables for later use
-  for(int i=0;i<d_S;i++) {
-    int j=0;
-    for(int ii=0;ii<d_S;ii++) for(int jj=0;jj<d_I;jj++) {
-      if(d_NS[ii*d_I+jj]!=i) continue;
-      d_PS[i*d_I+j]=ii;
-      d_PI[i*d_I+j]=jj;
-      j++;
+//printf("max_mem_x\n");
+//for(int j=0;j<max_mem_x.size();j++) printf("%d ",max_mem_x[j]); printf("\n");
+
+  // calculate total memory requirements to set S
+  int sum_max_mem = 0;
+  for(int i=0;i<k;i++)
+    sum_max_mem += max_mem_x[i];
+
+//printf("sum_max_mem = %d\n",sum_max_mem);
+
+  d_I=1<<k;
+  d_S=1<<sum_max_mem;
+  d_O=1<<n;
+ 
+  // binary representation of the G matrix
+  std::vector<std::vector<int> > Gb(k*n);
+  for(int j=0;j<k*n;j++) {
+    Gb[j].resize(max_mem+1);
+    dec2base(G[j],2,Gb[j]);
+//printf("Gb\n");
+//for(int m=0;m<Gb[j].size();m++) printf("%d ",Gb[j][m]); printf("\n");
+  }
+
+  // alphabet size of each shift register 
+  std::vector<int> bases_x(k);
+  for(int j=0;j<k ;j++) 
+    bases_x[j] = 1 << max_mem_x[j];
+//printf("bases_x\n");
+//for(int j=0;j<max_mem_x.size();j++) printf("%d ",max_mem_x[j]); printf("\n");
+
+  d_NS.resize(d_I*d_S);
+  d_OS.resize(d_I*d_S);
+
+  std::vector<int> sx(k);
+  std::vector<int> nsx(k);
+  std::vector<int> tx(k);
+  std::vector<std::vector<int> > tb(k);
+  for(int j=0;j<k;j++)
+    tb[j].resize(max_mem+1);
+  std::vector<int> inb(k);
+  std::vector<int> outb(n);
+
+
+  for(int s=0;s<d_S;s++) {
+    dec2bases(s,bases_x,sx); // split s into k values, each representing on of 
the k shift registers
+//printf("state = %d \nstates = ",s);
+//for(int j=0;j<sx.size();j++) printf("%d ",sx[j]); printf("\n");
+    for(int i=0;i<d_I;i++) {
+      dec2base(i,2,inb); // input in binary
+//printf("input = %d \ninputs = ",i);
+//for(int j=0;j<inb.size();j++) printf("%d ",inb[j]); printf("\n");
+
+      // evaluate next state
+      for(int j=0;j<k;j++)
+        nsx[j] = (inb[j]*bases_x[j]+sx[j])/2; // next state (for each shift 
register) MSB first
+      d_NS[s*d_I+i]=bases2dec(nsx,bases_x); // collect all values into the new 
state
+
+      // evaluate transitions
+      for(int j=0;j<k;j++)
+        tx[j] = inb[j]*bases_x[j]+sx[j]; // transition (for each shift 
register)MSB first
+      for(int j=0;j<k;j++) {
+        dec2base(tx[j],2,tb[j]); // transition in binary
+//printf("transition = %d \ntransitions = ",tx[j]);
+//for(int m=0;m<tb[j].size();m++) printf("%d ",tb[j][m]); printf("\n");
+      }
+
+      // evaluate outputs
+      for(int nn=0;nn<n;nn++) {
+        outb[nn] = 0;
+        for(int j=0;j<k;j++) {
+          for(int m=0;m<max_mem+1;m++)
+            outb[nn] = (outb[nn] + Gb[j*n+nn][m]*tb[j][m]) % 2; // careful: 
polynomial 1+D ir represented as 110, not as 011
+//printf("output %d equals %d\n",nn,outb[nn]);
+        }
+      }
+      d_OS[s*d_I+i] = base2dec(outb,2);
     }
   }
+
+  generate_PS_PI();
+  generate_TM();
 }
 
+
+
+
 //######################################################################
 //# Automatically generate an FSM specification describing the 
 //# ISI for a channel
 //# of length ch_length and a modulation of size mod_size
 //######################################################################
-fsm::fsm(const int mod_size, const int ch_length)
+fsm::fsm(int mod_size, int ch_length)
 {
   d_I=mod_size;
   d_S=(int) (pow(1.0*d_I,1.0*ch_length-1)+0.5);
@@ -125,8 +222,6 @@
 
   d_NS.resize(d_I*d_S);
   d_OS.resize(d_I*d_S);
-  d_PS.resize(d_I*d_S);
-  d_PI.resize(d_I*d_S);
 
   for(int s=0;s<d_S;s++) {
     for(int i=0;i<d_I;i++) { 
@@ -135,8 +230,20 @@
       d_OS[s*d_I+i] = t;
     }
   }
-  
-  // generate the PS, PI tables for later use
+ 
+  generate_PS_PI();
+  generate_TM();
+}
+
+
+//######################################################################
+//# generate the PS and PI tables for later use
+//######################################################################
+void fsm::generate_PS_PI()
+{
+  d_PS.resize(d_I*d_S);
+  d_PI.resize(d_I*d_S);
+
   for(int i=0;i<d_S;i++) {
     int j=0;
     for(int ii=0;ii<d_S;ii++) for(int jj=0;jj<d_I;jj++) {
@@ -147,3 +254,70 @@
     }
   }
 }
+
+
+//######################################################################
+//# generate the termination matrices TMl and TMi for later use
+//######################################################################
+void fsm::generate_TM()
+{
+  d_TMi.resize(d_S*d_S);
+  d_TMl.resize(d_S*d_S);
+
+  for(int i=0;i<d_S*d_S;i++) {
+    d_TMi[i] = -1; // no meaning
+    d_TMl[i] = d_S; //infinity: you need at most S-1 steps
+    if (i/d_S == i%d_S)
+      d_TMl[i] = 0;
+  }
+
+  for(int s=0;s<d_S;s++) {
+    bool done = false;
+    int attempts = 0;
+    while (done == false && attempts < d_S-1) {
+      done = find_es(s);
+      attempts ++;
+    }
+    if (done == false)
+      //throw std::runtime_error ("fsm::generate_TM(): FSM appears to be 
disconnected\n");
+      printf("fsm::generate_TM(): FSM appears to be disconnected\n");
+  }
+}
+
+
+// find a path from any state to the ending state "es"
+bool fsm::find_es(int es)
+{
+  bool done = true;
+  for(int s=0;s<d_S;s++) {
+    if(d_TMl[s*d_S+es] < d_S) 
+      continue;
+    int minl=d_S;
+    int mini=-1;
+    for(int i=0;i<d_I;i++) {
+      if( 1 + d_TMl[d_NS[s*d_I+i]*d_S+es] < minl) {
+        minl = 1 + d_TMl[d_NS[s*d_I+i]*d_S+es];
+        mini = i;
+      }
+    }
+    if (mini != -1) {
+      d_TMl[s*d_S+es]=minl;
+      d_TMi[s*d_S+es]=mini;
+    }
+    else
+      done = false;
+  }
+  return done;
+}
+
+
+
+
+
+
+
+
+
+
+
+

Modified: gnuradio/trunk/gr-trellis/src/lib/fsm.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/fsm.h     2006-08-16 19:03:51 UTC (rev 
3321)
+++ gnuradio/trunk/gr-trellis/src/lib/fsm.h     2006-08-16 20:07:36 UTC (rev 
3322)
@@ -37,12 +37,18 @@
   std::vector<int> d_OS;
   std::vector<int> d_PS;
   std::vector<int> d_PI;
+  std::vector<int> d_TMi;
+  std::vector<int> d_TMl;
+  void generate_PS_PI ();
+  void generate_TM ();
+  bool find_es(int es);
 public:
   fsm();
   fsm(const fsm &FSM);
-  fsm(const int I, const int S, const int O, const std::vector<int> &NS, const 
std::vector<int> &OS);
+  fsm(int I, int S, int O, const std::vector<int> &NS, const std::vector<int> 
&OS);
   fsm(const char *name);
-  fsm(const int mod_size, const int ch_length);
+  fsm(int k, int n, const std::vector<int> &G);
+  fsm(int mod_size, int ch_length);
   int I () const { return d_I; }
   int S () const { return d_S; }
   int O () const { return d_O; }
@@ -50,6 +56,8 @@
   const std::vector<int> & OS () const { return d_OS; }
   const std::vector<int> & PS () const { return d_PS; }
   const std::vector<int> & PI () const { return d_PI; }
+  const std::vector<int> & TMi () const { return d_TMi; }
+  const std::vector<int> & TMl () const { return d_TMl; }
 };
 
 #endif

Modified: gnuradio/trunk/gr-trellis/src/lib/fsm.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/fsm.i     2006-08-16 19:03:51 UTC (rev 
3321)
+++ gnuradio/trunk/gr-trellis/src/lib/fsm.i     2006-08-16 20:07:36 UTC (rev 
3322)
@@ -29,12 +29,17 @@
   std::vector<int> d_OS;
   std::vector<int> d_PS;
   std::vector<int> d_PI;
+  std::vector<int> d_TMi;
+  std::vector<int> d_TMl;
+  void generate_PS_PI ();
+  void generate_TM ();
 public:
   fsm();
   fsm(const fsm &FSM);
-  fsm(const int I, const int S, const int O, const std::vector<int> &NS, const 
std::vector<int> &OS);
+  fsm(int I, int S, int O, const std::vector<int> &NS, const std::vector<int> 
&OS);
   fsm(const char *name);
-  fsm(const int mod_size, const int ch_length);
+  fsm(int k, int n, const std::vector<int> &G);
+  fsm(int mod_size, int ch_length);
   int I () const { return d_I; }
   int S () const { return d_S; }
   int O () const { return d_O; }
@@ -42,8 +47,7 @@
   const std::vector<int> & OS () const { return d_OS; }
   const std::vector<int> & PS () const { return d_PS; }
   const std::vector<int> & PI () const { return d_PI; }
+  const std::vector<int> & TMi () const { return d_TMi; }
+  const std::vector<int> & TMl () const { return d_TMl; }
 };
 
-
-
-

Modified: gnuradio/trunk/gr-trellis/src/lib/interleaver.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/interleaver.cc    2006-08-16 19:03:51 UTC 
(rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/interleaver.cc    2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -42,7 +42,7 @@
   d_DEINTER=INTERLEAVER.DEINTER();
 }
 
-interleaver::interleaver(const int K, const std::vector<int> &INTER)
+interleaver::interleaver(int K, const std::vector<int> &INTER)
 {
   d_K=K;
   d_INTER=INTER;
@@ -85,7 +85,7 @@
 //######################################################################
 //# Generate a random interleaver
 //######################################################################
-interleaver::interleaver(const int K, unsigned int seed)
+interleaver::interleaver(int K, unsigned int seed)
 {
   d_K=K;
   d_INTER.resize(d_K);

Modified: gnuradio/trunk/gr-trellis/src/lib/interleaver.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/interleaver.h     2006-08-16 19:03:51 UTC 
(rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/interleaver.h     2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -36,9 +36,9 @@
 public:
   interleaver();
   interleaver(const interleaver & INTERLEAVER);
-  interleaver(const int K, const std::vector<int> & INTER);
+  interleaver(int K, const std::vector<int> & INTER);
   interleaver(const char *name);
-  interleaver(const int K, unsigned int seed);
+  interleaver(int K, unsigned int seed);
   int K () const { return d_K; }
   const std::vector<int> & INTER () const { return d_INTER; }
   const std::vector<int> & DEINTER () const { return d_DEINTER; }

Modified: gnuradio/trunk/gr-trellis/src/lib/interleaver.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/interleaver.i     2006-08-16 19:03:51 UTC 
(rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/interleaver.i     2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -28,9 +28,9 @@
 public:
   interleaver();
   interleaver(const interleaver & INTERLEAVER);
-  interleaver(const int K, const std::vector<int> & INTER);
+  interleaver(int K, const std::vector<int> & INTER);
   interleaver(const char *name);
-  interleaver(const int K, unsigned int seed);
+  interleaver(int K, unsigned int seed);
   int K () const { return d_K; }
   const std::vector<int> & INTER () const { return d_INTER; }
   const std::vector<int> & DEINTER () const { return d_DEINTER; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis.i 2006-08-16 19:03:51 UTC (rev 
3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis.i 2006-08-16 20:07:36 UTC (rev 
3322)
@@ -10,6 +10,7 @@
 #include "fsm.h"
 #include "interleaver.h"
 #include "trellis_permutation.h"
+#include "trellis_siso_f.h"
 #include <stdexcept>
 %}
 
@@ -18,7 +19,10 @@
 %include "fsm.i"
 %include "interleaver.i"
 %include "trellis_permutation.i"
+%include "trellis_siso_f.i"
+
 %include "trellis_metric_type.h"
+%include "trellis_siso_type.h"
 
 
 %include "trellis_generated.i"

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc    2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.cc    2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,8 +24,7 @@
 #include <stdexcept>
 #include "trellis_calc_metric.h"
 
-// soft decisions (Euclidean distance squared)
-void calc_metric_s(const int O, const int D, const std::vector<short> &TABLE, 
const short *in, float *metric, trellis_metric_type_t type)
+void calc_metric_s(int O, int D, const std::vector<short> &TABLE, const short 
*in, float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -33,24 +32,24 @@
   switch (type){
   case TRELLIS_EUCLIDEAN:
     for(int o=0;o<O;o++) {
-       metric[o]=0.0;
-       for (int m=0;m<D;m++) {
-           float s=in[m]-TABLE[o*D+m];
-           metric[o]+=s*s;
-       }
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
+      }
     }
     break;
   case TRELLIS_HARD_SYMBOL:
     for(int o=0;o<O;o++) {
-       metric[o]=0.0;
-       for (int m=0;m<D;m++) {
-           float s=in[m]-TABLE[o*D+m];
-           metric[o]+=s*s;
-       }
-       if(metric[o]<minm) {
-         minm=metric[o];
-         minmi=o;
-       }
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
+      }
+      if(metric[o]<minm) {
+        minm=metric[o];
+        minmi=o;
+      }
     }
     for(int o=0;o<O;o++) {
       metric[o] = (o==minmi?0.0:1.0);
@@ -66,8 +65,7 @@
 
 
 
-// soft decisions (Euclidean distance squared)
-void calc_metric_i(const int O, const int D, const std::vector<int> &TABLE, 
const int *in, float *metric, trellis_metric_type_t type)
+void calc_metric_i(int O, int D, const std::vector<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -75,24 +73,24 @@
   switch (type){
   case TRELLIS_EUCLIDEAN:
     for(int o=0;o<O;o++) {
-       metric[o]=0.0;
-       for (int m=0;m<D;m++) {
-           float s=in[m]-TABLE[o*D+m];
-           metric[o]+=s*s;
-       }
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
+      }
     }
     break;
   case TRELLIS_HARD_SYMBOL:
     for(int o=0;o<O;o++) {
-       metric[o]=0.0;
-       for (int m=0;m<D;m++) {
-           float s=in[m]-TABLE[o*D+m];
-           metric[o]+=s*s;
-       }
-       if(metric[o]<minm) {
-         minm=metric[o];
-         minmi=o;
-       }
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
+      }
+      if(metric[o]<minm) {
+        minm=metric[o];
+        minmi=o;
+      }
     }
     for(int o=0;o<O;o++) {
       metric[o] = (o==minmi?0.0:1.0);
@@ -108,12 +106,7 @@
 
 
 
-
-
-
-
-// soft decisions (Euclidean distance squared)
-void calc_metric_f(const int O, const int D, const std::vector<float> &TABLE, 
const float *in, float *metric, trellis_metric_type_t type)
+void calc_metric_f(int O, int D, const std::vector<float> &TABLE, const float 
*in, float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -121,24 +114,24 @@
   switch (type){
   case TRELLIS_EUCLIDEAN:
     for(int o=0;o<O;o++) {
-       metric[o]=0.0;
-       for (int m=0;m<D;m++) {
-           float s=in[m]-TABLE[o*D+m];
-           metric[o]+=s*s;
-       }
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
+      }
     } 
     break;
   case TRELLIS_HARD_SYMBOL:
     for(int o=0;o<O;o++) {
-       metric[o]=0.0;
-       for (int m=0;m<D;m++) {
-           float s=in[m]-TABLE[o*D+m];
-           metric[o]+=s*s;
-       }
-       if(metric[o]<minm) {
-         minm=metric[o];
-         minmi=o;
-       }
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        float s=in[m]-TABLE[o*D+m];
+        metric[o]+=s*s;
+      }
+      if(metric[o]<minm) {
+        minm=metric[o];
+        minmi=o;
+      }
     }
     for(int o=0;o<O;o++) {
       metric[o] = (o==minmi?0.0:1.0);
@@ -153,8 +146,7 @@
 }
 
 
-// soft decisions (Euclidean distance squared)
-void calc_metric_c(const int O, const int D, const std::vector<gr_complex> 
&TABLE, const gr_complex *in, float *metric, trellis_metric_type_t type)
+void calc_metric_c(int O, int D, const std::vector<gr_complex> &TABLE, const 
gr_complex *in, float *metric, trellis_metric_type_t type)
 {
   float minm = FLT_MAX;
   int minmi = 0;
@@ -169,7 +161,20 @@
       }
     }
   case TRELLIS_HARD_SYMBOL:
-    throw std::runtime_error ("Invalid metric type (not yet implemented).");
+    for(int o=0;o<O;o++) {
+      metric[o]=0.0;
+      for (int m=0;m<D;m++) {
+        gr_complex s=in[m]-TABLE[o*D+m];
+        metric[o]+=s.real()*s.real()+s.imag()*s.imag();
+      }
+      if(metric[o]<minm) {
+        minm=metric[o];
+        minmi=o;
+      }
+    }
+    for(int o=0;o<O;o++) {
+      metric[o] = (o==minmi?0.0:1.0);
+    }
     break;
   case TRELLIS_HARD_BIT:
     throw std::runtime_error ("Invalid metric type (not yet implemented).");

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_calc_metric.h     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -27,12 +27,12 @@
 #include <gr_complex.h>
 #include <trellis_metric_type.h>
 
-void calc_metric_s(const int O, const int D, const std::vector<short> &TABLE, 
const short *in, float *metric, trellis_metric_type_t type);
+void calc_metric_s(int O, int D, const std::vector<short> &TABLE, const short 
*in, float *metric, trellis_metric_type_t type);
 
-void calc_metric_i(const int O, const int D, const std::vector<int> &TABLE, 
const int *in, float *metric, trellis_metric_type_t type);
+void calc_metric_i(int O, int D, const std::vector<int> &TABLE, const int *in, 
float *metric, trellis_metric_type_t type);
 
-void calc_metric_f(const int O, const int D, const std::vector<float> &TABLE, 
const float *in, float *metric, trellis_metric_type_t type);
+void calc_metric_f(int O, int D, const std::vector<float> &TABLE, const float 
*in, float *metric, trellis_metric_type_t type);
 
-void calc_metric_c(const int O, const int D, const std::vector<gr_complex> 
&TABLE, const gr_complex *in, float *metric, trellis_metric_type_t type);
+void calc_metric_c(int O, int D, const std::vector<gr_complex> &TABLE, const 
gr_complex *in, float *metric, trellis_metric_type_t type);
 
 #endif

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.cc.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.cc.t   2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.cc.t   2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,12 +29,12 @@
 #include <iostream>
 
 @SPTR_NAME@ 
address@hidden@ (const fsm &FSM, const int ST)
address@hidden@ (const fsm &FSM, int ST)
 {
   return @SPTR_NAME@ (new @NAME@ (FSM,ST));
 }
 
address@hidden@::@NAME@ (const fsm &FSM, const int ST)
address@hidden@::@NAME@ (const fsm &FSM, int ST)
   : gr_sync_block ("@BASE_NAME@",
                   gr_make_io_signature (1, -1, sizeof (@I_TYPE@)),
                   gr_make_io_signature (1, -1, sizeof (@O_TYPE@))),
@@ -50,27 +50,25 @@
                        gr_vector_const_void_star &input_items,
                        gr_vector_void_star &output_items)
 {
-  int d_ST_tmp;
+  int ST_tmp;
 
   assert (input_items.size() == output_items.size());
   int nstreams = input_items.size();
 
-for (int m=0;m<nstreams;m++) {
-  const @I_TYPE@ *in = (const @I_TYPE@ *) input_items[m];
-  @O_TYPE@ *out = (@O_TYPE@ *) output_items[m];
-  d_ST_tmp = d_ST;
+  for (int m=0;m<nstreams;m++) {
+    const @I_TYPE@ *in = (const @I_TYPE@ *) input_items[m];
+    @O_TYPE@ *out = (@O_TYPE@ *) output_items[m];
+    ST_tmp = d_ST;
 
-// per stream processing
-
-  for (int i = 0; i < noutput_items; i++){
-    out[i] = (@O_TYPE@) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // direction of 
time?
-    d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+    // per stream processing
+    for (int i = 0; i < noutput_items; i++){
+      out[i] = (@O_TYPE@) d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // direction of 
time?
+      ST_tmp = (int) d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+    }
+    // end per stream processing
   }
+  d_ST = ST_tmp;
 
-// end per stream processing
-}
-  d_ST = d_ST_tmp;
-
   return noutput_items;
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.h.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.h.t    2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.h.t    2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
address@hidden@ address@hidden@ (const fsm &FSM, const int ST);
address@hidden@ address@hidden@ (const fsm &FSM, int ST);
 
 /*!
  * \brief Convolutional encoder.
@@ -42,10 +42,10 @@
 class @NAME@ : public gr_sync_block
 {
 private:
-  friend @SPTR_NAME@ address@hidden@ (const fsm &FSM, const int ST);
+  friend @SPTR_NAME@ address@hidden@ (const fsm &FSM, int ST);
   fsm d_FSM;
   int d_ST;
-  @NAME@ (const fsm &FSM, const int ST); 
+  @NAME@ (const fsm &FSM, int ST); 
 
 public:
   fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.i.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.i.t    2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_XX.i.t    2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@);
 
address@hidden@ address@hidden@ (const fsm &FSM, const int ST);
address@hidden@ address@hidden@ (const fsm &FSM, int ST);
 
 class @NAME@ : public gr_sync_block
 {
 private:
-  @NAME@ (const fsm &FSM, const int ST);
+  @NAME@ (const fsm &FSM, int ST);
 public:
   fsm FSM () const { return d_FSM; }
   int ST () const { return d_ST; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.cc     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.cc     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,12 +29,12 @@
 #include <iostream>
 
 trellis_encoder_bb_sptr 
-trellis_make_encoder_bb (const fsm &FSM, const int ST)
+trellis_make_encoder_bb (const fsm &FSM, int ST)
 {
   return trellis_encoder_bb_sptr (new trellis_encoder_bb (FSM,ST));
 }
 
-trellis_encoder_bb::trellis_encoder_bb (const fsm &FSM, const int ST)
+trellis_encoder_bb::trellis_encoder_bb (const fsm &FSM, int ST)
   : gr_sync_block ("encoder_bb",
                   gr_make_io_signature (1, -1, sizeof (unsigned char)),
                   gr_make_io_signature (1, -1, sizeof (unsigned char))),
@@ -50,27 +50,25 @@
                        gr_vector_const_void_star &input_items,
                        gr_vector_void_star &output_items)
 {
-  int d_ST_tmp;
+  int ST_tmp;
 
   assert (input_items.size() == output_items.size());
   int nstreams = input_items.size();
 
-for (int m=0;m<nstreams;m++) {
-  const unsigned char *in = (const unsigned char *) input_items[m];
-  unsigned char *out = (unsigned char *) output_items[m];
-  d_ST_tmp = d_ST;
+  for (int m=0;m<nstreams;m++) {
+    const unsigned char *in = (const unsigned char *) input_items[m];
+    unsigned char *out = (unsigned char *) output_items[m];
+    ST_tmp = d_ST;
 
-// per stream processing
-
-  for (int i = 0; i < noutput_items; i++){
-    out[i] = (unsigned char) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // 
direction of time?
-    d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+    // per stream processing
+    for (int i = 0; i < noutput_items; i++){
+      out[i] = (unsigned char) d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // 
direction of time?
+      ST_tmp = (int) d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+    }
+    // end per stream processing
   }
+  d_ST = ST_tmp;
 
-// end per stream processing
-}
-  d_ST = d_ST_tmp;
-
   return noutput_items;
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.h      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.h      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_encoder_bb;
 typedef boost::shared_ptr<trellis_encoder_bb> trellis_encoder_bb_sptr;
 
-trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, const int ST);
+trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, int ST);
 
 /*!
  * \brief Convolutional encoder.
@@ -42,10 +42,10 @@
 class trellis_encoder_bb : public gr_sync_block
 {
 private:
-  friend trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, 
const int ST);
+  friend trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, int 
ST);
   fsm d_FSM;
   int d_ST;
-  trellis_encoder_bb (const fsm &FSM, const int ST); 
+  trellis_encoder_bb (const fsm &FSM, int ST); 
 
 public:
   fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.i      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bb.i      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,encoder_bb);
 
-trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, const int ST);
+trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, int ST);
 
 class trellis_encoder_bb : public gr_sync_block
 {
 private:
-  trellis_encoder_bb (const fsm &FSM, const int ST);
+  trellis_encoder_bb (const fsm &FSM, int ST);
 public:
   fsm FSM () const { return d_FSM; }
   int ST () const { return d_ST; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.cc     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.cc     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,12 +29,12 @@
 #include <iostream>
 
 trellis_encoder_bi_sptr 
-trellis_make_encoder_bi (const fsm &FSM, const int ST)
+trellis_make_encoder_bi (const fsm &FSM, int ST)
 {
   return trellis_encoder_bi_sptr (new trellis_encoder_bi (FSM,ST));
 }
 
-trellis_encoder_bi::trellis_encoder_bi (const fsm &FSM, const int ST)
+trellis_encoder_bi::trellis_encoder_bi (const fsm &FSM, int ST)
   : gr_sync_block ("encoder_bi",
                   gr_make_io_signature (1, -1, sizeof (unsigned char)),
                   gr_make_io_signature (1, -1, sizeof (int))),
@@ -50,27 +50,25 @@
                        gr_vector_const_void_star &input_items,
                        gr_vector_void_star &output_items)
 {
-  int d_ST_tmp;
+  int ST_tmp;
 
   assert (input_items.size() == output_items.size());
   int nstreams = input_items.size();
 
-for (int m=0;m<nstreams;m++) {
-  const unsigned char *in = (const unsigned char *) input_items[m];
-  int *out = (int *) output_items[m];
-  d_ST_tmp = d_ST;
+  for (int m=0;m<nstreams;m++) {
+    const unsigned char *in = (const unsigned char *) input_items[m];
+    int *out = (int *) output_items[m];
+    ST_tmp = d_ST;
 
-// per stream processing
-
-  for (int i = 0; i < noutput_items; i++){
-    out[i] = (int) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // direction of time?
-    d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+    // per stream processing
+    for (int i = 0; i < noutput_items; i++){
+      out[i] = (int) d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // direction of time?
+      ST_tmp = (int) d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+    }
+    // end per stream processing
   }
+  d_ST = ST_tmp;
 
-// end per stream processing
-}
-  d_ST = d_ST_tmp;
-
   return noutput_items;
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.h      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.h      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_encoder_bi;
 typedef boost::shared_ptr<trellis_encoder_bi> trellis_encoder_bi_sptr;
 
-trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, const int ST);
+trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, int ST);
 
 /*!
  * \brief Convolutional encoder.
@@ -42,10 +42,10 @@
 class trellis_encoder_bi : public gr_sync_block
 {
 private:
-  friend trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, 
const int ST);
+  friend trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, int 
ST);
   fsm d_FSM;
   int d_ST;
-  trellis_encoder_bi (const fsm &FSM, const int ST); 
+  trellis_encoder_bi (const fsm &FSM, int ST); 
 
 public:
   fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.i      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bi.i      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,encoder_bi);
 
-trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, const int ST);
+trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, int ST);
 
 class trellis_encoder_bi : public gr_sync_block
 {
 private:
-  trellis_encoder_bi (const fsm &FSM, const int ST);
+  trellis_encoder_bi (const fsm &FSM, int ST);
 public:
   fsm FSM () const { return d_FSM; }
   int ST () const { return d_ST; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.cc     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.cc     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,12 +29,12 @@
 #include <iostream>
 
 trellis_encoder_bs_sptr 
-trellis_make_encoder_bs (const fsm &FSM, const int ST)
+trellis_make_encoder_bs (const fsm &FSM, int ST)
 {
   return trellis_encoder_bs_sptr (new trellis_encoder_bs (FSM,ST));
 }
 
-trellis_encoder_bs::trellis_encoder_bs (const fsm &FSM, const int ST)
+trellis_encoder_bs::trellis_encoder_bs (const fsm &FSM, int ST)
   : gr_sync_block ("encoder_bs",
                   gr_make_io_signature (1, -1, sizeof (unsigned char)),
                   gr_make_io_signature (1, -1, sizeof (short))),
@@ -50,27 +50,25 @@
                        gr_vector_const_void_star &input_items,
                        gr_vector_void_star &output_items)
 {
-  int d_ST_tmp;
+  int ST_tmp;
 
   assert (input_items.size() == output_items.size());
   int nstreams = input_items.size();
 
-for (int m=0;m<nstreams;m++) {
-  const unsigned char *in = (const unsigned char *) input_items[m];
-  short *out = (short *) output_items[m];
-  d_ST_tmp = d_ST;
+  for (int m=0;m<nstreams;m++) {
+    const unsigned char *in = (const unsigned char *) input_items[m];
+    short *out = (short *) output_items[m];
+    ST_tmp = d_ST;
 
-// per stream processing
-
-  for (int i = 0; i < noutput_items; i++){
-    out[i] = (short) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // direction of 
time?
-    d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+    // per stream processing
+    for (int i = 0; i < noutput_items; i++){
+      out[i] = (short) d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // direction of 
time?
+      ST_tmp = (int) d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+    }
+    // end per stream processing
   }
+  d_ST = ST_tmp;
 
-// end per stream processing
-}
-  d_ST = d_ST_tmp;
-
   return noutput_items;
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.h      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.h      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_encoder_bs;
 typedef boost::shared_ptr<trellis_encoder_bs> trellis_encoder_bs_sptr;
 
-trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, const int ST);
+trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, int ST);
 
 /*!
  * \brief Convolutional encoder.
@@ -42,10 +42,10 @@
 class trellis_encoder_bs : public gr_sync_block
 {
 private:
-  friend trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, 
const int ST);
+  friend trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, int 
ST);
   fsm d_FSM;
   int d_ST;
-  trellis_encoder_bs (const fsm &FSM, const int ST); 
+  trellis_encoder_bs (const fsm &FSM, int ST); 
 
 public:
   fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.i      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_bs.i      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,encoder_bs);
 
-trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, const int ST);
+trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, int ST);
 
 class trellis_encoder_bs : public gr_sync_block
 {
 private:
-  trellis_encoder_bs (const fsm &FSM, const int ST);
+  trellis_encoder_bs (const fsm &FSM, int ST);
 public:
   fsm FSM () const { return d_FSM; }
   int ST () const { return d_ST; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.cc     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.cc     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,12 +29,12 @@
 #include <iostream>
 
 trellis_encoder_ii_sptr 
-trellis_make_encoder_ii (const fsm &FSM, const int ST)
+trellis_make_encoder_ii (const fsm &FSM, int ST)
 {
   return trellis_encoder_ii_sptr (new trellis_encoder_ii (FSM,ST));
 }
 
-trellis_encoder_ii::trellis_encoder_ii (const fsm &FSM, const int ST)
+trellis_encoder_ii::trellis_encoder_ii (const fsm &FSM, int ST)
   : gr_sync_block ("encoder_ii",
                   gr_make_io_signature (1, -1, sizeof (int)),
                   gr_make_io_signature (1, -1, sizeof (int))),
@@ -50,27 +50,25 @@
                        gr_vector_const_void_star &input_items,
                        gr_vector_void_star &output_items)
 {
-  int d_ST_tmp;
+  int ST_tmp;
 
   assert (input_items.size() == output_items.size());
   int nstreams = input_items.size();
 
-for (int m=0;m<nstreams;m++) {
-  const int *in = (const int *) input_items[m];
-  int *out = (int *) output_items[m];
-  d_ST_tmp = d_ST;
+  for (int m=0;m<nstreams;m++) {
+    const int *in = (const int *) input_items[m];
+    int *out = (int *) output_items[m];
+    ST_tmp = d_ST;
 
-// per stream processing
-
-  for (int i = 0; i < noutput_items; i++){
-    out[i] = (int) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // direction of time?
-    d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+    // per stream processing
+    for (int i = 0; i < noutput_items; i++){
+      out[i] = (int) d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // direction of time?
+      ST_tmp = (int) d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+    }
+    // end per stream processing
   }
+  d_ST = ST_tmp;
 
-// end per stream processing
-}
-  d_ST = d_ST_tmp;
-
   return noutput_items;
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.h      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.h      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_encoder_ii;
 typedef boost::shared_ptr<trellis_encoder_ii> trellis_encoder_ii_sptr;
 
-trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, const int ST);
+trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, int ST);
 
 /*!
  * \brief Convolutional encoder.
@@ -42,10 +42,10 @@
 class trellis_encoder_ii : public gr_sync_block
 {
 private:
-  friend trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, 
const int ST);
+  friend trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, int 
ST);
   fsm d_FSM;
   int d_ST;
-  trellis_encoder_ii (const fsm &FSM, const int ST); 
+  trellis_encoder_ii (const fsm &FSM, int ST); 
 
 public:
   fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.i      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ii.i      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,encoder_ii);
 
-trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, const int ST);
+trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, int ST);
 
 class trellis_encoder_ii : public gr_sync_block
 {
 private:
-  trellis_encoder_ii (const fsm &FSM, const int ST);
+  trellis_encoder_ii (const fsm &FSM, int ST);
 public:
   fsm FSM () const { return d_FSM; }
   int ST () const { return d_ST; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.cc     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.cc     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,12 +29,12 @@
 #include <iostream>
 
 trellis_encoder_si_sptr 
-trellis_make_encoder_si (const fsm &FSM, const int ST)
+trellis_make_encoder_si (const fsm &FSM, int ST)
 {
   return trellis_encoder_si_sptr (new trellis_encoder_si (FSM,ST));
 }
 
-trellis_encoder_si::trellis_encoder_si (const fsm &FSM, const int ST)
+trellis_encoder_si::trellis_encoder_si (const fsm &FSM, int ST)
   : gr_sync_block ("encoder_si",
                   gr_make_io_signature (1, -1, sizeof (short)),
                   gr_make_io_signature (1, -1, sizeof (int))),
@@ -50,27 +50,25 @@
                        gr_vector_const_void_star &input_items,
                        gr_vector_void_star &output_items)
 {
-  int d_ST_tmp;
+  int ST_tmp;
 
   assert (input_items.size() == output_items.size());
   int nstreams = input_items.size();
 
-for (int m=0;m<nstreams;m++) {
-  const short *in = (const short *) input_items[m];
-  int *out = (int *) output_items[m];
-  d_ST_tmp = d_ST;
+  for (int m=0;m<nstreams;m++) {
+    const short *in = (const short *) input_items[m];
+    int *out = (int *) output_items[m];
+    ST_tmp = d_ST;
 
-// per stream processing
-
-  for (int i = 0; i < noutput_items; i++){
-    out[i] = (int) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // direction of time?
-    d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+    // per stream processing
+    for (int i = 0; i < noutput_items; i++){
+      out[i] = (int) d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // direction of time?
+      ST_tmp = (int) d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+    }
+    // end per stream processing
   }
+  d_ST = ST_tmp;
 
-// end per stream processing
-}
-  d_ST = d_ST_tmp;
-
   return noutput_items;
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.h      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.h      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_encoder_si;
 typedef boost::shared_ptr<trellis_encoder_si> trellis_encoder_si_sptr;
 
-trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, const int ST);
+trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, int ST);
 
 /*!
  * \brief Convolutional encoder.
@@ -42,10 +42,10 @@
 class trellis_encoder_si : public gr_sync_block
 {
 private:
-  friend trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, 
const int ST);
+  friend trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, int 
ST);
   fsm d_FSM;
   int d_ST;
-  trellis_encoder_si (const fsm &FSM, const int ST); 
+  trellis_encoder_si (const fsm &FSM, int ST); 
 
 public:
   fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.i      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_si.i      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,encoder_si);
 
-trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, const int ST);
+trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, int ST);
 
 class trellis_encoder_si : public gr_sync_block
 {
 private:
-  trellis_encoder_si (const fsm &FSM, const int ST);
+  trellis_encoder_si (const fsm &FSM, int ST);
 public:
   fsm FSM () const { return d_FSM; }
   int ST () const { return d_ST; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.cc     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.cc     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,12 +29,12 @@
 #include <iostream>
 
 trellis_encoder_ss_sptr 
-trellis_make_encoder_ss (const fsm &FSM, const int ST)
+trellis_make_encoder_ss (const fsm &FSM, int ST)
 {
   return trellis_encoder_ss_sptr (new trellis_encoder_ss (FSM,ST));
 }
 
-trellis_encoder_ss::trellis_encoder_ss (const fsm &FSM, const int ST)
+trellis_encoder_ss::trellis_encoder_ss (const fsm &FSM, int ST)
   : gr_sync_block ("encoder_ss",
                   gr_make_io_signature (1, -1, sizeof (short)),
                   gr_make_io_signature (1, -1, sizeof (short))),
@@ -50,27 +50,25 @@
                        gr_vector_const_void_star &input_items,
                        gr_vector_void_star &output_items)
 {
-  int d_ST_tmp;
+  int ST_tmp;
 
   assert (input_items.size() == output_items.size());
   int nstreams = input_items.size();
 
-for (int m=0;m<nstreams;m++) {
-  const short *in = (const short *) input_items[m];
-  short *out = (short *) output_items[m];
-  d_ST_tmp = d_ST;
+  for (int m=0;m<nstreams;m++) {
+    const short *in = (const short *) input_items[m];
+    short *out = (short *) output_items[m];
+    ST_tmp = d_ST;
 
-// per stream processing
-
-  for (int i = 0; i < noutput_items; i++){
-    out[i] = (short) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // direction of 
time?
-    d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+    // per stream processing
+    for (int i = 0; i < noutput_items; i++){
+      out[i] = (short) d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]]; // direction of 
time?
+      ST_tmp = (int) d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+    }
+    // end per stream processing
   }
+  d_ST = ST_tmp;
 
-// end per stream processing
-}
-  d_ST = d_ST_tmp;
-
   return noutput_items;
 }
 

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.h      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.h      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_encoder_ss;
 typedef boost::shared_ptr<trellis_encoder_ss> trellis_encoder_ss_sptr;
 
-trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, const int ST);
+trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, int ST);
 
 /*!
  * \brief Convolutional encoder.
@@ -42,10 +42,10 @@
 class trellis_encoder_ss : public gr_sync_block
 {
 private:
-  friend trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, 
const int ST);
+  friend trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, int 
ST);
   fsm d_FSM;
   int d_ST;
-  trellis_encoder_ss (const fsm &FSM, const int ST); 
+  trellis_encoder_ss (const fsm &FSM, int ST); 
 
 public:
   fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.i      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_encoder_ss.i      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,encoder_ss);
 
-trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, const int ST);
+trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, int ST);
 
 class trellis_encoder_ss : public gr_sync_block
 {
 private:
-  trellis_encoder_ss (const fsm &FSM, const int ST);
+  trellis_encoder_ss (const fsm &FSM, int ST);
 public:
   fsm FSM () const { return d_FSM; }
   int ST () const { return d_ST; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t    2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.cc.t    2006-08-16 
20:07:36 UTC (rev 3322)
@@ -32,14 +32,14 @@
 
 
 @SPTR_NAME@
address@hidden@ (const int O, const int D,  const std::vector<@I_TYPE@> &TABLE, 
trellis_metric_type_t TYPE)
address@hidden@ (int O, int D,  const std::vector<@I_TYPE@> &TABLE, 
trellis_metric_type_t TYPE)
 {
   return @SPTR_NAME@ (new @NAME@ (O,D,TABLE,TYPE));
 }
 
 
 
address@hidden@::@NAME@ (const int O, const int D,  const std::vector<@I_TYPE@> 
&TABLE, trellis_metric_type_t TYPE)
address@hidden@::@NAME@ (int O, int D,  const std::vector<@I_TYPE@> &TABLE, 
trellis_metric_type_t TYPE)
   : gr_block ("@BASE_NAME@",
              gr_make_io_signature (1, -1, sizeof (@I_TYPE@)),
              gr_make_io_signature (1, -1, sizeof (float))),

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.h.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.h.t     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.h.t     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class @NAME@;
 typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
 
address@hidden@ address@hidden@ (const int O, const int D,  const 
std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE);
address@hidden@ address@hidden@ (int O, int D,  const std::vector<@I_TYPE@> 
&TABLE, trellis_metric_type_t TYPE);
 
 /*!
  * \brief Evaluate metrics for use by the Viterbi algorithm.
@@ -45,8 +45,8 @@
   trellis_metric_type_t d_TYPE;
   std::vector<@I_TYPE@> d_TABLE;
 
-  friend @SPTR_NAME@ address@hidden@ (const int O, const int D,  const 
std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE);
-  @NAME@ (const int O, const int D,  const std::vector<@I_TYPE@> &TABLE, 
trellis_metric_type_t TYPE);
+  friend @SPTR_NAME@ address@hidden@ (int O, int D,  const 
std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE);
+  @NAME@ (int O, int D,  const std::vector<@I_TYPE@> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.i.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.i.t     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_X.i.t     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@);
 
address@hidden@ address@hidden@ (const int O, const int D, const 
std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE);
address@hidden@ address@hidden@ (int O, int D, const std::vector<@I_TYPE@> 
&TABLE, trellis_metric_type_t TYPE);
 
 class @NAME@ : public gr_block
 {
 private:
-  @NAME@ (const int O, const int D, const std::vector<@I_TYPE@> &TABLE, 
trellis_metric_type_t TYPE);
+  @NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.cc      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -32,14 +32,14 @@
 
 
 trellis_metrics_c_sptr
-trellis_make_metrics_c (const int O, const int D,  const 
std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE)
+trellis_make_metrics_c (int O, int D,  const std::vector<gr_complex> &TABLE, 
trellis_metric_type_t TYPE)
 {
   return trellis_metrics_c_sptr (new trellis_metrics_c (O,D,TABLE,TYPE));
 }
 
 
 
-trellis_metrics_c::trellis_metrics_c (const int O, const int D,  const 
std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE)
+trellis_metrics_c::trellis_metrics_c (int O, int D,  const 
std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE)
   : gr_block ("metrics_c",
              gr_make_io_signature (1, -1, sizeof (gr_complex)),
              gr_make_io_signature (1, -1, sizeof (float))),

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.h       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_metrics_c;
 typedef boost::shared_ptr<trellis_metrics_c> trellis_metrics_c_sptr;
 
-trellis_metrics_c_sptr trellis_make_metrics_c (const int O, const int D,  
const std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_c_sptr trellis_make_metrics_c (int O, int D,  const 
std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE);
 
 /*!
  * \brief Evaluate metrics for use by the Viterbi algorithm.
@@ -45,8 +45,8 @@
   trellis_metric_type_t d_TYPE;
   std::vector<gr_complex> d_TABLE;
 
-  friend trellis_metrics_c_sptr trellis_make_metrics_c (const int O, const int 
D,  const std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE);
-  trellis_metrics_c (const int O, const int D,  const std::vector<gr_complex> 
&TABLE, trellis_metric_type_t TYPE);
+  friend trellis_metrics_c_sptr trellis_make_metrics_c (int O, int D,  const 
std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE);
+  trellis_metrics_c (int O, int D,  const std::vector<gr_complex> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.i       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_c.i       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,metrics_c);
 
-trellis_metrics_c_sptr trellis_make_metrics_c (const int O, const int D, const 
std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_c_sptr trellis_make_metrics_c (int O, int D, const 
std::vector<gr_complex> &TABLE, trellis_metric_type_t TYPE);
 
 class trellis_metrics_c : public gr_block
 {
 private:
-  trellis_metrics_c (const int O, const int D, const std::vector<gr_complex> 
&TABLE, trellis_metric_type_t TYPE);
+  trellis_metrics_c (int O, int D, const std::vector<gr_complex> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.cc      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -32,14 +32,14 @@
 
 
 trellis_metrics_f_sptr
-trellis_make_metrics_f (const int O, const int D,  const std::vector<float> 
&TABLE, trellis_metric_type_t TYPE)
+trellis_make_metrics_f (int O, int D,  const std::vector<float> &TABLE, 
trellis_metric_type_t TYPE)
 {
   return trellis_metrics_f_sptr (new trellis_metrics_f (O,D,TABLE,TYPE));
 }
 
 
 
-trellis_metrics_f::trellis_metrics_f (const int O, const int D,  const 
std::vector<float> &TABLE, trellis_metric_type_t TYPE)
+trellis_metrics_f::trellis_metrics_f (int O, int D,  const std::vector<float> 
&TABLE, trellis_metric_type_t TYPE)
   : gr_block ("metrics_f",
              gr_make_io_signature (1, -1, sizeof (float)),
              gr_make_io_signature (1, -1, sizeof (float))),

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.h       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_metrics_f;
 typedef boost::shared_ptr<trellis_metrics_f> trellis_metrics_f_sptr;
 
-trellis_metrics_f_sptr trellis_make_metrics_f (const int O, const int D,  
const std::vector<float> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_f_sptr trellis_make_metrics_f (int O, int D,  const 
std::vector<float> &TABLE, trellis_metric_type_t TYPE);
 
 /*!
  * \brief Evaluate metrics for use by the Viterbi algorithm.
@@ -45,8 +45,8 @@
   trellis_metric_type_t d_TYPE;
   std::vector<float> d_TABLE;
 
-  friend trellis_metrics_f_sptr trellis_make_metrics_f (const int O, const int 
D,  const std::vector<float> &TABLE, trellis_metric_type_t TYPE);
-  trellis_metrics_f (const int O, const int D,  const std::vector<float> 
&TABLE, trellis_metric_type_t TYPE);
+  friend trellis_metrics_f_sptr trellis_make_metrics_f (int O, int D,  const 
std::vector<float> &TABLE, trellis_metric_type_t TYPE);
+  trellis_metrics_f (int O, int D,  const std::vector<float> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.i       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_f.i       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,metrics_f);
 
-trellis_metrics_f_sptr trellis_make_metrics_f (const int O, const int D, const 
std::vector<float> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_f_sptr trellis_make_metrics_f (int O, int D, const 
std::vector<float> &TABLE, trellis_metric_type_t TYPE);
 
 class trellis_metrics_f : public gr_block
 {
 private:
-  trellis_metrics_f (const int O, const int D, const std::vector<float> 
&TABLE, trellis_metric_type_t TYPE);
+  trellis_metrics_f (int O, int D, const std::vector<float> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.cc      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -32,14 +32,14 @@
 
 
 trellis_metrics_i_sptr
-trellis_make_metrics_i (const int O, const int D,  const std::vector<int> 
&TABLE, trellis_metric_type_t TYPE)
+trellis_make_metrics_i (int O, int D,  const std::vector<int> &TABLE, 
trellis_metric_type_t TYPE)
 {
   return trellis_metrics_i_sptr (new trellis_metrics_i (O,D,TABLE,TYPE));
 }
 
 
 
-trellis_metrics_i::trellis_metrics_i (const int O, const int D,  const 
std::vector<int> &TABLE, trellis_metric_type_t TYPE)
+trellis_metrics_i::trellis_metrics_i (int O, int D,  const std::vector<int> 
&TABLE, trellis_metric_type_t TYPE)
   : gr_block ("metrics_i",
              gr_make_io_signature (1, -1, sizeof (int)),
              gr_make_io_signature (1, -1, sizeof (float))),

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.h       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_metrics_i;
 typedef boost::shared_ptr<trellis_metrics_i> trellis_metrics_i_sptr;
 
-trellis_metrics_i_sptr trellis_make_metrics_i (const int O, const int D,  
const std::vector<int> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_i_sptr trellis_make_metrics_i (int O, int D,  const 
std::vector<int> &TABLE, trellis_metric_type_t TYPE);
 
 /*!
  * \brief Evaluate metrics for use by the Viterbi algorithm.
@@ -45,8 +45,8 @@
   trellis_metric_type_t d_TYPE;
   std::vector<int> d_TABLE;
 
-  friend trellis_metrics_i_sptr trellis_make_metrics_i (const int O, const int 
D,  const std::vector<int> &TABLE, trellis_metric_type_t TYPE);
-  trellis_metrics_i (const int O, const int D,  const std::vector<int> &TABLE, 
trellis_metric_type_t TYPE);
+  friend trellis_metrics_i_sptr trellis_make_metrics_i (int O, int D,  const 
std::vector<int> &TABLE, trellis_metric_type_t TYPE);
+  trellis_metrics_i (int O, int D,  const std::vector<int> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.i       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_i.i       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,metrics_i);
 
-trellis_metrics_i_sptr trellis_make_metrics_i (const int O, const int D, const 
std::vector<int> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_i_sptr trellis_make_metrics_i (int O, int D, const 
std::vector<int> &TABLE, trellis_metric_type_t TYPE);
 
 class trellis_metrics_i : public gr_block
 {
 private:
-  trellis_metrics_i (const int O, const int D, const std::vector<int> &TABLE, 
trellis_metric_type_t TYPE);
+  trellis_metrics_i (int O, int D, const std::vector<int> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.cc      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -32,14 +32,14 @@
 
 
 trellis_metrics_s_sptr
-trellis_make_metrics_s (const int O, const int D,  const std::vector<short> 
&TABLE, trellis_metric_type_t TYPE)
+trellis_make_metrics_s (int O, int D,  const std::vector<short> &TABLE, 
trellis_metric_type_t TYPE)
 {
   return trellis_metrics_s_sptr (new trellis_metrics_s (O,D,TABLE,TYPE));
 }
 
 
 
-trellis_metrics_s::trellis_metrics_s (const int O, const int D,  const 
std::vector<short> &TABLE, trellis_metric_type_t TYPE)
+trellis_metrics_s::trellis_metrics_s (int O, int D,  const std::vector<short> 
&TABLE, trellis_metric_type_t TYPE)
   : gr_block ("metrics_s",
              gr_make_io_signature (1, -1, sizeof (short)),
              gr_make_io_signature (1, -1, sizeof (float))),

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.h       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -31,7 +31,7 @@
 class trellis_metrics_s;
 typedef boost::shared_ptr<trellis_metrics_s> trellis_metrics_s_sptr;
 
-trellis_metrics_s_sptr trellis_make_metrics_s (const int O, const int D,  
const std::vector<short> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_s_sptr trellis_make_metrics_s (int O, int D,  const 
std::vector<short> &TABLE, trellis_metric_type_t TYPE);
 
 /*!
  * \brief Evaluate metrics for use by the Viterbi algorithm.
@@ -45,8 +45,8 @@
   trellis_metric_type_t d_TYPE;
   std::vector<short> d_TABLE;
 
-  friend trellis_metrics_s_sptr trellis_make_metrics_s (const int O, const int 
D,  const std::vector<short> &TABLE, trellis_metric_type_t TYPE);
-  trellis_metrics_s (const int O, const int D,  const std::vector<short> 
&TABLE, trellis_metric_type_t TYPE);
+  friend trellis_metrics_s_sptr trellis_make_metrics_s (int O, int D,  const 
std::vector<short> &TABLE, trellis_metric_type_t TYPE);
+  trellis_metrics_s (int O, int D,  const std::vector<short> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.i       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_metrics_s.i       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -24,12 +24,12 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,metrics_s);
 
-trellis_metrics_s_sptr trellis_make_metrics_s (const int O, const int D, const 
std::vector<short> &TABLE, trellis_metric_type_t TYPE);
+trellis_metrics_s_sptr trellis_make_metrics_s (int O, int D, const 
std::vector<short> &TABLE, trellis_metric_type_t TYPE);
 
 class trellis_metrics_s : public gr_block
 {
 private:
-  trellis_metrics_s (const int O, const int D, const std::vector<short> 
&TABLE, trellis_metric_type_t TYPE);
+  trellis_metrics_s (int O, int D, const std::vector<short> &TABLE, 
trellis_metric_type_t TYPE);
 
 public:
   int O () const { return d_O; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.cc    2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.cc    2006-08-16 
20:07:36 UTC (rev 3322)
@@ -29,20 +29,21 @@
 #include <iostream>
 
 trellis_permutation_sptr 
-trellis_make_permutation (const int K, const std::vector<int> &TABLE, const 
size_t NBYTES)
+trellis_make_permutation (int K, const std::vector<int> &TABLE, int 
SYMS_PER_BLOCK, size_t NBYTES_INOUT)
 {
-  return trellis_permutation_sptr (new trellis_permutation (K,TABLE,NBYTES));
+  return trellis_permutation_sptr (new trellis_permutation 
(K,TABLE,SYMS_PER_BLOCK,NBYTES_INOUT));
 }
 
-trellis_permutation::trellis_permutation (const int K, const std::vector<int> 
&TABLE, const size_t NBYTES)
+trellis_permutation::trellis_permutation (int K, const std::vector<int> 
&TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT)
   : gr_sync_block ("permutation",
-                  gr_make_io_signature (1, -1, NBYTES),
-                  gr_make_io_signature (1, -1, NBYTES)),
+                  gr_make_io_signature (1, -1, NBYTES_INOUT),
+                  gr_make_io_signature (1, -1, NBYTES_INOUT)),
     d_K (K),
     d_TABLE (TABLE),
-    d_NBYTES (NBYTES)
+    d_SYMS_PER_BLOCK (SYMS_PER_BLOCK),
+    d_NBYTES_INOUT (NBYTES_INOUT)
 {
-    set_output_multiple (d_K);
+    set_output_multiple (d_K*SYMS_PER_BLOCK);
     //std::cout << d_K << "\n";
 }
 
@@ -56,16 +57,23 @@
   int nstreams = input_items.size();
   assert (input_items.size() == output_items.size());
   assert (noutput_items % d_K ==0);
-  //std::cout << noutput_items << "\n";
 
   for (int m=0;m<nstreams;m++) {
     const char *in = (const char *) input_items[m];
     char *out = (char *) output_items[m];
 
     // per stream processing
-    for (unsigned int i = 0; i < noutput_items; i++){
-      //std::cout << i << " " << i*d_NBYTES << " " << 
(d_K*(i/d_K)+d_TABLE[i%d_K])*d_NBYTES  << "\n";
-      memcpy(&(out[i*d_NBYTES]), &(in[(d_K*(i/d_K)+d_TABLE[i%d_K])*d_NBYTES]), 
d_NBYTES);
+    for (int i = 0; i < noutput_items/d_SYMS_PER_BLOCK; i++){
+      // Index i refers to blocks.
+      // Begining of packet (in blocks)
+      int i0 = d_K*(i/d_K); 
+      // position of block within packet (in blocks)
+      int j0 = i%d_K;
+      // new position of block within packet (in blocks)
+      int k0 = d_TABLE[j0];
+      memcpy(&(out[i*d_SYMS_PER_BLOCK*d_NBYTES_INOUT]), 
+             &(in[(i0+k0)*d_SYMS_PER_BLOCK*d_NBYTES_INOUT]), 
+             d_NBYTES_INOUT*d_SYMS_PER_BLOCK);
     }
     // end per stream processing
   }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.h     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.h     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -30,7 +30,7 @@
 class trellis_permutation;
 typedef boost::shared_ptr<trellis_permutation> trellis_permutation_sptr;
 
-trellis_permutation_sptr trellis_make_permutation (const int K, const 
std::vector<int> &TABLE, const size_t NBYTES);
+trellis_permutation_sptr trellis_make_permutation (int K, const 
std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT);
 
 /*!
  * \brief Permutation.
@@ -41,16 +41,18 @@
 class trellis_permutation : public gr_sync_block
 {
 private:
-  friend trellis_permutation_sptr trellis_make_permutation (const int K, const 
std::vector<int> &TABLE, const size_t NBYTES);
+  friend trellis_permutation_sptr trellis_make_permutation (int K, const 
std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT);
   int d_K;
   std::vector<int> d_TABLE;
-  size_t d_NBYTES;
-  trellis_permutation (const int K, const std::vector<int> &TABLE, const 
size_t NBYTES); 
+  int d_SYMS_PER_BLOCK;
+  size_t d_NBYTES_INOUT;
+  trellis_permutation (int K, const std::vector<int> &TABLE, int 
SYMS_PER_BLOCK, size_t NBYTES); 
 
 public:
   int K () const { return d_K; }
   const std::vector<int> & TABLE () const { return d_TABLE; }
-  size_t NBYTES () const { return d_NBYTES; }
+  int SYMS_PER_BLOCK () const { return d_SYMS_PER_BLOCK; }
+  size_t NBYTES_INOUT () const { return d_NBYTES_INOUT; }
 
   int work (int noutput_items,
            gr_vector_const_void_star &input_items,

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.i     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_permutation.i     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -22,18 +22,20 @@
 
 GR_SWIG_BLOCK_MAGIC(trellis,permutation);
 
-trellis_permutation_sptr trellis_make_permutation (const int K, const 
std::vector<int> &TABLE, const size_t NBYTES);
+trellis_permutation_sptr trellis_make_permutation (int K, const 
std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT);
 
 class trellis_permutation : public gr_sync_block
 {
 private:
   int d_K;
   std::vector<int> d_TABLE;
-  size_t d_NBYTES;
-  trellis_permutation (const int K, const std::vector<int> &TABLE, const 
size_t NBYTES); 
+  int d_SYMS_PER_BLOCK;
+  size_t d_NBYTES_INOUT;
+  trellis_permutation (int K, const std::vector<int> &TABLE, int 
SYMS_PER_BLOCK, size_t NBYTES_INOUT); 
 
 public:
   int K () const { return d_K; }
   const std::vector<int> & TABLE () const { return d_TABLE; }
-  size_t NBYTES () const { return d_NBYTES; }
+  int SYMS_PER_BLOCK () const { return d_SYMS_PER_BLOCK; }
+  size_t NBYTES_INOUT () const { return d_NBYTES_INOUT; }
 };

Copied: gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.cc (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gr-trellis/src/lib/trellis_siso_f.cc)
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.cc                         
(rev 0)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.cc 2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -0,0 +1,323 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <trellis_siso_f.h>
+#include <gr_io_signature.h>
+#include <stdexcept>
+#include <assert.h>
+#include <iostream>
+  
+static const float INF = 1.0e9;
+
+trellis_siso_f_sptr 
+trellis_make_siso_f (
+    const fsm &FSM,
+    int K,
+    int S0,
+    int SK,
+    bool POSTI,
+    bool POSTO,
+    trellis_siso_type_t SISO_TYPE)
+{
+  return trellis_siso_f_sptr (new trellis_siso_f 
(FSM,K,S0,SK,POSTI,POSTO,SISO_TYPE));
+}
+
+trellis_siso_f::trellis_siso_f (
+    const fsm &FSM,
+    int K,
+    int S0,
+    int SK,
+    bool POSTI,
+    bool POSTO,
+    trellis_siso_type_t SISO_TYPE)
+  : gr_block ("siso_f",
+                         gr_make_io_signature (1, -1, sizeof (float)),
+                         gr_make_io_signature (1, -1, sizeof (float))),  
+  d_FSM (FSM),
+  d_K (K),
+  d_S0 (S0),
+  d_SK (SK),
+  d_POSTI (POSTI),
+  d_POSTO (POSTO),
+  d_SISO_TYPE (SISO_TYPE),
+  d_alpha(FSM.S()*(K+1)),
+  d_beta(FSM.S()*(K+1))
+{
+    int multiple;
+    if (d_POSTI && d_POSTO) 
+        multiple = d_FSM.I()+d_FSM.O();
+    else if(d_POSTI)
+        multiple = d_FSM.I();
+    else if(d_POSTO)
+        multiple = d_FSM.O();
+    else
+        throw std::runtime_error ("Not both POSTI and POSTO can be false.");
+    //printf("constructor: Multiple = %d\n",multiple);
+    set_output_multiple (d_K*multiple);
+    //what is the meaning of relative rate for this?
+    // it was suggested to use the one furthest from 1.0
+    // let's do it.
+    set_relative_rate ( multiple / ((double) d_FSM.I()) );
+}
+
+
+void
+trellis_siso_f::forecast (int noutput_items, gr_vector_int 
&ninput_items_required)
+{
+  int multiple;
+  if (d_POSTI && d_POSTO)
+      multiple = d_FSM.I()+d_FSM.O();
+  else if(d_POSTI)
+      multiple = d_FSM.I();
+  else if(d_POSTO)
+      multiple = d_FSM.O();
+  else
+      throw std::runtime_error ("Not both POSTI and POSTO can be false.");
+  //printf("forecast: Multiple = %d\n",multiple); 
+  assert (noutput_items % (d_K*multiple) == 0);
+  int input_required1 =  d_FSM.I() * (noutput_items/multiple) ;
+  int input_required2 =  d_FSM.O() * (noutput_items/multiple) ;
+  //printf("forecast: Output requirements:  %d\n",noutput_items);
+  //printf("forecast: Input requirements:  %d   
%d\n",input_required1,input_required2);
+  unsigned ninputs = ninput_items_required.size();
+  assert(ninputs % 2 == 0);
+  for (unsigned int i = 0; i < ninputs/2; i++) {
+    ninput_items_required[2*i] = input_required1;
+    ninput_items_required[2*i+1] = input_required2;
+  }
+}
+
+inline float min(float a, float b)
+{
+  return a <= b ? a : b;
+}
+
+inline float min_star(float a, float b)
+{
+  return (a <= b ? a : b)-log(1+exp(a <= b ? a-b : b-a));
+}
+
+void siso_algorithm(int I, int S, int O, 
+             const std::vector<int> &NS,
+             const std::vector<int> &OS,
+             const std::vector<int> &PS,
+             const std::vector<int> &PI,
+             int K,
+             int S0,int SK,
+             bool POSTI, bool POSTO,
+             float (*p2mymin)(float,float),
+             const float *priori, const float *prioro, float *post,
+             std::vector<float> &alpha,
+             std::vector<float> &beta) 
+{
+  float norm,mm,minm;
+
+
+  if(S0<0) { // initial state not specified
+      for(int i=0;i<S;i++) alpha[0*S+i]=0;
+  }
+  else {
+      for(int i=0;i<S;i++) alpha[0*S+i]=INF;
+      alpha[0*S+S0]=0.0;
+  }
+
+  for(int k=0;k<K;k++) { // forward recursion
+      norm=INF;
+      for(int j=0;j<S;j++) {
+          minm=INF;
+          for(int i=0;i<I;i++) {
+              int i0 = j*I+i;
+              
mm=alpha[k*S+PS[i0]]+priori[k*I+PI[i0]]+prioro[k*O+OS[PS[i0]*I+PI[i0]]];
+              minm=(*p2mymin)(minm,mm);
+          }
+          alpha[(k+1)*S+j]=minm;
+          if(minm<norm) norm=minm;
+      }
+      for(int j=0;j<S;j++) 
+          alpha[(k+1)*S+j]-=norm; // normalize total metrics so they do not 
explode
+  }
+
+  if(SK<0) { // final state not specified
+      for(int i=0;i<S;i++) beta[K*S+i]=0;
+  }
+  else {
+      for(int i=0;i<S;i++) beta[K*S+i]=INF;
+      beta[K*S+SK]=0.0;
+  }
+
+  for(int k=K-1;k>=0;k--) { // backward recursion
+      norm=INF;
+      for(int j=0;j<S;j++) { 
+          minm=INF;
+          for(int i=0;i<I;i++) {
+              int i0 = j*I+i;
+              mm=beta[(k+1)*S+NS[i0]]+priori[k*I+i]+prioro[k*O+OS[i0]];
+              minm=(*p2mymin)(minm,mm);
+          }
+          beta[k*S+j]=minm;
+          if(minm<norm) norm=minm;
+      }
+      for(int j=0;j<S;j++)
+          beta[k*S+j]-=norm; // normalize total metrics so they do not explode
+  }
+
+
+if (POSTI && POSTO)
+{
+  for(int k=0;k<K;k++) { // input combining
+      norm=INF;
+      for(int i=0;i<I;i++) {
+          minm=INF;
+          for(int j=0;j<S;j++) {
+              mm=alpha[k*S+j]+prioro[k*O+OS[j*I+i]]+beta[(k+1)*S+NS[j*I+i]];
+              minm=(*p2mymin)(minm,mm);
+          }
+          post[k*(I+O)+i]=minm;
+          if(minm<norm) norm=minm;
+      }
+      for(int i=0;i<I;i++)
+          post[k*(I+O)+i]-=norm; // normalize metrics
+  }
+
+
+  for(int k=0;k<K;k++) { // output combining
+      norm=INF;
+      for(int n=0;n<O;n++) {
+          minm=INF;
+          for(int j=0;j<S;j++) {
+              for(int i=0;i<I;i++) {
+                  mm= (n==OS[j*I+i] ? 
alpha[k*S+j]+priori[k*I+i]+beta[(k+1)*S+NS[j*I+i]] : INF);
+                  minm=(*p2mymin)(minm,mm);
+              }
+          }
+          post[k*(I+O)+I+n]=minm;
+          if(minm<norm) norm=minm;
+      }
+      for(int n=0;n<O;n++)
+          post[k*(I+O)+I+n]-=norm; // normalize metrics
+  }
+} 
+else if(POSTI) 
+{
+  for(int k=0;k<K;k++) { // input combining
+      norm=INF;
+      for(int i=0;i<I;i++) {
+          minm=INF;
+          for(int j=0;j<S;j++) {
+              mm=alpha[k*S+j]+prioro[k*O+OS[j*I+i]]+beta[(k+1)*S+NS[j*I+i]];
+              minm=(*p2mymin)(minm,mm);
+          }
+          post[k*I+i]=minm;
+          if(minm<norm) norm=minm;
+      }
+      for(int i=0;i<I;i++)
+          post[k*I+i]-=norm; // normalize metrics
+  }
+}
+else if(POSTO)
+{
+  for(int k=0;k<K;k++) { // output combining
+      norm=INF;
+      for(int n=0;n<O;n++) {
+          minm=INF;
+          for(int j=0;j<S;j++) {
+              for(int i=0;i<I;i++) {
+                  mm= (n==OS[j*I+i] ? 
alpha[k*S+j]+priori[k*I+i]+beta[(k+1)*S+NS[j*I+i]] : INF);
+                  minm=(*p2mymin)(minm,mm);
+              }
+          }
+          post[k*O+n]=minm;
+          if(minm<norm) norm=minm;
+      }
+      for(int n=0;n<O;n++)
+          post[k*O+n]-=norm; // normalize metrics
+  }
+}
+else
+    throw std::runtime_error ("Not both POSTI and POSTO can be false.");
+
+}
+
+
+
+
+
+
+int
+trellis_siso_f::general_work (int noutput_items,
+                        gr_vector_int &ninput_items,
+                        gr_vector_const_void_star &input_items,
+                        gr_vector_void_star &output_items)
+{
+  assert (input_items.size() == 2*output_items.size());
+  int nstreams = output_items.size();
+  //printf("general_work:Streams:  %d\n",nstreams); 
+  int multiple;
+  if (d_POSTI && d_POSTO)
+      multiple = d_FSM.I()+d_FSM.O();
+  else if(d_POSTI)
+      multiple = d_FSM.I();
+  else if(d_POSTO)
+      multiple = d_FSM.O();
+  else
+      throw std::runtime_error ("Not both POSTI and POSTO can be false.");
+
+  assert (noutput_items % (d_K*multiple) == 0);
+  int nblocks = noutput_items / (d_K*multiple);
+  //printf("general_work:Blocks:  %d\n",nblocks); 
+  //for(int i=0;i<ninput_items.size();i++)
+      //printf("general_work:Input items available:  %d\n",ninput_items[i]);
+
+  float (*p2min)(float, float) = NULL; 
+  if(d_SISO_TYPE == TRELLIS_MIN_SUM)
+    p2min = &min;
+  else if(d_SISO_TYPE == TRELLIS_SUM_PRODUCT)
+    p2min = &min_star;
+
+
+  for (int m=0;m<nstreams;m++) {
+    const float *in1 = (const float *) input_items[2*m];
+    const float *in2 = (const float *) input_items[2*m+1];
+    float *out = (float *) output_items[m];
+    for (int n=0;n<nblocks;n++) {
+      siso_algorithm(d_FSM.I(),d_FSM.S(),d_FSM.O(),
+        d_FSM.NS(),d_FSM.OS(),d_FSM.PS(),d_FSM.PI(),
+        d_K,d_S0,d_SK,
+        d_POSTI,d_POSTO,
+        p2min,
+        &(in1[n*d_K*d_FSM.I()]),&(in2[n*d_K*d_FSM.O()]),
+        &(out[n*d_K*multiple]),
+        d_alpha,d_beta);
+    }
+  }
+
+  for (unsigned int i = 0; i < input_items.size()/2; i++) {
+    consume(2*i,d_FSM.I() * noutput_items / multiple );
+    consume(2*i+1,d_FSM.O() * noutput_items / multiple );
+  }
+
+  return noutput_items;
+}

Copied: gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.h (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gr-trellis/src/lib/trellis_siso_f.h)
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.h                          
(rev 0)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.h  2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -0,0 +1,92 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ * 
+ * This file is part of GNU Radio
+ * 
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ * 
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef INCLUDED_TRELLIS_SISO_F_H
+#define INCLUDED_TRELLIS_SISO_F_H
+
+#include "fsm.h"
+#include "trellis_siso_type.h"
+#include <gr_block.h>
+
+class trellis_siso_f;
+typedef boost::shared_ptr<trellis_siso_f> trellis_siso_f_sptr;
+
+trellis_siso_f_sptr trellis_make_siso_f (
+    const fsm &FSM, 
+    int K,
+    int S0,
+    int SK,
+    bool POSTI,
+    bool POSTO,
+    trellis_siso_type_t d_SISO_TYPE);
+
+
+
+class trellis_siso_f : public gr_block
+{
+  fsm d_FSM;
+  int d_K;
+  int d_S0;
+  int d_SK;
+  bool d_POSTI;
+  bool d_POSTO;
+  trellis_siso_type_t d_SISO_TYPE;
+  std::vector<float> d_alpha;
+  std::vector<float> d_beta;
+
+  friend trellis_siso_f_sptr trellis_make_siso_f (
+    const fsm &FSM,
+    int K,
+    int S0,
+    int SK,
+    bool POSTI,
+    bool POSTO,
+    trellis_siso_type_t d_SISO_TYPE);
+
+
+  trellis_siso_f (
+    const fsm &FSM,
+    int K,
+    int S0,
+    int SK,
+    bool POSTI,
+    bool POSTO,
+    trellis_siso_type_t d_SISO_TYPE);
+
+
+public:
+  fsm FSM () const { return d_FSM; }
+  int K () const { return d_K; }
+  int S0 () const { return d_S0; }
+  int SK () const { return d_SK; }
+  bool POSTI () const { return d_POSTI; }
+  bool POSTO () const { return d_POSTO; }
+  trellis_siso_type_t SISO_TYPE () const { return d_SISO_TYPE; }
+  void forecast (int noutput_items,
+                 gr_vector_int &ninput_items_required);
+  int general_work (int noutput_items,
+                    gr_vector_int &ninput_items,
+                    gr_vector_const_void_star &input_items,
+                    gr_vector_void_star &output_items);
+};
+
+#endif

Copied: gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.i (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gr-trellis/src/lib/trellis_siso_f.i)
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.i                          
(rev 0)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.i  2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -0,0 +1,55 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+GR_SWIG_BLOCK_MAGIC(trellis,siso_f);
+
+trellis_siso_f_sptr trellis_make_siso_f (
+    const fsm &FSM,
+    int K,
+    int S0,
+    int SK,
+    bool POSTI,
+    bool POSTO,
+    trellis_siso_type_t SISO_TYPE);
+
+
+class trellis_siso_f : public gr_block
+{
+private:
+  trellis_siso_f (
+    const fsm &FSM,
+    int K,
+    int S0,
+    int SK,
+    bool POSTI,
+    bool POSTO,
+    trellis_siso_type_t SISO_TYPE);
+
+public:
+    fsm FSM () const { return d_FSM; }
+    int K () const { return d_K; }
+    int S0 () const { return d_S0; }
+    int SK () const { return d_SK; }
+    bool POSTI () const { return d_POSTI; }
+    bool POSTO () const { return d_POSTO; }
+    trellis_siso_type_t SISO_TYPE () const { return d_SISO_TYPE; }
+};

Copied: gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.lo (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gr-trellis/src/lib/trellis_siso_f.lo)
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.lo                         
(rev 0)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_siso_f.lo 2006-08-16 20:07:36 UTC 
(rev 3322)
@@ -0,0 +1,12 @@
+# trellis_siso_f.lo - a libtool object file
+# Generated by ltmain.sh - GNU libtool 1.5.6 (1.1220.2.95 2004/04/11 05:50:42)
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# Name of the PIC object.
+pic_object='.libs/trellis_siso_f.o'
+
+# Name of the non-PIC object.
+non_pic_object=none
+

Copied: gnuradio/trunk/gr-trellis/src/lib/trellis_siso_type.h (from rev 3315, 
gnuradio/branches/developers/anastas/wip/gr-trellis/src/lib/trellis_siso_type.h)
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_siso_type.h                       
        (rev 0)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_siso_type.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -0,0 +1,31 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING.  If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifndef INCLUDED_TRELLIS_SISO_TYPE_H
+#define INCLUDED_TRELLIS_SISO_TYPE_H
+
+typedef enum {
+  TRELLIS_MIN_SUM = 200, TRELLIS_SUM_PRODUCT
+} trellis_siso_type_t;
+
+#endif
+

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.cc.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.cc.t    2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.cc.t    2006-08-16 
20:07:36 UTC (rev 3322)
@@ -34,18 +34,18 @@
 @SPTR_NAME@ 
 address@hidden@ (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
 {
   return @SPTR_NAME@ (new @NAME@ (FSM,K,S0,SK));
 }
 
 @NAME@::@NAME@ (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
   : gr_block ("@BASE_NAME@",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (@TYPE@))),  
@@ -74,13 +74,13 @@
 
 
 
-void viterbi_algorithm(const int I, const int S, const int O, 
+void viterbi_algorithm(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int K,
-             const int S0,const int SK,
+             int K,
+             int S0,int SK,
              const float *in, @TYPE@ *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.h.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.h.t     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.h.t     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -33,9 +33,9 @@
 
 @SPTR_NAME@ address@hidden@ (
     const fsm &FSM, 
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 
@@ -49,16 +49,16 @@
 
   friend @SPTR_NAME@ address@hidden@ (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
   @NAME@ (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.i.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.i.t     2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_X.i.t     2006-08-16 
20:07:36 UTC (rev 3322)
@@ -26,9 +26,9 @@
 
 @SPTR_NAME@ address@hidden@ (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 class @NAME@ : public gr_block
@@ -36,9 +36,9 @@
 private:
   @NAME@ (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 public:
     fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.cc      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.cc      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -34,18 +34,18 @@
 trellis_viterbi_b_sptr 
 trellis_make_viterbi_b (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
 {
   return trellis_viterbi_b_sptr (new trellis_viterbi_b (FSM,K,S0,SK));
 }
 
 trellis_viterbi_b::trellis_viterbi_b (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
   : gr_block ("viterbi_b",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (unsigned 
char))),  
@@ -74,13 +74,13 @@
 
 
 
-void viterbi_algorithm(const int I, const int S, const int O, 
+void viterbi_algorithm(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int K,
-             const int S0,const int SK,
+             int K,
+             int S0,int SK,
              const float *in, unsigned char *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.h       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -33,9 +33,9 @@
 
 trellis_viterbi_b_sptr trellis_make_viterbi_b (
     const fsm &FSM, 
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 
@@ -49,16 +49,16 @@
 
   friend trellis_viterbi_b_sptr trellis_make_viterbi_b (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
   trellis_viterbi_b (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.i       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_b.i       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -26,9 +26,9 @@
 
 trellis_viterbi_b_sptr trellis_make_viterbi_b (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 class trellis_viterbi_b : public gr_block
@@ -36,9 +36,9 @@
 private:
   trellis_viterbi_b (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 public:
     fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t   
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t   
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,24 +34,24 @@
 @SPTR_NAME@ 
 address@hidden@ (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
 {
   return @SPTR_NAME@ (new @NAME@ (FSM,D,TABLE,K,S0,SK,TYPE));
 }
 
 @NAME@::@NAME@ (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
   : gr_block ("@BASE_NAME@",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (@TYPE@))),  
@@ -83,16 +83,16 @@
 
 
 
-void viterbi_algorithm_combined(const int I, const int S, const int O, 
+void viterbi_algorithm_combined(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int D,
+             int D,
              const std::vector<float> &TABLE,
-             const int K,
-             const int S0,const int SK,
-             const trellis_metric_type_t TYPE,
+             int K,
+             int S0,int SK,
+             trellis_metric_type_t TYPE,
              const float *in, @TYPE@ *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t    
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t    
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,12 +34,12 @@
 
 @SPTR_NAME@ address@hidden@ (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class @NAME@ : public gr_block
@@ -55,22 +55,22 @@
 
   friend @SPTR_NAME@ address@hidden@ (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
   @NAME@ (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t    
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t    
2006-08-16 20:07:36 UTC (rev 3322)
@@ -26,12 +26,12 @@
 
 @SPTR_NAME@ address@hidden@ (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class @NAME@ : public gr_block
@@ -39,12 +39,12 @@
 private:
   @NAME@ (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 public:
     fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc     
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.cc     
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,24 +34,24 @@
 trellis_viterbi_combined_b_sptr 
 trellis_make_viterbi_combined_b (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
 {
   return trellis_viterbi_combined_b_sptr (new trellis_viterbi_combined_b 
(FSM,D,TABLE,K,S0,SK,TYPE));
 }
 
 trellis_viterbi_combined_b::trellis_viterbi_combined_b (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
   : gr_block ("viterbi_combined_b",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (unsigned 
char))),  
@@ -83,16 +83,16 @@
 
 
 
-void viterbi_algorithm_combined(const int I, const int S, const int O, 
+void viterbi_algorithm_combined(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int D,
+             int D,
              const std::vector<float> &TABLE,
-             const int K,
-             const int S0,const int SK,
-             const trellis_metric_type_t TYPE,
+             int K,
+             int S0,int SK,
+             trellis_metric_type_t TYPE,
              const float *in, unsigned char *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.h      
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.h      
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,12 +34,12 @@
 
 trellis_viterbi_combined_b_sptr trellis_make_viterbi_combined_b (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class trellis_viterbi_combined_b : public gr_block
@@ -55,22 +55,22 @@
 
   friend trellis_viterbi_combined_b_sptr trellis_make_viterbi_combined_b (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
   trellis_viterbi_combined_b (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.i      
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_b.i      
2006-08-16 20:07:36 UTC (rev 3322)
@@ -26,12 +26,12 @@
 
 trellis_viterbi_combined_b_sptr trellis_make_viterbi_combined_b (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class trellis_viterbi_combined_b : public gr_block
@@ -39,12 +39,12 @@
 private:
   trellis_viterbi_combined_b (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 public:
     fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc     
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.cc     
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,24 +34,24 @@
 trellis_viterbi_combined_i_sptr 
 trellis_make_viterbi_combined_i (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
 {
   return trellis_viterbi_combined_i_sptr (new trellis_viterbi_combined_i 
(FSM,D,TABLE,K,S0,SK,TYPE));
 }
 
 trellis_viterbi_combined_i::trellis_viterbi_combined_i (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
   : gr_block ("viterbi_combined_i",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (int))),  
@@ -83,16 +83,16 @@
 
 
 
-void viterbi_algorithm_combined(const int I, const int S, const int O, 
+void viterbi_algorithm_combined(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int D,
+             int D,
              const std::vector<float> &TABLE,
-             const int K,
-             const int S0,const int SK,
-             const trellis_metric_type_t TYPE,
+             int K,
+             int S0,int SK,
+             trellis_metric_type_t TYPE,
              const float *in, int *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.h      
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.h      
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,12 +34,12 @@
 
 trellis_viterbi_combined_i_sptr trellis_make_viterbi_combined_i (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class trellis_viterbi_combined_i : public gr_block
@@ -55,22 +55,22 @@
 
   friend trellis_viterbi_combined_i_sptr trellis_make_viterbi_combined_i (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
   trellis_viterbi_combined_i (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.i      
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_i.i      
2006-08-16 20:07:36 UTC (rev 3322)
@@ -26,12 +26,12 @@
 
 trellis_viterbi_combined_i_sptr trellis_make_viterbi_combined_i (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class trellis_viterbi_combined_i : public gr_block
@@ -39,12 +39,12 @@
 private:
   trellis_viterbi_combined_i (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 public:
     fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc     
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.cc     
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,24 +34,24 @@
 trellis_viterbi_combined_s_sptr 
 trellis_make_viterbi_combined_s (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
 {
   return trellis_viterbi_combined_s_sptr (new trellis_viterbi_combined_s 
(FSM,D,TABLE,K,S0,SK,TYPE));
 }
 
 trellis_viterbi_combined_s::trellis_viterbi_combined_s (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE)
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE)
   : gr_block ("viterbi_combined_s",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (short))),  
@@ -83,16 +83,16 @@
 
 
 
-void viterbi_algorithm_combined(const int I, const int S, const int O, 
+void viterbi_algorithm_combined(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int D,
+             int D,
              const std::vector<float> &TABLE,
-             const int K,
-             const int S0,const int SK,
-             const trellis_metric_type_t TYPE,
+             int K,
+             int S0,int SK,
+             trellis_metric_type_t TYPE,
              const float *in, short *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.h      
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.h      
2006-08-16 20:07:36 UTC (rev 3322)
@@ -34,12 +34,12 @@
 
 trellis_viterbi_combined_s_sptr trellis_make_viterbi_combined_s (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class trellis_viterbi_combined_s : public gr_block
@@ -55,22 +55,22 @@
 
   friend trellis_viterbi_combined_s_sptr trellis_make_viterbi_combined_s (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
   trellis_viterbi_combined_s (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.i      
2006-08-16 19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_combined_s.i      
2006-08-16 20:07:36 UTC (rev 3322)
@@ -26,12 +26,12 @@
 
 trellis_viterbi_combined_s_sptr trellis_make_viterbi_combined_s (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 
 class trellis_viterbi_combined_s : public gr_block
@@ -39,12 +39,12 @@
 private:
   trellis_viterbi_combined_s (
     const fsm &FSM,
-    const int D,
+    int D,
     const std::vector<float> &TABLE,
-    const int K,
-    const int S0,
-    const int SK,
-    const trellis_metric_type_t TYPE);
+    int K,
+    int S0,
+    int SK,
+    trellis_metric_type_t TYPE);
 
 public:
     fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.cc      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.cc      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -34,18 +34,18 @@
 trellis_viterbi_i_sptr 
 trellis_make_viterbi_i (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
 {
   return trellis_viterbi_i_sptr (new trellis_viterbi_i (FSM,K,S0,SK));
 }
 
 trellis_viterbi_i::trellis_viterbi_i (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
   : gr_block ("viterbi_i",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (int))),  
@@ -74,13 +74,13 @@
 
 
 
-void viterbi_algorithm(const int I, const int S, const int O, 
+void viterbi_algorithm(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int K,
-             const int S0,const int SK,
+             int K,
+             int S0,int SK,
              const float *in, int *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.h       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -33,9 +33,9 @@
 
 trellis_viterbi_i_sptr trellis_make_viterbi_i (
     const fsm &FSM, 
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 
@@ -49,16 +49,16 @@
 
   friend trellis_viterbi_i_sptr trellis_make_viterbi_i (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
   trellis_viterbi_i (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.i       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_i.i       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -26,9 +26,9 @@
 
 trellis_viterbi_i_sptr trellis_make_viterbi_i (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 class trellis_viterbi_i : public gr_block
@@ -36,9 +36,9 @@
 private:
   trellis_viterbi_i (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 public:
     fsm FSM () const { return d_FSM; }

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.cc
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.cc      2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.cc      2006-08-16 
20:07:36 UTC (rev 3322)
@@ -34,18 +34,18 @@
 trellis_viterbi_s_sptr 
 trellis_make_viterbi_s (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
 {
   return trellis_viterbi_s_sptr (new trellis_viterbi_s (FSM,K,S0,SK));
 }
 
 trellis_viterbi_s::trellis_viterbi_s (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK)
+    int K,
+    int S0,
+    int SK)
   : gr_block ("viterbi_s",
                          gr_make_io_signature (1, -1, sizeof (float)),
                          gr_make_io_signature (1, -1, sizeof (short))),  
@@ -74,13 +74,13 @@
 
 
 
-void viterbi_algorithm(const int I, const int S, const int O, 
+void viterbi_algorithm(int I, int S, int O, 
              const std::vector<int> &NS,
              const std::vector<int> &OS,
              const std::vector<int> &PS,
              const std::vector<int> &PI,
-             const int K,
-             const int S0,const int SK,
+             int K,
+             int S0,int SK,
              const float *in, short *out,
              std::vector<int> &trace) 
 {

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.h
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.h       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.h       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -33,9 +33,9 @@
 
 trellis_viterbi_s_sptr trellis_make_viterbi_s (
     const fsm &FSM, 
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 
@@ -49,16 +49,16 @@
 
   friend trellis_viterbi_s_sptr trellis_make_viterbi_s (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
   trellis_viterbi_s (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 public:

Modified: gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.i
===================================================================
--- gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.i       2006-08-16 
19:03:51 UTC (rev 3321)
+++ gnuradio/trunk/gr-trellis/src/lib/trellis_viterbi_s.i       2006-08-16 
20:07:36 UTC (rev 3322)
@@ -26,9 +26,9 @@
 
 trellis_viterbi_s_sptr trellis_make_viterbi_s (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 
 class trellis_viterbi_s : public gr_block
@@ -36,9 +36,9 @@
 private:
   trellis_viterbi_s (
     const fsm &FSM,
-    const int K,
-    const int S0,
-    const int SK);
+    int K,
+    int S0,
+    int SK);
 
 public:
     fsm FSM () const { return d_FSM; }





reply via email to

[Prev in Thread] Current Thread [Next in Thread]