[hamradio-commits] [gnss-sdr] 40/149: Removing unused code
Carles Fernandez
carles_fernandez-guest at moszumanska.debian.org
Sat Feb 6 19:43:00 UTC 2016
This is an automated email from the git hooks/post-receive script.
carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.
commit aefe47cd7a0200bb67b89fefe439892bddd5343d
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date: Mon Jan 11 00:50:09 2016 +0100
Removing unused code
---
src/algorithms/PVT/libs/geojson_printer.cc | 1 -
src/algorithms/PVT/libs/geojson_printer.h | 1 -
src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.h | 1 -
.../telemetry_decoder/libs/convolutional.h | 344 ++-------------------
.../telemetry_decoder/libs/viterbi_decoder.cc | 93 +++---
.../telemetry_decoder/libs/viterbi_decoder.h | 2 -
6 files changed, 72 insertions(+), 370 deletions(-)
diff --git a/src/algorithms/PVT/libs/geojson_printer.cc b/src/algorithms/PVT/libs/geojson_printer.cc
index f07f396..9979929 100644
--- a/src/algorithms/PVT/libs/geojson_printer.cc
+++ b/src/algorithms/PVT/libs/geojson_printer.cc
@@ -32,7 +32,6 @@
#include "geojson_printer.h"
#include <ctime>
-#include <iostream>
#include <iomanip>
#include <sstream>
#include <glog/logging.h>
diff --git a/src/algorithms/PVT/libs/geojson_printer.h b/src/algorithms/PVT/libs/geojson_printer.h
index 4ab3e9d..b286e16 100644
--- a/src/algorithms/PVT/libs/geojson_printer.h
+++ b/src/algorithms/PVT/libs/geojson_printer.h
@@ -33,7 +33,6 @@
#ifndef GNSS_SDR_GEOJSON_PRINTER_H_
#define GNSS_SDR_GEOJSON_PRINTER_H_
-#include <iostream>
#include <fstream>
#include <memory>
#include <string>
diff --git a/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.h b/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.h
index ea9b4d4..c926d24 100644
--- a/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.h
+++ b/src/algorithms/PVT/libs/gps_l1_ca_ls_pvt.h
@@ -32,7 +32,6 @@
#define GNSS_SDR_GPS_L1_CA_LS_PVT_H_
#include <fstream>
-#include <iostream>
#include <map>
#include <string>
#include "ls_pvt.h"
diff --git a/src/algorithms/telemetry_decoder/libs/convolutional.h b/src/algorithms/telemetry_decoder/libs/convolutional.h
index 2ca3b68..4738aef 100644
--- a/src/algorithms/telemetry_decoder/libs/convolutional.h
+++ b/src/algorithms/telemetry_decoder/libs/convolutional.h
@@ -37,11 +37,14 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-//#ifndef GNSS_SDR_CONVOLUTIONAL_H_
-//#define GNSS_SDR_CONVOLUTIONAL_H_
-/* define constants used throughout the library */
-#define MAXLOG 1e7 /* Define infinity */
+#ifndef GNSS_SDR_CONVOLUTIONAL_H_
+#define GNSS_SDR_CONVOLUTIONAL_H_
+
+#include <cstdlib> // for calloc
+
+/* define constants used throughout the library */
+const float MAXLOG = 1e7; /* Define infinity */
/*!
* \brief Converts an integer symbol into a vector of bits
@@ -103,7 +106,7 @@ static int parity_counter(int symbol, int length)
* \param[out] state_out_p[] An integer containing the final state of the encoder
* (i.e. the state after encoding this bit)
*
- * This function is used by rsc_encode(), nsc_transit(), rsc_transit(), and nsc_transit()
+ * This function is used by nsc_transit()
*/
static int nsc_enc_bit(int state_out_p[],
int input,
@@ -195,169 +198,6 @@ static void nsc_transit(int output_p[],
/*!
- * \brief Calculates the "transition matrix" for the trellis.
- * This information tells the decoder what the next state and output bits
- * will be given the current state and input bit.
- *
- * \param[in] input Either 0 or 1 --- the input data bit.
- * \param[in] g[] A two element vector containing the code generators.
- * \param[in] KK The constraint length of the convolutional code.
- * \param[out] output_p[] A vector of length max_states = 2^(KK-1) containing
- * the output symbols.
- * \param[out] trans_p[] A vector of length max_states that tells the decoder
- * what the next state will be given the input and current state.
- *
- * This function is used by turbo_decode()
- */
-static void rsc_transit(int output_p[],
- int trans_p[],
- int input,
- int g[],
- int KK,
- int nn )
-{
- int nextstate[1];
- int state, states;
-
- states = 1 << (KK - 1); // The number of states: 2^mm
-
- // Determine the output and next state for each possible starting state
- for(state = 0; state < states; state++)
- {
- output_p[state] = rsc_enc_bit( nextstate, input, state, g, KK, nn );
- trans_p[state] = nextstate[0];
- }
- return;
-}
-
-
-
-/*!
- * \brief determines the tail for a RSC code
- */
-static void rsc_tail(int tail_p[],
- int g[],
- int max_states,
- int mm )
-{
- int state;
-
- /* Determine the tail for each state */
- for(state = 0; state < max_states; state++)
- {
- /* determine feedback word */
- tail_p[state] = parity_counter(g[0]&state, mm);
- }
- return;
-}
-
-
-
-/*!
- * \brief Perform convolutional encoding
- */
-static void conv_encode(int output_p[],
- int input[],
- int out0[],
- int state0[],
- int out1[],
- int state1[],
- int tail[],
- int KK,
- int LL,
- int nn)
-{
- int i, j, outsym;
- int *bin_vec;
- int state = 0;
-
- /* Negative value in "tail" is a flag that this is
- a tail-biting NSC code. Determine initial state */
-
- if ( tail[0] < 0 )
- {
- for (i = LL - KK + 1; i < LL; i++)
- {
- if (input[i])
- {
- /* Determine next state */
- state = state1[state];
- }
- else
- {
- /* Determine next state */
- state = state0[state];
- }
- }
- }
-
- bin_vec = (int*)calloc( nn, sizeof(int) );
-
- /* encode data bits one bit at a time */
- for (i = 0; i < LL; i++)
- {
- if (input[i])
- {
- /* Input is a one */
- outsym = out1[state]; /* The output symbol */
-
- /* Determine next state */
- state = state1[state];
- }
- else
- {
- /* Input is a zero */
- outsym = out0[state]; /* The output symbol */
-
- /* Determine next state */
- state = state0[state];
- }
-
- /* Convert symbol to a binary vector */
- itob( bin_vec, outsym, nn );
-
- /* Assign to output */
- for (j = 0; j < nn; j++)
- output_p[nn*i + j] = bin_vec[j];
- }
-
- /* encode tail if needed */
- if (tail[0] >= 0)
- {
- for (i = LL; i < LL + KK - 1; i++)
- {
- if (tail[state])
- {
- /* Input is a one */
- outsym = out1[state]; /* The output symbol */
-
- /* Determine next state */
- state = state1[state];
- }
- else
- {
- /* Input is a zero */
- outsym = out0[state]; /* The output symbol */
-
- /* Determine next state */
- state = state0[state];
- }
-
- /* Convert symbol to a binary vector */
- itob( bin_vec, outsym, nn );
-
- /* Assign to output */
- for (j = 0; j < nn; j++)
- output_p[nn*i + j] = bin_vec[j];
- }
- }
-
- free(bin_vec);
- return;
-}
-
-
-/*!
* \brief Computes the branch metric used for decoding.
* \return (returned float) The metric between the hypothetical symbol and the received vector
* \param[in] rec_array The received vector, of length nn
@@ -386,10 +226,10 @@ static float Gamma(float rec_array[],
/*!
* \brief Uses the Viterbi algorithm to perform hard-decision decoding of a convolutional code.
- * \param[in] out0[] The output bits for each state if input is a 0 (generated by rsc_transit).
- * \param[in] state0[] The next state if input is a 0 (generated by rsc_transit).
- * \param[in] out1[] The output bits for each state if input is a 1 (generated by rsc_transit).
- * \param[in] state1[] The next state if input is a 1 (generated by rsc_transit).
+ * \param[in] out0[] The output bits for each state if input is a 0.
+ * \param[in] state0[] The next state if input is a 0.
+ * \param[in] out1[] The output bits for each state if input is a 1.
+ * \param[in] state1[] The next state if input is a 1.
* \param[in] r[] The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2).
* \param[in] KK The constraint length of the convolutional code.
* \param[in] LL The number of data bits.
@@ -422,12 +262,12 @@ static void Viterbi(int output_u_int[],
number_symbols = 1 << nn; /* 2^nn */
/* dynamically allocate memory */
- prev_section = (float*)calloc( states, sizeof(float) );
- next_section = (float*)calloc( states, sizeof(float) );
- prev_bit = (int*)calloc( states*(LL + mm), sizeof(int) );
- prev_state = (int*)calloc( states*(LL + mm), sizeof(int) );
- rec_array = (float*)calloc( nn, sizeof(float) );
- metric_c = (float*)calloc( number_symbols, sizeof(float) );
+ prev_section = static_cast<float*>(calloc( states, sizeof(float) ));
+ next_section = static_cast<float*>(calloc( states, sizeof(float) ));
+ prev_bit = static_cast<int*>(calloc( states*(LL + mm), sizeof(int) ));
+ prev_state = static_cast<int*>(calloc( states*(LL + mm), sizeof(int) ));
+ rec_array = static_cast<float*>(calloc( nn, sizeof(float) ));
+ metric_c = static_cast<float*>(calloc( number_symbols, sizeof(float) ));
/* initialize trellis */
for (state = 0; state < states; state++)
@@ -441,7 +281,7 @@ static void Viterbi(int output_u_int[],
for (t = 0; t < LL + mm; t++)
{
for (i = 0; i < nn; i++)
- rec_array[i] = (float)input_c[nn*t + i];
+ rec_array[i] = static_cast<float>(input_c[nn*t + i]);
/* precompute all possible branch metrics */
for (i = 0; i < number_symbols; i++)
@@ -514,148 +354,4 @@ static void Viterbi(int output_u_int[],
}
-/*!
- * \brief Uses the Viterbi algorithm to perform hard-decision decoding of a tail-biting convolutional code.
- * Input parameters:
- * out0[] The output bits for each state if input is a 0 (generated by rsc_transit).
- * state0[] The next state if input is a 0 (generated by rsc_transit).
- * out1[] The output bits for each state if input is a 1 (generated by rsc_transit).
- * state1[] The next state if input is a 1 (generated by rsc_transit).
- * r[] The received signal in LLR-form. For BPSK, must be in form r = 2*a*y/(sigma^2).
- * KK The constraint length of the convolutional code.
- * LL The number of data bits.
- * depth head and tail decoding length [Ref. W. Sung, Electronics Letters, vol. 36, no. 7]
- * Output parameters:
- * output_u_int[] Hard decisions on the data bits
- */
-static void ViterbiTb(int output_u_int[],
- int out0[],
- int state0[],
- int out1[],
- int state1[],
- double input_c[],
- int KK,
- int nn,
- int LL,
- int depth)
-{
- int i, t, state, mm, states, max_state;
- int number_symbols, starting_bit;
- float metric;
- float *prev_section, *next_section;
- int *prev_bit;
- int *prev_state;
- float *metric_c; /* Set of all possible branch metrics */
- float *rec_array; /* Received values for one trellis section */
- float max_val;
-
- /* some derived constants */
- mm = KK - 1;
- states = 1 << mm; /* 2^mm */
- number_symbols = 1 << nn; /* 2^nn */
-
- /* dynamically allocate memory */
- prev_section = (float*)calloc( states, sizeof(float) );
- next_section = (float*)calloc( states, sizeof(float) );
- prev_bit = (int*)calloc( states*(LL + depth), sizeof(int) );
- prev_state = (int*)calloc( states*(LL + depth), sizeof(int) );
- rec_array = (float*)calloc( nn, sizeof(float) );
- metric_c = (float*)calloc( number_symbols, sizeof(float) );
-
- /* initialize trellis */
- for (state = 0; state < states; state++)
- {
- prev_section[state] = 0; /* equally likely starting state */
- next_section[state] = -MAXLOG;
- }
-
- /* go through trellis */
- for (t = -depth; t < LL + depth; t++)
- {
- /* determine the corresponding data bits */
- starting_bit = nn*(t % LL);
- if (starting_bit < 0 )
- starting_bit = nn*LL + starting_bit;
-
- for (i = 0; i < nn; i++)
- {
- rec_array[i] = (float)input_c[starting_bit+i];
- }
-
- /* precompute all possible branch metrics */
- for (i = 0; i < number_symbols; i++)
- metric_c[i] = Gamma( rec_array, i, nn );
-
- /* step through all states */
- for (state = 0; state < states; state++)
- {
- /* hypothesis: info bit is a zero */
- metric = prev_section[state] + metric_c[ out0[ state ] ];
-
- /* store new metric if more than metric in storage */
- if ( metric > next_section[state0[state]] )
- {
- next_section[state0[state]] = metric;
- if (t >= 0)
- {
- prev_state[t*states+state0[state]] = state;
- prev_bit[t*states+state0[state]] = 0;
- }
- }
-
- /* hypothesis: info bit is a one */
- metric = prev_section[state] + metric_c[ out1[ state ] ];
-
- /* store new metric if more than metric in storage */
- if ( metric > next_section[state1[state]] )
- {
- next_section[state1[state]] = metric;
- if (t >= 0)
- {
- prev_state[t*states+state1[state]] = state;
- prev_bit[t*states+state1[state]] = 1;
- }
- }
- }
-
- /* normalize */
- max_val = 0;
- for (state = 0; state < states; state++)
- {
- if (next_section[state] > max_val)
- {
- max_val = next_section[state];
- max_state = state;
- }
- }
- for (state = 0; state < states; state++)
- {
- prev_section[state] = next_section[state] - max_val;
- next_section[state] = -MAXLOG;
- }
- }
-
- /* trace-back operation */
- state = max_state;
-
- /* tail, no need to output */
- for (t = LL + depth - 1; t >= LL; t--)
- {
- state = prev_state[t*states + state];
- }
-
- for (t = LL - 1; t >= 0; t--)
- {
- output_u_int[t] = prev_bit[t*states + state];
- state = prev_state[t*states + state];
- }
-
- /* free the dynamically allocated memory */
- free(prev_section);
- free(next_section);
- free(prev_bit);
- free(prev_state);
- free(rec_array);
- free(metric_c);
-}
-//#endif
+#endif
diff --git a/src/algorithms/telemetry_decoder/libs/viterbi_decoder.cc b/src/algorithms/telemetry_decoder/libs/viterbi_decoder.cc
index c306f40..27e27e1 100644
--- a/src/algorithms/telemetry_decoder/libs/viterbi_decoder.cc
+++ b/src/algorithms/telemetry_decoder/libs/viterbi_decoder.cc
@@ -41,7 +41,7 @@
#define LMORE 6 // many entries per sample / very specific stuff
-#define MAXLOG 1e7 /* Define infinity */
+const float MAXLOG = 1e7; /* Define infinity */
Viterbi_Decoder::Viterbi_Decoder(const int g_encoder[], const int KK, const int nn)
{
@@ -59,7 +59,6 @@ Viterbi_Decoder::Viterbi_Decoder(const int g_encoder[], const int KK, const int
d_state0 = new int[d_states];
d_state1 = new int[d_states];
-
nsc_transit(d_out0, d_state0, 0, g_encoder, d_KK, d_nn);
nsc_transit(d_out1, d_state1, 1, g_encoder, d_KK, d_nn);
@@ -68,6 +67,7 @@ Viterbi_Decoder::Viterbi_Decoder(const int g_encoder[], const int KK, const int
Viterbi_Decoder::init_trellis_state();
}
+
Viterbi_Decoder::~Viterbi_Decoder()
{
// trellis definition
@@ -110,7 +110,7 @@ float Viterbi_Decoder::decode_block(const double input_c[], int output_u_int[],
// init
init_trellis_state();
// do add compare select
- do_acs(input_c, LL+d_mm);
+ do_acs(input_c, LL + d_mm);
// tail, no need to output -> traceback, but don't decode
state = do_traceback(d_mm);
// traceback and decode
@@ -207,7 +207,7 @@ int Viterbi_Decoder::do_acs(const double sym[], int nbits)
{
/* Temporarily store the received symbols current decoding step */
for (i = 0; i < d_nn; i++)
- d_rec_array[i] = (float) sym[d_nn * t + i];
+ d_rec_array[i] = static_cast<float>(sym[d_nn * t + i]);
/* precompute all possible branch metrics */
for (i = 0; i < d_number_symbols; i++)
@@ -478,15 +478,15 @@ int Viterbi_Decoder::parity_counter(int symbol, int length)
Viterbi_Decoder::Prev::Prev(int states, int t)
{
this->t = t;
- num_states=states;
+ num_states = states;
state = new int[states];
bit = new int[states];
metric = new float[states];
refcount = new int;
*refcount = 1;
- memset(state,0,sizeof(int)*num_states);
- memset(bit,0,sizeof(int)*num_states);
- memset(metric,0,sizeof(float)*num_states);
+ memset(state, 0, sizeof(int) * num_states);
+ memset(bit, 0, sizeof(int) * num_states);
+ memset(metric, 0, sizeof(float) * num_states);
}
@@ -498,7 +498,7 @@ Viterbi_Decoder::Prev::Prev(const Prev& prev)
(*refcount)++;
t = prev.t;
state = prev.state;
- num_states=prev.num_states;
+ num_states = prev.num_states;
bit = prev.bit;
metric = prev.metric;
VLOG(LMORE) << "Prev(" << "?" << ", " << t << ")" << " copy, new refcount = " << *refcount;
@@ -567,14 +567,16 @@ Viterbi_Decoder::Prev::~Prev()
int Viterbi_Decoder::Prev::get_anchestor_state_of_current_state(int current_state)
{
//std::cout << "get prev state: for state " << current_state << " at time " << t << ", the prev state at time " << t-1 << " is " << state[current_state] << std::endl;
- if (num_states>current_state)
- {
- return state[current_state];
- }else{
- //std::cout<<"alarm "<<"num_states="<<num_states<<" current_state="<<current_state<<std::endl;
- //return state[current_state];
- return 0;
- }
+ if (num_states > current_state)
+ {
+ return state[current_state];
+ }
+ else
+ {
+ //std::cout<<"alarm "<<"num_states="<<num_states<<" current_state="<<current_state<<std::endl;
+ //return state[current_state];
+ return 0;
+ }
}
@@ -582,49 +584,58 @@ int Viterbi_Decoder::Prev::get_anchestor_state_of_current_state(int current_stat
int Viterbi_Decoder::Prev::get_bit_of_current_state(int current_state)
{
//std::cout << "get prev bit : for state " << current_state << " at time " << t << ", the send bit is " << bit[current_state] << std::endl;
- if (num_states>current_state)
- {
- return bit[current_state];
- }else{
- return 0;
- }
+ if (num_states > current_state)
+ {
+ return bit[current_state];
+ }
+ else
+ {
+ return 0;
+ }
}
+
float Viterbi_Decoder::Prev::get_metric_of_current_state(int current_state)
{
- if (num_states>current_state)
- {
- return metric[current_state];
- }else{
- return 0;
- }
+ if (num_states > current_state)
+ {
+ return metric[current_state];
+ }
+ else
+ {
+ return 0;
+ }
}
+
int Viterbi_Decoder::Prev::get_t()
{
return t;
}
+
void Viterbi_Decoder::Prev::set_current_state_as_ancestor_of_next_state(int next_state, int current_state)
{
- if (num_states>next_state)
- {
- state[next_state] = current_state;
- }
+ if (num_states > next_state)
+ {
+ state[next_state] = current_state;
+ }
}
+
void Viterbi_Decoder::Prev::set_decoded_bit_for_next_state(int next_state, int bit)
{
- if (num_states>next_state)
- {
- this->bit[next_state] = bit;
- }
+ if (num_states > next_state)
+ {
+ this->bit[next_state] = bit;
+ }
}
+
void Viterbi_Decoder::Prev::set_survivor_branch_metric_of_next_state(int next_state, float metric)
{
- if (num_states>next_state)
- {
- this->metric[next_state] = metric;
- }
+ if (num_states > next_state)
+ {
+ this->metric[next_state] = metric;
+ }
}
diff --git a/src/algorithms/telemetry_decoder/libs/viterbi_decoder.h b/src/algorithms/telemetry_decoder/libs/viterbi_decoder.h
index b656667..4cd6d68 100644
--- a/src/algorithms/telemetry_decoder/libs/viterbi_decoder.h
+++ b/src/algorithms/telemetry_decoder/libs/viterbi_decoder.h
@@ -33,7 +33,6 @@
#define GNSS_SDR_VITERBI_DECODER_H_
#include <deque>
-#include <iostream>
/*!
* \brief Class that implements a Viterbi decoder
@@ -55,7 +54,6 @@ public:
*/
float decode_block(const double input_c[], int* output_u_int, const int LL);
-
float decode_continuous(const double sym[], const int traceback_depth, int output_u_int[],
const int nbits_requested, int &nbits_decoded);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git
More information about the pkg-hamradio-commits
mailing list