mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-28 09:54:51 +00:00
Merge branch 'next' of https://github.com/carlesfernandez/gnss-sdr into next
This commit is contained in:
commit
28f1d12b93
@ -762,6 +762,11 @@ if(CMAKE_VERSION VERSION_LESS 3.5)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
if(CMAKE_VERSION VERSION_LESS 3.15)
|
||||
if(NOT TARGET Boost::headers)
|
||||
add_library(Boost::headers ALIAS Boost::boost)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Fix for Boost Asio < 1.70 when using Clang in macOS
|
||||
if(Boost_VERSION_STRING VERSION_LESS 1.70.0)
|
||||
|
@ -1,5 +1,16 @@
|
||||
## [Unreleased](https://github.com/gnss-sdr/gnss-sdr/tree/next)
|
||||
|
||||
### Improvements in Efficiency:
|
||||
|
||||
- Improved implementation of the Viterbi decoder for Galileo navigation messages.
|
||||
|
||||
|
||||
### Improvements in Flexibility:
|
||||
|
||||
- New Tracking parameters allow the configuration of the C/N0 and lock detector smoothers, as well as the activation of the FLL in pull-in and steady state stages.
|
||||
- New PVT parameter enable_rx_clock_correction parameter allows to enable or disable the application of the Time solution correction to the computation of Observables.
|
||||
|
||||
|
||||
### Improvements in Maintainability:
|
||||
|
||||
- New CMake option ENABLE_ARMA_NO_DEBUG defines the macro ARMA_NO_DEBUG, which disables all run-time checks, such as bounds checking, in the Armadillo library. This will result in faster code. This option is disabled by default during development, but automatically set to ON if the option ENABLE_PACKAGING is set to ON.
|
||||
|
@ -769,6 +769,9 @@ Rtklib_Pvt::Rtklib_Pvt(ConfigurationInterface* configuration,
|
||||
// Show time in local zone
|
||||
pvt_output_parameters.show_local_time_zone = configuration->property(role + ".show_local_time_zone", false);
|
||||
|
||||
// Enable or disable rx clock correction in observables
|
||||
pvt_output_parameters.enable_rx_clock_correction = configuration->property(role + ".enable_rx_clock_correction", true);
|
||||
|
||||
// make PVT object
|
||||
pvt_ = rtklib_make_pvt_gs(in_streams_, pvt_output_parameters, rtk);
|
||||
DLOG(INFO) << "pvt(" << pvt_->unique_id() << ")";
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -213,6 +213,7 @@ private:
|
||||
|
||||
int32_t max_obs_block_rx_clock_offset_ms;
|
||||
bool d_waiting_obs_block_rx_clock_offset_correction_msg;
|
||||
bool d_enable_rx_clock_correction;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map_t0;
|
||||
std::map<int, Gnss_Synchro> gnss_observables_map_t1;
|
||||
|
@ -72,6 +72,7 @@ Pvt_Conf::Pvt_Conf()
|
||||
xml_output_path = std::string(".");
|
||||
rtcm_output_file_path = std::string(".");
|
||||
|
||||
enable_rx_clock_correction=true;
|
||||
monitor_enabled = false;
|
||||
protobuf_enabled = true;
|
||||
udp_port = 0;
|
||||
|
@ -89,6 +89,7 @@ public:
|
||||
std::string udp_addresses;
|
||||
int udp_port;
|
||||
|
||||
bool enable_rx_clock_correction;
|
||||
bool show_local_time_zone;
|
||||
|
||||
Pvt_Conf();
|
||||
|
@ -104,7 +104,7 @@ target_link_libraries(acquisition_adapters
|
||||
Gnuradio::blocks
|
||||
Volk::volk
|
||||
PRIVATE
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
Gnuradio::fft
|
||||
|
@ -40,7 +40,7 @@ target_link_libraries(channel_libs
|
||||
Gnuradio::pmt
|
||||
PRIVATE
|
||||
core_libs
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
)
|
||||
|
@ -42,7 +42,7 @@ add_library(data_type_gr_blocks
|
||||
target_link_libraries(data_type_gr_blocks
|
||||
PUBLIC
|
||||
Gnuradio::runtime
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
algorithms_libs
|
||||
PRIVATE
|
||||
Volk::volk
|
||||
|
@ -100,7 +100,7 @@ target_include_directories(algorithms_libs
|
||||
target_link_libraries(algorithms_libs
|
||||
PUBLIC
|
||||
Armadillo::armadillo
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gflags::gflags
|
||||
Gnuradio::runtime
|
||||
Gnuradio::blocks
|
||||
|
@ -53,16 +53,18 @@ static inline float32x4_t vsqrtq_f32(float32x4_t q_x)
|
||||
return vmulq_f32(q_x, q_step_2);
|
||||
}
|
||||
|
||||
|
||||
/* Magnitude squared for float32x4x2_t */
|
||||
static inline float32x4_t _vmagnitudesquaredq_f32(float32x4x2_t cmplxValue)
|
||||
{
|
||||
float32x4_t iValue, qValue, result;
|
||||
iValue = vmulq_f32(cmplxValue.val[0], cmplxValue.val[0]); // Square the values
|
||||
qValue = vmulq_f32(cmplxValue.val[1], cmplxValue.val[1]); // Square the values
|
||||
result = vaddq_f32(iValue, qValue); // Add the I2 and Q2 values
|
||||
iValue = vmulq_f32(cmplxValue.val[0], cmplxValue.val[0]); // Square the values
|
||||
qValue = vmulq_f32(cmplxValue.val[1], cmplxValue.val[1]); // Square the values
|
||||
result = vaddq_f32(iValue, qValue); // Add the I2 and Q2 values
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/* Inverse square root for float32x4_t */
|
||||
static inline float32x4_t _vinvsqrtq_f32(float32x4_t x)
|
||||
{
|
||||
@ -73,6 +75,7 @@ static inline float32x4_t _vinvsqrtq_f32(float32x4_t x)
|
||||
return sqrt_reciprocal;
|
||||
}
|
||||
|
||||
|
||||
/* Complex multiplication for float32x4x2_t */
|
||||
static inline float32x4x2_t _vmultiply_complexq_f32(float32x4x2_t a_val, float32x4x2_t b_val)
|
||||
{
|
||||
|
@ -45,7 +45,7 @@ target_include_directories(obs_gr_blocks
|
||||
|
||||
target_link_libraries(obs_gr_blocks
|
||||
PUBLIC
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gnuradio::blocks
|
||||
PRIVATE
|
||||
algorithms_libs
|
||||
|
@ -170,7 +170,7 @@ target_include_directories(signal_source_adapters
|
||||
|
||||
target_link_libraries(signal_source_adapters
|
||||
PUBLIC
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gnuradio::runtime
|
||||
Gnuradio::blocks
|
||||
signal_source_gr_blocks
|
||||
|
@ -69,7 +69,7 @@ add_library(signal_source_libs ${SIGNAL_SOURCE_LIB_SOURCES} ${SIGNAL_SOURCE_LIB_
|
||||
|
||||
target_link_libraries(signal_source_libs
|
||||
PUBLIC
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gnuradio::runtime
|
||||
PRIVATE
|
||||
Gflags::gflags
|
||||
|
@ -56,7 +56,7 @@ target_link_libraries(telemetry_decoder_gr_blocks
|
||||
telemetry_decoder_libs
|
||||
core_system_parameters
|
||||
Gnuradio::runtime
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
PRIVATE
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
|
@ -207,14 +207,14 @@ galileo_telemetry_decoder_gs::~galileo_telemetry_decoder_gs()
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_gs::viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits)
|
||||
void galileo_telemetry_decoder_gs::viterbi_decoder(float *page_part_symbols, int32_t *page_part_bits)
|
||||
{
|
||||
Viterbi(page_part_bits, out0.data(), state0.data(), out1.data(), state1.data(),
|
||||
page_part_symbols, KK, nn, DataLength);
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_gs::deinterleaver(int32_t rows, int32_t cols, const double *in, double *out)
|
||||
void galileo_telemetry_decoder_gs::deinterleaver(int32_t rows, int32_t cols, const float *in, float *out)
|
||||
{
|
||||
for (int32_t r = 0; r < rows; r++)
|
||||
{
|
||||
@ -226,10 +226,10 @@ void galileo_telemetry_decoder_gs::deinterleaver(int32_t rows, int32_t cols, con
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, int32_t frame_length)
|
||||
void galileo_telemetry_decoder_gs::decode_INAV_word(float *page_part_symbols, int32_t frame_length)
|
||||
{
|
||||
// 1. De-interleave
|
||||
std::vector<double> page_part_symbols_deint(frame_length);
|
||||
std::vector<float> page_part_symbols_deint(frame_length);
|
||||
deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint.data());
|
||||
|
||||
// 2. Viterbi decoder
|
||||
@ -318,10 +318,10 @@ void galileo_telemetry_decoder_gs::decode_INAV_word(double *page_part_symbols, i
|
||||
}
|
||||
|
||||
|
||||
void galileo_telemetry_decoder_gs::decode_FNAV_word(double *page_symbols, int32_t frame_length)
|
||||
void galileo_telemetry_decoder_gs::decode_FNAV_word(float *page_symbols, int32_t frame_length)
|
||||
{
|
||||
// 1. De-interleave
|
||||
std::vector<double> page_symbols_deint(frame_length);
|
||||
std::vector<float> page_symbols_deint(frame_length);
|
||||
deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint.data());
|
||||
|
||||
// 2. Viterbi decoder
|
||||
|
@ -81,12 +81,12 @@ private:
|
||||
|
||||
galileo_telemetry_decoder_gs(const Gnss_Satellite &satellite, int frame_type, bool dump);
|
||||
|
||||
void viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits);
|
||||
void viterbi_decoder(float *page_part_symbols, int32_t *page_part_bits);
|
||||
|
||||
void deinterleaver(int32_t rows, int32_t cols, const double *in, double *out);
|
||||
void deinterleaver(int32_t rows, int32_t cols, const float *in, float *out);
|
||||
|
||||
void decode_INAV_word(double *page_part_symbols, int32_t frame_length);
|
||||
void decode_FNAV_word(double *page_symbols, int32_t frame_length);
|
||||
void decode_INAV_word(float *page_part_symbols, int32_t frame_length);
|
||||
void decode_FNAV_word(float *page_symbols, int32_t frame_length);
|
||||
|
||||
int d_frame_type;
|
||||
int32_t d_bits_per_preamble;
|
||||
@ -96,7 +96,7 @@ private:
|
||||
uint32_t d_PRN_code_period_ms;
|
||||
uint32_t d_required_symbols;
|
||||
uint32_t d_frame_length_symbols;
|
||||
std::vector<double> d_page_part_symbols;
|
||||
std::vector<float> d_page_part_symbols;
|
||||
|
||||
boost::circular_buffer<float> d_symbol_history;
|
||||
|
||||
|
@ -39,6 +39,8 @@ add_library(telemetry_decoder_libs
|
||||
)
|
||||
|
||||
target_link_libraries(telemetry_decoder_libs
|
||||
PUBLIC
|
||||
Volkgnsssdr::volkgnsssdr
|
||||
PRIVATE
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
|
@ -1,11 +1,13 @@
|
||||
/*!
|
||||
* \file convolutional.h
|
||||
* \brief General functions used to implement convolutional encoding.
|
||||
* \author Matthew C. Valenti
|
||||
* \author Matthew C. Valenti, 2006-2008.
|
||||
* \author C. Fernandez-Prades, 2019.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
* Copyright (C) 2006-2008 Matthew C. Valenti
|
||||
* Copyright (C) 2019 C. Fernandez-Prades
|
||||
*
|
||||
* GNSS-SDR is a software defined Global Navigation
|
||||
* Satellite Systems receiver
|
||||
@ -19,8 +21,6 @@
|
||||
*
|
||||
* This file is a derived work of the original file, which had this note:
|
||||
*
|
||||
* Last updated on May 22, 2008
|
||||
*
|
||||
* The functions in this file are part of the Iterative Solutions
|
||||
* Coded Modulation Library. The Iterative Solutions Coded Modulation
|
||||
* Library is free software; you can redistribute it and/or modify it
|
||||
@ -41,7 +41,8 @@
|
||||
#ifndef GNSS_SDR_CONVOLUTIONAL_H_
|
||||
#define GNSS_SDR_CONVOLUTIONAL_H_
|
||||
|
||||
#include <cstdlib> // for calloc
|
||||
#include <volk_gnsssdr/volk_gnsssdr.h>
|
||||
#include <vector>
|
||||
|
||||
/* define constants used throughout the library */
|
||||
const float MAXLOG = 1e7; /* Define infinity */
|
||||
@ -57,7 +58,7 @@ const float MAXLOG = 1e7; /* Define infinity */
|
||||
*
|
||||
* This function is used by nsc_enc_bit(), rsc_enc_bit(), and rsc_tail()
|
||||
*/
|
||||
inline static int parity_counter(int symbol, int length)
|
||||
inline int parity_counter(int symbol, int length)
|
||||
{
|
||||
int counter;
|
||||
int temp_parity = 0;
|
||||
@ -85,7 +86,7 @@ inline static int parity_counter(int symbol, int length)
|
||||
*
|
||||
* This function is used by nsc_transit()
|
||||
*/
|
||||
inline static int nsc_enc_bit(int state_out_p[],
|
||||
inline int nsc_enc_bit(int state_out_p[],
|
||||
int input,
|
||||
int state_in,
|
||||
const int g[],
|
||||
@ -115,7 +116,7 @@ inline static int nsc_enc_bit(int state_out_p[],
|
||||
/*!
|
||||
* \brief Function that creates the transit and output vectors
|
||||
*/
|
||||
inline static void nsc_transit(int output_p[],
|
||||
inline void nsc_transit(int output_p[],
|
||||
int trans_p[],
|
||||
int input,
|
||||
int g[],
|
||||
@ -144,7 +145,7 @@ inline static void nsc_transit(int output_p[],
|
||||
* \param[in] nn The length of the received vector
|
||||
*
|
||||
*/
|
||||
inline static float Gamma(const float rec_array[],
|
||||
inline float Gamma(const float rec_array[],
|
||||
int symbol,
|
||||
int nn)
|
||||
{
|
||||
@ -176,24 +177,20 @@ inline static float Gamma(const float rec_array[],
|
||||
* \param[out] output_u_int[] Hard decisions on the data bits
|
||||
*
|
||||
*/
|
||||
inline static void Viterbi(int output_u_int[],
|
||||
inline void Viterbi(int output_u_int[],
|
||||
const int out0[],
|
||||
const int state0[],
|
||||
const int out1[],
|
||||
const int state1[],
|
||||
const double input_c[],
|
||||
const float input_c[],
|
||||
int KK,
|
||||
int nn,
|
||||
int LL)
|
||||
{
|
||||
int i, t, state, mm, states;
|
||||
int number_symbols;
|
||||
uint32_t max_index;
|
||||
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 */
|
||||
@ -201,34 +198,24 @@ inline static void Viterbi(int output_u_int[],
|
||||
states = 1 << mm; /* 2^mm */
|
||||
number_symbols = 1 << nn; /* 2^nn */
|
||||
|
||||
/* dynamically allocate memory */
|
||||
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)));
|
||||
std::vector<float> prev_section(states, -MAXLOG);
|
||||
std::vector<float> next_section(states, -MAXLOG);
|
||||
std::vector<int> prev_bit(states * (LL + mm), 0);
|
||||
std::vector<int> prev_state(states * (LL + mm), 0);
|
||||
std::vector<float> rec_array(nn);
|
||||
std::vector<float> metric_c(number_symbols);
|
||||
|
||||
/* initialize trellis */
|
||||
for (state = 0; state < states; state++)
|
||||
{
|
||||
prev_section[state] = -MAXLOG;
|
||||
next_section[state] = -MAXLOG;
|
||||
}
|
||||
prev_section[0] = 0; /* start in all-zeros state */
|
||||
prev_section[0] = 0.0; /* start in all-zeros state */
|
||||
|
||||
/* go through trellis */
|
||||
for (t = 0; t < LL + mm; t++)
|
||||
{
|
||||
for (i = 0; i < nn; i++)
|
||||
{
|
||||
rec_array[i] = static_cast<float>(input_c[nn * t + i]);
|
||||
}
|
||||
rec_array.assign(input_c + nn * t, input_c + nn * t + (nn - 1));
|
||||
|
||||
/* precompute all possible branch metrics */
|
||||
for (i = 0; i < number_symbols; i++)
|
||||
{
|
||||
metric_c[i] = Gamma(rec_array, i, nn);
|
||||
metric_c[i] = Gamma(rec_array.data(), i, nn);
|
||||
}
|
||||
|
||||
/* step through all states */
|
||||
@ -258,14 +245,9 @@ inline static void Viterbi(int output_u_int[],
|
||||
}
|
||||
|
||||
/* normalize */
|
||||
max_val = 0;
|
||||
for (state = 0; state < states; state++)
|
||||
{
|
||||
if (next_section[state] > max_val)
|
||||
{
|
||||
max_val = next_section[state];
|
||||
}
|
||||
}
|
||||
volk_gnsssdr_32f_index_max_32u(&max_index, next_section.data(), states);
|
||||
max_val = next_section[max_index];
|
||||
|
||||
for (state = 0; state < states; state++)
|
||||
{
|
||||
prev_section[state] = next_section[state] - max_val;
|
||||
@ -287,14 +269,6 @@ inline static void Viterbi(int output_u_int[],
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -171,13 +171,12 @@ GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking(
|
||||
trk_param.max_carrier_lock_fail = configuration->property(role + ".max_carrier_lock_fail", trk_param.max_carrier_lock_fail);
|
||||
trk_param.carrier_lock_th = configuration->property(role + ".carrier_lock_th", trk_param.carrier_lock_th);
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param.cn0_smoother_samples);
|
||||
trk_param.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param.cn0_smoother_alpha);
|
||||
trk_param.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param.carrier_lock_test_smoother_samples);
|
||||
trk_param.carrier_lock_test_smoother_alpha = configuration->property(role + ".carrier_lock_test_smoother_alpha", trk_param.carrier_lock_test_smoother_alpha);
|
||||
|
||||
|
||||
// ################# MAKE TRACKING GNURadio object ###################
|
||||
if (item_type == "gr_complex")
|
||||
{
|
||||
|
@ -255,13 +255,12 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga(
|
||||
trk_param_fpga.extend_fpga_integration_periods = 1; // (number of FPGA integrations that are combined in the SW)
|
||||
trk_param_fpga.fpga_integration_period = 1; // (number of symbols that are effectively integrated in the FPGA)
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param_fpga.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param_fpga.cn0_smoother_samples);
|
||||
trk_param_fpga.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param_fpga.cn0_smoother_alpha);
|
||||
trk_param_fpga.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param_fpga.carrier_lock_test_smoother_samples);
|
||||
trk_param_fpga.carrier_lock_test_smoother_alpha = configuration->property(role + ".carrier_lock_test_smoother_alpha", trk_param_fpga.carrier_lock_test_smoother_alpha);
|
||||
|
||||
|
||||
//################# MAKE TRACKING GNURadio object ###################
|
||||
tracking_fpga_sc = dll_pll_veml_make_tracking_fpga(trk_param_fpga);
|
||||
channel_ = 0;
|
||||
|
@ -166,13 +166,12 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking(
|
||||
trk_param.max_carrier_lock_fail = configuration->property(role + ".max_carrier_lock_fail", trk_param.max_carrier_lock_fail);
|
||||
trk_param.carrier_lock_th = configuration->property(role + ".carrier_lock_th", trk_param.carrier_lock_th);
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param.cn0_smoother_samples);
|
||||
trk_param.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param.cn0_smoother_alpha);
|
||||
trk_param.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param.carrier_lock_test_smoother_samples);
|
||||
trk_param.carrier_lock_test_smoother_alpha = configuration->property(role + ".carrier_lock_test_smoother_alpha", trk_param.carrier_lock_test_smoother_alpha);
|
||||
|
||||
|
||||
// ################# MAKE TRACKING GNURadio object ###################
|
||||
if (item_type == "gr_complex")
|
||||
{
|
||||
|
@ -262,13 +262,12 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga(
|
||||
}
|
||||
}
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param_fpga.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param_fpga.cn0_smoother_samples);
|
||||
trk_param_fpga.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param_fpga.cn0_smoother_alpha);
|
||||
trk_param_fpga.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param_fpga.carrier_lock_test_smoother_samples);
|
||||
trk_param_fpga.carrier_lock_test_smoother_alpha = configuration->property(role + ".carrier_lock_test_smoother_alpha", trk_param_fpga.carrier_lock_test_smoother_alpha);
|
||||
|
||||
|
||||
// ################# MAKE TRACKING GNURadio object ###################
|
||||
tracking_fpga_sc = dll_pll_veml_make_tracking_fpga(trk_param_fpga);
|
||||
channel_ = 0;
|
||||
|
@ -172,7 +172,7 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking(
|
||||
trk_param.max_carrier_lock_fail = configuration->property(role + ".max_carrier_lock_fail", trk_param.max_carrier_lock_fail);
|
||||
trk_param.carrier_lock_th = configuration->property(role + ".carrier_lock_th", trk_param.carrier_lock_th);
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param.cn0_smoother_samples);
|
||||
trk_param.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param.cn0_smoother_alpha);
|
||||
trk_param.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param.carrier_lock_test_smoother_samples);
|
||||
|
@ -216,13 +216,12 @@ GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga(
|
||||
}
|
||||
}
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param_fpga.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param_fpga.cn0_smoother_samples);
|
||||
trk_param_fpga.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param_fpga.cn0_smoother_alpha);
|
||||
trk_param_fpga.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param_fpga.carrier_lock_test_smoother_samples);
|
||||
trk_param_fpga.carrier_lock_test_smoother_alpha = configuration->property(role + ".carrier_lock_test_smoother_alpha", trk_param_fpga.carrier_lock_test_smoother_alpha);
|
||||
|
||||
|
||||
// ################# MAKE TRACKING GNURadio object ###################
|
||||
tracking_fpga_sc = dll_pll_veml_make_tracking_fpga(trk_param_fpga);
|
||||
channel_ = 0;
|
||||
|
@ -148,13 +148,12 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking(
|
||||
trk_param.max_carrier_lock_fail = configuration->property(role + ".max_carrier_lock_fail", trk_param.max_carrier_lock_fail);
|
||||
trk_param.carrier_lock_th = configuration->property(role + ".carrier_lock_th", trk_param.carrier_lock_th);
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param.cn0_smoother_samples);
|
||||
trk_param.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param.cn0_smoother_alpha);
|
||||
trk_param.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param.carrier_lock_test_smoother_samples);
|
||||
trk_param.carrier_lock_test_smoother_alpha = configuration->property(role + ".carrier_lock_test_smoother_alpha", trk_param.carrier_lock_test_smoother_alpha);
|
||||
|
||||
|
||||
// ################# MAKE TRACKING GNURadio object ###################
|
||||
if (item_type == "gr_complex")
|
||||
{
|
||||
|
@ -102,6 +102,10 @@ GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga(
|
||||
trk_param_fpga.max_code_lock_fail = configuration->property(role + ".max_lock_fail", trk_param_fpga.max_code_lock_fail);
|
||||
trk_param_fpga.max_carrier_lock_fail = configuration->property(role + ".max_carrier_lock_fail", trk_param_fpga.max_carrier_lock_fail);
|
||||
trk_param_fpga.carrier_lock_th = configuration->property(role + ".carrier_lock_th", trk_param_fpga.carrier_lock_th);
|
||||
trk_param_fpga.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param_fpga.cn0_smoother_samples);
|
||||
trk_param_fpga.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param_fpga.cn0_smoother_alpha);
|
||||
trk_param_fpga.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param_fpga.carrier_lock_test_smoother_samples);
|
||||
trk_param_fpga.carrier_lock_test_smoother_alpha = configuration->property(role + ".carrier_lock_test_smoother_alpha", trk_param_fpga.carrier_lock_test_smoother_alpha);
|
||||
|
||||
// int32_t max_lock_fail = configuration->property(role + ".max_lock_fail", 50);
|
||||
// if (FLAGS_max_lock_fail != 50)
|
||||
|
@ -168,7 +168,7 @@ GpsL5DllPllTracking::GpsL5DllPllTracking(
|
||||
trk_param.max_carrier_lock_fail = configuration->property(role + ".max_carrier_lock_fail", trk_param.max_carrier_lock_fail);
|
||||
trk_param.carrier_lock_th = configuration->property(role + ".carrier_lock_th", trk_param.carrier_lock_th);
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param.cn0_smoother_samples);
|
||||
trk_param.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param.cn0_smoother_alpha);
|
||||
trk_param.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param.carrier_lock_test_smoother_samples);
|
||||
|
@ -286,7 +286,7 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga(
|
||||
}
|
||||
}
|
||||
|
||||
//tracking lock tests smoother parameters
|
||||
// tracking lock tests smoother parameters
|
||||
trk_param_fpga.cn0_smoother_samples = configuration->property(role + ".cn0_smoother_samples", trk_param_fpga.cn0_smoother_samples);
|
||||
trk_param_fpga.cn0_smoother_alpha = configuration->property(role + ".cn0_smoother_alpha", trk_param_fpga.cn0_smoother_alpha);
|
||||
trk_param_fpga.carrier_lock_test_smoother_samples = configuration->property(role + ".carrier_lock_test_smoother_samples", trk_param_fpga.carrier_lock_test_smoother_samples);
|
||||
|
@ -88,7 +88,7 @@ endif()
|
||||
|
||||
target_link_libraries(tracking_gr_blocks
|
||||
PUBLIC
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Armadillo::armadillo
|
||||
Gnuradio::blocks
|
||||
Matio::matio
|
||||
|
@ -88,7 +88,7 @@ add_library(tracking_libs ${TRACKING_LIB_SOURCES} ${TRACKING_LIB_HEADERS})
|
||||
target_link_libraries(tracking_libs
|
||||
PUBLIC
|
||||
Armadillo::armadillo
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gnuradio::runtime
|
||||
Volkgnsssdr::volkgnsssdr
|
||||
core_system_parameters
|
||||
|
@ -40,7 +40,6 @@ class Dll_Pll_Conf
|
||||
{
|
||||
public:
|
||||
/* DLL/PLL tracking configuration */
|
||||
|
||||
int fll_filter_order;
|
||||
bool enable_fll_pull_in;
|
||||
bool enable_fll_steady_state;
|
||||
@ -48,7 +47,6 @@ public:
|
||||
unsigned int bit_synchronization_time_limit_s;
|
||||
int pll_filter_order;
|
||||
int dll_filter_order;
|
||||
|
||||
double fs_in;
|
||||
uint32_t vector_length;
|
||||
bool dump;
|
||||
@ -72,7 +70,6 @@ public:
|
||||
float cn0_smoother_alpha;
|
||||
int32_t carrier_lock_test_smoother_samples;
|
||||
float carrier_lock_test_smoother_alpha;
|
||||
//int32_t carrier_lock_det_mav_samples;
|
||||
int32_t cn0_min;
|
||||
int32_t max_code_lock_fail;
|
||||
int32_t max_carrier_lock_fail;
|
||||
|
@ -62,7 +62,7 @@ add_library(core_libs ${CORE_LIBS_SOURCES} ${CORE_LIBS_HEADERS})
|
||||
|
||||
target_link_libraries(core_libs
|
||||
PUBLIC
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gnuradio::runtime
|
||||
core_libs_supl
|
||||
core_system_parameters
|
||||
|
@ -148,7 +148,7 @@ target_link_libraries(core_receiver
|
||||
telemetry_decoder_adapters
|
||||
obs_adapters
|
||||
pvt_adapters
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
Armadillo::armadillo
|
||||
|
@ -32,7 +32,7 @@ endif()
|
||||
target_link_libraries(gnss-sdr
|
||||
PUBLIC
|
||||
core_receiver
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Boost::thread
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
|
@ -37,7 +37,7 @@ target_link_libraries(system_testing_lib
|
||||
Armadillo::armadillo
|
||||
Gflags::gflags
|
||||
PRIVATE
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Matio::matio
|
||||
)
|
||||
|
||||
|
@ -43,7 +43,7 @@ target_link_libraries(signal_processing_testing_lib
|
||||
Gflags::gflags
|
||||
Gnuradio::runtime
|
||||
PRIVATE
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Matio::matio
|
||||
Glog::glog
|
||||
)
|
||||
|
@ -54,14 +54,14 @@ public:
|
||||
const int32_t KK = 7; // Constraint Length
|
||||
int32_t mm = KK - 1;
|
||||
int32_t flag_even_word_arrived;
|
||||
void viterbi_decoder(double *page_part_symbols, int32_t *page_part_bits, int32_t _datalength)
|
||||
void viterbi_decoder(float *page_part_symbols, int32_t *page_part_bits, int32_t _datalength)
|
||||
{
|
||||
Viterbi(page_part_bits, out0, state0, out1, state1,
|
||||
page_part_symbols, KK, nn, _datalength);
|
||||
}
|
||||
|
||||
|
||||
void deinterleaver(int32_t rows, int32_t cols, const double *in, double *out)
|
||||
void deinterleaver(int32_t rows, int32_t cols, const float *in, float *out)
|
||||
{
|
||||
for (int32_t r = 0; r < rows; r++)
|
||||
{
|
||||
@ -73,10 +73,10 @@ public:
|
||||
}
|
||||
|
||||
|
||||
bool decode_INAV_word(double *page_part_symbols, int32_t frame_length)
|
||||
bool decode_INAV_word(float *page_part_symbols, int32_t frame_length)
|
||||
{
|
||||
// 1. De-interleave
|
||||
auto *page_part_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
auto *page_part_symbols_deint = static_cast<float *>(volk_gnsssdr_malloc(frame_length * sizeof(float), volk_gnsssdr_get_alignment()));
|
||||
deinterleaver(GALILEO_INAV_INTERLEAVER_ROWS, GALILEO_INAV_INTERLEAVER_COLS, page_part_symbols, page_part_symbols_deint);
|
||||
|
||||
// 2. Viterbi decoder
|
||||
@ -134,10 +134,10 @@ public:
|
||||
return crc_ok;
|
||||
}
|
||||
|
||||
bool decode_FNAV_word(double *page_symbols, int32_t frame_length)
|
||||
bool decode_FNAV_word(float *page_symbols, int32_t frame_length)
|
||||
{
|
||||
// 1. De-interleave
|
||||
auto *page_symbols_deint = static_cast<double *>(volk_gnsssdr_malloc(frame_length * sizeof(double), volk_gnsssdr_get_alignment()));
|
||||
auto *page_symbols_deint = static_cast<float *>(volk_gnsssdr_malloc(frame_length * sizeof(float), volk_gnsssdr_get_alignment()));
|
||||
deinterleaver(GALILEO_FNAV_INTERLEAVER_ROWS, GALILEO_FNAV_INTERLEAVER_COLS, page_symbols, page_symbols_deint);
|
||||
|
||||
// 2. Viterbi decoder
|
||||
@ -215,7 +215,7 @@ TEST_F(Galileo_FNAV_INAV_test, ValidationOfResults)
|
||||
start = std::chrono::system_clock::now();
|
||||
int repetitions = 10;
|
||||
// FNAV FULLY ENCODED FRAME
|
||||
double FNAV_frame[488] = {-1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
float FNAV_frame[488] = {-1, 1, -1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
1, -1, -1, 1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, -1, -1, -1, 1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1,
|
||||
-1, 1, -1, 1, -1, 1, 1, -1, -1, 1, -1, 1, -1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, 1, 1, -1, 1, -1, 1, -1,
|
||||
-1, 1, 1, -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, 1, -1, 1, 1, 1, -1, -1, 1, 1, -1, -1, -1, -1,
|
||||
@ -240,7 +240,7 @@ TEST_F(Galileo_FNAV_INAV_test, ValidationOfResults)
|
||||
|
||||
|
||||
// INAV FULLY ENCODED FRAME
|
||||
double INAV_frame_even[240] = {-1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
float INAV_frame_even[240] = {-1, -1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, -1, -1, 1, 1,
|
||||
-1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, -1, -1, 1, -1, -1, -1, 1, -1,
|
||||
@ -256,7 +256,7 @@ TEST_F(Galileo_FNAV_INAV_test, ValidationOfResults)
|
||||
-1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, -1, 1, 1, 1};
|
||||
|
||||
double INAV_frame_odd[240] = {1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
float INAV_frame_odd[240] = {1, -1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
|
||||
1, 1, 1, 1, -1, 1, -1, -1, 1, -1, 1, -1, -1, 1, -1, 1,
|
||||
1, 1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1,
|
||||
-1, -1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, 1, -1, -1, 1,
|
||||
|
@ -34,7 +34,7 @@ target_link_libraries(front_end_cal_lib
|
||||
core_receiver
|
||||
core_libs
|
||||
PRIVATE
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
Gnuradio::blocks
|
||||
@ -68,7 +68,7 @@ target_link_libraries(front-end-cal
|
||||
core_receiver
|
||||
front_end_cal_lib
|
||||
gnss_sdr_flags
|
||||
Boost::boost
|
||||
Boost::headers
|
||||
PRIVATE
|
||||
Gflags::gflags
|
||||
Glog::glog
|
||||
|
Loading…
Reference in New Issue
Block a user