93 void set_map_metric(
const std::string &in_MAP_metric);
98 void set_precoder_generator(
const itpp::bvec &in_prec_gen);
99 void set_precoder_generator(
const int &in_prec_gen,
const int &constraint_length);
104 void set_generators(
const itpp::bmat &in_gen);
105 void set_generators(
const itpp::ivec &in_gen,
const int &constraint_length);
111 void set_tail(
const bool &in_tail);
113 void set_viterbi_win_len(
const int &win_len);
115 void set_sova_scaling_factor(
const double &scaling_factor);
117 void set_sova_threshold(
const double &threshold);
119 void set_viterbi_scaling_factors(
const double &matching_scaling_factor,
120 const double &nonmatching_scaling_factor
123 void set_viterbi_hard_output_flag(
const bool &flag);
126 void set_noise(
const double &in_sigma2);
130 void set_impulse_response(
const itpp::vec &h);
134 void set_impulse_response(
const itpp::mat &H);
138 void set_impulse_response(
const itpp::cvec &h);
161 void set_impulse_response(
const itpp::cmat &cH);
167 void set_scrambler_pattern(
const itpp::vec &phi);
168 void set_scrambler_pattern(
const itpp::bvec &phi);
175 void set_mud_method(
const std::string &method);
182 void set_constellation(
const int &in_nb_bits_symb,
183 const itpp::cvec &in_constellation,
184 const itpp::bmat &in_bin_constellation
186 void set_constellation(
const int &in_nb_bits_symb,
187 const itpp::cvec &in_constellation,
188 const itpp::ivec &in_int_constellation
193 void set_st_block_code(
const int &Q,
209 void set_demapper_method(
const std::string &method);
211 void rsc(itpp::vec &extrinsic_coded,
212 itpp::vec &extrinsic_data,
213 const itpp::vec &intrinsic_coded,
214 const itpp::vec &apriori_data
217 void rsc(itpp::vec &extrinsic_coded,
218 itpp::vec &extrinsic_data,
219 const itpp::vec &intrinsic_coded,
220 const itpp::vec &apriori_data,
224 void nsc(itpp::vec &extrinsic_coded,
225 itpp::vec &extrinsic_data,
226 const itpp::vec &intrinsic_coded,
227 const itpp::vec &apriori_data
230 void nsc(itpp::vec &extrinsic_coded,
231 itpp::vec &extrinsic_data,
232 const itpp::vec &intrinsic_coded,
233 const itpp::vec &apriori_data,
240 void equalizer(itpp::vec &extrinsic_data,
241 const itpp::vec &rec_sig,
242 const itpp::vec &apriori_data
248 void equalizer(itpp::vec &extrinsic_data,
249 const itpp::vec &rec_sig,
250 const itpp::vec &apriori_data,
254 void descrambler(itpp::vec &extrinsic_coded,
255 itpp::vec &extrinsic_data,
256 const itpp::vec &intrinsic_coded,
257 const itpp::vec &apriori_data
260 void mud(itpp::mat &extrinsic_data,
261 const itpp::vec &rec_sig,
262 const itpp::mat &apriori_data
265 void demapper(itpp::vec &extrinsic_data,
266 const itpp::cvec &rec_sig,
267 const itpp::vec &apriori_data
270 void demapper(itpp::vec &extrinsic_data,
271 const itpp::cmat &rec_sig,
272 const itpp::vec &apriori_data
275 static double threshold(
const double &x,
const double &value);
276 static itpp::vec threshold(
const itpp::vec &in,
const double &value);
277 static itpp::mat threshold(
const itpp::mat &in,
const double &value);
280 void rsc_logMAP(itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data,
281 const itpp::vec &intrinsic_coded,
const itpp::vec &apriori_data);
283 void rsc_maxlogMAP(itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data,
284 const itpp::vec &intrinsic_coded,
const itpp::vec &apriori_data);
286 void rsc_sova(itpp::vec &extrinsic_data,
287 const itpp::vec &intrinsic_coded,
288 const itpp::vec &apriori_data,
292 void rsc_viterbi(itpp::vec &extrinsic_coded,
293 itpp::vec &extrinsic_data,
294 const itpp::vec &intrinsic_coded,
295 const itpp::vec &apriori_data,
299 void nsc_logMAP(itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data,
300 const itpp::vec &intrinsic_coded,
const itpp::vec &apriori_data);
302 void nsc_maxlogMAP(itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data,
303 const itpp::vec &intrinsic_coded,
const itpp::vec &apriori_data);
305 void equalizer_logMAP(itpp::vec &extrinsic_data,
const itpp::vec &rec_sig,
306 const itpp::vec &apriori_data);
308 void equalizer_maxlogMAP(itpp::vec &extrinsic_data,
const itpp::vec &rec_sig,
309 const itpp::vec &apriori_data);
311 void mud_maxlogMAP(itpp::mat &extrinsic_data,
const itpp::vec &rec_sig,
312 const itpp::mat &apriori_data);
314 void mud_maxlogTMAP(itpp::mat &extrinsic_data,
const itpp::vec &rec_sig,
315 const itpp::mat &apriori_data,
const double &threshold=-5);
317 void GCD(itpp::mat &extrinsic_data,
const itpp::vec &rec_sig,
318 const itpp::mat &apriori_data);
320 void sGCD(itpp::mat &extrinsic_data,
const itpp::vec &rec_sig,
321 const itpp::mat &apriori_data);
323 void Hassibi_maxlogMAP(itpp::vec &extrinsic_data,
const itpp::cmat &rec_sig,
324 const itpp::vec &apriori_data);
326 void GA(itpp::vec &extrinsic_data,
const itpp::cmat &rec_sig,
327 const itpp::vec &apriori_data);
329 void sGA(itpp::vec &extrinsic_data,
const itpp::cmat &rec_sig,
330 const itpp::vec &apriori_data);
332 void mmsePIC(itpp::vec &extrinsic_data,
const itpp::cmat &rec_sig,
333 const itpp::vec &apriori_data);
335 void zfPIC(itpp::vec &extrinsic_data,
const itpp::cmat &rec_sig,
336 const itpp::vec &apriori_data);
338 void Alamouti_maxlogMAP(itpp::vec &extrinsic_data,
const itpp::cmat &rec_sig,
339 const itpp::vec &apriori_data);
341 void demodulator_logMAP(itpp::vec &extrinsic_data,
const itpp::cvec &rec_sig,
342 const itpp::vec &apriori_data);
344 void demodulator_maxlogMAP(itpp::vec &extrinsic_data,
const itpp::cvec &rec_sig,
345 const itpp::vec &apriori_data);
350 void print_err_msg(
const std::string &msg)
const;
354 struct ITPP_EXPORT MAP_Metrics
356 enum Type {Unknown, logMAP, maxlogMAP, SOVA, Viterbi};
357 MAP_Metrics() : _t(Unknown) {}
358 MAP_Metrics(Type t) : _t(t) {}
359 operator Type ()
const {
return _t;}
362 template<
typename T>
operator T ()
const;
364 MAP_Metrics MAP_metric;
375 double SOVA_scaling_factor;
377 double SOVA_threshold;
379 double Viterbi_scaling_factor[2];
381 bool Viterbi_hard_output_flag;
386 itpp::mat impulse_response;
388 itpp::cmat c_impulse_response;
390 itpp::bvec scrambler_pattern;
392 struct ITPP_EXPORT MUD_Methods
394 enum Type {Unknown, sGCD, maxlogMAP, GCD};
395 MUD_Methods() : _t(Unknown) {}
396 MUD_Methods(Type t) : _t(t) {}
397 operator Type ()
const {
return _t;}
400 template<
typename T>
operator T ()
const;
402 MUD_Methods MUD_method;
407 itpp::cvec constellation;
409 itpp::bmat bin_constellation;
424 struct ITPP_EXPORT Demapper_Methods
426 enum Type {Unknown, GA, Hassibi_maxlogMAP, sGA, mmsePIC, zfPIC, Alamouti_maxlogMAP};
427 Demapper_Methods() : _t(Unknown) {}
428 Demapper_Methods(Type t) : _t(t) {}
429 operator Type ()
const {
return _t;}
432 template<
typename T>
operator T ()
const;
434 Demapper_Methods demapper_method;
438 void zpFIRfilter(itpp::vec& filt,
443 void gen_chtrellis(
void);
445 void gen_hyperTrellis(
void);
457 void gen_rsctrellis(
void);
468 void gen_nsctrellis(
void);
479 void find_half_const(
int &select_half, itpp::vec &re_part,
480 itpp::bmat &re_bin_part, itpp::vec &im_part, itpp::bmat &im_bin_part);
482 void EquivRecSig(itpp::vec &x_eq,
const itpp::cmat &rec_sig);
484 void EquivCh(itpp::mat &H_eq,
const itpp::cvec &H);
486 void compute_symb_stats(itpp::vec &Es, itpp::vec &Vs,
487 int ns,
int select_half,
const itpp::vec &apriori_data,
488 const itpp::vec &re_part,
const itpp::vec &im_part,
489 const itpp::bmat &re_bin_part,
const itpp::bmat &im_bin_part);
490 static MAP_Metrics map_metric_from_string(
const std::string &in_MAP_metric);
491 static MUD_Methods mud_method_from_string(
const std::string &in_mud_method);
492 static Demapper_Methods demapper_method_from_string(
const std::string &in_dem_method);