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

Binary Convolutional rate 1/n class. More...

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

Inheritance diagram for itpp::Convolutional_Code:

## Public Member Functions

| Convolutional_Code (void)
| Default constructor - sets (0133,0171) code with tail.
virtual | ~Convolutional_Code (void)
| Destructor.
void | set_method (const CONVOLUTIONAL_CODE_METHOD method)
| Set encoding and decoding method (Trunc, Tail, or Tailbite)
void | set_code (const CONVOLUTIONAL_CODE_TYPE type_of_code, int inverse_rate, int constraint_length)
| Set the code according to built-in tables.
void | set_generator_polynomials (const ivec &gen, int constraint_length)
| Set generator polynomials. Given in Proakis integer form.
ivec | get_generator_polynomials (void) const
| Get generator polynomials.
void | reset ()
| Reset encoder and decoder states.
virtual void | encode (const bvec &input, bvec &output)
| Encode an input binary vector using specified method (Tail by default)
virtual bvec | encode (const bvec &input)
| Encode a bvec of input.
void | encode_trunc (const bvec &input, bvec &output)
| Encode a binary vector starting from the previous encoder state.
bvec | encode_trunc (const bvec &input)
void | encode_tail (const bvec &input, bvec &output)
| Encoding that starts and ends in the zero state.
bvec | encode_tail (const bvec &input)
void | encode_tailbite (const bvec &input, bvec &output)
| Encode an input binary vector using tailbiting.
bvec | encode_tailbite (const bvec &input)
void | encode_bit (const bin &input, bvec &output)
| Encode a binary bit starting from the internal encoder state.
bvec | encode_bit (const bin &input)
virtual void | decode (const bvec &coded_bits, bvec &decoded_bits)
| Decode a bvec of coded data.
virtual bvec | decode (const bvec &coded_bits)
| Decode a bvec of coded data.
virtual void | decode (const vec &received_signal, bvec &output)
| Decode a block of encoded data using specified method (Tail by default)
virtual bvec | decode (const vec &received_signal)
| Decode a vec of received data.
virtual void | decode_tail (const vec &received_signal, bvec &output)
| Decode a block of encoded data where encode_tail has been used.
virtual bvec | decode_tail (const vec &received_signal)
virtual void | decode_tailbite (const vec &received_signal, bvec &output)
| Decode a block of encoded data where encode_tailbite has been used.
virtual bvec | decode_tailbite (const vec &received_signal)
virtual void | decode_trunc (const vec &received_signal, bvec &output)
| Viterbi decoding using truncation of memory (default = 5*K)
virtual bvec | decode_trunc (const vec &received_signal)
virtual double | get_rate (void) const
| Return rate of code (not including the rate-loss)
void | set_start_state (int state)
| Set encoder default start state.
void | init_encoder ()
| Initialise internal encoder state with start state. Has no effect on `Tail` and `Tailbite` methods.
int | get_encoder_state (void) const
| Get the current encoder state.
void | set_truncation_length (const int length)
| Set memory truncation length. Must be at least K.
int | get_truncation_length (void) const
| Get memory truncation length.
bool | catastrophic (void)
| Check if catastrophic. Returns true if catastrophic.
bool | inverse_tail (const bvec coded_sequence, bvec &input)
| Calculate the inverse sequence.
void | distance_profile (ivec &dist_prof, int dmax=100000, bool reverse=false)
| Calculate distance profile. If reverse = true calculate for the reverse code instead.
void | calculate_spectrum (Array< ivec > &spectrum, int dmax, int no_terms)
| Calculate spectrum.
int | fast (Array< ivec > &spectrum, const int dfree, const int no_terms, const int Cdfree=1000000, const bool test_catastrophic=false)
| Cederwall's fast algorithm.

## Protected Member Functions

int | next_state (const int instate, const int input)
| Next state from instate given the input.
int | previous_state (const int state, const int input)
| The previous state from state given the input.
void | previous_state (const int state, int &S0, int &S1)
| The previous state from state given the input.
int | weight (const int state, const int input)
| The weight of the transition from given state with the input given.
void | weight (const int state, int &w0, int &w1)
| The weight of the two paths (input 0 or 1) from given state.
int | weight_reverse (const int state, const int input)
| The weight (of the reverse code) of the transition from given state with the input given.
void | weight_reverse (const int state, int &w0, int &w1)
| The weight (of the reverse code) of the two paths (input 0 or 1) from given state.
bvec | output_reverse (const int state, const int input)
| Output on transition (backwards) with input from state.
void | output_reverse (const int state, bvec &zero_output, bvec &one_output)
| Output on transition (backwards) with input from state.
void | output_reverse (const int state, int &zero_output, int &one_output)
| Output on transition (backwards) with input from state.
void | calc_metric_reverse (const int state, const vec &rx_codeword, double &zero_metric, double &one_metric)
| Calculate delta metrics for 0 and 1 input branches reaching state.
void | calc_metric (const vec &rx_codeword, vec &delta_metrics)
| Calculate delta metrics for all possible codewords.
int | get_input (const int state)
| Returns the input that results in state, that is the MSB of state.

