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
Generated on Thu Apr 23 20:06:47 2009 for IT++ by Doxygen 1.5.8