34class Viterbi_Decoder_Sbas
37 Viterbi_Decoder_Sbas(
const int g_encoder[],
int KK,
int nn);
49 float decode_block(
const double input_c[],
int* output_u_int,
int LL);
51 float decode_continuous(
const double sym[],
int traceback_depth,
int bits[],
52 int nbits_requested,
int& nbits_decoded);
59 Prev(
int states,
int tt);
60 Prev(
const Prev& prev);
61 Prev& operator=(
const Prev& other);
64 int get_anchestor_state_of_current_state(
int current_state)
const;
65 int get_bit_of_current_state(
int current_state)
const;
66 float get_metric_of_current_state(
int current_state)
const;
68 void set_current_state_as_ancestor_of_next_state(
int next_state,
int current_state);
69 void set_decoded_bit_for_next_state(
int next_state,
int bit);
70 void set_survivor_branch_metric_of_next_state(
int next_state,
float metric);
73 std::vector<float> v_metric;
74 std::vector<int> state;
75 std::vector<int> v_bit;
81 void init_trellis_state();
82 int do_acs(
const double sym[],
int nbits);
83 int do_traceback(std::size_t traceback_length);
84 int do_tb_and_decode(
int traceback_length,
int requested_decoding_length,
int state,
int output_u_int[],
float& indicator_metric);
87 float gamma(
const float rec_array[],
int symbol,
int nn);
90 void nsc_transit(
int output_p[],
int trans_p[],
int input,
const int g[],
int KK,
int nn);
91 int nsc_enc_bit(
int state_out_p[],
int input,
int state_in,
const int g[],
int KK,
int nn);
92 int parity_counter(
int symbol,
int length);
95 std::deque<Prev> d_trellis_paths;
96 std::vector<float> d_pm_t;
97 std::vector<float> d_metric_c;
98 std::vector<float> d_rec_array;
101 std::vector<int> d_out0;
102 std::vector<int> d_state0;
103 std::vector<int> d_out1;
104 std::vector<int> d_state1;
107 float d_indicator_metric;
116 int d_number_symbols;
117 bool d_trellis_state_is_initialised;
float decode_block(const double input_c[], int *output_u_int, int LL)
Uses the Viterbi algorithm to perform hard-decision decoding of a convolutional code.