## Protected Attributes

int | n
| Number of generators.
int | K
| Constraint length.
int | m
| Memory of the encoder.
int | no_states
| Number of states.
ivec | gen_pol
| Generator polynomials.
ivec | gen_pol_rev
| Generator polynomials for the reverse code.
int | encoder_state
| The current encoder state.
int | start_state
| The encoder start state.
int | trunc_length
| The decoder truncation length.
double | rate
| The rate of the code.
bvec | xor_int_table
| Auxilary table used by the codec.
imat | output_reverse_int
| output in int format for a given state and input
CONVOLUTIONAL_CODE_METHOD | cc_method
| encoding and decoding method
imat | path_memory
| Path memory (trellis)
Array< bool > | visited_state
| Visited states.
vec | sum_metric
| Metrics accumulator.
int | trunc_ptr
| Truncated path memory pointer.
int | trunc_state
| Truncated memory fill state.

## Related Symbols

(Note that these are not member symbols.)
ITPP_EXPORT int | reverse_int (int length, int in)
| Reverses the bitrepresentation of in (of size length) and converts to an integer.
ITPP_EXPORT int | weight_int (int length, int in)
| Calculate the Hamming weight of the binary representation of in of size length.
ITPP_EXPORT int | compare_spectra (ivec v1, ivec v2)
| Compare two distance spectra. Return 1 if v1 is less, 0 if v2 less, and -1 if equal.
ITPP_EXPORT int | compare_spectra (ivec v1, ivec v2, vec weight_profile)
| Compare two distance spectra using a weight profile.

## Detailed Description

Binary Convolutional rate 1/n class.

The codes are given as feedforward encoders and given in the Proakis form. That is, the binary generators (K-tuples) are converted to octal integers. Observe that the constraint length (K) is defined as the number of memory cells plus one (as in Proakis).

Encoding is performed with the encode function. The default method for encoding is by adding a tail of K-1 zeros and also assume that the encoder starts in the zero state (the encode_tail() function). Observe that decode() by default also assumes that a tail is added. Both encoding and decoding method can be changed by the set_method() function.

Example of use: (rate 1/3 constraint length K=7 ODS code using BPSK over AWGN)

BPSK bpsk;
Convolutional_Code code;
ivec generator(3);
generator(0)=0133;
generator(1)=0165;
generator(2)=0171;
code.set_generator_polynomials(generator, 7);
bvec bits=randb(100), encoded_bits, decoded_bits;
vec tx_signal, rx_signal;
code.encode_tail(bits, encoded_bits);
tx_signal = bpsk.modulate_bits(encoded_bits);
rx_signal = tx_signal + sqrt(0.5)*randn(tx_signal.size());
code.decode_tail(rx_signal, decoded_bits);
itpp::Array
General array class.
Definition array.h:105
itpp::Array::size
int size() const
Returns the number of data elements in the array object.
Definition array.h:155
itpp::BPSK
BPSK modulator with real symbols.
Definition modulator.h:877
itpp::BPSK::modulate_bits
void modulate_bits(const bvec &bits, vec &output) const
Modulate bits into BPSK symbols in complex domain.
Definition modulator.cpp:310
itpp::Convolutional_Code
Binary Convolutional rate 1/n class.
Definition convcode.h:105
itpp::Convolutional_Code::encode_tail
void encode_tail(const bvec &input, bvec &output)
Encoding that starts and ends in the zero state.
Definition convcode.cpp:662
itpp::Convolutional_Code::decode_tail
virtual void decode_tail(const vec &received_signal, bvec &output)
Decode a block of encoded data where encode_tail has been used.
Definition convcode.cpp:771
itpp::Convolutional_Code::set_generator_polynomials
void set_generator_polynomials(const ivec &gen, int constraint_length)
Set generator polynomials. Given in Proakis integer form.
Definition convcode.cpp:555
itpp::sqrt
vec sqrt(const vec &x)
Square root of the elements.
Definition elem_math.h:123
itpp::randb
bin randb(void)
Generates a random bit (equally likely 0s and 1s)
Definition random.h:793
itpp::randn
double randn(void)
Generates a random Gaussian (0,1) variable.
Definition random.h:831

