IT++ Logo

rec_syst_conv_code.h

Go to the documentation of this file.
00001 
00030 #ifndef REC_SYST_CONV_CODE_H
00031 #define REC_SYST_CONV_CODE_H
00032 
00033 #include <itpp/base/vec.h>
00034 #include <itpp/base/mat.h>
00035 #include <itpp/comm/convcode.h>
00036 #include <itpp/comm/llr.h>
00037 
00038 
00039 namespace itpp {
00040 
00051   class Rec_Syst_Conv_Code {
00052   public:
00053 
00055     Rec_Syst_Conv_Code(): infinity(1e30) {}
00056 
00058     virtual ~Rec_Syst_Conv_Code() {}
00059 
00068     void set_generator_polynomials(const ivec &gen, int constraint_length);
00069 
00076     void set_awgn_channel_parameters(double Ec, double N0);
00077 
00083     void set_scaling_factor(double in_Lc);
00084 
00088     void set_llrcalc(LLR_calc_unit in_llrcalc);
00089 
00097     void encode_tail(const bvec &input, bvec &tail, bmat &parity_bits);
00098 
00102     void encode(const bvec &input, bmat &parity_bits);
00103 
00119     virtual void map_decode(const vec &rec_systematic, const mat &rec_parity, const vec &extrinsic_input, vec &extrinsic_output,
00120                             bool set_terminated = false);
00121 
00140     virtual void log_decode(const vec &rec_systematic, const mat &rec_parity, const vec &extrinsic_input,
00141                             vec &extrinsic_output, bool set_terminated = false, std::string metric = "LOGMAX");
00142 
00157     virtual void log_decode_n2(const vec &rec_systematic,
00158                                const vec &rec_parity,
00159                                const vec &extrinsic_input,
00160                                vec &extrinsic_output,
00161                                bool set_terminated = false,
00162                                std::string metric = "LOGMAX");
00163 
00164     // ===== EGL: ADDED FUNCTIONS NOV 2005 (THESE ARE DERIVATIVES OF EXISTING FUNCTIONS) ======
00165 
00178     virtual void log_decode(const QLLRvec &rec_systematic,
00179                             const QLLRmat &rec_parity,
00180                             const QLLRvec &extrinsic_input,
00181                             QLLRvec &extrinsic_output,
00182                             bool set_terminated = false);
00183 
00196     virtual void log_decode_n2(const QLLRvec &rec_systematic,
00197                                const QLLRvec &rec_parity,
00198                                const QLLRvec &extrinsic_input,
00199                                QLLRvec &extrinsic_output,
00200                                bool set_terminated = false);
00201 
00202     // ========================================================
00203 
00204   private:
00206     int calc_state_transition(const int instate, const int input, ivec &parity);
00207 
00208     int n, K, m;
00209     ivec gen_pol, gen_pol_rev;
00210     int encoder_state, Nstates;
00211     double rate, Lc;
00212     imat state_trans, output_parity, rev_state_trans, rev_output_parity;
00213     bool terminated;
00214     mat gamma, alpha, beta;
00215     QLLRmat gamma_q, alpha_q, beta_q;
00216     vec denom;
00217     QLLRvec denom_q;
00218     double ln2;
00219 
00224     LLR_calc_unit llrcalc;
00225 
00226     // This const value replaces INT definition used previously
00227     const double infinity;
00228   };
00229 
00230 } // namespace itpp
00231 
00232 #endif // #ifndef REC_SYST_CONV_CODE_H
SourceForge Logo

Generated on Thu Apr 24 13:39:00 2008 for IT++ by Doxygen 1.5.5