IT++ Logo Newcom Logo

itpp::Convolutional_Code Class Reference
[Forward Error Correcting Codes]

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

#include <itpp/comm/convcode.h>

Inheritance diagram for itpp::Convolutional_Code:

itpp::Channel_Code itpp::Punctured_Convolutional_Code List of all members.

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 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 double get_rate (void)
 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.
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.
virtual void encode (const bvec &input, bvec &output)
 Encode a binary vector of inputs using specified method.
virtual bvec encode (const bvec &input)
 Encode a binary vector of inputs using specified method.
void encode_trunc (const bvec &input, bvec &output)
 Encode a binary vector starting from the previous encoder state.
bvec encode_trunc (const bvec &input)
 Encode a binary vector starting from the previous encoder state.
void encode_tail (const bvec &input, bvec &output)
 Encoding that starts and ends in the zero state.
bvec encode_tail (const bvec &input)
 Encoding that starts and ends in the zero state.
void encode_tailbite (const bvec &input, bvec &output)
 Encode a binary vector of inputs using tailbiting.
bvec encode_tailbite (const bvec &input)
 Encode a binary vector of inputs using tailbiting.
void encode_bit (const bin &input, bvec &output)
 Encode a binary bit starting from the internal encoder state.
bvec encode_bit (const bin &input)
 Encode a binary bit starting from the internal encoder state.
virtual void decode (const vec &received_signal, bvec &output)
 Decode a block of encoded data using specified method.
virtual bvec decode (const vec &received_signal)
 Decode a block of encoded data using specified method.
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)
 Decode a block of encoded data where encode_tail has been used.
virtual void decode_tailbite (const vec &received_signal, bvec &output)
 Decode a block of encoded data where encode_tailbite has been used. Tries all start states.
virtual bvec decode_tailbite (const vec &received_signal)
 Decode a block of encoded data where encode_tailbite has been used. Tries all start states.
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)
 Viterbi decoding using truncation of memory (default = 5*K).

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
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 Functions

(Note that these are not member functions.)

int reverse_int (int length, int in)
 Reverses the bitrepresentation of in (of size length) and converts to an integer.
int weight_int (int length, int in)
 Calculate the Hamming weight of the binary representation of in of size length.
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.
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);

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 generatorpolynomials 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 105 of file convcode.h.


Constructor & Destructor Documentation

itpp::Convolutional_Code::Convolutional_Code ( void   )  [inline]

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

Definition at line 108 of file convcode.h.

References init_encoder(), itpp::MFD, and set_code().

virtual itpp::Convolutional_Code::~Convolutional_Code ( void   )  [inline, virtual]

Destructor.

Definition at line 115 of file convcode.h.


Member Function Documentation

void itpp::Convolutional_Code::set_method ( const CONVOLUTIONAL_CODE_METHOD  method  )  [inline]

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

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 118 of file convcode.h.

References cc_method.

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

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.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 536 of file convcode.cpp.

References it_assert, itpp::MFD, itpp::ODS, and set_generator_polynomials().

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

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

Set generator polynomials. Given in Proakis integer form.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 554 of file convcode.cpp.

References gen_pol, gen_pol_rev, it_error_if, m, no_states, output_reverse(), output_reverse_int, itpp::pow2i(), rate, reverse_int(), itpp::Array< T >::set_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().

ivec itpp::Convolutional_Code::get_generator_polynomials ( void   )  const [inline]

Get generator polynomials.

Definition at line 136 of file convcode.h.

References gen_pol.

void itpp::Convolutional_Code::reset (  ) 

Reset encoder and decoder states.

Definition at line 604 of file convcode.cpp.

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

void itpp::Convolutional_Code::encode ( const bvec &  input,
bvec &  output 
) [virtual]

Encode a binary vector of inputs using specified method.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 621 of file convcode.cpp.

References cc_method, encode_tail(), encode_tailbite(), encode_trunc(), itpp::Tail, itpp::Tailbite, and itpp::Trunc.

Referenced by encode().

virtual bvec itpp::Convolutional_Code::encode ( const bvec &  input  )  [inline, virtual]

Encode a binary vector of inputs using specified method.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 145 of file convcode.h.

References encode().

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

Encode a binary vector starting from the previous encoder state.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 641 of file convcode.cpp.

References encoder_state, gen_pol, m, and xor_int_table.

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

bvec itpp::Convolutional_Code::encode_trunc ( const bvec &  input  )  [inline]

Encode a binary vector starting from the previous encoder state.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 154 of file convcode.h.

References encode_trunc().

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.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 661 of file convcode.cpp.

References encoder_state, gen_pol, m, and xor_int_table.

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

bvec itpp::Convolutional_Code::encode_tail ( const bvec &  input  )  [inline]

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.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 169 of file convcode.h.