Comment: ODS-code stand for Optimum Distance Spectrum Code. For details see T. Ottosson, "Coding, Modulation and Multiuser Decoding for DS-CDMA Systems," Ph.d. thesis, Department of Information Theory, Scool of Electrical and Computer Engineering, Chalmers University of Technology, Goteborg 1997.

It is also possible to set the generator polynomials directly using the builtin tables which consists of: Maximum Free Distance (MFD) Codes of rates R=1/2 through R=1/8 and Optimum Distance Spectrum (ODS) Codes of rates R=1/2 through R=1/4.

Definition at line 104 of file convcode.h.

## Constructor & Destructor Documentation

## Convolutional_Code()

itpp::Convolutional_Code::Convolutional_Code | ( | void |  | ) |

inline

Default constructor - sets (0133,0171) code with tail.

Definition at line 108 of file convcode.h.

## ~Convolutional_Code()

virtual itpp::Convolutional_Code::~Convolutional_Code | ( | void |  | ) |

inlinevirtual

Destructor.

Definition at line 114 of file convcode.h.

## Member Function Documentation

## set_method()

void itpp::Convolutional_Code::set_method | ( | const CONVOLUTIONAL_CODE_METHOD | method | ) |

inline

Set encoding and decoding method (Trunc, Tail, or Tailbite)

Definition at line 117 of file convcode.h.

Referenced by itpp::Punctured_Convolutional_Code::set_method().

## set_code()

void itpp::Convolutional_Code::set_code | ( | const CONVOLUTIONAL_CODE_TYPE | type_of_code,
|  | int | inverse_rate,
|  | int | constraint_length
| ) |  |

Set the code according to built-in tables.

The type_of_code can be either MFD or ODS for maximum free distance codes (according to Proakis) or Optimum Distance Spectrum Codes according to Frenger, Orten and Ottosson.

Definition at line 537 of file convcode.cpp.

References it_assert, and set_generator_polynomials().

Referenced by itpp::Punctured_Convolutional_Code::set_code().

## set_generator_polynomials()

void itpp::Convolutional_Code::set_generator_polynomials | ( | const ivec & | gen,
|  | int | constraint_length
| ) |  |

Set generator polynomials. Given in Proakis integer form.

Definition at line 555 of file convcode.cpp.

References gen_pol, gen_pol_rev, it_error_if, K, m, n, no_states, output_reverse(), output_reverse_int, itpp::pow2i(), rate, reverse_int(), itpp::Array< T >::set_size(), itpp::Array< T >::size(), start_state, sum_metric, trunc_length, trunc_ptr, trunc_state, visited_state, weight_int(), and xor_int_table.

Referenced by set_code(), and itpp::Punctured_Convolutional_Code::set_generator_polynomials().

## get_generator_polynomials()

ivec itpp::Convolutional_Code::get_generator_polynomials | ( | void |  | ) | const

inline

Get generator polynomials.

Definition at line 134 of file convcode.h.

## reset()

void itpp::Convolutional_Code::reset | ( |  | ) |

Reset encoder and decoder states.

Definition at line 605 of file convcode.cpp.

References init_encoder(), start_state, sum_metric, trunc_ptr, trunc_state, and visited_state.

## encode() [1/2]

void itpp::Convolutional_Code::encode | ( | const bvec & | input,
|  | bvec & | output
| ) |  |

virtual

Encode an input binary vector using specified method (Tail by default)

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 622 of file convcode.cpp.

References cc_method, encode_tail(), encode_tailbite(), and encode_trunc().

## encode() [2/2]

virtual bvec itpp::Convolutional_Code::encode | ( | const bvec & | uncoded_bits | ) |

inlinevirtual

Encode a bvec of input.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 143 of file convcode.h.

## encode_trunc() [1/2]

void itpp::Convolutional_Code::encode_trunc | ( | const bvec & | input,
|  | bvec & | output
| ) |  |

Encode a binary vector starting from the previous encoder state.

The initial encoder state can be changed using set_start_state() and init_encoder() functions.

Definition at line 642 of file convcode.cpp.

References encoder_state, gen_pol, m, n, itpp::Array< T >::set_size(), itpp::Array< T >::size(), and xor_int_table.

Referenced by encode(), and itpp::Punctured_Convolutional_Code::encode_trunc().

## encode_trunc() [2/2]

bvec itpp::Convolutional_Code::encode_trunc | ( | const bvec & | input | ) |

inline

Definition at line 158 of file convcode.h.

## encode_tail() [1/2]

void itpp::Convolutional_Code::encode_tail | ( | const bvec & | input,
|  | bvec & | output
| ) |  |

