37 #include <itpp/itexports.h> 129 int constraint_length);
132 void set_generator_polynomials(
const ivec &gen,
int constraint_length);
141 virtual void encode(
const bvec &input, bvec &output);
145 encode(input, output);
157 void encode_trunc(
const bvec &input, bvec &output);
160 encode_trunc(input, output);
176 void encode_tail(
const bvec &input, bvec &output);
179 encode_tail(input, output);
199 void encode_tailbite(
const bvec &input, bvec &output);
202 encode_tailbite(input, output);
213 void encode_bit(
const bin &input, bvec &output);
216 encode_bit(input, output);
222 virtual void decode(
const bvec &coded_bits, bvec &decoded_bits);
223 virtual bvec decode(
const bvec &coded_bits);
226 virtual void decode(
const vec &received_signal, bvec &output);
228 virtual bvec
decode(
const vec &received_signal) {
230 decode(received_signal, output);
242 virtual void decode_tail(
const vec &received_signal, bvec &output);
245 decode_tail(received_signal, output);
259 virtual void decode_tailbite(
const vec &received_signal, bvec &output);
262 decode_tailbite(received_signal, output);
268 virtual void decode_trunc(
const vec &received_signal, bvec &output);
272 decode_trunc(received_signal, output);
279 virtual double get_rate(
void)
const {
return rate; }
284 it_error_if((state < 0) || ((state >= (1 << m)) && m != 0),
285 "Convolutional_Code::set_start_state(): Invalid start state");
302 "Truncation length shorter than K");
311 bool catastrophic(
void);
322 bool inverse_tail(
const bvec coded_sequence, bvec &input);
327 void distance_profile(ivec &dist_prof,
int dmax = 100000,
370 const int Cdfree = 1000000,
const bool test_catastrophic =
false);
375 return ((instate >> 1) | (input << (m - 1)));
379 return (((state << 1) | input) & ((1 << m) - 1));
383 S0 = (state << 1) & (no_states - 1);
387 int weight(
const int state,
const int input);
389 void weight(
const int state,
int &w0,
int &w1);
392 int weight_reverse(
const int state,
const int input);
395 void weight_reverse(
const int state,
int &w0,
int &w1);
397 bvec output_reverse(
const int state,
const int input);
399 void output_reverse(
const int state, bvec &zero_output, bvec &one_output);
401 void output_reverse(
const int state,
int &zero_output,
int &one_output);
403 void calc_metric_reverse(
const int state,
const vec &rx_codeword,
404 double &zero_metric,
double &one_metric);
406 void calc_metric(
const vec &rx_codeword, vec &delta_metrics);
408 int get_input(
const int state) {
return (state >> (m - 1)); }
477 #endif // #ifndef CONVCODE_H #define it_error_if(t, s)
Abort if t is true.
void set_method(const CONVOLUTIONAL_CODE_METHOD method)
Set encoding and decoding method (Trunc, Tail, or Tailbite)
bvec encode_tail(const bvec &input)
Encoding that starts and ends in the zero state.
int reverse_int(int length, int in)
Binary Convolutional rate 1/n class.
Vec< T > reverse(const Vec< T > &in)
Reverse the input vector.
int trunc_length
The decoder truncation length.
virtual bvec decode_trunc(const vec &received_signal)
Viterbi decoding using truncation of memory (default = 5*K)
Array< bool > visited_state
Visited states.
int get_encoder_state(void) const
Get the current encoder state.
imat output_reverse_int
output in int format for a given state and input
virtual bvec encode(const bvec &input)
Encode an input binary vector using specified method (Tail by default)
int weight_int(int length, int in)
bvec xor_int_table
Auxilary table used by the codec.
int next_state(const int instate, const int input)
Next state from instate given the input.
ivec get_generator_polynomials(void) const
Get generator polynomials.
int get_truncation_length(void) const
Get memory truncation length.
int length(const Vec< T > &v)
Length of vector.
void set_start_state(int state)
Set encoder default start state.
int no_states
Number of states.
Generic Channel Code class.
int weight(const bvec &a)
Calculate the Hamming weight of a.
Definition of Array class (container)
int trunc_state
Truncated memory fill state.
virtual bvec decode(const vec &received_signal)
Decode a block of encoded data using specified method (Tail by default)
int m
Memory of the encoder.
CONVOLUTIONAL_CODE_TYPE
Type of Convolutional Code.
Import/Export definitions for some templates defined in base folder.
Matrix Class Definitions.
ivec gen_pol_rev
Generator polynomials for the reverse code.
virtual ~Convolutional_Code(void)
Destructor.
Channel Code class virtual interface.
bvec encode_trunc(const bvec &input)
Encode a binary vector starting from the previous encoder state.
virtual bvec decode_tail(const vec &received_signal)
Decode a block of encoded data where encode_tail has been used.
int encoder_state
The current encoder state.
vec spectrum(const vec &v, int nfft, int noverlap)
Power spectrum calculation.
virtual bvec decode_tailbite(const vec &received_signal)
Decode a block of encoded data where encode_tailbite has been used.
CONVOLUTIONAL_CODE_METHOD
Encoding and decoding methods for Convolutional codes.
bvec encode_tailbite(const bvec &input)
Encode an input binary vector using tailbiting.
void set_truncation_length(const int length)
Set memory truncation length. Must be at least K.
Convolutional_Code(void)
Default constructor - sets (0133,0171) code with tail.
double rate
The rate of the code.
int n
Number of generators.
int start_state
The encoder start state.
int trunc_ptr
Truncated path memory pointer.
Binary arithmetic (boolean) class.
int previous_state(const int state, const int input)
The previous state from state given the input.
void init_encoder()
Initialise internal encoder state with start state. Has no effect on Tail and Tailbite methods...
bvec encode_bit(const bin &input)
Encode a binary bit starting from the internal encoder state.
void previous_state(const int state, int &S0, int &S1)
The previous state from state given the input.
virtual double get_rate(void) const
Return rate of code (not including the rate-loss)
CONVOLUTIONAL_CODE_METHOD cc_method
encoding and decoding method
int get_input(const int state)
Returns the input that results in state, that is the MSB of state.
int compare_spectra(ivec v1, ivec v2)
ivec gen_pol
Generator polynomials.
vec sum_metric
Metrics accumulator.
imat path_memory
Path memory (trellis)
Templated Vector Class Definitions.