References encode_tail().

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

Encode a binary vector of inputs using tailbiting.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 691 of file convcode.cpp.

References encoder_state, gen_pol, m, and xor_int_table.

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

bvec itpp::Convolutional_Code::encode_tailbite ( const bvec &  input  )  [inline]

Encode a binary vector of inputs using tailbiting.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 178 of file convcode.h.

References encode_tailbite().

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 718 of file convcode.cpp.

References encoder_state, gen_pol, m, and xor_int_table.

Referenced by encode_bit().

bvec itpp::Convolutional_Code::encode_bit ( const bin input  )  [inline]

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 191 of file convcode.h.

References encode_bit().

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 734 of file convcode.cpp.

References it_error.

Referenced by decode().

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 739 of file convcode.cpp.

References it_error.

void itpp::Convolutional_Code::decode ( const vec &  received_signal,
bvec &  output 
) [virtual]

Decode a block of encoded data using specified method.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 749 of file convcode.cpp.

References cc_method, decode_tail(), decode_tailbite(), decode_trunc(), itpp::Tail, itpp::Tailbite, and itpp::Trunc.

virtual bvec itpp::Convolutional_Code::decode ( const vec &  received_signal  )  [inline, virtual]

Decode a block of encoded data using specified method.

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 204 of file convcode.h.

References decode().

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 770 of file convcode.cpp.

References calc_metric(), get_input(), it_error_if, m, max, no_states, output_reverse_int, path_memory, previous_state(), sum_metric, and visited_state.

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