Encoding that starts and ends in the zero state.

Encode a binary vector of inputs starting from zero state and also adds a tail of K-1 zeros to force the encoder into the zero state. Well suited for packet transmission.

Note
  The init_encoder() function has no effect on the starting state for this method.

Definition at line 662 of file convcode.cpp.

References encoder_state, gen_pol, m, n, itpp::Array< T >::set_size(), itpp::Array< T >::size(), and xor_int_table.

Referenced by encode(), and itpp::Punctured_Convolutional_Code::encode_tail().

## encode_tail() [2/2]

bvec itpp::Convolutional_Code::encode_tail | ( | const bvec & | input | ) |

inline

Definition at line 177 of file convcode.h.

## encode_tailbite() [1/2]

void itpp::Convolutional_Code::encode_tailbite | ( | const bvec & | input,
|  | bvec & | output
| ) |  |

Encode an input binary vector using tailbiting.

In the Tailbiting method the starting state of the encoder is initialised with the last K-1 bits of the input vector. This gives an additional information to the decoder that the starting and ending states are identical, although not known a priori.

Well suited for packet transmission with small packets, because there is no tail overhead as in the Tail method.

Note
  The init_encoder() function has no effect on the starting state for this method.

Definition at line 692 of file convcode.cpp.

References encoder_state, gen_pol, m, n, itpp::Array< T >::right(), itpp::Array< T >::set_size(), itpp::Array< T >::size(), and xor_int_table.

Referenced by encode(), and itpp::Punctured_Convolutional_Code::encode_tailbite().

## encode_tailbite() [2/2]

bvec itpp::Convolutional_Code::encode_tailbite | ( | const bvec & | input | ) |

inline

Definition at line 200 of file convcode.h.

## encode_bit() [1/2]

void itpp::Convolutional_Code::encode_bit | ( | const bin & | input,
|  | bvec & | output
| ) |  |

Encode a binary bit starting from the internal encoder state.

To initialize the encoder state use set_start_state() and init_encoder()

Definition at line 719 of file convcode.cpp.

References encoder_state, gen_pol, m, n, itpp::Array< T >::set_size(), and xor_int_table.

## encode_bit() [2/2]

bvec itpp::Convolutional_Code::encode_bit | ( | const bin & | input | ) |

inline

Definition at line 214 of file convcode.h.

## decode() [1/4]

void itpp::Convolutional_Code::decode | ( | const bvec & | codedbits,
|  | bvec & | decoded_bits
| ) |  |

virtual

Decode a bvec of coded data.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 735 of file convcode.cpp.

References it_error.

## decode() [2/4]

bvec itpp::Convolutional_Code::decode | ( | const bvec & | coded_bits | ) |

virtual

Decode a bvec of coded data.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 740 of file convcode.cpp.

References it_error.

## decode() [3/4]

void itpp::Convolutional_Code::decode | ( | const vec & | received_signal,
|  | bvec & | output
| ) |  |

virtual

Decode a block of encoded data using specified method (Tail by default)

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 750 of file convcode.cpp.

References cc_method, decode_tail(), decode_tailbite(), and decode_trunc().

## decode() [4/4]

virtual bvec itpp::Convolutional_Code::decode | ( | const vec & | received_signal | ) |

inlinevirtual

Decode a vec of received data.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 228 of file convcode.h.

## decode_tail() [1/2]

void itpp::Convolutional_Code::decode_tail | ( | const vec & | received_signal,
|  | bvec & | output
| ) |  |

virtual

Decode a block of encoded data where encode_tail has been used.

Thus is assumes a decoder start state of zero and that a tail of K-1 zeros has been added. No memory truncation.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 771 of file convcode.cpp.

References calc_metric(), get_input(), it_error_if, m, itpp::Array< T >::mid(), n, no_states, output_reverse_int, path_memory, previous_state(), itpp::Array< T >::set_size(), itpp::Array< T >::size(), sum_metric, and visited_state.

Referenced by decode(), and itpp::Punctured_Convolutional_Code::decode_tail().

## decode_tail() [2/2]

virtual bvec itpp::Convolutional_Code::decode_tail | ( | const vec & | received_signal | ) |

inlinevirtual

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 243 of file convcode.h.

## decode_tailbite() [1/2]

void itpp::Convolutional_Code::decode_tailbite | ( | const vec & | received_signal,
|  | bvec & | output
| ) |  |

virtual

Decode a block of encoded data where encode_tailbite has been used.

The decoding algorithm tries all start states, so the decode_tailbite() is times more complex than the decode_tail method.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 879 of file convcode.cpp.

