diff options
author | Achilleas Anastasopoulos <anastas@umich.edu> | 2014-10-14 10:51:31 -0400 |
---|---|---|
committer | Achilleas Anastasopoulos <anastas@umich.edu> | 2014-10-15 19:01:05 -0400 |
commit | 79d55f173046d87ae31f04ad1e6dbafe1c9ae5ca (patch) | |
tree | c3efe8e25da8d13b99bb5cdf8b4234ef8cf54d07 /gr-trellis/lib | |
parent | be8e888f80934a884287f0ec9eb62dd0d2b7f5e5 (diff) |
fixed a bug in pccc encoder/decoder, and added fsm files.
Also added locks in the set_ methods
Diffstat (limited to 'gr-trellis/lib')
-rw-r--r-- | gr-trellis/lib/core_algorithms.cc | 8 | ||||
-rw-r--r-- | gr-trellis/lib/encoder_XX_impl.cc.t | 19 | ||||
-rw-r--r-- | gr-trellis/lib/encoder_XX_impl.h.t | 12 | ||||
-rw-r--r-- | gr-trellis/lib/metrics_X_impl.cc.t | 5 | ||||
-rw-r--r-- | gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t | 2 | ||||
-rw-r--r-- | gr-trellis/lib/pccc_encoder_XX_impl.cc.t | 2 | ||||
-rw-r--r-- | gr-trellis/lib/permutation_impl.cc | 9 | ||||
-rw-r--r-- | gr-trellis/lib/permutation_impl.h | 2 | ||||
-rw-r--r-- | gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t | 2 | ||||
-rw-r--r-- | gr-trellis/lib/siso_combined_f_impl.cc | 36 | ||||
-rw-r--r-- | gr-trellis/lib/siso_combined_f_impl.h | 10 | ||||
-rw-r--r-- | gr-trellis/lib/siso_f_impl.cc | 23 | ||||
-rw-r--r-- | gr-trellis/lib/siso_f_impl.h | 6 | ||||
-rw-r--r-- | gr-trellis/lib/viterbi_X_impl.cc.t | 17 | ||||
-rw-r--r-- | gr-trellis/lib/viterbi_X_impl.h.t | 6 | ||||
-rw-r--r-- | gr-trellis/lib/viterbi_combined_XX_impl.cc.t | 35 | ||||
-rw-r--r-- | gr-trellis/lib/viterbi_combined_XX_impl.h.t | 10 |
17 files changed, 174 insertions, 30 deletions
diff --git a/gr-trellis/lib/core_algorithms.cc b/gr-trellis/lib/core_algorithms.cc index eb32b65de7..b26ee331f2 100644 --- a/gr-trellis/lib/core_algorithms.cc +++ b/gr-trellis/lib/core_algorithms.cc @@ -1216,17 +1216,17 @@ namespace gr { for(int k=0;k<blocklength;k++) { //std::cout << k << std::endl; for(int i=0;i<FSM1.O();i++) { - float x=cprioro[k*FSM1.O()*FSM2.O()+i*FSM1.O()+0]; + float x=cprioro[k*O+i*FSM2.O()+0]; for(int j=1;j<FSM2.O();j++) - x = (*p2mymin)(x,cprioro[k*FSM1.O()*FSM2.O()+i*FSM1.O()+j]); + x = (*p2mymin)(x,cprioro[k*O+i*FSM2.O()+j]); prioro1[k*FSM1.O()+i]=x; //std::cout << prioro1[k*FSM1.O()+i] << ", "; } //std::cout << std::endl; for(int i=0;i<FSM2.O();i++) { - float x=cprioro[k*FSM1.O()*FSM2.O()+0*FSM1.O()+i]; + float x=cprioro[k*O+0*FSM2.O()+i]; for(int j=1;j<FSM1.O();j++) - x = (*p2mymin)(x,cprioro[k*FSM1.O()*FSM2.O()+j*FSM1.O()+i]); + x = (*p2mymin)(x,cprioro[k*O+j*FSM2.O()+i]); prioro2[k*FSM2.O()+i]=x; } } diff --git a/gr-trellis/lib/encoder_XX_impl.cc.t b/gr-trellis/lib/encoder_XX_impl.cc.t index f2e19929ca..3a004a2f94 100644 --- a/gr-trellis/lib/encoder_XX_impl.cc.t +++ b/gr-trellis/lib/encoder_XX_impl.cc.t @@ -58,6 +58,24 @@ namespace gr { { } + void @IMPL_NAME@::set_FSM(const fsm &FSM) + { + gr::thread::scoped_lock guard(d_setlock); + d_FSM = FSM; + } + + void @IMPL_NAME@::set_ST(int ST) + { + gr::thread::scoped_lock guard(d_setlock); + d_ST = ST; + } + + void @IMPL_NAME@::set_K(int K) + { + gr::thread::scoped_lock guard(d_setlock); + d_K = K; + } + @IMPL_NAME@::~@IMPL_NAME@() { } @@ -67,6 +85,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int ST_tmp = 0; if (d_B){ // blockwise operation diff --git a/gr-trellis/lib/encoder_XX_impl.h.t b/gr-trellis/lib/encoder_XX_impl.h.t index 69f853d9fe..2b0ff31f4d 100644 --- a/gr-trellis/lib/encoder_XX_impl.h.t +++ b/gr-trellis/lib/encoder_XX_impl.h.t @@ -43,12 +43,12 @@ namespace gr { @IMPL_NAME@(const fsm &FSM, int ST, int K, bool B); ~@IMPL_NAME@(); - fsm FSM() { return d_FSM;; } - int ST() { return d_ST; } - int K() { return d_K; } - void set_FSM(fsm &FSM) { d_FSM = FSM; } - void set_ST(int ST) { d_ST = ST; } - void set_K(int K) { d_K = K; } + fsm FSM() const { return d_FSM;; } + int ST() const { return d_ST; } + int K() const { return d_K; } + void set_FSM(const fsm &FSM); + void set_ST(int ST); + void set_K(int K); int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-trellis/lib/metrics_X_impl.cc.t b/gr-trellis/lib/metrics_X_impl.cc.t index 2b811de16f..5e74e4b2fc 100644 --- a/gr-trellis/lib/metrics_X_impl.cc.t +++ b/gr-trellis/lib/metrics_X_impl.cc.t @@ -56,6 +56,7 @@ namespace gr { void @IMPL_NAME@::set_O(int O) { + gr::thread::scoped_lock guard(d_setlock); d_O = O; set_relative_rate (1.0 * d_O / ((double) d_D)); set_output_multiple ((int)d_O); @@ -63,6 +64,7 @@ namespace gr { void @IMPL_NAME@::set_D(int D) { + gr::thread::scoped_lock guard(d_setlock); d_D = D; set_relative_rate (1.0 * d_O / ((double) d_D)); } @@ -70,12 +72,14 @@ namespace gr { void @IMPL_NAME@::set_TYPE(digital::trellis_metric_type_t type) { + gr::thread::scoped_lock guard(d_setlock); d_TYPE = type; } void @IMPL_NAME@::set_TABLE(const std::vector<@I_TYPE@> &table) { + gr::thread::scoped_lock guard(d_setlock); d_TABLE = table; } @@ -99,6 +103,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); for(int m = 0; m < nstreams; m++) { diff --git a/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t b/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t index 15ea3ceecb..5b3cdeeb62 100644 --- a/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t +++ b/gr-trellis/lib/pccc_decoder_combined_XX_impl.cc.t @@ -90,6 +90,7 @@ namespace gr { void @IMPL_NAME@::set_scaling(float scaling) { + gr::thread::scoped_lock guard(d_setlock); d_scaling = scaling; } @@ -109,6 +110,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nblocks = noutput_items / d_blocklength; float (*p2min)(float, float) = NULL; diff --git a/gr-trellis/lib/pccc_encoder_XX_impl.cc.t b/gr-trellis/lib/pccc_encoder_XX_impl.cc.t index 119bff6ddb..8fd143ca9d 100644 --- a/gr-trellis/lib/pccc_encoder_XX_impl.cc.t +++ b/gr-trellis/lib/pccc_encoder_XX_impl.cc.t @@ -81,7 +81,7 @@ namespace gr { ST1_tmp = (int) d_FSM1.NS()[ST1_tmp*d_FSM1.I()+in[i]]; int o2 = d_FSM2.OS()[ST2_tmp*d_FSM2.I()+in[k]]; ST2_tmp = (int) d_FSM2.NS()[ST2_tmp*d_FSM2.I()+in[k]]; - out[i] = (@O_TYPE@) (o1*d_FSM1.O() + o2); + out[i] = (@O_TYPE@) (o1*d_FSM2.O() + o2); } } return noutput_items; diff --git a/gr-trellis/lib/permutation_impl.cc b/gr-trellis/lib/permutation_impl.cc index 0d9d3593bf..2fe0ea8cb8 100644 --- a/gr-trellis/lib/permutation_impl.cc +++ b/gr-trellis/lib/permutation_impl.cc @@ -55,12 +55,20 @@ namespace gr { void permutation_impl::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K=K; set_output_multiple(d_K*d_SYMS_PER_BLOCK); } + void permutation_impl::set_TABLE (const std::vector<int> &table) + { + gr::thread::scoped_lock guard(d_setlock); + d_TABLE = table; + } + void permutation_impl::set_SYMS_PER_BLOCK(int spb) { + gr::thread::scoped_lock guard(d_setlock); d_SYMS_PER_BLOCK=spb; set_output_multiple(d_K*d_SYMS_PER_BLOCK); } @@ -74,6 +82,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); for(int m=0;m<nstreams;m++) { diff --git a/gr-trellis/lib/permutation_impl.h b/gr-trellis/lib/permutation_impl.h index 5c74fba8fd..e013e52a20 100644 --- a/gr-trellis/lib/permutation_impl.h +++ b/gr-trellis/lib/permutation_impl.h @@ -48,7 +48,7 @@ namespace gr { size_t BYTES_PER_SYMBOL() const { return d_BYTES_PER_SYMBOL; } void set_K(int K) ; - void set_TABLE (const std::vector<int> &table) {d_TABLE = table; } + void set_TABLE (const std::vector<int> &table); void set_SYMS_PER_BLOCK(int spb) ; int work(int noutput_items, diff --git a/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t b/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t index 4acc560175..f66b1f37e7 100644 --- a/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t +++ b/gr-trellis/lib/sccc_decoder_combined_XX_impl.cc.t @@ -89,6 +89,7 @@ namespace gr { void @IMPL_NAME@::set_scaling(float scaling) { + gr::thread::scoped_lock guard(d_setlock); d_scaling = scaling; } @@ -108,6 +109,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nblocks = noutput_items / d_blocklength; float (*p2min)(float, float) = NULL; diff --git a/gr-trellis/lib/siso_combined_f_impl.cc b/gr-trellis/lib/siso_combined_f_impl.cc index f9e8e28a9c..3b89684bf0 100644 --- a/gr-trellis/lib/siso_combined_f_impl.cc +++ b/gr-trellis/lib/siso_combined_f_impl.cc @@ -96,35 +96,68 @@ namespace gr { void siso_combined_f_impl::set_FSM(const fsm &FSM) { + gr::thread::scoped_lock guard(d_setlock); d_FSM=FSM; recalculate(); } void siso_combined_f_impl::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K=K; recalculate(); } void siso_combined_f_impl::set_POSTI(bool POSTI) { + gr::thread::scoped_lock guard(d_setlock); d_POSTI = POSTI; recalculate(); } void siso_combined_f_impl::set_POSTO(bool POSTO) { + gr::thread::scoped_lock guard(d_setlock); d_POSTO = POSTO; recalculate(); } void siso_combined_f_impl::set_D(int D) { + gr::thread::scoped_lock guard(d_setlock); d_D=D; recalculate(); } - + void siso_combined_f_impl::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void siso_combined_f_impl::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + + void siso_combined_f_impl::set_SISO_TYPE(trellis::siso_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_SISO_TYPE = type; + } + + void siso_combined_f_impl::set_TABLE(const std::vector<float> &table) + { + gr::thread::scoped_lock guard(d_setlock); + d_TABLE = table; + } + + void siso_combined_f_impl::set_TYPE(digital::trellis_metric_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_TYPE = type; + } siso_combined_f_impl::~siso_combined_f_impl() { @@ -163,6 +196,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = output_items.size(); //printf("general_work:Streams: %d\n",nstreams); diff --git a/gr-trellis/lib/siso_combined_f_impl.h b/gr-trellis/lib/siso_combined_f_impl.h index 9457637259..93e9aa87d2 100644 --- a/gr-trellis/lib/siso_combined_f_impl.h +++ b/gr-trellis/lib/siso_combined_f_impl.h @@ -67,14 +67,14 @@ namespace gr { void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0){ d_S0 = S0; } - void set_SK(int SK){ d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); void set_POSTI(bool POSTI); void set_POSTO(bool POSTO); - void set_SISO_TYPE(trellis::siso_type_t type) { d_SISO_TYPE = type; } + void set_SISO_TYPE(trellis::siso_type_t type); void set_D(int D); - void set_TABLE(const std::vector<float> &table){ d_TABLE = table; } - void set_TYPE(digital::trellis_metric_type_t type){ d_TYPE = type; } + void set_TABLE(const std::vector<float> &table); + void set_TYPE(digital::trellis_metric_type_t type); void forecast(int noutput_items, gr_vector_int &ninput_items_required); diff --git a/gr-trellis/lib/siso_f_impl.cc b/gr-trellis/lib/siso_f_impl.cc index a1c7ab3320..2af5a21710 100644 --- a/gr-trellis/lib/siso_f_impl.cc +++ b/gr-trellis/lib/siso_f_impl.cc @@ -91,28 +91,50 @@ namespace gr { void siso_f_impl::set_FSM(const fsm &FSM) { + gr::thread::scoped_lock guard(d_setlock); d_FSM=FSM; recalculate(); } void siso_f_impl::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K=K; recalculate(); } void siso_f_impl::set_POSTI(bool POSTI) { + gr::thread::scoped_lock guard(d_setlock); d_POSTI = POSTI; recalculate(); } void siso_f_impl::set_POSTO(bool POSTO) { + gr::thread::scoped_lock guard(d_setlock); d_POSTO = POSTO; recalculate(); } + void siso_f_impl::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void siso_f_impl::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + + void siso_f_impl::set_SISO_TYPE(trellis::siso_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_SISO_TYPE = type; + } + siso_f_impl::~siso_f_impl() { } @@ -148,6 +170,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = output_items.size(); //printf("general_work:Streams: %d\n",nstreams); int multiple; diff --git a/gr-trellis/lib/siso_f_impl.h b/gr-trellis/lib/siso_f_impl.h index c8c9e1ae41..f92616bf0a 100644 --- a/gr-trellis/lib/siso_f_impl.h +++ b/gr-trellis/lib/siso_f_impl.h @@ -63,11 +63,11 @@ namespace gr { void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0){ d_S0 = S0; } - void set_SK(int SK){ d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); void set_POSTI(bool POSTI); void set_POSTO(bool POSTO); - void set_SISO_TYPE(trellis::siso_type_t type) { d_SISO_TYPE = type; } + void set_SISO_TYPE(trellis::siso_type_t type); void forecast(int noutput_items, gr_vector_int &ninput_items_required); diff --git a/gr-trellis/lib/viterbi_X_impl.cc.t b/gr-trellis/lib/viterbi_X_impl.cc.t index bd5bdd8413..1d4864596e 100644 --- a/gr-trellis/lib/viterbi_X_impl.cc.t +++ b/gr-trellis/lib/viterbi_X_impl.cc.t @@ -55,18 +55,32 @@ namespace gr { set_output_multiple(d_K); } - void @IMPL_NAME@::set_FSM(fsm &FSM) + void @IMPL_NAME@::set_FSM(const fsm &FSM) { + gr::thread::scoped_lock guard(d_setlock); d_FSM = FSM; set_relative_rate(1.0 / ((double)d_FSM.O())); } void @IMPL_NAME@::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K = K; set_output_multiple(d_K); } + void @IMPL_NAME@::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void @IMPL_NAME@::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + @IMPL_NAME@::~@IMPL_NAME@() { } @@ -88,6 +102,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); int nblocks = noutput_items / d_K; diff --git a/gr-trellis/lib/viterbi_X_impl.h.t b/gr-trellis/lib/viterbi_X_impl.h.t index 44934a5e22..1479ad5a3f 100644 --- a/gr-trellis/lib/viterbi_X_impl.h.t +++ b/gr-trellis/lib/viterbi_X_impl.h.t @@ -49,10 +49,10 @@ namespace gr { int S0() const { return d_S0; } int SK() const { return d_SK; } - void set_FSM(fsm &FSM); + void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0) { d_S0 = S0; } - void set_SK(int SK) { d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); //std::vector<int> trace () const { return d_trace; } void forecast(int noutput_items, diff --git a/gr-trellis/lib/viterbi_combined_XX_impl.cc.t b/gr-trellis/lib/viterbi_combined_XX_impl.cc.t index 91bb4e6c34..722708bcd2 100644 --- a/gr-trellis/lib/viterbi_combined_XX_impl.cc.t +++ b/gr-trellis/lib/viterbi_combined_XX_impl.cc.t @@ -63,6 +63,7 @@ namespace gr { void @IMPL_NAME@::set_K(int K) { + gr::thread::scoped_lock guard(d_setlock); d_K = K; set_output_multiple(d_K); } @@ -70,9 +71,42 @@ namespace gr { void @IMPL_NAME@::set_D(int D) { + gr::thread::scoped_lock guard(d_setlock); d_D = D; set_relative_rate(1.0 / ((double)d_D)); } + + void @IMPL_NAME@::set_FSM(const fsm &FSM) + { + gr::thread::scoped_lock guard(d_setlock); + d_FSM = FSM; + } + + void @IMPL_NAME@::set_S0(int S0) + { + gr::thread::scoped_lock guard(d_setlock); + d_S0 = S0; + } + + void @IMPL_NAME@::set_SK(int SK) + { + gr::thread::scoped_lock guard(d_setlock); + d_SK = SK; + } + + void + @IMPL_NAME@::set_TYPE(digital::trellis_metric_type_t type) + { + gr::thread::scoped_lock guard(d_setlock); + d_TYPE = type; + } + + void + @IMPL_NAME@::set_TABLE(const std::vector<@I_TYPE@> &table) + { + gr::thread::scoped_lock guard(d_setlock); + d_TABLE = table; + } @IMPL_NAME@::~@IMPL_NAME@() { @@ -95,6 +129,7 @@ namespace gr { gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { + gr::thread::scoped_lock guard(d_setlock); int nstreams = input_items.size(); int nblocks = noutput_items / d_K; diff --git a/gr-trellis/lib/viterbi_combined_XX_impl.h.t b/gr-trellis/lib/viterbi_combined_XX_impl.h.t index 7098d8b329..788e609895 100644 --- a/gr-trellis/lib/viterbi_combined_XX_impl.h.t +++ b/gr-trellis/lib/viterbi_combined_XX_impl.h.t @@ -58,13 +58,13 @@ namespace gr { digital::trellis_metric_type_t TYPE() const { return d_TYPE; } //std::vector<int> trace() const { return d_trace; } - void set_FSM(const fsm &FSM){ d_FSM = FSM; } + void set_FSM(const fsm &FSM); void set_K(int K); - void set_S0(int S0){ d_S0 = S0; } - void set_SK(int SK){ d_SK = SK; } + void set_S0(int S0); + void set_SK(int SK); void set_D(int D); - void set_TABLE(const std::vector<@I_TYPE@> &table) { d_TABLE = table; } - void set_TYPE(digital::trellis_metric_type_t type) { d_TYPE = type; } + void set_TABLE(const std::vector<@I_TYPE@> &table); + void set_TYPE(digital::trellis_metric_type_t type); void forecast(int noutput_items, gr_vector_int &ninput_items_required); |