itpp::SISO Class Reference
Communications Module » Forward Error Correcting Codes

Soft Input Soft Output (SISO) modules. More...

`#include <itpp/comm/siso.h>`

## Public Member Functions

| SISO ()
| SISO class constructor
void | set_map_metric (const std::string &in_MAP_metric)
| Sets the metric for MAP algorithm (convolutional codes and multipath channels)
void | set_precoder_generator (const itpp::bvec &in_prec_gen)
| Sets the precoder generator polynomial for turbo equalizer.
void | set_precoder_generator (const int &in_prec_gen, const int &constraint_length)
void | set_generators (const itpp::bmat &in_gen)
| Sets convolutional code generator polynomials.
void | set_generators (const itpp::ivec &in_gen, const int &constraint_length)
void | set_tail (const bool &in_tail)
| Signals whether the trellis used in the MAP algorithm is terminated or not (only for convolutional codes and multipath channels)
void | set_viterbi_win_len (const int &win_len)
| Sets the length of the trellis used by the SOVA.
void | set_sova_scaling_factor (const double &scaling_factor)
| Sets the scaling factor used to normalize the reliability value computed by the SOVA.
void | set_sova_threshold (const double &threshold)
| Sets the threshold value used to limit the reliability value computed by SOVA.
void | set_viterbi_scaling_factors (const double &matching_scaling_factor, const double &nonmatching_scaling_factor)
| Sets the Viterbi algorithm scaling factors.
void | set_viterbi_hard_output_flag (const bool &flag)
| Sets the Viterbi algorithm hard output flag (true when only the hard output is needed)
void | set_noise (const double &in_sigma2)
| Sets Additive White Gaussian Noise variance for each dimension.
void | set_impulse_response (const itpp::vec &h)
| Sets channel impulse response for equalizer.
void | set_impulse_response (const itpp::mat &H)
| Sets channel impulse response for Multi-User Detectors.
void | set_impulse_response (const itpp::cvec &h)
| Sets the channel attenuations for demappers (when only a modulator is used)
void | set_impulse_response (const itpp::cmat &cH)
| Sets channel attenuations for demappers (when Space-Time codes are used)
void | set_scrambler_pattern (const itpp::vec &phi)
| Sets scrambler pattern.
void | set_scrambler_pattern (const itpp::bvec &phi)
void | set_mud_method (const std::string &method)
| Sets Multi-User Detector method.
void | set_constellation (const int &in_nb_bits_symb, const itpp::cvec &in_constellation, const itpp::bmat &in_bin_constellation)
| Sets symbol constellation.
void | set_constellation (const int &in_nb_bits_symb, const itpp::cvec &in_constellation, const itpp::ivec &in_int_constellation)
void | set_st_block_code (const int &Q, const itpp::cmat &A, const itpp::cmat &B, const int &N)
| Sets Space-Time block code parameters.
void | set_demapper_method (const std::string &method)
| Sets demapper method.
void | rsc (itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data, const itpp::vec &intrinsic_coded, const itpp::vec &apriori_data)
| SISO decoder for RSC codes
void | rsc (itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data, const itpp::vec &intrinsic_coded, const itpp::vec &apriori_data, const bool &tail)
| SISO decoder for RSC codes (tail is set through input)
void | nsc (itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data, const itpp::vec &intrinsic_coded, const itpp::vec &apriori_data)
| SISO decoder for NSC codes
void | nsc (itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data, const itpp::vec &intrinsic_coded, const itpp::vec &apriori_data, const bool &tail)
| SISO decoder for NSC codes (tail is set through input)
void | equalizer (itpp::vec &extrinsic_data, const itpp::vec &rec_sig, const itpp::vec &apriori_data)
| SISO equalizer
void | equalizer (itpp::vec &extrinsic_data, const itpp::vec &rec_sig, const itpp::vec &apriori_data, const bool &tail)
| SISO equalizer (tail is set through input)
void | descrambler (itpp::vec &extrinsic_coded, itpp::vec &extrinsic_data, const itpp::vec &intrinsic_coded, const itpp::vec &apriori_data)
| SISO descrambler
void | mud (itpp::mat &extrinsic_data, const itpp::vec &rec_sig, const itpp::mat &apriori_data)
| SISO Multi-User Detector
void | demapper (itpp::vec &extrinsic_data, const itpp::cvec &rec_sig, const itpp::vec &apriori_data)
| SISO demapper (when only a modulator is used)
void | demapper (itpp::vec &extrinsic_data, const itpp::cmat &rec_sig, const itpp::vec &apriori_data)
| SISO demapper (when Space-Time codes are used)