References calc_metric(), get_input(), it_error_if, itpp::Array< T >::mid(), n, no_states, output_reverse_int, path_memory, previous_state(), itpp::Array< T >::size(), sum_metric, and visited_state.

Referenced by decode(), and itpp::Punctured_Convolutional_Code::decode_tailbite().

## decode_tailbite() [2/2]

virtual bvec itpp::Convolutional_Code::decode_tailbite | ( | const vec & | received_signal | ) |

inlinevirtual

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 260 of file convcode.h.

## decode_trunc() [1/2]

void itpp::Convolutional_Code::decode_trunc | ( | const vec & | received_signal,
|  | bvec & | output
| ) |  |

virtual

Viterbi decoding using truncation of memory (default = 5*K)

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 965 of file convcode.cpp.

References calc_metric(), get_input(), it_error_if, itpp::Array< T >::mid(), itpp::min_index(), n, no_states, output_reverse_int, path_memory, previous_state(), itpp::Array< T >::set_size(), itpp::Array< T >::size(), sum_metric, trunc_length, trunc_ptr, trunc_state, and visited_state.

Referenced by decode(), and itpp::Punctured_Convolutional_Code::decode_trunc().

## decode_trunc() [2/2]

virtual bvec itpp::Convolutional_Code::decode_trunc | ( | const vec & | received_signal | ) |

inlinevirtual

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 270 of file convcode.h.

## get_rate()

virtual double itpp::Convolutional_Code::get_rate | ( | void |  | ) | const

inlinevirtual

Return rate of code (not including the rate-loss)

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 279 of file convcode.h.

## set_start_state()

void itpp::Convolutional_Code::set_start_state | ( | int | state | ) |

inline

Set encoder default start state.

Definition at line 283 of file convcode.h.

References it_error_if.

## init_encoder()

void itpp::Convolutional_Code::init_encoder | ( |  | ) |

inline

Initialise internal encoder state with start state. Has no effect on `Tail` and `Tailbite` methods.

Definition at line 293 of file convcode.h.

Referenced by reset().

## get_encoder_state()

int itpp::Convolutional_Code::get_encoder_state | ( | void |  | ) | const

inline

Get the current encoder state.

Definition at line 296 of file convcode.h.

## set_truncation_length()

void itpp::Convolutional_Code::set_truncation_length | ( | const int | length | ) |

inline

Set memory truncation length. Must be at least K.

Definition at line 300 of file convcode.h.

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

## get_truncation_length()

int itpp::Convolutional_Code::get_truncation_length | ( | void |  | ) | const

inline

Get memory truncation length.

Definition at line 307 of file convcode.h.

## catastrophic()

bool itpp::Convolutional_Code::catastrophic | ( | void |  | ) |

Check if catastrophic. Returns true if catastrophic.

Definition at line 1090 of file convcode.cpp.

References m, next_state(), no_states, and weight().

## inverse_tail()

bool itpp::Convolutional_Code::inverse_tail | ( | const bvec | coded_sequence,
|  | bvec & | input
| ) |  |

Calculate the inverse sequence.

Assumes that encode_tail is used in the encoding process. Returns false if there is an error in the coded sequence (not a valid codeword). Do not check that the tail forces the encoder into the zeroth state.

Definition at line 1053 of file convcode.cpp.

References gen_pol, it_error_if, m, itpp::Array< T >::mid(), n, itpp::Array< T >::size(), and xor_int_table.

## distance_profile()

void itpp::Convolutional_Code::distance_profile | ( | ivec & | dist_prof,
|  | int | dmax = `100000`,
|  | bool | reverse = `false`
| ) |  |

Calculate distance profile. If reverse = true calculate for the reverse code instead.

Definition at line 1133 of file convcode.cpp.

References K, m, next_state(), itpp::reverse(), itpp::Array< T >::set_size(), weight(), and weight_reverse().

Referenced by fast().

## calculate_spectrum()

void itpp::Convolutional_Code::calculate_spectrum | ( | Array< ivec > & | spectrum,
|  | int | dmax,
|  | int | no_terms
| ) |  |

Calculate spectrum.

Calculates both the weight spectrum (Ad) and the information weight spectrum (Cd) and returns it as ivec:s in the 0:th and 1:st component of spectrum, respectively. Suitable for calculating many terms in the spectra (uses an breadth first algorithm). It is assumed that the code is non-catastrophic or else it is a possibility for an eternal loop. dmax = an upper bound on the free distance no_terms = no_terms including the dmax term that should be calculated

Observe that there is a risk that some of the integers are overflow if many terms are calculated in the spectrum.

Definition at line 1217 of file convcode.cpp.

