summaryrefslogtreecommitdiff
path: root/gr-trellis/src/lib/trellis_encoder_bi.cc
diff options
context:
space:
mode:
authoranastas2006-08-16 20:07:36 +0000
committeranastas2006-08-16 20:07:36 +0000
commitd5c192f9e3cde58589845b7b51057afc45d3bc79 (patch)
tree04dc746388bb19f66bae93d110e4f2a5ca14c64b /gr-trellis/src/lib/trellis_encoder_bi.cc
parent1f0a124c68a40b2eee063267d4f7aeba4ed87619 (diff)
downloadgnuradio-d5c192f9e3cde58589845b7b51057afc45d3bc79.tar.gz
gnuradio-d5c192f9e3cde58589845b7b51057afc45d3bc79.tar.bz2
gnuradio-d5c192f9e3cde58589845b7b51057afc45d3bc79.zip
Several enhancements to gr-trellis and gnuradio-examples/python/channel-coding:
-Added fsm constructor for generating FSM directly from the generator matrix of binary convolutional codes. -Added functionality to fsm class to compute the best way to go from any state to any other state (useful for termination) -Added soft-in-soft-out (SISO) block for turbo processing -Added turbo decoding examples git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@3322 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gr-trellis/src/lib/trellis_encoder_bi.cc')
-rw-r--r--gr-trellis/src/lib/trellis_encoder_bi.cc30
1 files changed, 14 insertions, 16 deletions
diff --git a/gr-trellis/src/lib/trellis_encoder_bi.cc b/gr-trellis/src/lib/trellis_encoder_bi.cc
index 968527b8f..d0848be63 100644
--- a/gr-trellis/src/lib/trellis_encoder_bi.cc
+++ b/gr-trellis/src/lib/trellis_encoder_bi.cc
@@ -29,12 +29,12 @@
#include <iostream>
trellis_encoder_bi_sptr
-trellis_make_encoder_bi (const fsm &FSM, const int ST)
+trellis_make_encoder_bi (const fsm &FSM, int ST)
{
return trellis_encoder_bi_sptr (new trellis_encoder_bi (FSM,ST));
}
-trellis_encoder_bi::trellis_encoder_bi (const fsm &FSM, const int ST)
+trellis_encoder_bi::trellis_encoder_bi (const fsm &FSM, int ST)
: gr_sync_block ("encoder_bi",
gr_make_io_signature (1, -1, sizeof (unsigned char)),
gr_make_io_signature (1, -1, sizeof (int))),
@@ -50,26 +50,24 @@ trellis_encoder_bi::work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
- int d_ST_tmp;
+ int ST_tmp;
assert (input_items.size() == output_items.size());
int nstreams = input_items.size();
-for (int m=0;m<nstreams;m++) {
- const unsigned char *in = (const unsigned char *) input_items[m];
- int *out = (int *) output_items[m];
- d_ST_tmp = d_ST;
+ for (int m=0;m<nstreams;m++) {
+ const unsigned char *in = (const unsigned char *) input_items[m];
+ int *out = (int *) output_items[m];
+ ST_tmp = d_ST;
-// per stream processing
-
- for (int i = 0; i < noutput_items; i++){
- out[i] = (int) d_FSM.OS()[d_ST_tmp*d_FSM.I()+in[i]]; // direction of time?
- d_ST_tmp = (int) d_FSM.NS()[d_ST_tmp*d_FSM.I()+in[i]];
+ // per stream processing
+ for (int i = 0; i < noutput_items; i++){
+ out[i] = (int) 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
}
-
-// end per stream processing
-}
- d_ST = d_ST_tmp;
+ d_ST = ST_tmp;
return noutput_items;
}