diff options
author | anastas | 2006-08-16 20:07:36 +0000 |
---|---|---|
committer | anastas | 2006-08-16 20:07:36 +0000 |
commit | d5c192f9e3cde58589845b7b51057afc45d3bc79 (patch) | |
tree | 04dc746388bb19f66bae93d110e4f2a5ca14c64b /gr-trellis/src/lib/trellis_encoder_bs.cc | |
parent | 1f0a124c68a40b2eee063267d4f7aeba4ed87619 (diff) | |
download | gnuradio-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_bs.cc')
-rw-r--r-- | gr-trellis/src/lib/trellis_encoder_bs.cc | 30 |
1 files changed, 14 insertions, 16 deletions
diff --git a/gr-trellis/src/lib/trellis_encoder_bs.cc b/gr-trellis/src/lib/trellis_encoder_bs.cc index 9546e3d9d..34876044b 100644 --- a/gr-trellis/src/lib/trellis_encoder_bs.cc +++ b/gr-trellis/src/lib/trellis_encoder_bs.cc @@ -29,12 +29,12 @@ #include <iostream> trellis_encoder_bs_sptr -trellis_make_encoder_bs (const fsm &FSM, const int ST) +trellis_make_encoder_bs (const fsm &FSM, int ST) { return trellis_encoder_bs_sptr (new trellis_encoder_bs (FSM,ST)); } -trellis_encoder_bs::trellis_encoder_bs (const fsm &FSM, const int ST) +trellis_encoder_bs::trellis_encoder_bs (const fsm &FSM, int ST) : gr_sync_block ("encoder_bs", gr_make_io_signature (1, -1, sizeof (unsigned char)), gr_make_io_signature (1, -1, sizeof (short))), @@ -50,26 +50,24 @@ trellis_encoder_bs::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]; - short *out = (short *) 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]; + short *out = (short *) output_items[m]; + ST_tmp = d_ST; -// per stream processing - - for (int i = 0; i < noutput_items; i++){ - out[i] = (short) 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] = (short) 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; } |