References itpp::elem_mult(), m, next_state(), no_states, itpp::spectrum(), and weight().

## fast()

int itpp::Convolutional_Code::fast | ( | Array< ivec > & | spectrum,
|  | const int | dfree,
|  | const int | no_terms,
|  | const int | Cdfree = `1000000`,
|  | const bool | test_catastrophic = `false`
| ) |  |

Cederwall's fast algorithm.

Calculates both the weight spectrum (Ad) and the information weight spectrum (Cd) and returns it as ivec:s in the 0:th and 1:st component of spectrum, respectively. The FAST algorithm is good for calculating only a few terms in the spectrum. If many terms are desired, use calc_spectrum instead. The algorithm returns -1 if the code tested is worse that the input dfree and Cdfree. It returns 0 if the code MAY be catastrophic (assuming that test_catastrophic is true), and returns 1 if everything went right.

- `dfree` the free distance of the code (or an upper bound)
- `no_terms` including the dfree term that should be calculated
- `Cdfree` is the best value of information weight spectrum found so far

Observe that there is a risk that some of the integers are overflow if many terms are calculated in the spectrum.

See IT No. 6, pp. 1146-1159, Nov. 1989 for details.

Definition at line 1299 of file convcode.cpp.

References distance_profile(), K, m, next_state(), itpp::reverse(), itpp::Array< T >::set_size(), itpp::spectrum(), weight(), and weight_reverse().

## next_state()

int itpp::Convolutional_Code::next_state | ( | const int | instate,
|  | const int | input
| ) |  |

inlineprotected

Next state from instate given the input.

Definition at line 374 of file convcode.h.

Referenced by calculate_spectrum(), itpp::Punctured_Convolutional_Code::calculate_spectrum(), catastrophic(), itpp::Punctured_Convolutional_Code::catastrophic(), distance_profile(), itpp::Punctured_Convolutional_Code::distance_profile(), fast(), and itpp::Punctured_Convolutional_Code::fast().

## previous_state() [1/2]

int itpp::Convolutional_Code::previous_state | ( | const int | state,
|  | const int | input
| ) |  |

inlineprotected

The previous state from state given the input.

Definition at line 378 of file convcode.h.

Referenced by decode_tail(), decode_tailbite(), and decode_trunc().

## previous_state() [2/2]

void itpp::Convolutional_Code::previous_state | ( | const int | state,
|  | int & | S0,
|  | int & | S1
| ) |  |

inlineprotected

The previous state from state given the input.

Definition at line 382 of file convcode.h.

## weight() [1/2]

int itpp::Convolutional_Code::weight | ( | const int | state,
|  | const int | input
| ) |  |

protected

The weight of the transition from given state with the input given.

Definition at line 42 of file convcode.cpp.

References gen_pol, K, m, and n.

Referenced by calculate_spectrum(), catastrophic(), distance_profile(), and fast().

## weight() [2/2]

void itpp::Convolutional_Code::weight | ( | const int | state,
|  | int & | w0,
|  | int & | w1
| ) |  |

protected

The weight of the two paths (input 0 or 1) from given state.

Definition at line 85 of file convcode.cpp.

References gen_pol, m, and n.

## weight_reverse() [1/2]

int itpp::Convolutional_Code::weight_reverse | ( | const int | state,
|  | const int | input
| ) |  |

protected

The weight (of the reverse code) of the transition from given state with the input given.

Definition at line 64 of file convcode.cpp.

References gen_pol_rev, K, m, and n.

Referenced by distance_profile(), and fast().

## weight_reverse() [2/2]

void itpp::Convolutional_Code::weight_reverse | ( | const int | state,
|  | int & | w0,
|  | int & | w1
| ) |  |

protected

The weight (of the reverse code) of the two paths (input 0 or 1) from given state.

Definition at line 109 of file convcode.cpp.

References gen_pol_rev, m, and n.

## output_reverse() [1/3]

bvec itpp::Convolutional_Code::output_reverse | ( | const int | state,
|  | const int | input
| ) |  |

protected

Output on transition (backwards) with input from state.

Definition at line 132 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

Referenced by set_generator_polynomials().

## output_reverse() [2/3]

void itpp::Convolutional_Code::output_reverse | ( | const int | state,
|  | bvec & | zero_output,
|  | bvec & | one_output
| ) |  |

protected

Output on transition (backwards) with input from state.

Definition at line 150 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

## output_reverse() [3/3]

void itpp::Convolutional_Code::output_reverse | ( | const int | state,
|  | int & | zero_output,
|  | int & | one_output
| ) |  |

protected

Output on transition (backwards) with input from state.

Definition at line 169 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

## calc_metric_reverse()

