summaryrefslogtreecommitdiff
path: root/gr-trellis/src
diff options
context:
space:
mode:
Diffstat (limited to 'gr-trellis/src')
-rw-r--r--gr-trellis/src/lib/Makefile.am5
-rw-r--r--gr-trellis/src/lib/base.cc92
-rw-r--r--gr-trellis/src/lib/base.h38
-rw-r--r--gr-trellis/src/lib/fsm.cc234
-rw-r--r--gr-trellis/src/lib/fsm.h12
-rw-r--r--gr-trellis/src/lib/fsm.i14
-rw-r--r--gr-trellis/src/lib/interleaver.cc4
-rw-r--r--gr-trellis/src/lib/interleaver.h4
-rw-r--r--gr-trellis/src/lib/interleaver.i4
-rw-r--r--gr-trellis/src/lib/trellis.i4
-rw-r--r--gr-trellis/src/lib/trellis_calc_metric.cc115
-rw-r--r--gr-trellis/src/lib/trellis_calc_metric.h8
-rw-r--r--gr-trellis/src/lib/trellis_encoder_XX.cc.t30
-rw-r--r--gr-trellis/src/lib/trellis_encoder_XX.h.t6
-rw-r--r--gr-trellis/src/lib/trellis_encoder_XX.i.t4
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bb.cc30
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bb.h6
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bb.i4
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bi.cc30
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bi.h6
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bi.i4
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bs.cc30
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bs.h6
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bs.i4
-rw-r--r--gr-trellis/src/lib/trellis_encoder_ii.cc30
-rw-r--r--gr-trellis/src/lib/trellis_encoder_ii.h6
-rw-r--r--gr-trellis/src/lib/trellis_encoder_ii.i4
-rw-r--r--gr-trellis/src/lib/trellis_encoder_si.cc30
-rw-r--r--gr-trellis/src/lib/trellis_encoder_si.h6
-rw-r--r--gr-trellis/src/lib/trellis_encoder_si.i4
-rw-r--r--gr-trellis/src/lib/trellis_encoder_ss.cc30
-rw-r--r--gr-trellis/src/lib/trellis_encoder_ss.h6
-rw-r--r--gr-trellis/src/lib/trellis_encoder_ss.i4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_X.cc.t4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_X.h.t6
-rw-r--r--gr-trellis/src/lib/trellis_metrics_X.i.t4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_c.cc4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_c.h6
-rw-r--r--gr-trellis/src/lib/trellis_metrics_c.i4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_f.cc4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_f.h6
-rw-r--r--gr-trellis/src/lib/trellis_metrics_f.i4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_i.cc4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_i.h6
-rw-r--r--gr-trellis/src/lib/trellis_metrics_i.i4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_s.cc4
-rw-r--r--gr-trellis/src/lib/trellis_metrics_s.h6
-rw-r--r--gr-trellis/src/lib/trellis_metrics_s.i4
-rw-r--r--gr-trellis/src/lib/trellis_permutation.cc30
-rw-r--r--gr-trellis/src/lib/trellis_permutation.h12
-rw-r--r--gr-trellis/src/lib/trellis_permutation.i10
-rw-r--r--gr-trellis/src/lib/trellis_siso_f.cc323
-rw-r--r--gr-trellis/src/lib/trellis_siso_f.h92
-rw-r--r--gr-trellis/src/lib/trellis_siso_f.i55
-rw-r--r--gr-trellis/src/lib/trellis_siso_f.lo12
-rw-r--r--gr-trellis/src/lib/trellis_siso_type.h31
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_X.cc.t18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_X.h.t18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_X.i.t12
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_b.cc18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_b.h18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_b.i12
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_X.h.t30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_X.i.t20
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_b.cc30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_b.h30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_b.i20
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_i.cc30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_i.h30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_i.i20
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_s.cc30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_s.h30
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_combined_s.i20
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_i.cc18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_i.h18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_i.i12
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_s.cc18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_s.h18
-rw-r--r--gr-trellis/src/lib/trellis_viterbi_s.i12
80 files changed, 1401 insertions, 560 deletions
diff --git a/gr-trellis/src/lib/Makefile.am b/gr-trellis/src/lib/Makefile.am
index 935fe9fbf..769d4a338 100644
--- a/gr-trellis/src/lib/Makefile.am
+++ b/gr-trellis/src/lib/Makefile.am
@@ -65,9 +65,11 @@ _trellis_la_SOURCES = \
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 @@ trellis.cc trellis.py: $(ALL_IFILES)
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)
diff --git a/gr-trellis/src/lib/base.cc b/gr-trellis/src/lib/base.cc
new file mode 100644
index 000000000..35ba2ea1d
--- /dev/null
+++ b/gr-trellis/src/lib/base.cc
@@ -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;
+}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gr-trellis/src/lib/base.h b/gr-trellis/src/lib/base.h
new file mode 100644
index 000000000..b0fe3e91d
--- /dev/null
+++ b/gr-trellis/src/lib/base.h
@@ -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
diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc
index 05d1589fe..f34308834 100644
--- a/gr-trellis/src/lib/fsm.cc
+++ b/gr-trellis/src/lib/fsm.cc
@@ -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 @@ fsm::fsm()
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 @@ fsm::fsm(const fsm &FSM)
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 @@ fsm::fsm(const char *name)
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 @@ fsm::fsm(const char *name)
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 @@ fsm::fsm(const int mod_size, const int ch_length)
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 @@ fsm::fsm(const int mod_size, const int ch_length)
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 @@ fsm::fsm(const int mod_size, const int ch_length)
}
}
}
+
+
+//######################################################################
+//# 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;
+}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gr-trellis/src/lib/fsm.h b/gr-trellis/src/lib/fsm.h
index b5a8e0d5b..01703e35f 100644
--- a/gr-trellis/src/lib/fsm.h
+++ b/gr-trellis/src/lib/fsm.h
@@ -37,12 +37,18 @@ private:
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 @@ public:
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
diff --git a/gr-trellis/src/lib/fsm.i b/gr-trellis/src/lib/fsm.i
index eda8aeefd..e5b1af0ca 100644
--- a/gr-trellis/src/lib/fsm.i
+++ b/gr-trellis/src/lib/fsm.i
@@ -29,12 +29,17 @@ private:
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 @@ public:
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; }
};
-
-
-
diff --git a/gr-trellis/src/lib/interleaver.cc b/gr-trellis/src/lib/interleaver.cc
index 042dc04ba..174d31c0b 100644
--- a/gr-trellis/src/lib/interleaver.cc
+++ b/gr-trellis/src/lib/interleaver.cc
@@ -42,7 +42,7 @@ interleaver::interleaver(const interleaver &INTERLEAVER)
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 @@ interleaver::interleaver(const char *name)
//######################################################################
//# 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);
diff --git a/gr-trellis/src/lib/interleaver.h b/gr-trellis/src/lib/interleaver.h
index 13c316be2..14ed80faf 100644
--- a/gr-trellis/src/lib/interleaver.h
+++ b/gr-trellis/src/lib/interleaver.h
@@ -36,9 +36,9 @@ private:
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; }
diff --git a/gr-trellis/src/lib/interleaver.i b/gr-trellis/src/lib/interleaver.i
index 6baec3bdc..625bd8620 100644
--- a/gr-trellis/src/lib/interleaver.i
+++ b/gr-trellis/src/lib/interleaver.i
@@ -28,9 +28,9 @@ private:
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; }
diff --git a/gr-trellis/src/lib/trellis.i b/gr-trellis/src/lib/trellis.i
index bd3144119..983576e83 100644
--- a/gr-trellis/src/lib/trellis.i
+++ b/gr-trellis/src/lib/trellis.i
@@ -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"
diff --git a/gr-trellis/src/lib/trellis_calc_metric.cc b/gr-trellis/src/lib/trellis_calc_metric.cc
index ae25a67ba..5faa4b7c7 100644
--- a/gr-trellis/src/lib/trellis_calc_metric.cc
+++ b/gr-trellis/src/lib/trellis_calc_metric.cc
@@ -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 @@ void calc_metric_s(const int O, const int D, const std::vector<short> &TABLE, co
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 @@ void calc_metric_s(const int O, const int D, const std::vector<short> &TABLE, co
-// 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 @@ void calc_metric_i(const int O, const int D, const std::vector<int> &TABLE, cons
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 @@ void calc_metric_i(const int O, const int D, const std::vector<int> &TABLE, cons
-
-
-
-
-// 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 @@ void calc_metric_f(const int O, const int D, const std::vector<float> &TABLE, co
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 @@ void calc_metric_f(const int O, const int D, const std::vector<float> &TABLE, co
}
-// 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 @@ void calc_metric_c(const int O, const int D, const std::vector<gr_complex> &TABL
}
}
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).");
diff --git a/gr-trellis/src/lib/trellis_calc_metric.h b/gr-trellis/src/lib/trellis_calc_metric.h
index 1e1805322..0f66d82d8 100644
--- a/gr-trellis/src/lib/trellis_calc_metric.h
+++ b/gr-trellis/src/lib/trellis_calc_metric.h
@@ -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
diff --git a/gr-trellis/src/lib/trellis_encoder_XX.cc.t b/gr-trellis/src/lib/trellis_encoder_XX.cc.t
index 75ae0750a..810951e64 100644
--- a/gr-trellis/src/lib/trellis_encoder_XX.cc.t
+++ b/gr-trellis/src/lib/trellis_encoder_XX.cc.t
@@ -29,12 +29,12 @@
#include <iostream>
@SPTR_NAME@
-trellis_make_@BASE_NAME@ (const fsm &FSM, const int ST)
+trellis_make_@BASE_NAME@ (const fsm &FSM, int ST)
{
return @SPTR_NAME@ (new @NAME@ (FSM,ST));
}
-@NAME@::@NAME@ (const fsm &FSM, const int ST)
+@NAME@::@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,26 +50,24 @@ int
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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}
diff --git a/gr-trellis/src/lib/trellis_encoder_XX.h.t b/gr-trellis/src/lib/trellis_encoder_XX.h.t
index bfca5ee40..26c220489 100644
--- a/gr-trellis/src/lib/trellis_encoder_XX.h.t
+++ b/gr-trellis/src/lib/trellis_encoder_XX.h.t
@@ -31,7 +31,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, const int ST);
+@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, int ST);
/*!
* \brief Convolutional encoder.
@@ -42,10 +42,10 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
class @NAME@ : public gr_sync_block
{
private:
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, const int ST);
+ friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_XX.i.t b/gr-trellis/src/lib/trellis_encoder_XX.i.t
index ea015a84f..e5627be79 100644
--- a/gr-trellis/src/lib/trellis_encoder_XX.i.t
+++ b/gr-trellis/src/lib/trellis_encoder_XX.i.t
@@ -24,12 +24,12 @@
GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@);
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (const fsm &FSM, const int ST);
+@SPTR_NAME@ trellis_make_@BASE_NAME@ (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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_bb.cc b/gr-trellis/src/lib/trellis_encoder_bb.cc
index aecba87a4..cad4490ad 100644
--- a/gr-trellis/src/lib/trellis_encoder_bb.cc
+++ b/gr-trellis/src/lib/trellis_encoder_bb.cc
@@ -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,26 +50,24 @@ trellis_encoder_bb::work (int noutput_items,
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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}
diff --git a/gr-trellis/src/lib/trellis_encoder_bb.h b/gr-trellis/src/lib/trellis_encoder_bb.h
index a3817f2e7..f2d7a3ace 100644
--- a/gr-trellis/src/lib/trellis_encoder_bb.h
+++ b/gr-trellis/src/lib/trellis_encoder_bb.h
@@ -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 @@ trellis_encoder_bb_sptr trellis_make_encoder_bb (const fsm &FSM, const int ST);
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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_bb.i b/gr-trellis/src/lib/trellis_encoder_bb.i
index 07f5606e6..4610d967e 100644
--- a/gr-trellis/src/lib/trellis_encoder_bb.i
+++ b/gr-trellis/src/lib/trellis_encoder_bb.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_bi.cc b/gr-trellis/src/lib/trellis_encoder_bi.cc
index 968527b8f..d0848be63 100644
--- a/gr-trellis/src/lib/trellis_encoder_bi.cc
+++ b/gr-trellis/src/lib/trellis_encoder_bi.cc
@@ -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,26 +50,24 @@ trellis_encoder_bi::work (int noutput_items,
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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}
diff --git a/gr-trellis/src/lib/trellis_encoder_bi.h b/gr-trellis/src/lib/trellis_encoder_bi.h
index 5212f6416..d86f38b68 100644
--- a/gr-trellis/src/lib/trellis_encoder_bi.h
+++ b/gr-trellis/src/lib/trellis_encoder_bi.h
@@ -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 @@ trellis_encoder_bi_sptr trellis_make_encoder_bi (const fsm &FSM, const int ST);
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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_bi.i b/gr-trellis/src/lib/trellis_encoder_bi.i
index 4fd389e94..06531196e 100644
--- a/gr-trellis/src/lib/trellis_encoder_bi.i
+++ b/gr-trellis/src/lib/trellis_encoder_bi.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_bs.cc b/gr-trellis/src/lib/trellis_encoder_bs.cc
index 9546e3d9d..34876044b 100644
--- a/gr-trellis/src/lib/trellis_encoder_bs.cc
+++ b/gr-trellis/src/lib/trellis_encoder_bs.cc
@@ -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,26 +50,24 @@ trellis_encoder_bs::work (int noutput_items,
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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}
diff --git a/gr-trellis/src/lib/trellis_encoder_bs.h b/gr-trellis/src/lib/trellis_encoder_bs.h
index 2ddf5505c..d0a99ffe7 100644
--- a/gr-trellis/src/lib/trellis_encoder_bs.h
+++ b/gr-trellis/src/lib/trellis_encoder_bs.h
@@ -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 @@ trellis_encoder_bs_sptr trellis_make_encoder_bs (const fsm &FSM, const int ST);
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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_bs.i b/gr-trellis/src/lib/trellis_encoder_bs.i
index 51fc1d481..5179aaa84 100644
--- a/gr-trellis/src/lib/trellis_encoder_bs.i
+++ b/gr-trellis/src/lib/trellis_encoder_bs.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_ii.cc b/gr-trellis/src/lib/trellis_encoder_ii.cc
index 3469a235d..11e3a4fdb 100644
--- a/gr-trellis/src/lib/trellis_encoder_ii.cc
+++ b/gr-trellis/src/lib/trellis_encoder_ii.cc
@@ -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,26 +50,24 @@ trellis_encoder_ii::work (int noutput_items,
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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}
diff --git a/gr-trellis/src/lib/trellis_encoder_ii.h b/gr-trellis/src/lib/trellis_encoder_ii.h
index b0a9cee02..091e3ede3 100644
--- a/gr-trellis/src/lib/trellis_encoder_ii.h
+++ b/gr-trellis/src/lib/trellis_encoder_ii.h
@@ -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 @@ trellis_encoder_ii_sptr trellis_make_encoder_ii (const fsm &FSM, const int ST);
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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_ii.i b/gr-trellis/src/lib/trellis_encoder_ii.i
index c05cbb36c..aaf36d781 100644
--- a/gr-trellis/src/lib/trellis_encoder_ii.i
+++ b/gr-trellis/src/lib/trellis_encoder_ii.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_si.cc b/gr-trellis/src/lib/trellis_encoder_si.cc
index 581ffe286..c2b6463da 100644
--- a/gr-trellis/src/lib/trellis_encoder_si.cc
+++ b/gr-trellis/src/lib/trellis_encoder_si.cc
@@ -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,26 +50,24 @@ trellis_encoder_si::work (int noutput_items,
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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}
diff --git a/gr-trellis/src/lib/trellis_encoder_si.h b/gr-trellis/src/lib/trellis_encoder_si.h
index d42db7a99..969763dc1 100644
--- a/gr-trellis/src/lib/trellis_encoder_si.h
+++ b/gr-trellis/src/lib/trellis_encoder_si.h
@@ -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 @@ trellis_encoder_si_sptr trellis_make_encoder_si (const fsm &FSM, const int ST);
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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_si.i b/gr-trellis/src/lib/trellis_encoder_si.i
index e1166a6f2..0d8a16bdc 100644
--- a/gr-trellis/src/lib/trellis_encoder_si.i
+++ b/gr-trellis/src/lib/trellis_encoder_si.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_ss.cc b/gr-trellis/src/lib/trellis_encoder_ss.cc
index 96604a34b..3d0016b62 100644
--- a/gr-trellis/src/lib/trellis_encoder_ss.cc
+++ b/gr-trellis/src/lib/trellis_encoder_ss.cc
@@ -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,26 +50,24 @@ trellis_encoder_ss::work (int noutput_items,
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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}
diff --git a/gr-trellis/src/lib/trellis_encoder_ss.h b/gr-trellis/src/lib/trellis_encoder_ss.h
index 96e1a19bd..2254306eb 100644
--- a/gr-trellis/src/lib/trellis_encoder_ss.h
+++ b/gr-trellis/src/lib/trellis_encoder_ss.h
@@ -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 @@ trellis_encoder_ss_sptr trellis_make_encoder_ss (const fsm &FSM, const int ST);
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; }
diff --git a/gr-trellis/src/lib/trellis_encoder_ss.i b/gr-trellis/src/lib/trellis_encoder_ss.i
index ac194306f..8cb1d8ef6 100644
--- a/gr-trellis/src/lib/trellis_encoder_ss.i
+++ b/gr-trellis/src/lib/trellis_encoder_ss.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_X.cc.t b/gr-trellis/src/lib/trellis_metrics_X.cc.t
index 2dd1adb12..7ace0298a 100644
--- a/gr-trellis/src/lib/trellis_metrics_X.cc.t
+++ b/gr-trellis/src/lib/trellis_metrics_X.cc.t
@@ -32,14 +32,14 @@
@SPTR_NAME@
-trellis_make_@BASE_NAME@ (const int O, const int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE)
+trellis_make_@BASE_NAME@ (int O, int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE)
{
return @SPTR_NAME@ (new @NAME@ (O,D,TABLE,TYPE));
}
-@NAME@::@NAME@ (const int O, const int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE)
+@NAME@::@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))),
diff --git a/gr-trellis/src/lib/trellis_metrics_X.h.t b/gr-trellis/src/lib/trellis_metrics_X.h.t
index 626791dd4..ef01793ab 100644
--- a/gr-trellis/src/lib/trellis_metrics_X.h.t
+++ b/gr-trellis/src/lib/trellis_metrics_X.h.t
@@ -31,7 +31,7 @@
class @NAME@;
typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (const int O, const int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE);
+@SPTR_NAME@ trellis_make_@BASE_NAME@ (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 @@ class @NAME@ : public gr_block
trellis_metric_type_t d_TYPE;
std::vector<@I_TYPE@> d_TABLE;
- friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (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@ trellis_make_@BASE_NAME@ (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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_X.i.t b/gr-trellis/src/lib/trellis_metrics_X.i.t
index 2fc3ba8ff..1687d8fb4 100644
--- a/gr-trellis/src/lib/trellis_metrics_X.i.t
+++ b/gr-trellis/src/lib/trellis_metrics_X.i.t
@@ -24,12 +24,12 @@
GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@);
-@SPTR_NAME@ trellis_make_@BASE_NAME@ (const int O, const int D, const std::vector<@I_TYPE@> &TABLE, trellis_metric_type_t TYPE);
+@SPTR_NAME@ trellis_make_@BASE_NAME@ (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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_c.cc b/gr-trellis/src/lib/trellis_metrics_c.cc
index ea1808e83..d80f2e7d7 100644
--- a/gr-trellis/src/lib/trellis_metrics_c.cc
+++ b/gr-trellis/src/lib/trellis_metrics_c.cc
@@ -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))),
diff --git a/gr-trellis/src/lib/trellis_metrics_c.h b/gr-trellis/src/lib/trellis_metrics_c.h
index 5de578401..57a549cb7 100644
--- a/gr-trellis/src/lib/trellis_metrics_c.h
+++ b/gr-trellis/src/lib/trellis_metrics_c.h
@@ -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 @@ class trellis_metrics_c : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_c.i b/gr-trellis/src/lib/trellis_metrics_c.i
index 6813cb946..cb5a116d0 100644
--- a/gr-trellis/src/lib/trellis_metrics_c.i
+++ b/gr-trellis/src/lib/trellis_metrics_c.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_f.cc b/gr-trellis/src/lib/trellis_metrics_f.cc
index 2e148bbd5..69e4a99df 100644
--- a/gr-trellis/src/lib/trellis_metrics_f.cc
+++ b/gr-trellis/src/lib/trellis_metrics_f.cc
@@ -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))),
diff --git a/gr-trellis/src/lib/trellis_metrics_f.h b/gr-trellis/src/lib/trellis_metrics_f.h
index b668c08d0..44a9152f9 100644
--- a/gr-trellis/src/lib/trellis_metrics_f.h
+++ b/gr-trellis/src/lib/trellis_metrics_f.h
@@ -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 @@ class trellis_metrics_f : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_f.i b/gr-trellis/src/lib/trellis_metrics_f.i
index e808af168..a0dac39f2 100644
--- a/gr-trellis/src/lib/trellis_metrics_f.i
+++ b/gr-trellis/src/lib/trellis_metrics_f.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_i.cc b/gr-trellis/src/lib/trellis_metrics_i.cc
index 5901c5513..b0fa85fa0 100644
--- a/gr-trellis/src/lib/trellis_metrics_i.cc
+++ b/gr-trellis/src/lib/trellis_metrics_i.cc
@@ -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))),
diff --git a/gr-trellis/src/lib/trellis_metrics_i.h b/gr-trellis/src/lib/trellis_metrics_i.h
index c51e377e7..6e46eef60 100644
--- a/gr-trellis/src/lib/trellis_metrics_i.h
+++ b/gr-trellis/src/lib/trellis_metrics_i.h
@@ -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 @@ class trellis_metrics_i : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_i.i b/gr-trellis/src/lib/trellis_metrics_i.i
index dadd06577..5e217d1db 100644
--- a/gr-trellis/src/lib/trellis_metrics_i.i
+++ b/gr-trellis/src/lib/trellis_metrics_i.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_s.cc b/gr-trellis/src/lib/trellis_metrics_s.cc
index 3bee2cc92..07b409726 100644
--- a/gr-trellis/src/lib/trellis_metrics_s.cc
+++ b/gr-trellis/src/lib/trellis_metrics_s.cc
@@ -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))),
diff --git a/gr-trellis/src/lib/trellis_metrics_s.h b/gr-trellis/src/lib/trellis_metrics_s.h
index b4332bcc3..abd027e50 100644
--- a/gr-trellis/src/lib/trellis_metrics_s.h
+++ b/gr-trellis/src/lib/trellis_metrics_s.h
@@ -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 @@ class trellis_metrics_s : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_metrics_s.i b/gr-trellis/src/lib/trellis_metrics_s.i
index d7529a3e1..86830f778 100644
--- a/gr-trellis/src/lib/trellis_metrics_s.i
+++ b/gr-trellis/src/lib/trellis_metrics_s.i
@@ -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; }
diff --git a/gr-trellis/src/lib/trellis_permutation.cc b/gr-trellis/src/lib/trellis_permutation.cc
index 78bdbaf46..88e546a49 100644
--- a/gr-trellis/src/lib/trellis_permutation.cc
+++ b/gr-trellis/src/lib/trellis_permutation.cc
@@ -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 @@ trellis_permutation::work (int noutput_items,
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
}
diff --git a/gr-trellis/src/lib/trellis_permutation.h b/gr-trellis/src/lib/trellis_permutation.h
index 815ed3976..39c5b7c9c 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 (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 @@ trellis_permutation_sptr trellis_make_permutation (const int K, const std::vecto
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,
diff --git a/gr-trellis/src/lib/trellis_permutation.i b/gr-trellis/src/lib/trellis_permutation.i
index db74cdf05..4dbb92bea 100644
--- a/gr-trellis/src/lib/trellis_permutation.i
+++ b/gr-trellis/src/lib/trellis_permutation.i
@@ -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; }
};
diff --git a/gr-trellis/src/lib/trellis_siso_f.cc b/gr-trellis/src/lib/trellis_siso_f.cc
new file mode 100644
index 000000000..df364fc65
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_siso_f.cc
@@ -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;
+}
diff --git a/gr-trellis/src/lib/trellis_siso_f.h b/gr-trellis/src/lib/trellis_siso_f.h
new file mode 100644
index 000000000..36981254d
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_siso_f.h
@@ -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
diff --git a/gr-trellis/src/lib/trellis_siso_f.i b/gr-trellis/src/lib/trellis_siso_f.i
new file mode 100644
index 000000000..534ac3897
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_siso_f.i
@@ -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; }
+};
diff --git a/gr-trellis/src/lib/trellis_siso_f.lo b/gr-trellis/src/lib/trellis_siso_f.lo
new file mode 100644
index 000000000..2d24f85b0
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_siso_f.lo
@@ -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
+
diff --git a/gr-trellis/src/lib/trellis_siso_type.h b/gr-trellis/src/lib/trellis_siso_type.h
new file mode 100644
index 000000000..6f727522a
--- /dev/null
+++ b/gr-trellis/src/lib/trellis_siso_type.h
@@ -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
+
diff --git a/gr-trellis/src/lib/trellis_viterbi_X.cc.t b/gr-trellis/src/lib/trellis_viterbi_X.cc.t
index 0ab423b0a..8f02320d6 100644
--- a/gr-trellis/src/lib/trellis_viterbi_X.cc.t
+++ b/gr-trellis/src/lib/trellis_viterbi_X.cc.t
@@ -34,18 +34,18 @@ static const float INF = 1.0e9;
@SPTR_NAME@
trellis_make_@BASE_NAME@ (
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
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_X.h.t b/gr-trellis/src/lib/trellis_viterbi_X.h.t
index f1b8e0062..f06fdfdcd 100644
--- a/gr-trellis/src/lib/trellis_viterbi_X.h.t
+++ b/gr-trellis/src/lib/trellis_viterbi_X.h.t
@@ -33,9 +33,9 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
@SPTR_NAME@ trellis_make_@BASE_NAME@ (
const fsm &FSM,
- const int K,
- const int S0,
- const int SK);
+ int K,
+ int S0,
+ int SK);
@@ -49,16 +49,16 @@ class @NAME@ : public gr_block
friend @SPTR_NAME@ trellis_make_@BASE_NAME@ (
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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_X.i.t b/gr-trellis/src/lib/trellis_viterbi_X.i.t
index 605251e4d..99d899b9b 100644
--- a/gr-trellis/src/lib/trellis_viterbi_X.i.t
+++ b/gr-trellis/src/lib/trellis_viterbi_X.i.t
@@ -26,9 +26,9 @@ GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@);
@SPTR_NAME@ trellis_make_@BASE_NAME@ (
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 @@ class @NAME@ : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_viterbi_b.cc b/gr-trellis/src/lib/trellis_viterbi_b.cc
index 2e005a316..ce2778aff 100644
--- a/gr-trellis/src/lib/trellis_viterbi_b.cc
+++ b/gr-trellis/src/lib/trellis_viterbi_b.cc
@@ -34,18 +34,18 @@ static const float INF = 1.0e9;
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 @@ trellis_viterbi_b::forecast (int noutput_items, gr_vector_int &ninput_items_requ
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_b.h b/gr-trellis/src/lib/trellis_viterbi_b.h
index a4fa533e8..c1c359b12 100644
--- a/gr-trellis/src/lib/trellis_viterbi_b.h
+++ b/gr-trellis/src/lib/trellis_viterbi_b.h
@@ -33,9 +33,9 @@ typedef boost::shared_ptr<trellis_viterbi_b> trellis_viterbi_b_sptr;
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 @@ class trellis_viterbi_b : public gr_block
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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_b.i b/gr-trellis/src/lib/trellis_viterbi_b.i
index 44fca365b..8f456b0bb 100644
--- a/gr-trellis/src/lib/trellis_viterbi_b.i
+++ b/gr-trellis/src/lib/trellis_viterbi_b.i
@@ -26,9 +26,9 @@ GR_SWIG_BLOCK_MAGIC(trellis,viterbi_b);
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 @@ class trellis_viterbi_b : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t b/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t
index 52e01026b..de2079ad0 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t
@@ -34,24 +34,24 @@ static const float INF = 1.0e9;
@SPTR_NAME@
trellis_make_@BASE_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)
{
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
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t b/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t
index 8d7059a55..14f565202 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_X.h.t
@@ -34,12 +34,12 @@ typedef boost::shared_ptr<@NAME@> @SPTR_NAME@;
@SPTR_NAME@ trellis_make_@BASE_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);
class @NAME@ : public gr_block
@@ -55,22 +55,22 @@ class @NAME@ : public gr_block
friend @SPTR_NAME@ trellis_make_@BASE_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);
@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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t b/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t
index 388e0626e..e4b68402c 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_X.i.t
@@ -26,12 +26,12 @@ GR_SWIG_BLOCK_MAGIC(trellis,@BASE_NAME@);
@SPTR_NAME@ trellis_make_@BASE_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);
class @NAME@ : public gr_block
@@ -39,12 +39,12 @@ class @NAME@ : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_b.cc b/gr-trellis/src/lib/trellis_viterbi_combined_b.cc
index 8c72b2a3c..2d245f58b 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_b.cc
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_b.cc
@@ -34,24 +34,24 @@ static const float INF = 1.0e9;
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 @@ trellis_viterbi_combined_b::forecast (int noutput_items, gr_vector_int &ninput_i
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_b.h b/gr-trellis/src/lib/trellis_viterbi_combined_b.h
index f523c5ce1..5de0924d7 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_b.h
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_b.h
@@ -34,12 +34,12 @@ typedef boost::shared_ptr<trellis_viterbi_combined_b> trellis_viterbi_combined_b
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 @@ class trellis_viterbi_combined_b : public gr_block
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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_b.i b/gr-trellis/src/lib/trellis_viterbi_combined_b.i
index 44b4aa431..069860893 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_b.i
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_b.i
@@ -26,12 +26,12 @@ GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_b);
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 @@ class trellis_viterbi_combined_b : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_i.cc b/gr-trellis/src/lib/trellis_viterbi_combined_i.cc
index 3301d0283..4506fd127 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_i.cc
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_i.cc
@@ -34,24 +34,24 @@ static const float INF = 1.0e9;
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 @@ trellis_viterbi_combined_i::forecast (int noutput_items, gr_vector_int &ninput_i
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_i.h b/gr-trellis/src/lib/trellis_viterbi_combined_i.h
index 171fcb93d..1ac5d7d1d 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_i.h
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_i.h
@@ -34,12 +34,12 @@ typedef boost::shared_ptr<trellis_viterbi_combined_i> trellis_viterbi_combined_i
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 @@ class trellis_viterbi_combined_i : public gr_block
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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_i.i b/gr-trellis/src/lib/trellis_viterbi_combined_i.i
index 4b8355e0e..05d68d580 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_i.i
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_i.i
@@ -26,12 +26,12 @@ GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_i);
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 @@ class trellis_viterbi_combined_i : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_s.cc b/gr-trellis/src/lib/trellis_viterbi_combined_s.cc
index 46dda3d1d..f103db229 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_s.cc
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_s.cc
@@ -34,24 +34,24 @@ static const float INF = 1.0e9;
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 @@ trellis_viterbi_combined_s::forecast (int noutput_items, gr_vector_int &ninput_i
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_s.h b/gr-trellis/src/lib/trellis_viterbi_combined_s.h
index 5b74b35a9..c174c5f01 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_s.h
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_s.h
@@ -34,12 +34,12 @@ typedef boost::shared_ptr<trellis_viterbi_combined_s> trellis_viterbi_combined_s
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 @@ class trellis_viterbi_combined_s : public gr_block
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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_s.i b/gr-trellis/src/lib/trellis_viterbi_combined_s.i
index ddac52692..c1d5693a2 100644
--- a/gr-trellis/src/lib/trellis_viterbi_combined_s.i
+++ b/gr-trellis/src/lib/trellis_viterbi_combined_s.i
@@ -26,12 +26,12 @@ GR_SWIG_BLOCK_MAGIC(trellis,viterbi_combined_s);
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 @@ class trellis_viterbi_combined_s : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_viterbi_i.cc b/gr-trellis/src/lib/trellis_viterbi_i.cc
index 58a39f6e5..2ff304ebb 100644
--- a/gr-trellis/src/lib/trellis_viterbi_i.cc
+++ b/gr-trellis/src/lib/trellis_viterbi_i.cc
@@ -34,18 +34,18 @@ static const float INF = 1.0e9;
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 @@ trellis_viterbi_i::forecast (int noutput_items, gr_vector_int &ninput_items_requ
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_i.h b/gr-trellis/src/lib/trellis_viterbi_i.h
index 5da0a3866..86ac89876 100644
--- a/gr-trellis/src/lib/trellis_viterbi_i.h
+++ b/gr-trellis/src/lib/trellis_viterbi_i.h
@@ -33,9 +33,9 @@ typedef boost::shared_ptr<trellis_viterbi_i> trellis_viterbi_i_sptr;
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 @@ class trellis_viterbi_i : public gr_block
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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_i.i b/gr-trellis/src/lib/trellis_viterbi_i.i
index de402e36d..3b99f3173 100644
--- a/gr-trellis/src/lib/trellis_viterbi_i.i
+++ b/gr-trellis/src/lib/trellis_viterbi_i.i
@@ -26,9 +26,9 @@ GR_SWIG_BLOCK_MAGIC(trellis,viterbi_i);
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 @@ class trellis_viterbi_i : public gr_block
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; }
diff --git a/gr-trellis/src/lib/trellis_viterbi_s.cc b/gr-trellis/src/lib/trellis_viterbi_s.cc
index f5a0705c2..bb3dafa61 100644
--- a/gr-trellis/src/lib/trellis_viterbi_s.cc
+++ b/gr-trellis/src/lib/trellis_viterbi_s.cc
@@ -34,18 +34,18 @@ static const float INF = 1.0e9;
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 @@ trellis_viterbi_s::forecast (int noutput_items, gr_vector_int &ninput_items_requ
-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)
{
diff --git a/gr-trellis/src/lib/trellis_viterbi_s.h b/gr-trellis/src/lib/trellis_viterbi_s.h
index 2c3a61c9b..6232ce5bf 100644
--- a/gr-trellis/src/lib/trellis_viterbi_s.h
+++ b/gr-trellis/src/lib/trellis_viterbi_s.h
@@ -33,9 +33,9 @@ typedef boost::shared_ptr<trellis_viterbi_s> trellis_viterbi_s_sptr;
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 @@ class trellis_viterbi_s : public gr_block
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:
diff --git a/gr-trellis/src/lib/trellis_viterbi_s.i b/gr-trellis/src/lib/trellis_viterbi_s.i
index 44e437265..99b14db78 100644
--- a/gr-trellis/src/lib/trellis_viterbi_s.i
+++ b/gr-trellis/src/lib/trellis_viterbi_s.i
@@ -26,9 +26,9 @@ GR_SWIG_BLOCK_MAGIC(trellis,viterbi_s);
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 @@ class trellis_viterbi_s : public gr_block
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; }