summaryrefslogtreecommitdiff
path: root/gr-trellis/lib
diff options
context:
space:
mode:
authorAchilleas Anastasopoulos <anastas@umich.edu>2014-10-01 18:22:53 -0400
committerAchilleas Anastasopoulos <anastas@umich.edu>2014-10-08 12:46:21 -0400
commitbe8e888f80934a884287f0ec9eb62dd0d2b7f5e5 (patch)
treedc3406eb0a25bb3171458bfded74cfe192a775a5 /gr-trellis/lib
parent46e9dfed237990da20b5fb054b7fd33b1c152b4a (diff)
Updated documentation and grc/python examples in gr-trellis.
Removed weird pyhton examples and made them grc files.
Diffstat (limited to 'gr-trellis/lib')
-rw-r--r--gr-trellis/lib/encoder_XX_impl.cc.t61
-rw-r--r--gr-trellis/lib/encoder_XX_impl.h.t9
2 files changed, 45 insertions, 25 deletions
diff --git a/gr-trellis/lib/encoder_XX_impl.cc.t b/gr-trellis/lib/encoder_XX_impl.cc.t
index 4b11e3c06d..f2e19929ca 100644
--- a/gr-trellis/lib/encoder_XX_impl.cc.t
+++ b/gr-trellis/lib/encoder_XX_impl.cc.t
@@ -37,15 +37,24 @@ namespace gr {
@BASE_NAME@::make(const fsm &FSM, int ST)
{
return gnuradio::get_initial_sptr
- (new @IMPL_NAME@(FSM,ST));
+ (new @IMPL_NAME@(FSM,ST,0,false));
}
- @IMPL_NAME@::@IMPL_NAME@(const fsm &FSM, int ST)
+ @BASE_NAME@::sptr
+ @BASE_NAME@::make(const fsm &FSM, int ST, int K)
+ {
+ return gnuradio::get_initial_sptr
+ (new @IMPL_NAME@(FSM,ST,K,true));
+ }
+
+ @IMPL_NAME@::@IMPL_NAME@(const fsm &FSM, int ST, int K, bool B)
: sync_block("@BASE_NAME@",
- io_signature::make(1, -1, sizeof(@I_TYPE@)),
- io_signature::make(1, -1, sizeof(@O_TYPE@))),
+ io_signature::make(1, 1, sizeof(@I_TYPE@)),
+ io_signature::make(1, 1, sizeof(@O_TYPE@))),
d_FSM(FSM),
- d_ST(ST)
+ d_ST(ST),
+ d_K(K),
+ d_B(B)
{
}
@@ -59,24 +68,32 @@ namespace gr {
gr_vector_void_star &output_items)
{
int ST_tmp = 0;
- 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];
- ST_tmp = d_ST;
- // 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
- }
- d_ST = ST_tmp;
-
- return noutput_items;
- }
+ if (d_B){ // blockwise operation
+ int nblocks = noutput_items /d_K;
+ const @I_TYPE@ *in = (const @I_TYPE@*)input_items[0];
+ @O_TYPE@ *out = (@O_TYPE@ *) output_items[0];
+ for(int n = 0; n < nblocks; n++) {
+ ST_tmp = d_ST;
+ for(int i = 0; i < d_K; i++) {
+ out[n*d_K+i] = (@O_TYPE@)d_FSM.OS()[ST_tmp*d_FSM.I()+in[n*d_K+i]];
+ ST_tmp = (int)d_FSM.NS()[ST_tmp*d_FSM.I()+in[n*d_K+i]];
+ }
+ }
+ return nblocks*d_K;
+ } // end blockwise operation
+ else{ // streaming operation
+ const @I_TYPE@ *in = (const @I_TYPE@*)input_items[0];
+ @O_TYPE@ *out = (@O_TYPE@ *) output_items[0];
+ ST_tmp = d_ST;
+ for(int i = 0; i < noutput_items; i++) {
+ out[i] = (@O_TYPE@)d_FSM.OS()[ST_tmp*d_FSM.I()+in[i]];
+ ST_tmp = (int)d_FSM.NS()[ST_tmp*d_FSM.I()+in[i]];
+ }
+ d_ST = ST_tmp;
+ return noutput_items;
+ } // end streaming operation
+ }
} /* namespace trellis */
} /* namespace gr */
diff --git a/gr-trellis/lib/encoder_XX_impl.h.t b/gr-trellis/lib/encoder_XX_impl.h.t
index d58f9b0a87..69f853d9fe 100644
--- a/gr-trellis/lib/encoder_XX_impl.h.t
+++ b/gr-trellis/lib/encoder_XX_impl.h.t
@@ -35,17 +35,20 @@ namespace gr {
private:
fsm d_FSM;
int d_ST;
+ int d_K;
+ bool d_B;
+
public:
- @IMPL_NAME@(const fsm &FSM, int ST);
+ @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; }
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);