IT++ Logo Newcom Logo

rec_syst_conv_code.h

Go to the documentation of this file.
00001 
00033 #ifndef REC_SYST_CONV_CODE_H
00034 #define REC_SYST_CONV_CODE_H
00035 
00036 #include <itpp/base/vec.h>
00037 #include <itpp/base/mat.h>
00038 #include <itpp/comm/convcode.h>
00039 #include <itpp/comm/llr.h>
00040 
00041 
00042 namespace itpp {
00043 
00054   class Rec_Syst_Conv_Code {
00055   public:
00056 
00058     Rec_Syst_Conv_Code(void) {}
00059 
00061     virtual ~Rec_Syst_Conv_Code(void) {}
00062 
00071     void set_generator_polynomials(const ivec &gen, int constraint_length);
00072 
00079     void set_awgn_channel_parameters(double Ec, double N0);
00080 
00086     void set_scaling_factor(double in_Lc);
00087 
00091     void set_llrcalc(LLR_calc_unit in_llrcalc); 
00092 
00100     void encode_tail(const bvec &input, bvec &tail, bmat &parity_bits);
00101 
00105     void encode(const bvec &input, bmat &parity_bits);
00106 
00122     virtual void map_decode(const vec &rec_systematic, const mat &rec_parity, const vec &extrinsic_input, vec &extrinsic_output, 
00123                             bool set_terminated = false);
00124 
00143     virtual void log_decode(const vec &rec_systematic, const mat &rec_parity, const vec &extrinsic_input, 
00144                             vec &extrinsic_output, bool set_terminated = false, std::string metric = "LOGMAX");
00145 
00160     virtual void log_decode_n2(const vec &rec_systematic, 
00161                                const vec &rec_parity,
00162                                const vec &extrinsic_input, 
00163                                vec &extrinsic_output, 
00164                                bool set_terminated = false, 
00165                                std::string metric = "LOGMAX");
00166 
00167     // ===== EGL: ADDED FUNCTIONS NOV 2005 (THESE ARE DERIVATIVES OF EXISTING FUNCTIONS) ======
00168 
00181     virtual void log_decode(const QLLRvec &rec_systematic, 
00182                             const QLLRmat &rec_parity, 
00183                             const QLLRvec &extrinsic_input, 
00184                             QLLRvec &extrinsic_output, 
00185                             bool set_terminated = false);
00186 
00199     virtual void log_decode_n2(const QLLRvec &rec_systematic, 
00200                                const QLLRvec &rec_parity, 
00201                                const QLLRvec &extrinsic_input, 
00202                                QLLRvec &extrinsic_output, 
00203                                bool set_terminated = false);
00204 
00205     // ========================================================
00206 
00207   private:
00208 
00210     int calc_state_transition(const int instate, const int input, ivec &parity);
00211 
00212     int n, K, m;
00213     ivec gen_pol, gen_pol_rev;
00214     int encoder_state, Nstates;
00215     double rate, Lc;
00216     imat state_trans, output_parity, rev_state_trans, rev_output_parity;
00217     bool terminated;
00218     mat gamma, alpha, beta;
00219     QLLRmat gamma_q, alpha_q, beta_q;
00220     vec denom;
00221     QLLRvec denom_q;
00222     double ln2;
00223 
00228     LLR_calc_unit llrcalc;  
00229 
00230   };
00231 
00232 } // namespace itpp
00233 
00234 #endif // #ifndef REC_SYST_CONV_CODE_H
SourceForge Logo

Generated on Fri Jun 8 00:27:16 2007 for IT++ by Doxygen 1.5.2