1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-12-13 11:40:33 +00:00

Fixing bugs in telemetry decoder code

This commit is contained in:
Damian Miralles 2017-08-31 16:51:50 -06:00
parent e5ffc2b46c
commit 6b8973efe2
8 changed files with 55 additions and 41 deletions

View File

@ -12,7 +12,7 @@ SignalSource.sampling_frequency=6625000
;SignalSource.samples=66250000 ;SignalSource.samples=66250000
SignalSource.samples=0 SignalSource.samples=0
SignalSource.dump=false; SignalSource.dump=false;
SignalSource.dump_filename=./signal_glonass.bin SignalSource.dump_filename=/archive/signal_glonass.bin
;######### SIGNAL_CONDITIONER CONFIG ############ ;######### SIGNAL_CONDITIONER CONFIG ############
SignalConditioner.implementation=Signal_Conditioner SignalConditioner.implementation=Signal_Conditioner
@ -33,8 +33,8 @@ Channel2.signal=1G
Channel3.signal=1G Channel3.signal=1G
Channel4.signal=1G Channel4.signal=1G
;Channel0.satellite=2 Channel0.satellite=11
;Channel1.satellite=21 Channel1.satellite=15
;Channel2.satellite=12 ;Channel2.satellite=12
;Channel3.satellite=23 ;Channel3.satellite=23
; Possible list includes 2, 12, 21, 22 ; Possible list includes 2, 12, 21, 22
@ -43,7 +43,7 @@ Channel4.signal=1G
Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition Acquisition_1G.implementation=GLONASS_L1_CA_PCPS_Acquisition
Acquisition_1G.item_type=gr_complex Acquisition_1G.item_type=gr_complex
Acquisition_1G.threshold=0.0 Acquisition_1G.threshold=0.0
Acquisition_1G.pfa=0.01 Acquisition_1G.pfa=0.0001
Acquisition_1G.if=0 Acquisition_1G.if=0
Acquisition_1G.doppler_max=10000 Acquisition_1G.doppler_max=10000
Acquisition_1G.doppler_step=250 Acquisition_1G.doppler_step=250
@ -61,7 +61,7 @@ Tracking_1G.dump=true;
Tracking_1G.dump_filename=/archive/glo_tracking_ch_ Tracking_1G.dump_filename=/archive/glo_tracking_ch_
;######### TELEMETRY DECODER GPS CONFIG ############ ;######### TELEMETRY DECODER GPS CONFIG ############
TelemetryDecoder_1G.implementation=GPS_L1_CA_Telemetry_Decoder TelemetryDecoder_1G.implementation=GLONASS_L1_CA_Telemetry_Decoder
;######### OBSERVABLES CONFIG ############ ;######### OBSERVABLES CONFIG ############
Observables.implementation=Hybrid_Observables Observables.implementation=Hybrid_Observables

View File

