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
Generated on Sun Dec 9 17:26:18 2007 for IT++ by Doxygen 1.5.4