void itpp::Convolutional_Code::calc_metric_reverse | ( | const int | state,
|  | const vec & | rx_codeword,
|  | double & | zero_metric,
|  | double & | one_metric
| ) |  |

protected

Calculate delta metrics for 0 and 1 input branches reaching state.

Definition at line 190 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

## calc_metric()

void itpp::Convolutional_Code::calc_metric | ( | const vec & | rx_codeword,
|  | vec & | delta_metrics
| ) |  |

protected

Calculate delta metrics for all possible codewords.

Definition at line 213 of file convcode.cpp.

References gen_pol, n, no_states, itpp::pow2i(), itpp::Array< T >::set_size(), and xor_int_table.

Referenced by decode_tail(), decode_tailbite(), and decode_trunc().

## get_input()

int itpp::Convolutional_Code::get_input | ( | const int | state | ) |

inlineprotected

Returns the input that results in state, that is the MSB of state.

Definition at line 408 of file convcode.h.

Referenced by decode_tail(), decode_tailbite(), and decode_trunc().

## Friends And Related Symbol Documentation

## reverse_int()

ITPP_EXPORT int reverse_int | ( | int | length,
|  | int | in
| ) |  |

related

Reverses the bitrepresentation of in (of size length) and converts to an integer.

Definition at line 1442 of file convcode.cpp.

References itpp::length().

Referenced by set_generator_polynomials().

## weight_int()

ITPP_EXPORT int weight_int | ( | int | length,
|  | int | in
| ) |  |

related

Calculate the Hamming weight of the binary representation of in of size length.

Definition at line 1460 of file convcode.cpp.

References itpp::length().

Referenced by set_generator_polynomials().

## compare_spectra() [1/2]

ITPP_EXPORT int compare_spectra | ( | ivec | v1,
|  | ivec | v2
| ) |  |

related

Compare two distance spectra. Return 1 if v1 is less, 0 if v2 less, and -1 if equal.

Definition at line 1472 of file convcode.cpp.

References it_assert_debug, and itpp::Array< T >::size().

## compare_spectra() [2/2]

ITPP_EXPORT int compare_spectra | ( | ivec | v1,
|  | ivec | v2,
|  | vec | weight_profile
| ) |  |

related

Compare two distance spectra using a weight profile.

Return 1 if v1 is less, 0 if v2 less, and -1 if equal.

Definition at line 1492 of file convcode.cpp.

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

## Member Data Documentation

## n

int itpp::Convolutional_Code::n

protected

Number of generators.

Definition at line 411 of file convcode.h.

Referenced by calc_metric(), calc_metric_reverse(), decode_tail(), itpp::Punctured_Convolutional_Code::decode_tail(), decode_tailbite(), itpp::Punctured_Convolutional_Code::decode_tailbite(), decode_trunc(), itpp::Punctured_Convolutional_Code::decode_trunc(), encode_bit(), encode_tail(), itpp::Punctured_Convolutional_Code::encode_tail(), encode_tailbite(), itpp::Punctured_Convolutional_Code::encode_tailbite(), encode_trunc(), itpp::Punctured_Convolutional_Code::encode_trunc(), inverse_tail(), output_reverse(), output_reverse(), output_reverse(), set_generator_polynomials(), itpp::Punctured_Convolutional_Code::set_puncture_matrix(), weight(), itpp::Punctured_Convolutional_Code::weight(), weight(), itpp::Punctured_Convolutional_Code::weight(), weight_reverse(), itpp::Punctured_Convolutional_Code::weight_reverse(), weight_reverse(), and itpp::Punctured_Convolutional_Code::weight_reverse().

## K

int itpp::Convolutional_Code::K

protected

Constraint length.

Definition at line 413 of file convcode.h.

Referenced by itpp::Punctured_Convolutional_Code::calculate_spectrum(), distance_profile(), fast(), itpp::Punctured_Convolutional_Code::fast(), set_generator_polynomials(), weight(), itpp::Punctured_Convolutional_Code::weight(), weight_reverse(), and itpp::Punctured_Convolutional_Code::weight_reverse().

## m

int itpp::Convolutional_Code::m

protected

Memory of the encoder.

Definition at line 415 of file convcode.h.

Referenced by calculate_spectrum(), itpp::Punctured_Convolutional_Code::calculate_spectrum(), catastrophic(), itpp::Punctured_Convolutional_Code::catastrophic(), decode_tail(), distance_profile(), itpp::Punctured_Convolutional_Code::distance_profile(), encode_bit(), encode_tail(), encode_tailbite(), encode_trunc(), fast(), itpp::Punctured_Convolutional_Code::fast(), inverse_tail(), set_generator_polynomials(), weight(), itpp::Punctured_Convolutional_Code::weight(), weight(), itpp::Punctured_Convolutional_Code::weight(), weight_reverse(), itpp::Punctured_Convolutional_Code::weight_reverse(), weight_reverse(), and itpp::Punctured_Convolutional_Code::weight_reverse().

