diff options
Diffstat (limited to 'gr-trellis/lib/siso_f_impl.cc')
-rw-r--r-- | gr-trellis/lib/siso_f_impl.cc | 80 |
1 files changed, 66 insertions, 14 deletions
diff --git a/gr-trellis/lib/siso_f_impl.cc b/gr-trellis/lib/siso_f_impl.cc index d699cecaec..2af5a21710 100644 --- a/gr-trellis/lib/siso_f_impl.cc +++ b/gr-trellis/lib/siso_f_impl.cc @@ -45,19 +45,8 @@ namespace gr { (new siso_f_impl(FSM, K, S0, SK, POSTI, POSTO, SISO_TYPE)); } - siso_f_impl::siso_f_impl(const fsm &FSM, int K, - int S0, int SK, - bool POSTI, bool POSTO, - siso_type_t SISO_TYPE) - : block("siso_f", - io_signature::make(1, -1, sizeof(float)), - io_signature::make(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)) + + void siso_f_impl::recalculate() { int multiple; if(d_POSTI && d_POSTO) @@ -69,7 +58,6 @@ namespace gr { 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 a block with 2 inputs? @@ -84,6 +72,69 @@ namespace gr { set_relative_rate(multiple / ((double) d_FSM.I())); } + siso_f_impl::siso_f_impl(const fsm &FSM, int K, + int S0, int SK, + bool POSTI, bool POSTO, + siso_type_t SISO_TYPE) + : block("siso_f", + io_signature::make(1, -1, sizeof(float)), + io_signature::make(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)) + { + recalculate(); + } + + 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() { } @@ -119,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; |