## Static Public Member Functions

static double | threshold (const double &x, const double &value)
| Functions used to limit values at a given +- threshold.
static itpp::vec | threshold (const itpp::vec &in, const double &value)
static itpp::mat | threshold (const itpp::mat &in, const double &value)

## Detailed Description

Soft Input Soft Output (SISO) modules.

The following SISO modules are implemented:

- decoder for an Recursive Systematic Convolutional (RSC) code
- decoder for an Non-recursive non-Systematic Convolutional (NSC) code
- equalizer (without and with precoding)
- descrambler used in Interleave Division Multiple Access (IDMA) systems
- Multi User Detectors (MUDs) for IDMA systems
- demappers for Bit Interleaved Coded Modulation (BICM) systems

- demappers for Space Time (ST) BICM systems

  Note
    BPSK mapping is realized as follows: 0 -> +1 and 1 -> -1. Thus the xor truth table is preserved when multiplying BPSK symbols.
    There is some overlap in functionality between the SISO class and the Modulator_ND class as follows:
    - When used for ST-BICM systems, both SISO and Modulator_ND classes can be used for iterative (turbo reception), but the for the SISO class the emitter part is implemented by the STC class, while for the Modulator_ND class the emitter is implemented by the same class.
    - When used for reception, the SISO class is more generic than the Modulator_ND class since it allows the use of several ST codes following Hassibi's model (see STC class) and several reception algorithms.
    - The SISO demapper for ST-BICM systems when using V-BLAST as ST code can be replaced by the ND demodulator (see Modulator_ND class). The best performance could be achieved with the ND demodulator using FULL_ENUM_LOGMAP algorithm followed by the SISO demapper with Hassibi_maxlogMAP algorithm (less complex than FULL_ENUM_LOGMAP). There is no configuration in which the ND demodulator and the SISO demapper can be considered completely equivalent (from an implementation point of view).

Definition at line 71 of file siso.h.

## Constructor & Destructor Documentation

## SISO()

itpp::SISO::SISO | ( |  | ) |

inline

SISO class constructor

Internal variables are initialized with default values:

- the trellis used in MAP algorithm is not terminated
- maxlogMAP metric is used
- simplified GCD is selected
- no scrambler is used
- GA demapper is selected, etc.

Definition at line 495 of file siso.h.

## Member Function Documentation

## set_map_metric()

void itpp::SISO::set_map_metric | ( | const std::string & | in_MAP_metric | ) |

inline

Sets the metric for MAP algorithm (convolutional codes and multipath channels)

Possible input values are:

- logMAP
- maxlogMAP
- SOVA
- Viterbi

Note
  Soft Output Viterbi Algorithm (SOVA) is equivalent to the MAP algorithm only when the a priori information is zero.

Definition at line 574 of file siso.h.

## set_precoder_generator() [1/2]

void itpp::SISO::set_precoder_generator | ( | const itpp::bvec & | in_prec_gen | ) |

inline

Sets the precoder generator polynomial for turbo equalizer.

The precoder is used in turbo equalization. The generator polynomial describes the feedback connections of the precoder.

Definition at line 579 of file siso.h.

## set_precoder_generator() [2/2]

void itpp::SISO::set_precoder_generator | ( | const int & | in_prec_gen,
|  | const int & | constraint_length
| ) |  |

