summaryrefslogtreecommitdiff
path: root/gr-trellis/src/lib
diff options
context:
space:
mode:
authoranastas2009-03-24 13:11:18 +0000
committeranastas2009-03-24 13:11:18 +0000
commitd9a4ecedfcd777262cde70554d6e6a7b4f0657c0 (patch)
tree0ca1d4088cb31ac4e4ca7e08d9dc348aa737c417 /gr-trellis/src/lib
parent4038332cdd92ab3050682e5d55a596aabb0ab806 (diff)
downloadgnuradio-d9a4ecedfcd777262cde70554d6e6a7b4f0657c0.tar.gz
gnuradio-d9a4ecedfcd777262cde70554d6e6a7b4f0657c0.tar.bz2
gnuradio-d9a4ecedfcd777262cde70554d6e6a7b4f0657c0.zip
added a radix-n fsm constructor
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@10673 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gr-trellis/src/lib')
-rw-r--r--gr-trellis/src/lib/fsm.cc42
-rw-r--r--gr-trellis/src/lib/fsm.h1
-rw-r--r--gr-trellis/src/lib/fsm.i1
3 files changed, 44 insertions, 0 deletions
diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc
index 550674ad5..c65b13456 100644
--- a/gr-trellis/src/lib/fsm.cc
+++ b/gr-trellis/src/lib/fsm.cc
@@ -315,6 +315,48 @@ fsm::fsm(const fsm &FSM1, const fsm &FSM2)
}
+
+
+//######################################################################
+//# Generate a new FSM representing n stages through the original FSM
+//# AKA radix-n FSM
+//######################################################################
+fsm::fsm(const fsm &FSM, int n)
+{
+ d_I=(int) (pow(1.0*FSM.I(),1.0*n)+0.5);
+ d_S=FSM.S();
+ d_O=(int) (pow(1.0*FSM.O(),1.0*n)+0.5);
+
+ d_NS.resize(d_I*d_S);
+ d_OS.resize(d_I*d_S);
+
+ for(int s=0;s<d_S;s++ ) {
+ for(int i=0;i<d_I;i++ ) {
+ std::vector<int> ii(n);
+ dec2base(i,FSM.I(),ii);
+ std::vector<int> oo(n);
+ int ns=s;
+ for(int k=0;k<n;k++) {
+ oo[k]=FSM.OS()[ns*FSM.I()+ii[k]];
+ ns=FSM.NS()[ns*FSM.I()+ii[k]];
+ }
+ d_NS[s*d_I+i]=ns;
+ d_OS[s*d_I+i]=base2dec(oo,FSM.O());
+ }
+ }
+
+ generate_PS_PI();
+ generate_TM();
+}
+
+
+
+
+
+
+
+
+
//######################################################################
//# generate the PS and PI tables for later use
//######################################################################
diff --git a/gr-trellis/src/lib/fsm.h b/gr-trellis/src/lib/fsm.h
index b91dc2ab1..0a90b2cd3 100644
--- a/gr-trellis/src/lib/fsm.h
+++ b/gr-trellis/src/lib/fsm.h
@@ -52,6 +52,7 @@ public:
fsm(int mod_size, int ch_length);
fsm(int P, int M, int L);
fsm(const fsm &FSM1, const fsm &FSM2);
+ fsm(const fsm &FSM, int n);
int I () const { return d_I; }
int S () const { return d_S; }
int O () const { return d_O; }
diff --git a/gr-trellis/src/lib/fsm.i b/gr-trellis/src/lib/fsm.i
index e9db804a0..1e9c7ad8f 100644
--- a/gr-trellis/src/lib/fsm.i
+++ b/gr-trellis/src/lib/fsm.i
@@ -42,6 +42,7 @@ public:
fsm(int mod_size, int ch_length);
fsm(int P, int M, int L);
fsm(const fsm &FSM1, const fsm &FSM2);
+ fsm(const fsm &FSM, int n);
int I () const { return d_I; }
int S () const { return d_S; }
int O () const { return d_O; }