@ -145,15 +145,19 @@ void glonass_l1_ca_telemetry_decoder_cc::decode_string(double *frame_symbols,int
chip_acc += frame_symbols[i]; chip_acc += frame_symbols[i];
chip_acc_counter += 1; chip_acc_counter += 1;
if(chip_acc_counter == (GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_BIT - 1)) if(chip_acc_counter == (GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_BIT))
{ {
if (chip_acc > 0) if (chip_acc > 0)
{ {
bi_binary_code.push_back('1'); bi_binary_code.push_back('1');
chip_acc_counter = 0;
chip_acc = 0;
} }
else else
{ {
bi_binary_code.push_back('0'); bi_binary_code.push_back('0');
chip_acc_counter = 0;
chip_acc = 0;
} }
} }
} }
@ -171,18 +175,16 @@ void glonass_l1_ca_telemetry_decoder_cc::decode_string(double *frame_symbols,int
} }
// 2. Call the GLONASS GNAV string decoder // 2. Call the GLONASS GNAV string decoder
d_nav.string_decoder(relative_code.c_str()); d_nav.string_decoder(relative_code);
// 3. Check operation executed correctly // 3. Check operation executed correctly
if(d_nav.flag_CRC_test == true) if(d_nav.flag_CRC_test == true)
{ {
LOG(INFO) << "GLONASS GNAV CRC correct on channel " << d_channel << " from satellite " << d_satellite; LOG(INFO) << "GLONASS GNAV CRC correct on channel " << d_channel << " from satellite ";// << d_satellite;
std::cout << "GLONASS GNAV CRC correct on channel " << d_channel << " from satellite " << d_satellite << std::endl;
} }
else else
{ {
std::cout << "GLONASS GNAV CRC error on channel " << d_channel << " from satellite " << d_satellite << std::endl; LOG(INFO) << "GLONASS GNAV CRC error on channel " << d_channel << " from satellite " ;//<< d_satellite;
LOG(INFO) << "GLONASS GNAV CRC error on channel " << d_channel << " from satellite " << d_satellite;
} }
// 4. Push the new navigation data to the queues // 4. Push the new navigation data to the queues
@ -225,7 +227,7 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attrib
consume_each(1); consume_each(1);
d_flag_preamble = false; d_flag_preamble = false;
unsigned int required_symbols=GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS; unsigned int required_symbols=GLONASS_GNAV_STRING_SYMBOLS;
if (d_symbol_history.size()>required_symbols) if (d_symbol_history.size()>required_symbols)
{ {
@ -264,7 +266,7 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attrib
if (abs(preamble_diff - GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS) == 0) if (abs(preamble_diff - GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS) == 0)
{ {
//try to decode frame //try to decode frame
LOG(INFO) << "Starting page decoder for GLONASS L1 C/A SAT " << this->d_satellite; LOG(INFO) << "Starting string decoder for GLONASS L1 C/A SAT " << this->d_satellite;
d_preamble_index = d_sample_counter; //record the preamble sample stamp d_preamble_index = d_sample_counter; //record the preamble sample stamp
d_stat = 2; d_stat = 2;
} }
@ -274,17 +276,19 @@ int glonass_l1_ca_telemetry_decoder_cc::general_work (int noutput_items __attrib
{ {
d_stat = 0; // start again d_stat = 0; // start again
} }
DLOG(INFO) << "Failed string decoder for GLONASS L1 C/A SAT " << this->d_satellite;
} }
} }
} }
else if (d_stat == 2) else if (d_stat == 2)
{ {
if (d_sample_counter == d_preamble_index + GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS) // FIXME: The preamble index marks the first symbol of the string count. Here I just wait for another full string to be received before processing
if (d_sample_counter == d_preamble_index + GLONASS_GNAV_STRING_SYMBOLS)
{ {
// NEW GLONASS string received // NEW GLONASS string received
// 0. fetch the symbols into an array // 0. fetch the symbols into an array
int string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble; int string_length = GLONASS_GNAV_STRING_SYMBOLS - d_symbols_per_preamble;
double string_symbols[string_length]; double string_symbols[string_length] = {0};
//******* SYMBOL TO BIT ******* //******* SYMBOL TO BIT *******
for (int i = 0; i < string_length; i++) for (int i = 0; i < string_length; i++)

View File

@ -151,7 +151,7 @@ const int GLONASS_L1_CA_HISTORY_DEEP = 100;
const double GLONASS_GNAV_PREAMBLE_DURATION_S = 0.3; const double GLONASS_GNAV_PREAMBLE_DURATION_S = 0.3;
const int GLONASS_GNAV_PREAMBLE_LENGTH_BITS = 30; const int GLONASS_GNAV_PREAMBLE_LENGTH_BITS = 30;
const int GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS = 300; const int GLONASS_GNAV_PREAMBLE_LENGTH_SYMBOLS = 300;
const int GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS = 1700; const int GLONASS_GNAV_PREAMBLE_PERIOD_SYMBOLS = 2000;
const int GLONASS_GNAV_TELEMETRY_RATE_BITS_SECOND = 50; //!< NAV message bit rate [bits/s] const int GLONASS_GNAV_TELEMETRY_RATE_BITS_SECOND = 50; //!< NAV message bit rate [bits/s]
const int GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_BIT = 10; const int GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_BIT = 10;
const int GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_PREAMBLE_BIT = 10; const int GLONASS_GNAV_TELEMETRY_SYMBOLS_PER_PREAMBLE_BIT = 10;

View File

@ -81,6 +81,10 @@ void Glonass_Gnav_Navigation_Message::reset()
d_TOW_F4 = 0.0; //!< Time of GPS Week from HOW word of Subframe 4 [s] d_TOW_F4 = 0.0; //!< Time of GPS Week from HOW word of Subframe 4 [s]
d_TOW_F5 = 0.0; //!< Time of GPS Week from HOW word of Subframe 5 [s] d_TOW_F5 = 0.0; //!< Time of GPS Week from HOW word of Subframe 5 [s]
flag_CRC_test = false;
d_frame_ID = 0;
d_string_ID = 0;
// Clock terms // Clock terms
d_satClkCorr = 0.0; d_satClkCorr = 0.0;
d_dtr = 0.0; d_dtr = 0.0;
@ -310,6 +314,7 @@ unsigned int Glonass_Gnav_Navigation_Message::get_frame_number(unsigned int sate
return frame_ID; return frame_ID;
} }
double Glonass_Gnav_Navigation_Message::get_TOW() double Glonass_Gnav_Navigation_Message::get_TOW()
{ {
double TOW = 0.0; double TOW = 0.0;
@ -329,20 +334,21 @@ double Glonass_Gnav_Navigation_Message::get_TOW()
return TOW; return TOW;
} }
int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
{ {
int string_ID = 0;
int J = 0; int J = 0;
frame_ID = 0; d_string_ID = 0;
d_frame_ID = 0;
// UNPACK BYTES TO BITS AND REMOVE THE CRC REDUNDANCE // UNPACK BYTES TO BITS AND REMOVE THE CRC REDUNDANCE
std::bitset<GLONASS_GNAV_STRING_BITS> string_bits = std::bitset<GLONASS_GNAV_STRING_BITS>((frame_string)); std::bitset<GLONASS_GNAV_STRING_BITS> string_bits = std::bitset<GLONASS_GNAV_STRING_BITS>((frame_string));
string_ID = static_cast<int>(read_navigation_unsigned(string_bits, STRING_ID)); d_string_ID = static_cast<unsigned int>(read_navigation_unsigned(string_bits, STRING_ID));
CRC_test(string_bits); flag_CRC_test = CRC_test(string_bits);
// Decode all 15 string messages // Decode all 15 string messages
switch (string_ID) switch (d_string_ID)
{ {
case 1: case 1:
//--- It is string 1 ----------------------------------------------- //--- It is string 1 -----------------------------------------------
@ -454,7 +460,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
case 6: case 6:
// --- It is string 6 ---------------------------------------------- // --- It is string 6 ----------------------------------------------
i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A));
frame_ID = get_frame_number(i_satellite_slot_number); d_frame_ID = get_frame_number(i_satellite_slot_number);
gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N)); gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N));
gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A));
@ -499,7 +505,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
case 8: case 8:
// --- It is string 8 ---------------------------------------------- // --- It is string 8 ----------------------------------------------
i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A));
frame_ID = get_frame_number(i_satellite_slot_number); d_frame_ID = get_frame_number(i_satellite_slot_number);
gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N)); gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N));
gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A));
@ -538,7 +544,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
case 10: case 10:
// --- It is string 10 --------------------------------------------- // --- It is string 10 ---------------------------------------------
i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A));
frame_ID = get_frame_number(i_satellite_slot_number); d_frame_ID = get_frame_number(i_satellite_slot_number);
gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N)); gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N));
gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A));
@ -577,7 +583,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
case 12: case 12:
// --- It is string 12 --------------------------------------------- // --- It is string 12 ---------------------------------------------
i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A));
frame_ID = get_frame_number(i_satellite_slot_number); d_frame_ID = get_frame_number(i_satellite_slot_number);
gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N)); gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N));
gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A));
@ -615,7 +621,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
break; break;
case 14: case 14:
// --- It is string 14 --------------------------------------------- // --- It is string 14 ---------------------------------------------
if( frame_ID == 5) if( d_frame_ID == 5)
{ {
gnav_utc_model.d_B1 = static_cast<double>(read_navigation_unsigned(string_bits, B1)); gnav_utc_model.d_B1 = static_cast<double>(read_navigation_unsigned(string_bits, B1));
gnav_utc_model.d_B2 = static_cast<double>(read_navigation_unsigned(string_bits, B2)); gnav_utc_model.d_B2 = static_cast<double>(read_navigation_unsigned(string_bits, B2));
@ -623,7 +629,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
else else
{ {
i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); i_satellite_slot_number = static_cast<double>(read_navigation_unsigned(string_bits, n_A));
frame_ID = get_frame_number(i_satellite_slot_number); d_frame_ID = get_frame_number(i_satellite_slot_number);
gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N)); gnav_almanac[i_satellite_slot_number - 1].d_C_n = static_cast<bool>(read_navigation_bool(string_bits, C_N));
gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); gnav_almanac[i_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A));
@ -641,7 +647,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
case 15: case 15:
// --- It is string 9 ---------------------------------------------- // --- It is string 9 ----------------------------------------------
if (frame_ID != 5 and flag_almanac_str_14 == true ) if (d_frame_ID != 5 and flag_almanac_str_14 == true )
{ {
gnav_almanac[i_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15; gnav_almanac[i_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15;
gnav_almanac[i_satellite_slot_number - 1].d_t_lambda_n_A = static_cast<double>(read_navigation_unsigned(string_bits, T_LAMBDA_N_A)) * TWO_N5; gnav_almanac[i_satellite_slot_number - 1].d_t_lambda_n_A = static_cast<double>(read_navigation_unsigned(string_bits, T_LAMBDA_N_A)) * TWO_N5;
@ -662,10 +668,13 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string)
} }
break; break;
default: default:
break; LOG(INFO) << "GLONASS GNAV: Invalid String ID of received. Received " << d_string_ID << ", but acceptable range is from 1-15";
} // switch subframeID ...
return frame_ID;
break;
} // switch string ID ...
return d_string_ID;
} }

