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 {
00041 
00052 class Rec_Syst_Conv_Code
00053 {
00054 public:
00055 
00057   Rec_Syst_Conv_Code(): infinity(1e30) {}
00058 
00060   virtual ~Rec_Syst_Conv_Code() {}
00061 
00070   void set_generator_polynomials(const ivec &gen, int constraint_length);
00071 
00078   void set_awgn_channel_parameters(double Ec, double N0);
00079 
00085   void set_scaling_factor(double in_Lc);
00086 
00090   void set_llrcalc(LLR_calc_unit in_llrcalc);
00091 
00099   void encode_tail(const bvec &input, bvec &tail, bmat &parity_bits);
00100 
00104   void encode(const bvec &input, bmat &parity_bits);
00105 
00121   virtual void map_decode(const vec &rec_systematic, const mat &rec_parity, const vec &extrinsic_input, vec &extrinsic_output,
00122                           bool set_terminated = false);
00123 
00142   virtual void log_decode(const vec &rec_systematic, const mat &rec_parity, const vec &extrinsic_input,
00143                           vec &extrinsic_output, bool set_terminated = false, std::string metric = "LOGMAX");
00144 
00159   virtual void log_decode_n2(const vec &rec_systematic,
00160                              const vec &rec_parity,
00161                              const vec &extrinsic_input,
00162                              vec &extrinsic_output,
00163                              bool set_terminated = false,
00164                              std::string metric = "LOGMAX");
00165 
00166   // ===== EGL: ADDED FUNCTIONS NOV 2005 (THESE ARE DERIVATIVES OF EXISTING FUNCTIONS) ======
00167 
00180   virtual void log_decode(const QLLRvec &rec_systematic,
00181                           const QLLRmat &rec_parity,
00182                           const QLLRvec &extrinsic_input,
00183                           QLLRvec &extrinsic_output,
00184                           bool set_terminated = false);
00185 
00198   virtual void log_decode_n2(const QLLRvec &rec_systematic,
00199                              const QLLRvec &rec_parity,
00200                              const QLLRvec &extrinsic_input,
00201                              QLLRvec &extrinsic_output,
00202                              bool set_terminated = false);
00203 
00204   // ========================================================
00205 
00207   Rec_Syst_Conv_Code & operator=(const Rec_Syst_Conv_Code &) { return *this; }
00208 
00209 private:
00211   int calc_state_transition(const int instate, const int input, ivec &parity);
00212 
00213   int n, K, m;
00214   ivec gen_pol, gen_pol_rev;
00215   int encoder_state, Nstates;
00216   double rate, Lc;
00217   imat state_trans, output_parity, rev_state_trans, rev_output_parity;
00218   bool terminated;
00219   mat gamma, alpha, beta;
00220   QLLRmat gamma_q, alpha_q, beta_q;
00221   vec denom;
00222   QLLRvec denom_q;
00223   double ln2;
00224 
00229   LLR_calc_unit llrcalc;
00230 
00231   // This const value replaces INT definition used previously
00232   const double infinity;
00233 };
00234 
00235 } // namespace itpp
00236 
00237 #endif // #ifndef REC_SYST_CONV_CODE_H
SourceForge Logo

Generated on Sun Jul 26 08:36:51 2009 for IT++ by Doxygen 1.5.9