From 82a5715de7e2ad1448ab98cd7081c8cca5b7e763 Mon Sep 17 00:00:00 2001 From: anastas Date: Sun, 4 Feb 2007 23:09:12 +0000 Subject: [PATCH] added support for irregular FSMs git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@4371 221aa14e-8319-0410-a670-987f0aec2ac5 --- gr-trellis/src/lib/fsm.cc | 18 ++++++++++++------ gr-trellis/src/lib/fsm.h | 8 ++++---- gr-trellis/src/lib/fsm.i | 8 ++++---- gr-trellis/src/lib/trellis_siso_combined_f.cc | 8 ++++---- gr-trellis/src/lib/trellis_siso_f.cc | 10 +++++----- gr-trellis/src/lib/trellis_viterbi_X.cc.t | 16 ++++++++-------- gr-trellis/src/lib/trellis_viterbi_b.cc | 16 ++++++++-------- .../src/lib/trellis_viterbi_combined_X.cc.t | 14 +++++++------- .../src/lib/trellis_viterbi_combined_b.cc | 14 +++++++------- .../src/lib/trellis_viterbi_combined_i.cc | 14 +++++++------- .../src/lib/trellis_viterbi_combined_s.cc | 14 +++++++------- gr-trellis/src/lib/trellis_viterbi_i.cc | 16 ++++++++-------- gr-trellis/src/lib/trellis_viterbi_s.cc | 16 ++++++++-------- 13 files changed, 89 insertions(+), 83 deletions(-) diff --git a/gr-trellis/src/lib/fsm.cc b/gr-trellis/src/lib/fsm.cc index 22f7772b..6e393389 100644 --- a/gr-trellis/src/lib/fsm.cc +++ b/gr-trellis/src/lib/fsm.cc @@ -47,7 +47,7 @@ fsm::fsm(const fsm &FSM) d_O=FSM.O(); d_NS=FSM.NS(); d_OS=FSM.OS(); - d_PS=FSM.PS(); + d_PS=FSM.PS(); // is this going to make a deep copy? d_PI=FSM.PI(); d_TMi=FSM.TMi(); d_TMl=FSM.TMl(); @@ -241,17 +241,21 @@ fsm::fsm(int mod_size, int ch_length) //###################################################################### void fsm::generate_PS_PI() { - d_PS.resize(d_I*d_S); - d_PI.resize(d_I*d_S); + d_PS.resize(d_S); + d_PI.resize(d_S); for(int i=0;i d_NS; std::vector d_OS; - std::vector d_PS; - std::vector d_PI; + std::vector< std::vector > d_PS; + std::vector< std::vector > d_PI; std::vector d_TMi; std::vector d_TMl; void generate_PS_PI (); @@ -54,8 +54,8 @@ public: int O () const { return d_O; } const std::vector & NS () const { return d_NS; } const std::vector & OS () const { return d_OS; } - const std::vector & PS () const { return d_PS; } - const std::vector & PI () const { return d_PI; } + const std::vector< std::vector > & PS () const { return d_PS; } + const std::vector< std::vector > & PI () const { return d_PI; } const std::vector & TMi () const { return d_TMi; } const std::vector & TMl () const { return d_TMl; } }; diff --git a/gr-trellis/src/lib/fsm.i b/gr-trellis/src/lib/fsm.i index 470da0ec..cec45fce 100644 --- a/gr-trellis/src/lib/fsm.i +++ b/gr-trellis/src/lib/fsm.i @@ -27,8 +27,8 @@ private: int d_O; std::vector d_NS; std::vector d_OS; - std::vector d_PS; - std::vector d_PI; + std::vector< std::vector > d_PS; + std::vector< std::vector > d_PI; std::vector d_TMi; std::vector d_TMl; void generate_PS_PI (); @@ -45,8 +45,8 @@ public: int O () const { return d_O; } const std::vector & NS () const { return d_NS; } const std::vector & OS () const { return d_OS; } - const std::vector & PS () const { return d_PS; } - const std::vector & PI () const { return d_PI; } + const std::vector< std::vector > & PS () const { return d_PS; } + const std::vector< std::vector > & PI () const { return d_PI; } const std::vector & TMi () const { return d_TMi; } const std::vector & TMl () const { return d_TMl; } }; diff --git a/gr-trellis/src/lib/trellis_siso_combined_f.cc b/gr-trellis/src/lib/trellis_siso_combined_f.cc index 9ad0ae24..293c42e1 100644 --- a/gr-trellis/src/lib/trellis_siso_combined_f.cc +++ b/gr-trellis/src/lib/trellis_siso_combined_f.cc @@ -138,8 +138,8 @@ inline float min_star(float a, float b) void siso_algorithm_combined(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, bool POSTI, bool POSTO, @@ -171,9 +171,9 @@ void siso_algorithm_combined(int I, int S, int O, norm=INF; for(int j=0;j &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, bool POSTI, bool POSTO, @@ -157,9 +157,9 @@ void siso_algorithm(int I, int S, int O, norm=INF; for(int j=0;j &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, const float *in, @TYPE@ *out)//, @@ -106,9 +106,9 @@ void viterbi_algorithm(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (@TYPE@) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (@TYPE@) PI[st][i0]; + st=PS[st][i0]; } } diff --git a/gr-trellis/src/lib/trellis_viterbi_b.cc b/gr-trellis/src/lib/trellis_viterbi_b.cc index e30f5138..01c75381 100644 --- a/gr-trellis/src/lib/trellis_viterbi_b.cc +++ b/gr-trellis/src/lib/trellis_viterbi_b.cc @@ -77,8 +77,8 @@ trellis_viterbi_b::forecast (int noutput_items, gr_vector_int &ninput_items_requ void viterbi_algorithm(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, const float *in, unsigned char *out)//, @@ -106,9 +106,9 @@ void viterbi_algorithm(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (unsigned char) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (unsigned char) PI[st][i0]; + st=PS[st][i0]; } } 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 e693c1d6..33f62909 100644 --- a/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t +++ b/gr-trellis/src/lib/trellis_viterbi_combined_X.cc.t @@ -86,8 +86,8 @@ void void viterbi_algorithm_combined(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, int D, @@ -119,9 +119,9 @@ void viterbi_algorithm_combined(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (@TYPE@) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (@TYPE@) PI[st][i0]; + st=PS[st][i0]; } delete [] metric; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_b.cc b/gr-trellis/src/lib/trellis_viterbi_combined_b.cc index 73e98ffe..62d877f6 100644 --- a/gr-trellis/src/lib/trellis_viterbi_combined_b.cc +++ b/gr-trellis/src/lib/trellis_viterbi_combined_b.cc @@ -86,8 +86,8 @@ trellis_viterbi_combined_b::forecast (int noutput_items, gr_vector_int &ninput_i void viterbi_algorithm_combined(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, int D, @@ -119,9 +119,9 @@ void viterbi_algorithm_combined(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (unsigned char) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (unsigned char) PI[st][i0]; + st=PS[st][i0]; } delete [] metric; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_i.cc b/gr-trellis/src/lib/trellis_viterbi_combined_i.cc index 754decb5..37a03550 100644 --- a/gr-trellis/src/lib/trellis_viterbi_combined_i.cc +++ b/gr-trellis/src/lib/trellis_viterbi_combined_i.cc @@ -86,8 +86,8 @@ trellis_viterbi_combined_i::forecast (int noutput_items, gr_vector_int &ninput_i void viterbi_algorithm_combined(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, int D, @@ -119,9 +119,9 @@ void viterbi_algorithm_combined(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (int) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (int) PI[st][i0]; + st=PS[st][i0]; } delete [] metric; diff --git a/gr-trellis/src/lib/trellis_viterbi_combined_s.cc b/gr-trellis/src/lib/trellis_viterbi_combined_s.cc index 24c1e56b..c332dd0d 100644 --- a/gr-trellis/src/lib/trellis_viterbi_combined_s.cc +++ b/gr-trellis/src/lib/trellis_viterbi_combined_s.cc @@ -86,8 +86,8 @@ trellis_viterbi_combined_s::forecast (int noutput_items, gr_vector_int &ninput_i void viterbi_algorithm_combined(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, int D, @@ -119,9 +119,9 @@ void viterbi_algorithm_combined(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (short) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (short) PI[st][i0]; + st=PS[st][i0]; } delete [] metric; diff --git a/gr-trellis/src/lib/trellis_viterbi_i.cc b/gr-trellis/src/lib/trellis_viterbi_i.cc index b81df8f1..f5d61173 100644 --- a/gr-trellis/src/lib/trellis_viterbi_i.cc +++ b/gr-trellis/src/lib/trellis_viterbi_i.cc @@ -77,8 +77,8 @@ trellis_viterbi_i::forecast (int noutput_items, gr_vector_int &ninput_items_requ void viterbi_algorithm(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, const float *in, int *out)//, @@ -106,9 +106,9 @@ void viterbi_algorithm(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (int) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (int) PI[st][i0]; + st=PS[st][i0]; } } diff --git a/gr-trellis/src/lib/trellis_viterbi_s.cc b/gr-trellis/src/lib/trellis_viterbi_s.cc index e352a260..ccdd1155 100644 --- a/gr-trellis/src/lib/trellis_viterbi_s.cc +++ b/gr-trellis/src/lib/trellis_viterbi_s.cc @@ -77,8 +77,8 @@ trellis_viterbi_s::forecast (int noutput_items, gr_vector_int &ninput_items_requ void viterbi_algorithm(int I, int S, int O, const std::vector &NS, const std::vector &OS, - const std::vector &PS, - const std::vector &PI, + const std::vector< std::vector > &PS, + const std::vector< std::vector > &PI, int K, int S0,int SK, const float *in, short *out)//, @@ -106,9 +106,9 @@ void viterbi_algorithm(int I, int S, int O, for(int j=0;j=0;k--) { // traceback - int i0=st*I+trace[k*S+st]; - out[k]= (short) PI[i0]; - st=PS[i0]; + int i0=trace[k*S+st]; + out[k]= (short) PI[st][i0]; + st=PS[st][i0]; } } -- 2.30.2