View File

@ -61,7 +61,8 @@ private:
public: public:
bool flag_CRC_test; bool flag_CRC_test;
unsigned int frame_ID; unsigned int d_frame_ID;
unsigned int d_string_ID;
Glonass_Gnav_Ephemeris gnav_ephemeris; //!< Ephemeris information decoded Glonass_Gnav_Ephemeris gnav_ephemeris; //!< Ephemeris information decoded
Glonass_Gnav_Utc_Model gnav_utc_model; //!< UTC model information Glonass_Gnav_Utc_Model gnav_utc_model; //!< UTC model information

View File

@ -356,7 +356,7 @@ std::string Gnss_Satellite::what_block(const std::string& system_, unsigned int
} }
if (system_.compare("GLONASS") == 0) if (system_.compare("Glonass") == 0)
{ {
switch ( PRN_ ) switch ( PRN_ )
{ {

View File

@ -3960,7 +3960,7 @@ int Rtcm::set_DF041(const Gnss_Synchro & gnss_synchro)
int Rtcm::set_DF042(const Gnss_Synchro & gnss_synchro) int Rtcm::set_DF042(const Gnss_Synchro & gnss_synchro)
{ {
const double lambda = GLONASS_C_m_s / (GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_FREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN))); const double lambda = GLONASS_C_m_s / (GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_DFREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN)));
double ambiguity = std::floor( gnss_synchro.Pseudorange_m / 599584.92 ); double ambiguity = std::floor( gnss_synchro.Pseudorange_m / 599584.92 );
double glonass_L1_pseudorange = std::round(( gnss_synchro.Pseudorange_m - ambiguity * 599584.92) / 0.02 ); double glonass_L1_pseudorange = std::round(( gnss_synchro.Pseudorange_m - ambiguity * 599584.92) / 0.02 );
double glonass_L1_pseudorange_c = glonass_L1_pseudorange * 0.02 + ambiguity * 299792.458; double glonass_L1_pseudorange_c = glonass_L1_pseudorange * 0.02 + ambiguity * 299792.458;
@ -5270,7 +5270,7 @@ int Rtcm::set_DF401(const Gnss_Synchro & gnss_synchro)
} }
if ((sig.compare("1C") == 0) && (sys.compare("R") == 0 )) if ((sig.compare("1C") == 0) && (sys.compare("R") == 0 ))
{ {
lambda = GLONASS_C_m_s / ((GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_FREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN)))); lambda = GLONASS_C_m_s / ((GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_DFREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN))));
} }
if ((sig.compare("2C") == 0) && (sys.compare("R") == 0 )) if ((sig.compare("2C") == 0) && (sys.compare("R") == 0 ))
{ {
@ -5379,7 +5379,7 @@ int Rtcm::set_DF404(const Gnss_Synchro & gnss_synchro)
} }
if ((sig_.compare("1C") == 0) && (sys_.compare("R") == 0 )) if ((sig_.compare("1C") == 0) && (sys_.compare("R") == 0 ))
{ {
lambda = GLONASS_C_m_s / (GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_FREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN))); lambda = GLONASS_C_m_s / (GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_DFREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN)));
} }
if ((sig_.compare("2C") == 0) && (sys_.compare("R") == 0 )) if ((sig_.compare("2C") == 0) && (sys_.compare("R") == 0 ))
{ {
@ -5467,7 +5467,7 @@ int Rtcm::set_DF406(const Gnss_Synchro & gnss_synchro)
} }
if ((sig_.compare("1C") == 0) && (sys_.compare("R") == 0 )) if ((sig_.compare("1C") == 0) && (sys_.compare("R") == 0 ))
{ {
lambda = GLONASS_C_m_s / (GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_FREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN))); lambda = GLONASS_C_m_s / (GLONASS_L1_CA_FREQ_HZ + (GLONASS_L1_CA_DFREQ_HZ * GLONASS_PRN.at(gnss_synchro.PRN)));
} }
if ((sig_.compare("2C") == 0) && (sys_.compare("R") == 0 )) if ((sig_.compare("2C") == 0) && (sys_.compare("R") == 0 ))
{ {

View File

@ -35,14 +35,14 @@ if ~exist('gps_l1_ca_dll_pll_read_tracking_dump.m','file')
end end
samplingFreq = 2600000; %[Hz] samplingFreq = 6625000; %[Hz]
channels = 2; channels = 5;
first_channel = 0; first_channel = 0;
path = '/home/javier/git/gnss-sdr/build/'; %% CHANGE THIS PATH path = '/archive/'; %% CHANGE THIS PATH
for N=1:1:channels for N=1:1:channels
tracking_log_path = [path 'tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE epl_tracking_ch_ BY YOUR dump_filename tracking_log_path = [path 'glo_tracking_ch_' num2str(N+first_channel-1) '.dat']; %% CHANGE epl_tracking_ch_ BY YOUR dump_filename
GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump(tracking_log_path); GNSS_tracking(N)= gps_l1_ca_dll_pll_read_tracking_dump(tracking_log_path);
end end