summaryrefslogtreecommitdiff
path: root/gr-trellis/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'gr-trellis/src/lib')
-rw-r--r--gr-trellis/src/lib/Makefile.am23
-rw-r--r--gr-trellis/src/lib/Makefile.gen18
-rw-r--r--gr-trellis/src/lib/core_algorithms.cc246
-rw-r--r--gr-trellis/src/lib/core_algorithms.h36
-rw-r--r--gr-trellis/src/lib/fsm.cc4
-rw-r--r--gr-trellis/src/lib/fsm.h8
-rw-r--r--gr-trellis/src/lib/generate_trellis.py6
-rw-r--r--gr-trellis/src/lib/trellis_constellation_metrics_cf.cc4
-rw-r--r--gr-trellis/src/lib/trellis_pccc_decoder_X.h.t2
-rw-r--r--gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.cc.t147
-rw-r--r--gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t124
-rw-r--r--gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.i.t73
-rw-r--r--gr-trellis/src/lib/trellis_permutation.cc18
-rw-r--r--gr-trellis/src/lib/trellis_permutation.h8
-rw-r--r--gr-trellis/src/lib/trellis_permutation.i8
-rw-r--r--gr-trellis/src/lib/trellis_sccc_decoder_X.h.t2
-rw-r--r--gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t2
17 files changed, 652 insertions, 77 deletions
diff --git a/gr-trellis/src/lib/Makefile.am b/gr-trellis/src/lib/Makefile.am
index f358cd523..e0b254756 100644
--- a/gr-trellis/src/lib/Makefile.am
+++ b/gr-trellis/src/lib/Makefile.am
@@ -42,12 +42,12 @@ core_generator = \
trellis_encoder_XX.cc.t \
trellis_encoder_XX.h.t \
trellis_encoder_XX.i.t \
- trellis_sccc_encoder_XX.cc.t \
- trellis_sccc_encoder_XX.h.t \
- trellis_sccc_encoder_XX.i.t \
- trellis_pccc_encoder_XX.cc.t \
- trellis_pccc_encoder_XX.h.t \
- trellis_pccc_encoder_XX.i.t \
+ trellis_sccc_encoder_XX.cc.t \
+ trellis_sccc_encoder_XX.h.t \
+ trellis_sccc_encoder_XX.i.t \
+ trellis_pccc_encoder_XX.cc.t \
+ trellis_pccc_encoder_XX.h.t \
+ trellis_pccc_encoder_XX.i.t \
trellis_metrics_X.cc.t \
trellis_metrics_X.h.t \
trellis_metrics_X.i.t \
@@ -55,14 +55,17 @@ core_generator = \
trellis_viterbi_combined_XX.h.t \
trellis_viterbi_combined_XX.i.t \
trellis_sccc_decoder_combined_XX.cc.t \
- trellis_sccc_decoder_combined_XX.h.t \
- trellis_sccc_decoder_combined_XX.i.t \
- trellis_sccc_decoder_X.cc.t \
+ trellis_sccc_decoder_combined_XX.h.t \
+ trellis_sccc_decoder_combined_XX.i.t \
+ trellis_sccc_decoder_X.cc.t \
trellis_sccc_decoder_X.h.t \
trellis_sccc_decoder_X.i.t \
- trellis_pccc_decoder_X.cc.t \
+ trellis_pccc_decoder_X.cc.t \
trellis_pccc_decoder_X.h.t \
trellis_pccc_decoder_X.i.t \
+ trellis_pccc_decoder_combined_XX.cc.t \
+ trellis_pccc_decoder_combined_XX.h.t \
+ trellis_pccc_decoder_combined_XX.i.t \
trellis_viterbi_X.cc.t \
trellis_viterbi_X.h.t \
trellis_viterbi_X.i.t
diff --git a/gr-trellis/src/lib/Makefile.gen b/gr-trellis/src/lib/Makefile.gen
index 534a7466e..b9b9afb1f 100644
--- a/gr-trellis/src/lib/Makefile.gen
+++ b/gr-trellis/src/lib/Makefile.gen
@@ -13,6 +13,12 @@ GENERATED_H = \
trellis_metrics_i.h \
trellis_metrics_s.h \
trellis_pccc_decoder_b.h \
+ trellis_pccc_decoder_combined_cb.h \
+ trellis_pccc_decoder_combined_ci.h \
+ trellis_pccc_decoder_combined_cs.h \
+ trellis_pccc_decoder_combined_fb.h \
+ trellis_pccc_decoder_combined_fi.h \
+ trellis_pccc_decoder_combined_fs.h \
trellis_pccc_decoder_i.h \
trellis_pccc_decoder_s.h \
trellis_pccc_encoder_bb.h \
@@ -64,6 +70,12 @@ GENERATED_I = \
trellis_metrics_i.i \
trellis_metrics_s.i \
trellis_pccc_decoder_b.i \
+ trellis_pccc_decoder_combined_cb.i \
+ trellis_pccc_decoder_combined_ci.i \
+ trellis_pccc_decoder_combined_cs.i \
+ trellis_pccc_decoder_combined_fb.i \
+ trellis_pccc_decoder_combined_fi.i \
+ trellis_pccc_decoder_combined_fs.i \
trellis_pccc_decoder_i.i \
trellis_pccc_decoder_s.i \
trellis_pccc_encoder_bb.i \
@@ -115,6 +127,12 @@ GENERATED_CC = \
trellis_metrics_i.cc \
trellis_metrics_s.cc \
trellis_pccc_decoder_b.cc \
+ trellis_pccc_decoder_combined_cb.cc \
+ trellis_pccc_decoder_combined_ci.cc \
+ trellis_pccc_decoder_combined_cs.cc \
+ trellis_pccc_decoder_combined_fb.cc \
+ trellis_pccc_decoder_combined_fi.cc \
+ trellis_pccc_decoder_combined_fs.cc \
trellis_pccc_decoder_i.cc \
trellis_pccc_decoder_s.cc \
trellis_pccc_encoder_bb.cc \
diff --git a/gr-trellis/src/lib/core_algorithms.cc b/gr-trellis/src/lib/core_algorithms.cc
index 91ac8fbdf..54193c818 100644
--- a/gr-trellis/src/lib/core_algorithms.cc
+++ b/gr-trellis/src/lib/core_algorithms.cc
@@ -784,7 +784,7 @@ template<class Ti, class To>
void sccc_decoder_combined(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<Ti> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -810,7 +810,7 @@ for(int k=0;k<blocklength;k++) {
iprioro[k*FSMi.O()] *= scaling;
}
-for(int rep=0;rep<repetitions;rep++) {
+for(int rep=0;rep<iterations;rep++) {
// run inner SISO
siso_algorithm(FSMi.I(),FSMi.S(),FSMi.O(),
FSMi.NS(), FSMi.OS(), FSMi.PS(), FSMi.PI(),
@@ -832,7 +832,7 @@ for(int rep=0;rep<repetitions;rep++) {
// run outer SISO
- if(rep<repetitions-1) { // do not produce posti
+ if(rep<iterations-1) { // do not produce posti
siso_algorithm(FSMo.I(),FSMo.S(),FSMo.O(),
FSMo.NS(), FSMo.OS(), FSMo.PS(), FSMo.PI(),
blocklength,
@@ -897,7 +897,7 @@ template
void sccc_decoder_combined<float,unsigned char>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<float> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -909,7 +909,7 @@ template
void sccc_decoder_combined<float,short>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<float> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -921,7 +921,7 @@ template
void sccc_decoder_combined<float,int>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<float> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -933,7 +933,7 @@ template
void sccc_decoder_combined<gr_complex,unsigned char>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<gr_complex> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -945,7 +945,7 @@ template
void sccc_decoder_combined<gr_complex,short>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<gr_complex> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -957,7 +957,7 @@ template
void sccc_decoder_combined<gr_complex,int>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<gr_complex> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -973,7 +973,7 @@ template<class T>
void sccc_decoder(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *iprioro, T *data
)
@@ -988,7 +988,7 @@ void sccc_decoder(
std::vector<float> oposti(blocklength*FSMo.I());
std::vector<float> oposto(blocklength*FSMo.O());
- for(int rep=0;rep<repetitions;rep++) {
+ for(int rep=0;rep<iterations;rep++) {
// run inner SISO
siso_algorithm(FSMi.I(),FSMi.S(),FSMi.O(),
FSMi.NS(), FSMi.OS(), FSMi.PS(), FSMi.PI(),
@@ -1010,7 +1010,7 @@ void sccc_decoder(
// run outer SISO
- if(rep<repetitions-1) { // do not produce posti
+ if(rep<iterations-1) { // do not produce posti
siso_algorithm(FSMo.I(),FSMo.S(),FSMo.O(),
FSMo.NS(), FSMo.OS(), FSMo.PS(), FSMo.PI(),
blocklength,
@@ -1050,7 +1050,7 @@ void sccc_decoder(
*/
}
- } // end repetitions
+ } // end iterations
// generate hard decisions
for(int k=0;k<blocklength;k++) {
@@ -1075,7 +1075,7 @@ template
void sccc_decoder<unsigned char>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *iprioro, unsigned char *data
);
@@ -1084,7 +1084,7 @@ template
void sccc_decoder<short>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *iprioro, short *data
);
@@ -1093,7 +1093,7 @@ template
void sccc_decoder<int>(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *iprioro, int *data
);
@@ -1105,7 +1105,7 @@ template<class T>
void pccc_decoder(
const fsm &FSM1, int ST10, int ST1K,
const fsm &FSM2, int ST20, int ST2K,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *cprioro, T *data
)
@@ -1140,7 +1140,7 @@ void pccc_decoder(
}
}
- for(int rep=0;rep<repetitions;rep++) {
+ for(int rep=0;rep<iterations;rep++) {
// run SISO 1
siso_algorithm(FSM1.I(),FSM1.S(),FSM1.O(),
FSM1.NS(), FSM1.OS(), FSM1.PS(), FSM1.PI(),
@@ -1185,7 +1185,7 @@ void pccc_decoder(
memcpy(&(priori1[ki*FSM1.I()]),&(posti2[k*FSM2.I()]),FSM1.I()*sizeof(float));
}
- } // end repetitions
+ } // end iterations
// generate hard decisions
for(int k=0;k<blocklength;k++) {
@@ -1204,8 +1204,6 @@ void pccc_decoder(
}
//std::cout << std::endl;
-
-
}
//----------------
@@ -1214,7 +1212,7 @@ template
void pccc_decoder<unsigned char>(
const fsm &FSM1, int ST10, int ST1K,
const fsm &FSM2, int ST20, int ST2K,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *cprioro, unsigned char *data
);
@@ -1223,7 +1221,7 @@ template
void pccc_decoder<short>(
const fsm &FSM1, int ST10, int ST1K,
const fsm &FSM2, int ST20, int ST2K,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *cprioro, short *data
);
@@ -1232,8 +1230,208 @@ template
void pccc_decoder<int>(
const fsm &FSM1, int ST10, int ST1K,
const fsm &FSM2, int ST20, int ST2K,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
const float *cprioro, int *data
);
+
+
+//----------------
+
+
+template<class Ti, class To>
+void pccc_decoder_combined(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ int D, const std::vector<Ti> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const Ti *observations, To *data
+)
+{
+
+ //allocate space for cprioro
+ std::vector<float> cprioro(blocklength*FSM1.O()*FSM2.O(),0.0);
+
+ //allocate space for priori, prioro and posti of FSM1
+ std::vector<float> priori1(blocklength*FSM1.I(),0.0);
+ std::vector<float> prioro1(blocklength*FSM1.O());
+ std::vector<float> posti1(blocklength*FSM1.I());
+
+ //allocate space for priori, prioro and posti of FSM2
+ std::vector<float> priori2(blocklength*FSM2.I(),0.0);
+ std::vector<float> prioro2(blocklength*FSM2.O());
+ std::vector<float> posti2(blocklength*FSM2.I());
+
+ // turn observations to neg-log-priors for cprioiro
+ int O=FSM1.O()*FSM2.O();
+ for(int k=0;k<blocklength;k++) {
+ calc_metric(O, D, TABLE, &(observations[k*D]), &(cprioro[k*O]),METRIC_TYPE);
+ cprioro[k*O] *= scaling;
+ }
+
+ //generate prioro1,2 (metrics are not updated per iteration: this is not the best you can do...)
+ for (int k=0;k<blocklength;k++) {
+ //std::cout << k << std::endl;
+ for(int i=0;i<FSM1.O();i++) {
+ float x=cprioro[k*FSM1.O()*FSM2.O()+i*FSM1.O()+0];
+ for(int j=1;j<FSM2.O();j++)
+ x = (*p2mymin)(x,cprioro[k*FSM1.O()*FSM2.O()+i*FSM1.O()+j]);
+ prioro1[k*FSM1.O()+i]=x;
+ //std::cout << prioro1[k*FSM1.O()+i] << ", ";
+ }
+ //std::cout << std::endl;
+ for(int i=0;i<FSM2.O();i++) {
+ float x=cprioro[k*FSM1.O()*FSM2.O()+0*FSM1.O()+i];
+ for(int j=1;j<FSM1.O();j++)
+ x = (*p2mymin)(x,cprioro[k*FSM1.O()*FSM2.O()+j*FSM1.O()+i]);
+ prioro2[k*FSM2.O()+i]=x;
+ }
+ }
+
+ for(int rep=0;rep<iterations;rep++) {
+ // run SISO 1
+ siso_algorithm(FSM1.I(),FSM1.S(),FSM1.O(),
+ FSM1.NS(), FSM1.OS(), FSM1.PS(), FSM1.PI(),
+ blocklength,
+ ST10,ST1K,
+ true, false,
+ p2mymin,
+ &(priori1[0]), &(prioro1[0]), &(posti1[0])
+ );
+
+ //for(int k=0;k<blocklength;k++){
+ //for(int i=0;i<FSM1.I();i++)
+ //std::cout << posti1[k*FSM1.I()+i] << ", ";
+ //std::cout << std::endl;
+ //}
+
+ //interleave soft info 1 -> 2
+ for(int k=0;k<blocklength;k++) {
+ int ki = INTERLEAVER.INTER()[k];
+ //for(int i=0;i<FSMi.I();i++) {
+ //oprioro[k*FSMi.I()+i]=iposti[ki*FSMi.I()+i];
+ //}
+ memcpy(&(priori2[k*FSM2.I()]),&(posti1[ki*FSM1.I()]),FSM1.I()*sizeof(float));
+ }
+
+ // run SISO 2
+ siso_algorithm(FSM2.I(),FSM2.S(),FSM2.O(),
+ FSM2.NS(), FSM2.OS(), FSM2.PS(), FSM2.PI(),
+ blocklength,
+ ST20,ST2K,
+ true, false,
+ p2mymin,
+ &(priori2[0]), &(prioro2[0]), &(posti2[0])
+ );
+
+ //interleave soft info 2 --> 1
+ for(int k=0;k<blocklength;k++) {
+ int ki = INTERLEAVER.INTER()[k];
+ //for(int i=0;i<FSMi.I();i++) {
+ //ipriori[ki*FSMi.I()+i]=oposto[k*FSMi.I()+i];
+ //}
+ memcpy(&(priori1[ki*FSM1.I()]),&(posti2[k*FSM2.I()]),FSM1.I()*sizeof(float));
+ }
+
+ } // end iterations
+
+ // generate hard decisions
+ for(int k=0;k<blocklength;k++) {
+ for(int i=0;i<FSM1.I();i++)
+ posti1[k*FSM1.I()+i] = (*p2mymin)(priori1[k*FSM1.I()+i],posti1[k*FSM1.I()+i]);
+ float min=INF;
+ int mini=0;
+ for(int i=0;i<FSM1.I();i++) {
+ if(posti1[k*FSM1.I()+i]<min) {
+ min=posti1[k*FSM1.I()+i];
+ mini=i;
+ }
+ }
+ data[k]=(To)mini;
+ //std::cout << data[k] << ", "<< std::endl;
+ }
+ //std::cout << std::endl;
+
+}
+
+
+template
+void pccc_decoder_combined(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ int D, const std::vector<float> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const float *observations, unsigned char *data
+);
+
+
+template
+void pccc_decoder_combined(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ int D, const std::vector<float> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const float *observations, short *data
+);
+
+
+template
+void pccc_decoder_combined(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ int D, const std::vector<float> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const float *observations, int *data
+);
+
+
+template
+void pccc_decoder_combined(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ int D, const std::vector<gr_complex> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const gr_complex *observations, unsigned char *data
+);
+
+
+template
+void pccc_decoder_combined(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ int D, const std::vector<gr_complex> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const gr_complex *observations, short *data
+);
+
+
+template
+void pccc_decoder_combined(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ int D, const std::vector<gr_complex> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const gr_complex *observations, int *data
+);
diff --git a/gr-trellis/src/lib/core_algorithms.h b/gr-trellis/src/lib/core_algorithms.h
index fd45844c0..cab7086ba 100644
--- a/gr-trellis/src/lib/core_algorithms.h
+++ b/gr-trellis/src/lib/core_algorithms.h
@@ -91,11 +91,21 @@ void siso_algorithm_combined(int I, int S, int O,
);
+template<class T>
+void sccc_decoder(
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
+ float (*p2mymin)(float,float),
+ const float *iprioro, T *data
+);
+
+
template<class Ti, class To>
void sccc_decoder_combined(
const fsm &FSMo, int STo0, int SToK,
const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
int D, const std::vector<Ti> &TABLE,
trellis_metric_type_t METRIC_TYPE,
@@ -103,26 +113,28 @@ void sccc_decoder_combined(
const Ti *observations, To *data
);
-
template<class T>
-void sccc_decoder(
- const fsm &FSMo, int STo0, int SToK,
- const fsm &FSMi, int STi0, int STiK,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+void pccc_decoder(
+ const fsm &FSM1, int ST10, int ST1K,
+ const fsm &FSM2, int ST20, int ST2K,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
- const float *iprioro, T *data
+ const float *cprioro, T *data
);
-
-template<class T>
-void pccc_decoder(
+template<class Ti, class To>
+void pccc_decoder_combined(
const fsm &FSM1, int ST10, int ST1K,
const fsm &FSM2, int ST20, int ST2K,
- const interleaver &INTERLEAVER, int blocklength, int repetitions,
+ const interleaver &INTERLEAVER, int blocklength, int iterations,
float (*p2mymin)(float,float),
- const float *cprioro, T *data
+ int D, const std::vector<Ti> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling,
+ const Ti *observations, To *data
);
+
#endif
diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc
index 889a3918b..71e54b05a 100644
--- a/gr-trellis/src/lib/fsm.cc
+++ b/gr-trellis/src/lib/fsm.cc
@@ -132,7 +132,7 @@ fsm::fsm(int k, int n, const std::vector<int> &G)
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));
+ mem=(int)(log(double(G[i*n+j]))/log(2.0));
if(mem>max_mem_x[i])
max_mem_x[i]=mem;
if(mem>max_mem)
@@ -417,7 +417,7 @@ void fsm::generate_TM()
done = find_es(s);
attempts ++;
}
- if (done == false and d_S > 1) {
+ if (done == false && d_S > 1) {
//throw std::runtime_error ("fsm::generate_TM(): FSM appears to be disconnected\n");
printf("fsm::generate_TM(): FSM appears to be disconnected\n");
printf("state %d cannot be reached from all other states\n",s);
diff --git a/gr-trellis/src/lib/fsm.h b/gr-trellis/src/lib/fsm.h
index 8bae91754..134bbf26e 100644
--- a/gr-trellis/src/lib/fsm.h
+++ b/gr-trellis/src/lib/fsm.h
@@ -106,7 +106,7 @@ public:
* \brief Creates an FSMS describing ISI.
*
* \param mod_size modulation size
- * \param ch_lenth channel length
+ * \param ch_length channel length
*
*/
fsm(int mod_size, int ch_length);
@@ -125,14 +125,14 @@ public:
/*!
* \brief Creates an FSMS describing the joint trellis of two FSMs.
*
- * \param fsm1 first FSMS
- * \param fsm2 second FSMS
+ * \param FSM1 first FSMS
+ * \param FSM2 second FSMS
*/
fsm(const fsm &FSM1, const fsm &FSM2);
/*!
* \brief Creates an FSMS representing n stages through the originial FSM (AKA radix-n FSM).
*
- * \param original FSMS
+ * \param FSM Original FSMs
* \param n Number of stages.
*/
fsm(const fsm &FSM, int n);
diff --git a/gr-trellis/src/lib/generate_trellis.py b/gr-trellis/src/lib/generate_trellis.py
index 9f845f74a..31bc44aac 100644
--- a/gr-trellis/src/lib/generate_trellis.py
+++ b/gr-trellis/src/lib/generate_trellis.py
@@ -33,9 +33,10 @@ other_roots = [
'trellis_metrics_X',
'trellis_viterbi_X',
'trellis_viterbi_combined_XX',
- 'trellis_sccc_decoder_combined_XX',
'trellis_sccc_decoder_X',
+ 'trellis_sccc_decoder_combined_XX',
'trellis_pccc_decoder_X',
+ 'trellis_pccc_decoder_combined_XX',
]
other_signatures = (
@@ -45,9 +46,10 @@ other_signatures = (
['s','i','f','c'],
['b','s','i'],
['sb','ss','si','ib','is','ii','fb','fs','fi','cb','cs','ci'],
- ['fb','fs','fi','cb','cs','ci'],
['b','s','i'],
+ ['fb','fs','fi','cb','cs','ci'],
['b','s','i'],
+ ['fb','fs','fi','cb','cs','ci'],
)
diff --git a/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc b/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc
index 1d03886f1..91520e4ce 100644
--- a/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc
+++ b/gr-trellis/src/lib/trellis_constellation_metrics_cf.cc
@@ -20,9 +20,7 @@
* Boston, MA 02110-1301, USA.
*/
-// WARNING: this file is machine generated. Edits will be over written
-
-#ifndef HAVE_CONFIG_H
+#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t
index ff4b7a1f8..2a5b43df6 100644
--- a/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t
+++ b/gr-trellis/src/lib/trellis_pccc_decoder_X.h.t
@@ -50,9 +50,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
class @NAME@ : public gr_block
{
fsm d_FSM1;
- fsm d_FSM2;
int d_ST10;
int d_ST1K;
+ fsm d_FSM2;
int d_ST20;
int d_ST2K;
interleaver d_INTERLEAVER;
diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.cc.t b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.cc.t
new file mode 100644
index 000000000..48f68f1fe
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.cc.t
@@ -0,0 +1,147 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2004,2010 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <@NAME@.h>
+#include <gr_io_signature.h>
+#include <assert.h>
+#include <iostream>
+#include "core_algorithms.h"
+
+
+static const float INF = 1.0e9;
+
+@SPTR_NAME@
+trellis_make_@BASE_NAME@ (
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER,
+ int blocklength,
+ int repetitions,
+ trellis_siso_type_t SISO_TYPE,
+ int D,
+ const std::vector<@I_TYPE@> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling
+)
+{
+ return gnuradio::get_initial_sptr (new @NAME@ (
+ FSMo, STo0, SToK,
+ FSMi, STi0, STiK,
+ INTERLEAVER,
+ blocklength,
+ repetitions,
+ SISO_TYPE,
+ D,
+ TABLE,METRIC_TYPE,
+ scaling
+ ));
+}
+
+@NAME@::@NAME@ (
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER,
+ int blocklength,
+ int repetitions,
+ trellis_siso_type_t SISO_TYPE,
+ int D,
+ const std::vector<@I_TYPE@> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling
+)
+ : gr_block ("@BASE_NAME@",
+ gr_make_io_signature (1, 1, sizeof (@I_TYPE@)),
+ gr_make_io_signature (1, 1, sizeof (@O_TYPE@))),
+ d_FSMo (FSMo), d_STo0 (STo0), d_SToK (SToK),
+ d_FSMi (FSMi), d_STi0 (STi0), d_STiK (STiK),
+ d_INTERLEAVER (INTERLEAVER),
+ d_blocklength (blocklength),
+ d_repetitions (repetitions),
+ d_SISO_TYPE (SISO_TYPE),
+ d_D (D),
+ d_TABLE (TABLE),
+ d_METRIC_TYPE (METRIC_TYPE),
+ d_scaling (scaling)
+{
+ assert(d_FSMo.I() == d_FSMi.I());
+ set_relative_rate (1.0 / ((double) d_D));
+ set_output_multiple (d_blocklength);
+}
+
+void @NAME@::set_scaling(float scaling)
+{
+ d_scaling = scaling;
+}
+
+
+void
+@NAME@::forecast (int noutput_items, gr_vector_int &ninput_items_required)
+{
+ assert (noutput_items % d_blocklength == 0);
+ int input_required = d_D * noutput_items ;
+ ninput_items_required[0] = input_required;
+}
+
+
+
+//===========================================================
+
+int
+@NAME@::general_work (int noutput_items,
+ gr_vector_int &ninput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ assert (noutput_items % d_blocklength == 0);
+ int nblocks = noutput_items / d_blocklength;
+
+ 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;
+
+
+ const @I_TYPE@ *in = (const @I_TYPE@ *) input_items[0];
+ @O_TYPE@ *out = (@O_TYPE@ *) output_items[0];
+ for (int n=0;n<nblocks;n++) {
+ pccc_decoder_combined(
+ d_FSMo, d_STo0, d_SToK,
+ d_FSMi, d_STi0, d_STiK,
+ d_INTERLEAVER, d_blocklength, d_repetitions,
+ p2min,
+ d_D,d_TABLE,
+ d_METRIC_TYPE,
+ d_scaling,
+ &(in[n*d_blocklength*d_D]),&(out[n*d_blocklength])
+ );
+ }
+
+ consume_each (d_D * noutput_items );
+ return noutput_items;
+}
diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t
new file mode 100644
index 000000000..dd9979af9
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.h.t
@@ -0,0 +1,124 @@
+/* -*- 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 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
+
+#include "fsm.h"
+#include "interleaver.h"
+#include <gr_block.h>
+#include <vector>
+#include "calc_metric.h"
+#include "siso_type.h"
+
+class @NAME@;
+typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
+
+@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER,
+ int blocklength,
+ int repetitions,
+ trellis_siso_type_t SISO_TYPE, // perform "min-sum" or "sum-product" combining
+ int D,
+ const std::vector<@I_TYPE@> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling
+);
+
+
+/*!
+ * \ingroup coding_blk
+ */
+class @NAME@ : public gr_block
+{
+ fsm d_FSMo;
+ fsm d_FSMi;
+ int d_STo0;
+ int d_SToK;
+ int d_STi0;
+ int d_STiK;
+ interleaver d_INTERLEAVER;
+ int d_blocklength;
+ int d_repetitions;
+ trellis_siso_type_t d_SISO_TYPE;
+ int d_D;
+ std::vector<@I_TYPE@> d_TABLE;
+ trellis_metric_type_t d_METRIC_TYPE;
+ float d_scaling;
+ std::vector<float> d_buffer;
+
+ friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER,
+ int blocklength,
+ int repetitions,
+ trellis_siso_type_t SISO_TYPE,
+ int D,
+ const std::vector<@I_TYPE@> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling
+ );
+
+ @NAME@ (
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER,
+ int blocklength,
+ int repetitions,
+ trellis_siso_type_t SISO_TYPE,
+ int D,
+ const std::vector<@I_TYPE@> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling
+ );
+
+public:
+ fsm FSM1 () const { return d_FSMo; }
+ fsm FSM2 () const { return d_FSMi; }
+ int ST10 () const { return d_STo0; }
+ int ST1K () const { return d_SToK; }
+ int ST20 () const { return d_STi0; }
+ int ST2K () const { return d_STiK; }
+ interleaver INTERLEAVER () const { return d_INTERLEAVER; }
+ int blocklength () const { return d_blocklength; }
+ int repetitions () const { return d_repetitions; }
+ int D () const { return d_D; }
+ std::vector<@I_TYPE@> TABLE () const { return d_TABLE; }
+ trellis_metric_type_t METRIC_TYPE () const { return d_METRIC_TYPE; }
+ trellis_siso_type_t SISO_TYPE () const { return d_SISO_TYPE; }
+ float scaling () const { return d_scaling; }
+ void set_scaling (float scaling);
+
+ 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
diff --git a/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.i.t b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.i.t
new file mode 100644
index 000000000..d841f67b4
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_pccc_decoder_combined_XX.i.t
@@ -0,0 +1,73 @@
+/* -*- 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 3, or (at your option)
+ * any later version.
+ *
+ * GNU Radio is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+// @WARNING@
+
+GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@);
+
+@SPTR_NAME@ trellis_make_@BASE_NAME@ (
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER,
+ int blocklength,
+ int repetitions,
+ trellis_siso_type_t SISO_TYPE,
+ int D,
+ const std::vector<@I_TYPE@> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling
+);
+
+
+class @NAME@ : public gr_block
+{
+private:
+ @NAME@ (
+ const fsm &FSMo, int STo0, int SToK,
+ const fsm &FSMi, int STi0, int STiK,
+ const interleaver &INTERLEAVER,
+ int blocklength,
+ int repetitions,
+ trellis_siso_type_t SISO_TYPE,
+ int D,
+ const std::vector<@I_TYPE@> &TABLE,
+ trellis_metric_type_t METRIC_TYPE,
+ float scaling
+ );
+
+public:
+ fsm FSM1 () const { return d_FSMo; }
+ fsm FSM2 () const { return d_FSMi; }
+ int ST10 () const { return d_STo0; }
+ int ST1K () const { return d_SToK; }
+ int ST20 () const { return d_STi0; }
+ int ST2K () const { return d_STiK; }
+ interleaver INTERLEAVER () const { return d_INTERLEAVER; }
+ int blocklength () const { return d_blocklength; }
+ int repetitions () const { return d_repetitions; }
+ int D () const { return d_D; }
+ std::vector<@I_TYPE@> TABLE () const { return d_TABLE; }
+ trellis_metric_type_t METRIC_TYPE () const { return d_METRIC_TYPE; }
+ trellis_siso_type_t SISO_TYPE () const { return d_SISO_TYPE; }
+ float scaling() const { return d_scaling; }
+ void set_scaling (float scaling);
+};
diff --git a/gr-trellis/src/lib/trellis_permutation.cc b/gr-trellis/src/lib/trellis_permutation.cc
index a32390742..416fc58ec 100644
--- a/gr-trellis/src/lib/trellis_permutation.cc
+++ b/gr-trellis/src/lib/trellis_permutation.cc
@@ -30,19 +30,19 @@
#include <string.h>
trellis_permutation_sptr
-trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT)
+trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL)
{
- return gnuradio::get_initial_sptr(new trellis_permutation (K,TABLE,SYMS_PER_BLOCK,NBYTES_INOUT));
+ return gnuradio::get_initial_sptr(new trellis_permutation (K,TABLE,SYMS_PER_BLOCK,BYTES_PER_SYMBOL));
}
-trellis_permutation::trellis_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT)
+trellis_permutation::trellis_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL)
: gr_sync_block ("permutation",
- gr_make_io_signature (1, -1, NBYTES_INOUT),
- gr_make_io_signature (1, -1, NBYTES_INOUT)),
+ gr_make_io_signature (1, -1, BYTES_PER_SYMBOL),
+ gr_make_io_signature (1, -1, BYTES_PER_SYMBOL)),
d_K (K),
d_TABLE (TABLE),
d_SYMS_PER_BLOCK (SYMS_PER_BLOCK),
- d_NBYTES_INOUT (NBYTES_INOUT)
+ d_BYTES_PER_SYMBOL (BYTES_PER_SYMBOL)
{
set_output_multiple (d_K*SYMS_PER_BLOCK);
//std::cout << d_K << "\n";
@@ -72,9 +72,9 @@ trellis_permutation::work (int noutput_items,
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);
+ memcpy(&(out[i*d_SYMS_PER_BLOCK*d_BYTES_PER_SYMBOL]),
+ &(in[(i0+k0)*d_SYMS_PER_BLOCK*d_BYTES_PER_SYMBOL]),
+ d_BYTES_PER_SYMBOL*d_SYMS_PER_BLOCK);
}
// end per stream processing
}
diff --git a/gr-trellis/src/lib/trellis_permutation.h b/gr-trellis/src/lib/trellis_permutation.h
index 5505caf89..a5c858a8b 100644
--- a/gr-trellis/src/lib/trellis_permutation.h
+++ b/gr-trellis/src/lib/trellis_permutation.h
@@ -30,7 +30,7 @@
class trellis_permutation;
typedef boost::shared_ptr<trellis_permutation> trellis_permutation_sptr;
-trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT);
+trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
/*!
* \brief Permutation.
@@ -39,18 +39,18 @@ trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int>
class trellis_permutation : public gr_sync_block
{
private:
- friend trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT);
+ friend trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
int d_K;
std::vector<int> d_TABLE;
int d_SYMS_PER_BLOCK;
- size_t d_NBYTES_INOUT;
+ size_t d_BYTES_PER_SYMBOL;
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; }
int SYMS_PER_BLOCK () const { return d_SYMS_PER_BLOCK; }
- size_t NBYTES_INOUT () const { return d_NBYTES_INOUT; }
+ size_t BYTES_PER_SYMBOL () const { return d_BYTES_PER_SYMBOL; }
int work (int noutput_items,
gr_vector_const_void_star &input_items,
diff --git a/gr-trellis/src/lib/trellis_permutation.i b/gr-trellis/src/lib/trellis_permutation.i
index 834a36986..1433a6584 100644
--- a/gr-trellis/src/lib/trellis_permutation.i
+++ b/gr-trellis/src/lib/trellis_permutation.i
@@ -22,7 +22,7 @@
GR_SWIG_BLOCK_MAGIC(trellis,permutation);
-trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t NBYTES_INOUT);
+trellis_permutation_sptr trellis_make_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
class trellis_permutation : public gr_sync_block
{
@@ -30,12 +30,12 @@ private:
int d_K;
std::vector<int> d_TABLE;
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);
+ size_t d_BYTES_PER_SYMBOL;
+ trellis_permutation (int K, const std::vector<int> &TABLE, int SYMS_PER_BLOCK, size_t BYTES_PER_SYMBOL);
public:
int K () const { return d_K; }
const std::vector<int> & TABLE () const { return d_TABLE; }
int SYMS_PER_BLOCK () const { return d_SYMS_PER_BLOCK; }
- size_t NBYTES_INOUT () const { return d_NBYTES_INOUT; }
+ size_t BYTES_PER_SYMBOL () const { return d_BYTES_PER_SYMBOL; }
};
diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t
index 3adb8a5b7..93c9ac9b8 100644
--- a/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t
+++ b/gr-trellis/src/lib/trellis_sccc_decoder_X.h.t
@@ -50,9 +50,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
class @NAME@ : public gr_block
{
fsm d_FSMo;
- fsm d_FSMi;
int d_STo0;
int d_SToK;
+ fsm d_FSMi;
int d_STi0;
int d_STiK;
interleaver d_INTERLEAVER;
diff --git a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t
index 146c26516..225a07ffe 100644
--- a/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t
+++ b/gr-trellis/src/lib/trellis_sccc_decoder_combined_XX.h.t
@@ -55,9 +55,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
class @NAME@ : public gr_block
{
fsm d_FSMo;
- fsm d_FSMi;
int d_STo0;
int d_SToK;
+ fsm d_FSMi;
int d_STi0;
int d_STiK;
interleaver d_INTERLEAVER;