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
Generated on Sat Aug 25 23:40:04 2007 for IT++ by Doxygen 1.5.2