virtual bvec itpp::Convolutional_Code::decode_tail ( const vec &  received_signal  )  [inline, 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 218 of file convcode.h.

References decode_tail().

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. Tries all start states.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 878 of file convcode.cpp.

References calc_metric(), get_input(), it_error_if, max, no_states, output_reverse_int, path_memory, previous_state(), sum_metric, and visited_state.

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

virtual bvec itpp::Convolutional_Code::decode_tailbite ( const vec &  received_signal  )  [inline, virtual]

Decode a block of encoded data where encode_tailbite has been used. Tries all start states.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 228 of file convcode.h.

References decode_tailbite().

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 964 of file convcode.cpp.

References calc_metric(), get_input(), it_error_if, max, itpp::min_index(), no_states, output_reverse_int, path_memory, previous_state(), sum_metric, trunc_length, trunc_ptr, trunc_state, and visited_state.

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

virtual bvec itpp::Convolutional_Code::decode_trunc ( const vec &  received_signal  )  [inline, virtual]

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

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 237 of file convcode.h.

References decode_trunc().

virtual double itpp::Convolutional_Code::get_rate ( void   )  [inline, virtual]

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

Implements itpp::Channel_Code.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 245 of file convcode.h.

References rate.

void itpp::Convolutional_Code::set_start_state ( int  state  )  [inline]

Set encoder default start state.

Definition at line 249 of file convcode.h.

References it_error_if, m, and start_state.

void itpp::Convolutional_Code::init_encoder (  )  [inline]

Initialise internal encoder state with start state.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 257 of file convcode.h.

References encoder_state, and start_state.

Referenced by Convolutional_Code(), and reset().

int itpp::Convolutional_Code::get_encoder_state ( void   )  const [inline]

Get the current encoder state.

Definition at line 260 of file convcode.h.

References encoder_state.

void itpp::Convolutional_Code::set_truncation_length ( const int  length  )  [inline]

Set memory truncation length. Must be at least K.

Definition at line 264 of file convcode.h.

References it_error_if, K, and trunc_length.

int itpp::Convolutional_Code::get_truncation_length ( void   )  const [inline]

Get memory truncation length.

Definition at line 271 of file convcode.h.

References trunc_length.

bool itpp::Convolutional_Code::catastrophic ( void   ) 

Check if catastrophic. Returns true if catastrophic.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 1087 of file convcode.cpp.

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

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.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 1052 of file convcode.cpp.

References gen_pol, it_error_if, m, and xor_int_table.

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 1131 of file convcode.cpp.

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

Referenced by fast().

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.

Reimplemented in itpp::Punctured_Convolutional_Code.

Definition at line 1215 of file convcode.cpp.

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

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.

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 1303 of file convcode.cpp.

References distance_profile(), m, next_state(), itpp::reverse(), itpp::spectrum(), weight(), and weight_reverse().

int itpp::Convolutional_Code::next_state ( const int  instate,
const int  input 
) [inline, protected]

Next state from instate given the input.

Definition at line 338 of file convcode.h.

References m.

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

int itpp::Convolutional_Code::previous_state ( const int  state,
const int  input 
) [inline, protected]

The previous state from state given the input.

Definition at line 343 of file convcode.h.

References m.

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

void itpp::Convolutional_Code::previous_state ( const int  state,
int &  S0,
int &  S1 
) [inline, protected]

The previous state from state given the input.

Definition at line 348 of file convcode.h.

References no_states.

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 46 of file convcode.cpp.

References gen_pol, K, m, and n.

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

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 89 of file convcode.cpp.

References gen_pol, m, and n.

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 68 of file convcode.cpp.

References gen_pol_rev, K, m, and n.

Referenced by distance_profile(), and fast().

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 112 of file convcode.cpp.

References gen_pol_rev, m, and n.

bvec itpp::Convolutional_Code::output_reverse ( const int  state,
const int  input 
) [protected]

Output on transition (backwards) with input from state.

Definition at line 134 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

Referenced by set_generator_polynomials().

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 152 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

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 171 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

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 192 of file convcode.cpp.

References gen_pol, n, and xor_int_table.

void itpp::Convolutional_Code::calc_metric ( const vec &  rx_codeword,
vec &  delta_metrics 
) [protected]

Calculate delta metrics for all possible codewords.

Definition at line 215 of file convcode.cpp.

References gen_pol, n, no_states, itpp::pow2i(), and xor_int_table.

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

int itpp::Convolutional_Code::get_input ( const int  state  )  [inline, protected]

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

Definition at line 375 of file convcode.h.

References m.

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


Friends And Related Function Documentation

int reverse_int ( int  length,
int  in 
) [related]

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

Definition at line 1444 of file convcode.cpp.

Referenced by set_generator_polynomials().

int weight_int ( int  length,
int  in 
) [related]

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

Definition at line 1462 of file convcode.cpp.

Referenced by set_generator_polynomials().

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 1476 of file convcode.cpp.

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 1495 of file convcode.cpp.


Member Data Documentation

int itpp::Convolutional_Code::n [protected]

Number of generators.

Definition at line 378 of file convcode.h.

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

int itpp::Convolutional_Code::K [protected]

Constraint length.

Definition at line 380 of file convcode.h.

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

int itpp::Convolutional_Code::m [protected]

Memory of the encoder.

Definition at line 382 of file convcode.h.

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

ivec itpp::Convolutional_Code::gen_pol [protected]

Generator polynomials.

Definition at line 386 of file convcode.h.

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

ivec itpp::Convolutional_Code::gen_pol_rev [protected]

Generator polynomials for the reverse code.

Definition at line 388 of file convcode.h.

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

int itpp::Convolutional_Code::encoder_state [protected]

The current encoder state.

Definition at line 390 of file convcode.h.

Referenced by encode_bit(), encode_tail(), encode_tailbite(), encode_trunc(), get_encoder_state(), itpp::Punctured_Convolutional_Code::init_encoder(), and init_encoder().

int itpp::Convolutional_Code::start_state [protected]

The encoder start state.

Definition at line 392 of file convcode.h.

Referenced by itpp::Punctured_Convolutional_Code::init_encoder(), init_encoder(), reset(), set_generator_polynomials(), and set_start_state().

int itpp::Convolutional_Code::trunc_length [protected]

The decoder truncation length.

Definition at line 394 of file convcode.h.

Referenced by decode_trunc(), get_truncation_length(), set_generator_polynomials(), and set_truncation_length().

double itpp::Convolutional_Code::rate [protected]

The rate of the code.

Definition at line 396 of file convcode.h.

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

bvec itpp::Convolutional_Code::xor_int_table [protected]

Auxilary table used by the codec.

Definition at line 398 of file convcode.h.

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

imat itpp::Convolutional_Code::output_reverse_int [protected]

output in int format for a given state and input

Definition at line 400 of file convcode.h.

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

CONVOLUTIONAL_CODE_METHOD itpp::Convolutional_Code::cc_method [protected]

encoding and decoding method

Definition at line 402 of file convcode.h.

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

imat itpp::Convolutional_Code::path_memory [protected]

Path memory (trellis).

Definition at line 404 of file convcode.h.

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

Array<bool> itpp::Convolutional_Code::visited_state [protected]

Visited states.

Definition at line 406 of file convcode.h.

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

vec itpp::Convolutional_Code::sum_metric [protected]

Metrics accumulator.

Definition at line 408 of file convcode.h.

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

int itpp::Convolutional_Code::trunc_ptr [protected]

Truncated path memory pointer.

Definition at line 410 of file convcode.h.

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

int itpp::Convolutional_Code::trunc_state [protected]

Truncated memory fill state.

Definition at line 412 of file convcode.h.

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


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

Generated on Wed Apr 18 11:20:04 2007 for IT++ by Doxygen 1.5.2