## no_states

int itpp::Convolutional_Code::no_states

protected

Number of states.

Definition at line 417 of file convcode.h.

Referenced by calc_metric(), calculate_spectrum(), catastrophic(), decode_tail(), decode_tailbite(), decode_trunc(), and set_generator_polynomials().

## gen_pol

ivec itpp::Convolutional_Code::gen_pol

protected

Generator polynomials.

Definition at line 419 of file convcode.h.

Referenced by calc_metric(), calc_metric_reverse(), encode_bit(), encode_tail(), encode_tailbite(), encode_trunc(), inverse_tail(), output_reverse(), output_reverse(), output_reverse(), set_generator_polynomials(), weight(), itpp::Punctured_Convolutional_Code::weight(), weight(), and itpp::Punctured_Convolutional_Code::weight().

## gen_pol_rev

ivec itpp::Convolutional_Code::gen_pol_rev

protected

Generator polynomials for the reverse code.

Definition at line 421 of file convcode.h.

Referenced by set_generator_polynomials(), weight_reverse(), itpp::Punctured_Convolutional_Code::weight_reverse(), weight_reverse(), and itpp::Punctured_Convolutional_Code::weight_reverse().

## encoder_state

int itpp::Convolutional_Code::encoder_state

protected

The current encoder state.

Definition at line 423 of file convcode.h.

Referenced by encode_bit(), encode_tail(), encode_tailbite(), and encode_trunc().

## start_state

int itpp::Convolutional_Code::start_state

protected

The encoder start state.

Definition at line 425 of file convcode.h.

Referenced by reset(), and set_generator_polynomials().

## trunc_length

int itpp::Convolutional_Code::trunc_length

protected

The decoder truncation length.

Definition at line 427 of file convcode.h.

Referenced by decode_trunc(), and set_generator_polynomials().

## rate

double itpp::Convolutional_Code::rate

protected

The rate of the code.

Definition at line 429 of file convcode.h.

Referenced by set_generator_polynomials(), and itpp::Punctured_Convolutional_Code::set_puncture_matrix().

## xor_int_table

bvec itpp::Convolutional_Code::xor_int_table

protected

Auxilary table used by the codec.

Definition at line 431 of file convcode.h.

Referenced by calc_metric(), calc_metric_reverse(), encode_bit(), encode_tail(), encode_tailbite(), encode_trunc(), inverse_tail(), output_reverse(), output_reverse(), output_reverse(), and set_generator_polynomials().

## output_reverse_int

imat itpp::Convolutional_Code::output_reverse_int

protected

output in int format for a given state and input

Definition at line 433 of file convcode.h.

Referenced by decode_tail(), decode_tailbite(), decode_trunc(), and set_generator_polynomials().

## cc_method

CONVOLUTIONAL_CODE_METHOD itpp::Convolutional_Code::cc_method

protected

encoding and decoding method

Definition at line 435 of file convcode.h.

Referenced by decode(), itpp::Punctured_Convolutional_Code::decode(), encode(), and itpp::Punctured_Convolutional_Code::encode().

## path_memory

imat itpp::Convolutional_Code::path_memory

protected

Path memory (trellis)

Definition at line 437 of file convcode.h.

Referenced by decode_tail(), decode_tailbite(), and decode_trunc().

## visited_state

Array<bool> itpp::Convolutional_Code::visited_state

protected

Visited states.

Definition at line 439 of file convcode.h.

Referenced by decode_tail(), decode_tailbite(), decode_trunc(), reset(), and set_generator_polynomials().

## sum_metric

vec itpp::Convolutional_Code::sum_metric

protected

Metrics accumulator.

Definition at line 441 of file convcode.h.

Referenced by decode_tail(), decode_tailbite(), decode_trunc(), reset(), and set_generator_polynomials().

## trunc_ptr

int itpp::Convolutional_Code::trunc_ptr

protected

Truncated path memory pointer.

Definition at line 443 of file convcode.h.

Referenced by decode_trunc(), reset(), and set_generator_polynomials().

## trunc_state

int itpp::Convolutional_Code::trunc_state

protected

Truncated memory fill state.

Definition at line 445 of file convcode.h.

Referenced by decode_trunc(), reset(), and set_generator_polynomials().

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

- itpp/comm/convcode.h
- itpp/comm/convcode.cpp

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