1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2026-05-01 19:21:25 +00:00

Work in progress for GPS L2C support:

- Patched GPS L2CM tracking pull-in code.
- Workaround for ViterbiDecoder bug
This commit is contained in:
Javier
2015-06-12 15:49:25 +02:00
parent 24c75a19db
commit adf73e0610
7 changed files with 116 additions and 127 deletions

View File

@@ -194,7 +194,7 @@ int gps_l2_m_telemetry_decoder_cc::general_work (int noutput_items, gr_vector_in
{
tmp_msg = valid_msgs.at(i).second;
d_CNAV_Message.decode_page(tmp_msg);
std::cout << "Valid CNAV frame with relative preamble start at " << valid_msgs.at(i).first << std::endl;
//std::cout << "Valid CNAV frame with relative preamble start at " << valid_msgs.at(i).first << std::endl;
flag_new_cnav_frame = true;
d_flag_valid_word = true;
last_frame_preamble_start = valid_msgs.at(i).first;

View File

@@ -311,7 +311,6 @@ int Viterbi_Decoder::do_tb_and_decode(int traceback_length, int requested_decodi
int n_im = 0;
VLOG(FLOW) << "do_tb_and_decode(): requested_decoding_length=" << requested_decoding_length;
// decode only decode_length bits -> overstep newer bits which are too much
decoding_length_mismatch = d_trellis_paths.size() - (traceback_length + requested_decoding_length);
VLOG(BLOCK) << "decoding_length_mismatch=" << decoding_length_mismatch;
@@ -323,7 +322,6 @@ int Viterbi_Decoder::do_tb_and_decode(int traceback_length, int requested_decodi
{
state = it->get_anchestor_state_of_current_state(state);
}
t_out = d_trellis_paths.end() - (d_trellis_paths.begin() + traceback_length + overstep_length) - 1;//requested_decoding_length-1;
indicator_metric = 0;
for (it = d_trellis_paths.begin() + traceback_length + overstep_length; it < d_trellis_paths.end(); ++it)
@@ -347,6 +345,7 @@ int Viterbi_Decoder::do_tb_and_decode(int traceback_length, int requested_decodi
// remove old states
if (d_trellis_paths.begin() + traceback_length + overstep_length <= d_trellis_paths.end())
{
d_trellis_paths.erase(d_trellis_paths.begin() + traceback_length+overstep_length, d_trellis_paths.end());
}
return decoding_length_mismatch;
@@ -479,6 +478,7 @@ Viterbi_Decoder::Prev::Prev(int states, int t)
{
this->t = t;
state = new int[states];
num_states=states;
bit = new int[states];
metric = new float[states];
refcount = new int;
@@ -494,6 +494,7 @@ Viterbi_Decoder::Prev::Prev(const Prev& prev)
(*refcount)++;
t = prev.t;
state = prev.state;
num_states=prev.num_states;
bit = prev.bit;
metric = prev.metric;
VLOG(LMORE) << "Prev(" << "?" << ", " << t << ")" << " copy, new refcount = " << *refcount;
@@ -562,7 +563,14 @@ 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;
return state[current_state];
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;
}
}

View File

@@ -63,6 +63,7 @@ private:
class Prev
{
public:
int num_states;
Prev(int states, int t);
Prev(const Prev& prev);
Prev& operator=(const Prev& other);