#include <itpp/comm/punct_convcode.h>
Inheritance diagram for itpp::Punctured_Convolutional_Code:
Public Member Functions | |
Punctured_Convolutional_Code (void) | |
Constructor. | |
virtual | ~Punctured_Convolutional_Code (void) |
Destructor. | |
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) |
Get generator polynomials. | |
virtual double | get_rate (void) |
Return rate of code. | |
void | set_method (const CONVOLUTIONAL_CODE_METHOD method) |
Set encoding and decoding method (Trunc, Tail, or Tailbite). | |
void | set_puncture_matrix (const bmat &pmatrix) |
Set puncture matrix (size n*Period). | |
bmat | get_puncture_matrix (void) |
Get puncture matrix. | |
int | get_puncture_period (void) |
Get puncturing period. | |
void | init_encoder () |
Set the encoder internal state in start_state (set by set_start_state()). | |
void | encode (const bvec &input, bvec &output) |
Encode a binary vector of inputs using specified method. | |
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 of inputs starting from state set by the set_state function. | |
bvec | encode_trunc (const bvec &input) |
Encode a binary vector of inputs starting from state set by the set_state function. | |
void | encode_tail (const bvec &input, bvec &output) |
Encoding that begins and ends in the zero state. | |
bvec | encode_tail (const bvec &input) |
Encoding that begins 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. | |
virtual void | decode (const vec &received_signal, bvec &output) |
Viterbi decoding using specified method. | |
virtual bvec | decode (const vec &received_signal) |
Viterbi decoding using specified method. | |
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. | |
void | decode_trunc (const vec &received_signal, bvec &output) |
Viterbi decoding using truncation of memory (default = 5*K). | |
bvec | decode_trunc (const vec &received_signal) |
Viterbi decoding using truncation of memory (default = 5*K). | |
void | decode_tail (const vec &received_signal, bvec &output) |
Decode a block of encoded data where encode_tail has been used. | |
bvec | decode_tail (const vec &received_signal) |
Decode a block of encoded data where encode_tail has been used. | |
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. | |
bvec | decode_tailbite (const vec &received_signal) |
Decode a block of encoded data where encode_tailbite has been used. Tries all start states. | |
bool | inverse_tail (const bvec coded_sequence, bvec &input) |
Calculate the inverse sequence. | |
bool | catastrophic (void) |
Check if the code is catastrophic. Returns true if catastrophic. | |
void | distance_profile (ivec &dist_prof, int time, 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. | |
void | calculate_spectrum (Array< ivec > &spectrum, int time, int dmax, int no_terms, int block_length=0) |
Calculate spectrum. Suitable when calculating many terms in the spectra. Breadth first search. | |
int | fast (Array< ivec > &spectrum, int time, int dfree, int no_terms, int d_best_so_far=0, bool test_catastrophic=false) |
Cederwall's fast algorithm. | |
ivec | get_generator_polynomials (void) const |
Get generator polynomials. | |
void | reset () |
Reset encoder and decoder states. | |
void | set_start_state (int state) |
Set encoder default 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. | |
void | distance_profile (ivec &dist_prof, int dmax=100000, bool reverse=false) |
Calculate distance profile. If reverse = true calculate for the reverse code instead. | |
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. | |
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. | |
Protected Member Functions | |
int | weight (const int state, const int input, int time) |
The weight of path from state with input (0 or 1) at transition time . | |
void | weight (const int state, int &w0, int &w1, int time) |
The weight of the two paths (input 0 or 1) from given state. | |
int | weight_reverse (const int state, const int input, int time) |
Weight of the reverse code from state with input (0 or 1) at transition time . | |
void | weight_reverse (const int state, int &w0, int &w1, int time) |
The weight of the reverse code of two paths (input 0 or 1) from given state. | |
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 | Period |
The puncture period (i.e. the number of columns in the puncture matrix). | |
int | total |
The number of "1" in the puncture matrix. | |
bmat | puncture_matrix |
The puncture matrix (n rows and Period columns). | |
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. |
The codes are given as feedforward encoders an 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 meomory cells plus one (as in Proakis). The puncture matrix should be of size n * Period, where Period is the puncturing period.
Encoding is performed with the encode
function. By default the encode_tail
function is called which automatically add a tail of K-1 zeros and also assume that the encoder starts in the zero state. Observe that decode_tail
is used for data encoded with encode_tail
, and decode_trunc assumes that the memory truncation length either is the default (5*K) or set using the set_truncation_length
function. Encoding and decoding method can be changed by calling the set_method() function.
Example of use: (rate 1/3 constraint length K=7 ODS code using BPSK over AWGN)
BPSK bpsk; Punctured_Convolutional_Code code; ivec generator(3); generator(0)=0133; generator(1)=0165; generator(2)=0171; code.set_generator_polynomials(generator, 7); bmat puncture_matrix = "1 1;0 1"; code.set_puncture_matrix(puncture_matrix); code.set_truncation_length(30); bvec bits=randb(100), encoded_bits, decoded_bits; vec tx_signal, rx_signal; code.encode(bits, encoded_bits); tx_signal = bpsk.modulate_bits(encoded_bits); rx_signal = tx_signal + sqrt(0.5)*randn(tx_signal.size()); code.decode(rx_signal, decoded_bits);
Definition at line 83 of file punct_convcode.h.
itpp::Punctured_Convolutional_Code::Punctured_Convolutional_Code | ( | void | ) | [inline] |
virtual itpp::Punctured_Convolutional_Code::~Punctured_Convolutional_Code | ( | void | ) | [inline, virtual] |
void itpp::Punctured_Convolutional_Code::set_code | ( | const CONVOLUTIONAL_CODE_TYPE | type_of_code, | |
int | inverse_rate, | |||
int | constraint_length | |||
) | [inline] |
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 from itpp::Convolutional_Code.
Definition at line 96 of file punct_convcode.h.
References itpp::Convolutional_Code::set_code().
void itpp::Punctured_Convolutional_Code::set_generator_polynomials | ( | const ivec & | gen, | |
int | constraint_length | |||
) | [inline] |
Set generator polynomials. Given in Proakis integer form.
Reimplemented from itpp::Convolutional_Code.
Definition at line 99 of file punct_convcode.h.
References itpp::Convolutional_Code::set_generator_polynomials().
ivec itpp::Punctured_Convolutional_Code::get_generator_polynomials | ( | void | ) | [inline] |
Get generator polynomials.
Definition at line 102 of file punct_convcode.h.
References itpp::Convolutional_Code::gen_pol.
virtual double itpp::Punctured_Convolutional_Code::get_rate | ( | void | ) | [inline, virtual] |
Return rate of code.
Reimplemented from itpp::Convolutional_Code.
Definition at line 105 of file punct_convcode.h.
References itpp::Convolutional_Code::rate.
void itpp::Punctured_Convolutional_Code::set_method | ( | const CONVOLUTIONAL_CODE_METHOD | method | ) | [inline] |
Set encoding and decoding method (Trunc, Tail, or Tailbite).
Reimplemented from itpp::Convolutional_Code.
Definition at line 108 of file punct_convcode.h.
References itpp::Convolutional_Code::set_method().
void itpp::Punctured_Convolutional_Code::set_puncture_matrix | ( | const bmat & | pmatrix | ) |
Set puncture matrix (size n*Period).
Definition at line 121 of file punct_convcode.cpp.
References it_error_if, itpp::Convolutional_Code::n, Period, puncture_matrix, itpp::Convolutional_Code::rate, and total.
bmat itpp::Punctured_Convolutional_Code::get_puncture_matrix | ( | void | ) | [inline] |
int itpp::Punctured_Convolutional_Code::get_puncture_period | ( | void | ) | [inline] |
void itpp::Punctured_Convolutional_Code::init_encoder | ( | ) | [inline] |
Set the encoder internal state in start_state (set by set_start_state()).
Reimplemented from itpp::Convolutional_Code.
Definition at line 118 of file punct_convcode.h.
References itpp::Convolutional_Code::encoder_state, and itpp::Convolutional_Code::start_state.
void itpp::Punctured_Convolutional_Code::encode | ( | const bvec & | input, | |
bvec & | output | |||
) | [virtual] |
Encode a binary vector of inputs using specified method.
Reimplemented from itpp::Convolutional_Code.
Definition at line 137 of file punct_convcode.cpp.
References itpp::Convolutional_Code::cc_method, encode_tail(), encode_tailbite(), encode_trunc(), itpp::Tail, itpp::Tailbite, and itpp::Trunc.
Referenced by encode().
bvec itpp::Punctured_Convolutional_Code::encode | ( | const bvec & | input | ) | [inline, virtual] |
Encode a binary vector of inputs using specified method.
Reimplemented from itpp::Convolutional_Code.
Definition at line 123 of file punct_convcode.h.
References encode().
void itpp::Punctured_Convolutional_Code::encode_trunc | ( | const bvec & | input, | |
bvec & | output | |||
) |
Encode a binary vector of inputs starting from state set by the set_state function.
Reimplemented from itpp::Convolutional_Code.
Definition at line 155 of file punct_convcode.cpp.
References itpp::Convolutional_Code::encode_trunc(), itpp::Convolutional_Code::n, Period, and puncture_matrix.
Referenced by encode(), and encode_trunc().
bvec itpp::Punctured_Convolutional_Code::encode_trunc | ( | const bvec & | input | ) | [inline] |
Encode a binary vector of inputs starting from state set by the set_state function.
Reimplemented from itpp::Convolutional_Code.
Definition at line 128 of file punct_convcode.h.
References encode_trunc().
void itpp::Punctured_Convolutional_Code::encode_tail | ( | const bvec & | input, | |
bvec & | output | |||
) |
Encoding that begins 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 from itpp::Convolutional_Code.
Definition at line 173 of file punct_convcode.cpp.
References itpp::Convolutional_Code::encode_tail(), itpp::Convolutional_Code::n, Period, and puncture_matrix.
Referenced by encode(), and encode_tail().
bvec itpp::Punctured_Convolutional_Code::encode_tail | ( | const bvec & | input | ) | [inline] |
Encoding that begins 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 from itpp::Convolutional_Code.
Definition at line 145 of file punct_convcode.h.
References encode_tail().
void itpp::Punctured_Convolutional_Code::encode_tailbite | ( | const bvec & | input, | |
bvec & | output | |||
) |
Encode a binary vector of inputs using tailbiting.
Reimplemented from itpp::Convolutional_Code.
Definition at line 191 of file punct_convcode.cpp.
References itpp::Convolutional_Code::encode_tailbite(), itpp::Convolutional_Code::n, Period, and puncture_matrix.
Referenced by encode(), and encode_tailbite().
bvec itpp::Punctured_Convolutional_Code::encode_tailbite | ( | const bvec & | input | ) | [inline] |
Encode a binary vector of inputs using tailbiting.
Reimplemented from itpp::Convolutional_Code.
Definition at line 150 of file punct_convcode.h.
References encode_tailbite().
void itpp::Punctured_Convolutional_Code::decode | ( | const vec & | received_signal, | |
bvec & | output | |||
) | [virtual] |
Viterbi decoding using specified method.
Reimplemented from itpp::Convolutional_Code.
Definition at line 225 of file punct_convcode.cpp.
References itpp::Convolutional_Code::cc_method, decode_tail(), decode_tailbite(), decode_trunc(), itpp::Tail, itpp::Tailbite, and itpp::Trunc.
Referenced by decode().
virtual bvec itpp::Punctured_Convolutional_Code::decode | ( | const vec & | received_signal | ) | [inline, virtual] |
Viterbi decoding using specified method.
Reimplemented from itpp::Convolutional_Code.
Definition at line 157 of file punct_convcode.h.
References decode().
void itpp::Punctured_Convolutional_Code::decode | ( | const bvec & | codedbits, | |
bvec & | decoded_bits | |||
) | [virtual] |
Decode a bvec of coded data.
Reimplemented from itpp::Convolutional_Code.
Definition at line 211 of file punct_convcode.cpp.
References it_error.
bvec itpp::Punctured_Convolutional_Code::decode | ( | const bvec & | coded_bits | ) | [virtual] |
Decode a bvec of coded data.
Reimplemented from itpp::Convolutional_Code.
Definition at line 216 of file punct_convcode.cpp.
References it_error.
void itpp::Punctured_Convolutional_Code::decode_trunc | ( | const vec & | received_signal, | |
bvec & | output | |||
) | [virtual] |
Viterbi decoding using truncation of memory (default = 5*K).
Reimplemented from itpp::Convolutional_Code.
Definition at line 245 of file punct_convcode.cpp.
References itpp::Convolutional_Code::decode_trunc(), it_warning, itpp::Convolutional_Code::n, Period, puncture_matrix, and total.
Referenced by decode(), and decode_trunc().
bvec itpp::Punctured_Convolutional_Code::decode_trunc | ( | const vec & | received_signal | ) | [inline, virtual] |
Viterbi decoding using truncation of memory (default = 5*K).
Reimplemented from itpp::Convolutional_Code.
Definition at line 166 of file punct_convcode.h.
References decode_trunc().
void itpp::Punctured_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 from itpp::Convolutional_Code.
Definition at line 292 of file punct_convcode.cpp.
References itpp::Convolutional_Code::decode_tail(), it_warning, itpp::Convolutional_Code::n, Period, puncture_matrix, and total.
Referenced by decode(), and decode_tail().
bvec itpp::Punctured_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 from itpp::Convolutional_Code.
Definition at line 181 of file punct_convcode.h.
References decode_tail().
void itpp::Punctured_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 from itpp::Convolutional_Code.
Definition at line 340 of file punct_convcode.cpp.
References itpp::Convolutional_Code::decode_tailbite(), it_warning, itpp::Convolutional_Code::n, Period, puncture_matrix, and total.
Referenced by decode(), and decode_tailbite().
bvec itpp::Punctured_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 from itpp::Convolutional_Code.
Definition at line 186 of file punct_convcode.h.
References decode_tailbite().
bool itpp::Punctured_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 from itpp::Convolutional_Code.
Definition at line 395 of file punct_convcode.cpp.
References itpp::Convolutional_Code::gen_pol, it_error_if, itpp::Convolutional_Code::m, itpp::Convolutional_Code::n, Period, puncture_matrix, total, and itpp::Convolutional_Code::xor_int_table.
bool itpp::Punctured_Convolutional_Code::catastrophic | ( | void | ) |
Check if the code is catastrophic. Returns true if catastrophic.
Reimplemented from itpp::Convolutional_Code.
Definition at line 444 of file punct_convcode.cpp.
References itpp::Convolutional_Code::m, itpp::Convolutional_Code::next_state(), Period, and weight().
void itpp::Punctured_Convolutional_Code::distance_profile | ( | ivec & | dist_prof, | |
int | time, | |||
int | dmax = 100000 , |
|||
bool | reverse = false | |||
) |
Calculate distance profile. If reverse = true calculate for the reverse code instead.
Definition at line 504 of file punct_convcode.cpp.
References itpp::Convolutional_Code::m, itpp::Convolutional_Code::next_state(), Period, weight(), and weight_reverse().
Referenced by fast().
void itpp::Punctured_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. For a punctrued code the spectrum is a sum of the spectras of all starting positions. 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.
Observe that there is a risk that some of the integers are overflow if many terms are calculated in the spectrum.
Reimplemented from itpp::Convolutional_Code.
Definition at line 719 of file punct_convcode.cpp.
References Period, and itpp::spectrum().
void itpp::Punctured_Convolutional_Code::calculate_spectrum | ( | Array< ivec > & | spectrum, | |
int | time, | |||
int | dmax, | |||
int | no_terms, | |||
int | block_length = 0 | |||
) |
Calculate spectrum. Suitable when calculating many terms in the spectra. Breadth first search.
Use this function to evaluate the spectum whith a speccific puncturing period, or to calculate the spectrum for block transmission. To calculate spectra for block transmission:
Definition at line 736 of file punct_convcode.cpp.
References itpp::elem_mult(), itpp::Convolutional_Code::K, itpp::Convolutional_Code::m, itpp::Convolutional_Code::next_state(), Period, itpp::spectrum(), and weight().
int itpp::Punctured_Convolutional_Code::fast | ( | Array< ivec > & | spectrum, | |
int | time, | |||
int | dfree, | |||
int | no_terms, | |||
int | d_best_so_far = 0 , |
|||
bool | test_catastrophic = false | |||
) |
Cederwall's fast algorithm.
true
), and returns 1 if everything went right. calc_spectrum
instead. Observe that there is a risk that some of the integers are overflow if many terms are calculated in the spectrum.
Definition at line 576 of file punct_convcode.cpp.
References distance_profile(), itpp::Convolutional_Code::K, itpp::Convolutional_Code::m, itpp::Convolutional_Code::next_state(), Period, itpp::reverse(), itpp::spectrum(), weight(), and weight_reverse().
int itpp::Punctured_Convolutional_Code::weight | ( | const int | state, | |
const int | input, | |||
int | time | |||
) | [protected] |
The weight of path from state
with input
(0 or 1) at transition time
.
Definition at line 41 of file punct_convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::K, itpp::Convolutional_Code::m, itpp::Convolutional_Code::n, and puncture_matrix.
Referenced by calculate_spectrum(), catastrophic(), distance_profile(), and fast().
void itpp::Punctured_Convolutional_Code::weight | ( | const int | state, | |
int & | w0, | |||
int & | w1, | |||
int | time | |||
) | [protected] |
The weight of the two paths (input 0 or 1) from given state.
Definition at line 79 of file punct_convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::m, itpp::Convolutional_Code::n, and puncture_matrix.
int itpp::Punctured_Convolutional_Code::weight_reverse | ( | const int | state, | |
const int | input, | |||
int | time | |||
) | [protected] |
Weight of the reverse code from state
with input
(0 or 1) at transition time
.
Definition at line 60 of file punct_convcode.cpp.
References itpp::Convolutional_Code::gen_pol_rev, itpp::Convolutional_Code::K, itpp::Convolutional_Code::m, itpp::Convolutional_Code::n, Period, and puncture_matrix.
Referenced by distance_profile(), and fast().
void itpp::Punctured_Convolutional_Code::weight_reverse | ( | const int | state, | |
int & | w0, | |||
int & | w1, | |||
int | time | |||
) | [protected] |
The weight of the reverse code of two paths (input 0 or 1) from given state.
Definition at line 99 of file punct_convcode.cpp.
References itpp::Convolutional_Code::gen_pol_rev, itpp::Convolutional_Code::m, itpp::Convolutional_Code::n, Period, and puncture_matrix.
ivec itpp::Convolutional_Code::get_generator_polynomials | ( | void | ) | const [inline, inherited] |
Get generator polynomials.
Definition at line 136 of file convcode.h.
References itpp::Convolutional_Code::gen_pol.
void itpp::Convolutional_Code::reset | ( | ) | [inherited] |
Reset encoder and decoder states.
Definition at line 604 of file convcode.cpp.
References itpp::Convolutional_Code::init_encoder(), itpp::Convolutional_Code::start_state, itpp::Convolutional_Code::sum_metric, itpp::Convolutional_Code::trunc_ptr, itpp::Convolutional_Code::trunc_state, and itpp::Convolutional_Code::visited_state.
void itpp::Convolutional_Code::encode_bit | ( | const bin & | input, | |
bvec & | output | |||
) | [inherited] |
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 itpp::Convolutional_Code::encoder_state, itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::m, and itpp::Convolutional_Code::xor_int_table.
Referenced by itpp::Convolutional_Code::encode_bit().
bvec itpp::Convolutional_Code::encode_bit | ( | const bin & | input | ) | [inline, inherited] |
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 itpp::Convolutional_Code::encode_bit().
void itpp::Convolutional_Code::set_start_state | ( | int | state | ) | [inline, inherited] |
Set encoder default start state.
Definition at line 249 of file convcode.h.
References it_error_if, itpp::Convolutional_Code::m, and itpp::Convolutional_Code::start_state.
int itpp::Convolutional_Code::get_encoder_state | ( | void | ) | const [inline, inherited] |
Get the current encoder state.
Definition at line 260 of file convcode.h.
References itpp::Convolutional_Code::encoder_state.
void itpp::Convolutional_Code::set_truncation_length | ( | const int | length | ) | [inline, inherited] |
Set memory truncation length. Must be at least K.
Definition at line 264 of file convcode.h.
References it_error_if, itpp::Convolutional_Code::K, and itpp::Convolutional_Code::trunc_length.
int itpp::Convolutional_Code::get_truncation_length | ( | void | ) | const [inline, inherited] |
Get memory truncation length.
Definition at line 271 of file convcode.h.
References itpp::Convolutional_Code::trunc_length.
void itpp::Convolutional_Code::distance_profile | ( | ivec & | dist_prof, | |
int | dmax = 100000 , |
|||
bool | reverse = false | |||
) | [inherited] |
Calculate distance profile. If reverse = true calculate for the reverse code instead.
Definition at line 1131 of file convcode.cpp.
References itpp::Convolutional_Code::m, itpp::Convolutional_Code::next_state(), itpp::Convolutional_Code::weight(), and itpp::Convolutional_Code::weight_reverse().
Referenced by itpp::Convolutional_Code::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 | |||
) | [inherited] |
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 farSee IT No. 6, pp. 1146-1159, Nov. 1989 for details.
Definition at line 1303 of file convcode.cpp.
References itpp::Convolutional_Code::distance_profile(), itpp::Convolutional_Code::m, itpp::Convolutional_Code::next_state(), itpp::reverse(), itpp::spectrum(), itpp::Convolutional_Code::weight(), and itpp::Convolutional_Code::weight_reverse().
int itpp::Convolutional_Code::next_state | ( | const int | instate, | |
const int | input | |||
) | [inline, protected, inherited] |
Next state from instate given the input.
Definition at line 338 of file convcode.h.
References itpp::Convolutional_Code::m.
Referenced by calculate_spectrum(), itpp::Convolutional_Code::calculate_spectrum(), catastrophic(), itpp::Convolutional_Code::catastrophic(), distance_profile(), itpp::Convolutional_Code::distance_profile(), fast(), and itpp::Convolutional_Code::fast().
int itpp::Convolutional_Code::previous_state | ( | const int | state, | |
const int | input | |||
) | [inline, protected, inherited] |
The previous state from state given the input.
Definition at line 343 of file convcode.h.
References itpp::Convolutional_Code::m.
Referenced by itpp::Convolutional_Code::decode_tail(), itpp::Convolutional_Code::decode_tailbite(), and itpp::Convolutional_Code::decode_trunc().
void itpp::Convolutional_Code::previous_state | ( | const int | state, | |
int & | S0, | |||
int & | S1 | |||
) | [inline, protected, inherited] |
The previous state from state given the input.
Definition at line 348 of file convcode.h.
References itpp::Convolutional_Code::no_states.
int itpp::Convolutional_Code::weight | ( | const int | state, | |
const int | input | |||
) | [protected, inherited] |
The weight of the transition from given state with the input given.
Definition at line 46 of file convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::K, itpp::Convolutional_Code::m, and itpp::Convolutional_Code::n.
Referenced by itpp::Convolutional_Code::calculate_spectrum(), itpp::Convolutional_Code::catastrophic(), itpp::Convolutional_Code::distance_profile(), and itpp::Convolutional_Code::fast().
void itpp::Convolutional_Code::weight | ( | const int | state, | |
int & | w0, | |||
int & | w1 | |||
) | [protected, inherited] |
The weight of the two paths (input 0 or 1) from given state.
Definition at line 89 of file convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::m, and itpp::Convolutional_Code::n.
int itpp::Convolutional_Code::weight_reverse | ( | const int | state, | |
const int | input | |||
) | [protected, inherited] |
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 itpp::Convolutional_Code::gen_pol_rev, itpp::Convolutional_Code::K, itpp::Convolutional_Code::m, and itpp::Convolutional_Code::n.
Referenced by itpp::Convolutional_Code::distance_profile(), and itpp::Convolutional_Code::fast().
void itpp::Convolutional_Code::weight_reverse | ( | const int | state, | |
int & | w0, | |||
int & | w1 | |||
) | [protected, inherited] |
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 itpp::Convolutional_Code::gen_pol_rev, itpp::Convolutional_Code::m, and itpp::Convolutional_Code::n.
bvec itpp::Convolutional_Code::output_reverse | ( | const int | state, | |
const int | input | |||
) | [protected, inherited] |
Output on transition (backwards) with input from state.
Definition at line 134 of file convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::n, and itpp::Convolutional_Code::xor_int_table.
Referenced by itpp::Convolutional_Code::set_generator_polynomials().
void itpp::Convolutional_Code::output_reverse | ( | const int | state, | |
bvec & | zero_output, | |||
bvec & | one_output | |||
) | [protected, inherited] |
Output on transition (backwards) with input from state.
Definition at line 152 of file convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::n, and itpp::Convolutional_Code::xor_int_table.
void itpp::Convolutional_Code::output_reverse | ( | const int | state, | |
int & | zero_output, | |||
int & | one_output | |||
) | [protected, inherited] |
Output on transition (backwards) with input from state.
Definition at line 171 of file convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::n, and itpp::Convolutional_Code::xor_int_table.
void itpp::Convolutional_Code::calc_metric_reverse | ( | const int | state, | |
const vec & | rx_codeword, | |||
double & | zero_metric, | |||
double & | one_metric | |||
) | [protected, inherited] |
Calculate delta metrics for 0 and 1 input branches reaching state.
Definition at line 192 of file convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::n, and itpp::Convolutional_Code::xor_int_table.
void itpp::Convolutional_Code::calc_metric | ( | const vec & | rx_codeword, | |
vec & | delta_metrics | |||
) | [protected, inherited] |
Calculate delta metrics for all possible codewords.
Definition at line 215 of file convcode.cpp.
References itpp::Convolutional_Code::gen_pol, itpp::Convolutional_Code::n, itpp::Convolutional_Code::no_states, itpp::pow2i(), and itpp::Convolutional_Code::xor_int_table.
Referenced by itpp::Convolutional_Code::decode_tail(), itpp::Convolutional_Code::decode_tailbite(), and itpp::Convolutional_Code::decode_trunc().
int itpp::Convolutional_Code::get_input | ( | const int | state | ) | [inline, protected, inherited] |
Returns the input that results in state, that is the MSB of state.
Definition at line 375 of file convcode.h.
References itpp::Convolutional_Code::m.
Referenced by itpp::Convolutional_Code::decode_tail(), itpp::Convolutional_Code::decode_tailbite(), and itpp::Convolutional_Code::decode_trunc().
int reverse_int | ( | int | length, | |
int | in | |||
) | [related, inherited] |
Reverses the bitrepresentation of in (of size length) and converts to an integer.
Definition at line 1444 of file convcode.cpp.
Referenced by itpp::Convolutional_Code::set_generator_polynomials().
int weight_int | ( | int | length, | |
int | in | |||
) | [related, inherited] |
Calculate the Hamming weight of the binary representation of in of size length.
Definition at line 1462 of file convcode.cpp.
Referenced by itpp::Convolutional_Code::set_generator_polynomials().
int compare_spectra | ( | ivec | v1, | |
ivec | v2 | |||
) | [related, inherited] |
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, inherited] |
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.
int itpp::Punctured_Convolutional_Code::Period [protected] |
The puncture period (i.e. the number of columns in the puncture matrix).
Definition at line 269 of file punct_convcode.h.
Referenced by calculate_spectrum(), catastrophic(), decode_tail(), decode_tailbite(), decode_trunc(), distance_profile(), encode_tail(), encode_tailbite(), encode_trunc(), fast(), get_puncture_period(), inverse_tail(), set_puncture_matrix(), and weight_reverse().
int itpp::Punctured_Convolutional_Code::total [protected] |
The number of "1" in the puncture matrix.
Definition at line 271 of file punct_convcode.h.
Referenced by decode_tail(), decode_tailbite(), decode_trunc(), inverse_tail(), and set_puncture_matrix().
The puncture matrix (n rows and Period columns).
Definition at line 273 of file punct_convcode.h.
Referenced by decode_tail(), decode_tailbite(), decode_trunc(), encode_tail(), encode_tailbite(), encode_trunc(), get_puncture_matrix(), inverse_tail(), set_puncture_matrix(), weight(), and weight_reverse().
int itpp::Convolutional_Code::n [protected, inherited] |
Number of generators.
Definition at line 378 of file convcode.h.
Referenced by itpp::Convolutional_Code::calc_metric(), itpp::Convolutional_Code::calc_metric_reverse(), decode_tail(), decode_tailbite(), decode_trunc(), encode_tail(), encode_tailbite(), encode_trunc(), inverse_tail(), itpp::Convolutional_Code::output_reverse(), set_puncture_matrix(), weight(), itpp::Convolutional_Code::weight(), weight_reverse(), and itpp::Convolutional_Code::weight_reverse().
int itpp::Convolutional_Code::K [protected, inherited] |
Constraint length.
Definition at line 380 of file convcode.h.
Referenced by calculate_spectrum(), fast(), itpp::Convolutional_Code::set_truncation_length(), weight(), itpp::Convolutional_Code::weight(), weight_reverse(), and itpp::Convolutional_Code::weight_reverse().
int itpp::Convolutional_Code::m [protected, inherited] |
Memory of the encoder.
Definition at line 382 of file convcode.h.
Referenced by calculate_spectrum(), itpp::Convolutional_Code::calculate_spectrum(), catastrophic(), itpp::Convolutional_Code::catastrophic(), itpp::Convolutional_Code::decode_tail(), distance_profile(), itpp::Convolutional_Code::distance_profile(), itpp::Convolutional_Code::encode_bit(), itpp::Convolutional_Code::encode_tail(), itpp::Convolutional_Code::encode_tailbite(), itpp::Convolutional_Code::encode_trunc(), fast(), itpp::Convolutional_Code::fast(), itpp::Convolutional_Code::get_input(), inverse_tail(), itpp::Convolutional_Code::inverse_tail(), itpp::Convolutional_Code::next_state(), itpp::Convolutional_Code::previous_state(), itpp::Convolutional_Code::set_generator_polynomials(), itpp::Convolutional_Code::set_start_state(), weight(), itpp::Convolutional_Code::weight(), weight_reverse(), and itpp::Convolutional_Code::weight_reverse().
ivec itpp::Convolutional_Code::gen_pol [protected, inherited] |
Generator polynomials.
Definition at line 386 of file convcode.h.
Referenced by itpp::Convolutional_Code::calc_metric(), itpp::Convolutional_Code::calc_metric_reverse(), itpp::Convolutional_Code::encode_bit(), itpp::Convolutional_Code::encode_tail(), itpp::Convolutional_Code::encode_tailbite(), itpp::Convolutional_Code::encode_trunc(), get_generator_polynomials(), itpp::Convolutional_Code::get_generator_polynomials(), inverse_tail(), itpp::Convolutional_Code::inverse_tail(), itpp::Convolutional_Code::output_reverse(), itpp::Convolutional_Code::set_generator_polynomials(), weight(), and itpp::Convolutional_Code::weight().
ivec itpp::Convolutional_Code::gen_pol_rev [protected, inherited] |
Generator polynomials for the reverse code.
Definition at line 388 of file convcode.h.
Referenced by itpp::Convolutional_Code::set_generator_polynomials(), weight_reverse(), and itpp::Convolutional_Code::weight_reverse().
int itpp::Convolutional_Code::encoder_state [protected, inherited] |
The current encoder state.
Definition at line 390 of file convcode.h.
Referenced by itpp::Convolutional_Code::encode_bit(), itpp::Convolutional_Code::encode_tail(), itpp::Convolutional_Code::encode_tailbite(), itpp::Convolutional_Code::encode_trunc(), itpp::Convolutional_Code::get_encoder_state(), init_encoder(), and itpp::Convolutional_Code::init_encoder().
int itpp::Convolutional_Code::start_state [protected, inherited] |
The encoder start state.
Definition at line 392 of file convcode.h.
Referenced by init_encoder(), itpp::Convolutional_Code::init_encoder(), itpp::Convolutional_Code::reset(), itpp::Convolutional_Code::set_generator_polynomials(), and itpp::Convolutional_Code::set_start_state().
int itpp::Convolutional_Code::trunc_length [protected, inherited] |
The decoder truncation length.
Definition at line 394 of file convcode.h.
Referenced by itpp::Convolutional_Code::decode_trunc(), itpp::Convolutional_Code::get_truncation_length(), itpp::Convolutional_Code::set_generator_polynomials(), and itpp::Convolutional_Code::set_truncation_length().
double itpp::Convolutional_Code::rate [protected, inherited] |
The rate of the code.
Definition at line 396 of file convcode.h.
Referenced by get_rate(), itpp::Convolutional_Code::get_rate(), itpp::Convolutional_Code::set_generator_polynomials(), and set_puncture_matrix().
bvec itpp::Convolutional_Code::xor_int_table [protected, inherited] |
Auxilary table used by the codec.
Definition at line 398 of file convcode.h.
Referenced by itpp::Convolutional_Code::calc_metric(), itpp::Convolutional_Code::calc_metric_reverse(), itpp::Convolutional_Code::encode_bit(), itpp::Convolutional_Code::encode_tail(), itpp::Convolutional_Code::encode_tailbite(), itpp::Convolutional_Code::encode_trunc(), inverse_tail(), itpp::Convolutional_Code::inverse_tail(), itpp::Convolutional_Code::output_reverse(), and itpp::Convolutional_Code::set_generator_polynomials().
imat itpp::Convolutional_Code::output_reverse_int [protected, inherited] |
output in int format for a given state and input
Definition at line 400 of file convcode.h.
Referenced by itpp::Convolutional_Code::decode_tail(), itpp::Convolutional_Code::decode_tailbite(), itpp::Convolutional_Code::decode_trunc(), and itpp::Convolutional_Code::set_generator_polynomials().
CONVOLUTIONAL_CODE_METHOD itpp::Convolutional_Code::cc_method [protected, inherited] |
encoding and decoding method
Definition at line 402 of file convcode.h.
Referenced by decode(), itpp::Convolutional_Code::decode(), encode(), itpp::Convolutional_Code::encode(), and itpp::Convolutional_Code::set_method().
imat itpp::Convolutional_Code::path_memory [protected, inherited] |
Path memory (trellis).
Definition at line 404 of file convcode.h.
Referenced by itpp::Convolutional_Code::decode_tail(), itpp::Convolutional_Code::decode_tailbite(), and itpp::Convolutional_Code::decode_trunc().
Array<bool> itpp::Convolutional_Code::visited_state [protected, inherited] |
Visited states.
Definition at line 406 of file convcode.h.
Referenced by itpp::Convolutional_Code::decode_tail(), itpp::Convolutional_Code::decode_tailbite(), itpp::Convolutional_Code::decode_trunc(), itpp::Convolutional_Code::reset(), and itpp::Convolutional_Code::set_generator_polynomials().
vec itpp::Convolutional_Code::sum_metric [protected, inherited] |
Metrics accumulator.
Definition at line 408 of file convcode.h.
Referenced by itpp::Convolutional_Code::decode_tail(), itpp::Convolutional_Code::decode_tailbite(), itpp::Convolutional_Code::decode_trunc(), itpp::Convolutional_Code::reset(), and itpp::Convolutional_Code::set_generator_polynomials().
int itpp::Convolutional_Code::trunc_ptr [protected, inherited] |
Truncated path memory pointer.
Definition at line 410 of file convcode.h.
Referenced by itpp::Convolutional_Code::decode_trunc(), itpp::Convolutional_Code::reset(), and itpp::Convolutional_Code::set_generator_polynomials().
int itpp::Convolutional_Code::trunc_state [protected, inherited] |
Truncated memory fill state.
Definition at line 412 of file convcode.h.
Referenced by itpp::Convolutional_Code::decode_trunc(), itpp::Convolutional_Code::reset(), and itpp::Convolutional_Code::set_generator_polynomials().
Generated on Sat Aug 25 23:37:30 2007 for IT++ by Doxygen 1.5.2