inline

Definition at line 584 of file siso.h.

## set_generators() [1/2]

void itpp::SISO::set_generators | ( | const itpp::bmat & | in_gen | ) |

inline

Sets convolutional code generator polynomials.

The generator polynomials are specified as rows of the input binary matrix.

Definition at line 590 of file siso.h.

## set_generators() [2/2]

void itpp::SISO::set_generators | ( | const itpp::ivec & | in_gen,
|  | const int & | constraint_length
| ) |  |

inline

Definition at line 595 of file siso.h.

## set_tail()

void itpp::SISO::set_tail | ( | const bool & | in_tail | ) |

inline

Signals whether the trellis used in the MAP algorithm is terminated or not (only for convolutional codes and multipath channels)

If the input value is true, the trellis is terminated. In order to terminate the trellis an ending bit tail is added to the input stream of the encoder.

Definition at line 604 of file siso.h.

Referenced by equalizer(), nsc(), and rsc().

## set_viterbi_win_len()

void itpp::SISO::set_viterbi_win_len | ( | const int & | win_len | ) |

inline

Sets the length of the trellis used by the SOVA.

Definition at line 609 of file siso.h.

## set_sova_scaling_factor()

void itpp::SISO::set_sova_scaling_factor | ( | const double & | scaling_factor | ) |

inline

Sets the scaling factor used to normalize the reliability value computed by the SOVA.

Definition at line 614 of file siso.h.

## set_sova_threshold()

void itpp::SISO::set_sova_threshold | ( | const double & | threshold | ) |

inline

Sets the threshold value used to limit the reliability value computed by SOVA.

Definition at line 619 of file siso.h.

References threshold().

## set_viterbi_scaling_factors()

void itpp::SISO::set_viterbi_scaling_factors | ( | const double & | matching_scaling_factor,
|  | const double & | nonmatching_scaling_factor
| ) |  |

inline

Sets the Viterbi algorithm scaling factors.

Parameters

  matching_scaling_factor | scaling factor for matching bits
  nonmatching_scaling_factor | scaling factor for non matching bits

Definition at line 624 of file siso.h.

## set_viterbi_hard_output_flag()

void itpp::SISO::set_viterbi_hard_output_flag | ( | const bool & | flag | ) |

inline

Sets the Viterbi algorithm hard output flag (true when only the hard output is needed)

Definition at line 631 of file siso.h.

## set_noise()

void itpp::SISO::set_noise | ( | const double & | in_sigma2 | ) |

inline

Sets Additive White Gaussian Noise variance for each dimension.

Definition at line 636 of file siso.h.

## set_impulse_response() [1/4]

void itpp::SISO::set_impulse_response | ( | const itpp::vec & | h | ) |

inline

Sets channel impulse response for equalizer.

The input is a real channel impulse response.

Definition at line 641 of file siso.h.

References itpp::Array< T >::length().

## set_impulse_response() [2/4]

void itpp::SISO::set_impulse_response | ( | const itpp::mat & | H | ) |

inline

Sets channel impulse response for Multi-User Detectors.

The input is a real matrix with each row represented by the channel impulse response of one user.

Definition at line 647 of file siso.h.

## set_impulse_response() [3/4]

void itpp::SISO::set_impulse_response | ( | const itpp::cvec & | h | ) |

inline

Sets the channel attenuations for demappers (when only a modulator is used)

The input is the vector of channel attenuations for each received symbol

Definition at line 652 of file siso.h.

References itpp::Array< T >::length().

## set_impulse_response() [4/4]

void itpp::SISO::set_impulse_response | ( | const itpp::cmat & | cH | ) |

inline

Sets channel attenuations for demappers (when Space-Time codes are used)

The input is a complex matrix of dimension , where and is the number of emission and reception antennas, respectively and is the transmission duration expressed in symbol durations.

This input matrix is formed as follows:

- the starting point is an complex matrix (channel matrix) with one row represented by the atenuations seen by each of reception antennas during one symbol duration, when the signal is emitted by a given emission antenna. The row number represents the number of emission antenna.
- the channel matrix is then transformed into a vector of length , with the first elements the first column of the channel matrix
- the vector of length represents one column of the input matrix
- in the input matrix, the vector is repeated times and different vectors are used. Thus, the channel is supposed constant over symbol durations (channel coherence time) and different channel realisations are used.
- in our implementation must be and integer multiple of , where is the ST block code duration expressed in symbol durations. This means that the channel matrix must be constant over at least symbol durations.

Definition at line 658 of file siso.h.

## set_scrambler_pattern() [1/2]

void itpp::SISO::set_scrambler_pattern | ( | const itpp::vec & | phi | ) |

inline

Sets scrambler pattern.

The scrambler pattern must be a sequence of and is used by the SISO NSC module in IDMA systems reception. At emission side the bits are first encoded by an NSC code, BPSK modulated and then scrambled with the given pattern.

Definition at line 663 of file siso.h.

References itpp::Array< T >::length().

## set_scrambler_pattern() [2/2]

void itpp::SISO::set_scrambler_pattern | ( | const itpp::bvec & | phi | ) |

inline

Definition at line 673 of file siso.h.

## set_mud_method()

void itpp::SISO::set_mud_method | ( | const std::string & | method | ) |

inline

Sets Multi-User Detector method.

Possible input values are:

- maxlogMAP
- GCD
- sGCD (simplified GCD)

Definition at line 678 of file siso.h.

## set_constellation() [1/2]

void itpp::SISO::set_constellation | ( | const int & | in_nb_bits_symb,
|  | const itpp::cvec & | in_constellation,
|  | const itpp::bmat & | in_bin_constellation
| ) |  |

inline

Sets symbol constellation.

The correspondence between each symbol and its binary representation is given. Note that if the symbols are normalized to the square root of the number of emission antenna you should use the normalized constellation as input for this method.

Parameters

  in_nb_bits_symb | the number of symbols
  in_constellation | all possible symbols as a complex vector
  in_bin_constellation | binary representations of symbols as a binary matrix (each row corresponds to one symbol)

Definition at line 683 of file siso.h.

## set_constellation() [2/2]

void itpp::SISO::set_constellation | ( | const int & | in_nb_bits_symb,
|  | const itpp::cvec & | in_constellation,
|  | const itpp::ivec & | in_int_constellation
| ) |  |

inline

Parameters

  in_nb_bits_symb | the number of symbols
  in_constellation | all possible symbols as a complex vector
  in_int_constellation | integer representations of symbols as a vector

Definition at line 691 of file siso.h.

References itpp::dec2bin(), and itpp::Array< T >::length().

## set_st_block_code()

void itpp::SISO::set_st_block_code | ( | const int & | Q,
|  | const itpp::cmat & | A,
|  | const itpp::cmat & | B,
|  | const int & | N
| ) |  |

inline

Sets Space-Time block code parameters.

ST block codes are generated using Hassibi's model.

Parameters

  Q | the number of symbols per block
  A | generator matrices
  B | of the ST block code
  N | the number of reception antennas

Definition at line 705 of file siso.h.

## set_demapper_method()

void itpp::SISO::set_demapper_method | ( | const std::string & | method | ) |

inline

Sets demapper method.

Possible input values are:

- Hassibi_maxlogMAP (maxlogMAP algorithm applied for ST block codes represented using Hassibi's model)
- GA
- sGA (simplified GA)
- mmsePIC
- zfPIC (simplified mmsePIC)
- Alamouti_maxlogMAP (maxlogMAP algorithm applied to Alamouti code using matched-filter reception method)

Definition at line 716 of file siso.h.

## rsc() [1/2]

void itpp::SISO::rsc | ( | itpp::vec & | extrinsic_coded,
|  | itpp::vec & | extrinsic_data,
|  | const itpp::vec & | intrinsic_coded,
|  | const itpp::vec & | apriori_data
| ) |  |

inline

SISO decoder for RSC codes

Parameters

  extrinsic_coded | extrinsic information of coded bits
  extrinsic_data | extrinsic information of data bits
  intrinsic_coded | intrinsic information of coded bits
  apriori_data | a priori information of data bits

Definition at line 728 of file siso.h.

Referenced by rsc().

## rsc() [2/2]

void itpp::SISO::rsc | ( | itpp::vec & | extrinsic_coded,
|  | itpp::vec & | extrinsic_data,
|  | const itpp::vec & | intrinsic_coded,
|  | const itpp::vec & | apriori_data,
|  | const bool & | tail
| ) |  |

inline

SISO decoder for RSC codes (tail is set through input)

Parameters

  extrinsic_coded | extrinsic information of coded bits
  extrinsic_data | extrinsic information of data bits
  intrinsic_coded | intrinsic information of coded bits
  apriori_data | a priori information of data bits
  tail | if true the trellis is terminated

Definition at line 721 of file siso.h.

References rsc(), and set_tail().

## nsc() [1/2]

void itpp::SISO::nsc | ( | itpp::vec & | extrinsic_coded,
|  | itpp::vec & | extrinsic_data,
|  | const itpp::vec & | intrinsic_coded,
|  | const itpp::vec & | apriori_data
| ) |  |

inline

SISO decoder for NSC codes

Parameters

  extrinsic_coded | extrinsic information of coded bits
  extrinsic_data | extrinsic information of data bits
  intrinsic_coded | intrinsic information of coded bits
  apriori_data | a priori information of data bits

Definition at line 763 of file siso.h.

Referenced by nsc().

## nsc() [2/2]

void itpp::SISO::nsc | ( | itpp::vec & | extrinsic_coded,
|  | itpp::vec & | extrinsic_data,
|  | const itpp::vec & | intrinsic_coded,
|  | const itpp::vec & | apriori_data,
|  | const bool & | tail
| ) |  |

inline

SISO decoder for NSC codes (tail is set through input)

Parameters

  extrinsic_coded | extrinsic information of coded bits
  extrinsic_data | extrinsic information of data bits
  intrinsic_coded | intrinsic information of coded bits
  apriori_data | a priori information of data bits
  tail | if true the trellis is terminated

Definition at line 756 of file siso.h.

References nsc(), and set_tail().

## equalizer() [1/2]

void itpp::SISO::equalizer | ( | itpp::vec & | extrinsic_data,
|  | const itpp::vec & | rec_sig,
|  | const itpp::vec & | apriori_data
| ) |  |

inline

SISO equalizer

Channel trellis is generated so that BPSK mapping is assumed: 0->+1 and 1->-1 (xor truth table is preserved)

Parameters

  extrinsic_data | extrinsic informations of input symbols
  rec_sig | received signal
  apriori_data | a priori informations of input symbols

Definition at line 790 of file siso.h.

Referenced by equalizer().

## equalizer() [2/2]

void itpp::SISO::equalizer | ( | itpp::vec & | extrinsic_data,
|  | const itpp::vec & | rec_sig,
|  | const itpp::vec & | apriori_data,
|  | const bool & | tail
| ) |  |

inline

SISO equalizer (tail is set through input)

Channel trellis is generated so that BPSK mapping is assumed: 0->+1 and 1->-1 (xor truth table is preserved)

Parameters

  extrinsic_data | extrinsic informations of input symbols
  rec_sig | received signal
  apriori_data | a priori informations of input symbols
  tail | if true the trellis is terminated

Definition at line 780 of file siso.h.

References equalizer(), and set_tail().

## descrambler()

void itpp::SISO::descrambler | ( | itpp::vec & | extrinsic_coded,
|  | itpp::vec & | extrinsic_data,
|  | const itpp::vec & | intrinsic_coded,
|  | const itpp::vec & | apriori_data
| ) |  |

SISO descrambler

Parameters

  extrinsic_coded | extrinsic information of scrambled bits
  extrinsic_data | extrinsic information of informational bits
  intrinsic_coded | intrinsic information of scrambled bits
  apriori_data | a priori information of informational bits

Definition at line 37 of file siso_mud.cpp.

References itpp::Array< T >::length(), and itpp::Array< T >::set_size().

## mud()

void itpp::SISO::mud | ( | itpp::mat & | extrinsic_data,
|  | const itpp::vec & | rec_sig,
|  | const itpp::mat & | apriori_data
| ) |  |

inline

SISO Multi-User Detector

Parameters

  extrinsic_data | extrinsic informations of emitted chips from all users
  rec_sig | received signal
  apriori_data | a priori informations of emitted chips from all users

Definition at line 812 of file siso.h.

## demapper() [1/2]

void itpp::SISO::demapper | ( | itpp::vec & | extrinsic_data,
|  | const itpp::cvec & | rec_sig,
|  | const itpp::vec & | apriori_data
| ) |  |

inline

SISO demapper (when only a modulator is used)

Parameters

  extrinsic_data | extrinsic informations of emitted bits
  rec_sig | received signal
  apriori_data | a priori informations of emitted bits

Definition at line 836 of file siso.h.

## demapper() [2/2]

void itpp::SISO::demapper | ( | itpp::vec & | extrinsic_data,
|  | const itpp::cmat & | rec_sig,
|  | const itpp::vec & | apriori_data
| ) |  |

inline

SISO demapper (when Space-Time codes are used)

Parameters

  extrinsic_data | extrinsic informations of emitted bits
  rec_sig | received signal
  apriori_data | a priori informations of emitted bits

Definition at line 857 of file siso.h.

## threshold() [1/3]

double itpp::SISO::threshold | ( | const double & | x,
|  | const double & | value
| ) |  |

inlinestatic

Functions used to limit values at a given +- threshold.

Definition at line 901 of file siso.h.

Referenced by set_sova_threshold().

## threshold() [2/3]

itpp::vec itpp::SISO::threshold | ( | const itpp::vec & | in,
|  | const double & | value
| ) |  |

inlinestatic

Definition at line 908 of file siso.h.

## threshold() [3/3]

itpp::mat itpp::SISO::threshold | ( | const itpp::mat & | in,
|  | const double & | value
| ) |  |

inlinestatic

Definition at line 917 of file siso.h.

## Member Data Documentation

## numInputSymbols

int itpp::SISO::numInputSymbols

number of input symbols

Definition at line 449 of file siso.h.

## stateNb

int itpp::SISO::stateNb

number of states

Definition at line 450 of file siso.h.

## prevState

int* itpp::SISO::prevState

previous states

Definition at line 451 of file siso.h.

## nextState

int* itpp::SISO::nextState

next states

Definition at line 452 of file siso.h.

## output

double* itpp::SISO::output

output

Definition at line 453 of file siso.h.

## input

int* itpp::SISO::input

input

Definition at line 454 of file siso.h.

## numStates

int itpp::SISO::numStates

number of states

Definition at line 461 of file siso.h.

## prevStates

int* itpp::SISO::prevStates

previous states

Definition at line 462 of file siso.h.

## nextStates

int* itpp::SISO::nextStates

next states

Definition at line 463 of file siso.h.

## PARout

double* itpp::SISO::PARout

parity output bit

Definition at line 464 of file siso.h.

## fm

itpp::bin* itpp::SISO::fm

Definition at line 465 of file siso.h.

The documentation for this class was generated from the following files:

- itpp/comm/siso.h
- itpp/comm/siso_dem.cpp
- itpp/comm/siso_eq.cpp
- itpp/comm/siso_mud.cpp
- itpp/comm/siso_nsc.cpp
- itpp/comm/siso_rsc.cpp

Generated on Mon Jun 10 2024 11:49:40 for IT++ by Doxygen 1.9.8