diff --git a/CMakeLists.txt b/CMakeLists.txt index 43d761f55..531554b52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -970,11 +970,23 @@ if(NOT VOLKGNSSSDR_FOUND) else() set(VOLK_GNSSSDR_COMPILER -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}) endif() + + find_package(ORC) + set_package_properties(ORC PROPERTIES + PURPOSE "Used by volk_gnsssdr." + TYPE OPTIONAL + ) + if(ORC_FOUND) + set(ORC_ENABLED ON) + else() + set(ORC_ENABLED OFF) + endif() + set(VOLK_GNSSSDR_CMAKE_ARGS ${VOLK_GNSSSDR_COMPILER} -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install -DENABLE_STATIC_LIBS=ON -DENABLE_PROFILING=${ENABLE_PROFILING} - -DENABLE_ORC=OFF + -DENABLE_ORC=${ORC_ENABLED} ${STRIP_VOLK_GNSSSDR_PROFILE} ${USE_THIS_PYTHON} ) @@ -1017,11 +1029,6 @@ if(NOT VOLKGNSSSDR_FOUND) INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/volk_gnsssdr_module/install ) endif() - find_package(ORC) - set_package_properties(ORC PROPERTIES - PURPOSE "Used by volk_gnsssdr." - TYPE OPTIONAL - ) if(NOT ORC_FOUND) set(ORC_LIBRARIES "") diff --git a/README.md b/README.md index 89ad37e84..b8da612c0 100644 --- a/README.md +++ b/README.md @@ -160,13 +160,13 @@ This option is adequate if you are interested in development, in working with th First of all, install some basic packages: ~~~~~~ -$ sudo apt-get install git python-pip +$ sudo apt-get install git python3-pip ~~~~~~ Download, build and install PyBOMBS: ~~~~~~ -$ sudo pip install git+https://github.com/gnuradio/pybombs.git +$ sudo pip3 install --upgrade git+https://github.com/gnuradio/pybombs.git ~~~~~~ Apply a configuration: @@ -302,9 +302,9 @@ $ sudo apt-get install autoconf automake libtool curl make g++ unzip and then: ~~~~~~ -$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.10.0/protobuf-cpp-3.10.0.tar.gz -$ tar xvfz protobuf-cpp-3.10.0.tar.gz -$ cd protobuf-3.10.0 +$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.10.1/protobuf-cpp-3.10.1.tar.gz +$ tar xvfz protobuf-cpp-3.10.1.tar.gz +$ cd protobuf-3.10.1 $ ./autogen.sh $ ./configure $ make diff --git a/cmake/Modules/FindORC.cmake b/cmake/Modules/FindORC.cmake index d2b98969f..a170a3038 100644 --- a/cmake/Modules/FindORC.cmake +++ b/cmake/Modules/FindORC.cmake @@ -38,8 +38,9 @@ find_path(ORC_INCLUDE_DIR PATHS /usr/include /usr/local/include /opt/local/include - ${ORC_ROOT}/include/orc-0.4 - ${CMAKE_INSTALL_PREFIX}/include/orc-0.4 + ${ORC_ROOT}/include + ${CMAKE_INSTALL_PREFIX}/include + PATH_SUFFIXES orc-0.4 ) find_path(ORC_LIBRARY_DIR diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake index aa9f0ada9..5c6ad9e06 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/FindORC.cmake @@ -16,45 +16,62 @@ # along with GNSS-SDR. If not, see . -find_package(PkgConfig) +set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH TRUE) +include(FindPkgConfig) pkg_check_modules(PC_ORC "orc-0.4 > 0.4.22") find_program(ORCC_EXECUTABLE orcc HINTS ${PC_ORC_TOOLSDIR} - PATHS ${ORC_ROOT}/bin ${CMAKE_INSTALL_PREFIX}/bin + PATHS /usr/bin + /usr/local/bin + /opt/local/bin + ${ORC_ROOT}/bin + ${CMAKE_INSTALL_PREFIX}/bin ) -find_path(ORC_INCLUDE_DIR NAMES orc/orc.h +find_path(ORC_INCLUDE_DIR + NAMES orc/orc.h HINTS ${PC_ORC_INCLUDEDIR} - PATHS ${ORC_ROOT}/include/orc-0.4 ${CMAKE_INSTALL_PREFIX}/include/orc-0.4 + PATHS /usr/include + /usr/local/include + /opt/local/include + ${ORC_ROOT}/include + ${CMAKE_INSTALL_PREFIX}/include + PATH_SUFFIXES orc-0.4 ) - find_path(ORC_LIBRARY_DIR NAMES ${CMAKE_SHARED_LIBRARY_PREFIX}orc-0.4${CMAKE_SHARED_LIBRARY_SUFFIX} HINTS ${PC_ORC_LIBDIR} - /usr/local/lib - /usr/lib/x86_64-linux-gnu - /usr/lib/i386-linux-gnu - /usr/lib/arm-linux-gnueabihf - /usr/lib/arm-linux-gnueabi - /usr/lib/aarch64-linux-gnu - /usr/lib/mipsel-linux-gnu - /usr/lib/mips-linux-gnu - /usr/lib/mips64el-linux-gnuabi64 - /usr/lib/powerpc-linux-gnu - /usr/lib/powerpc64-linux-gnu - /usr/lib/powerpc64le-linux-gnu - /usr/lib/hppa-linux-gnu - /usr/lib/s390x-linux-gnu - /usr/lib64 - /usr/lib - PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} + PATHS /usr/lib + /usr/lib64 + /usr/lib/x86_64-linux-gnu + /usr/lib/i386-linux-gnu + /usr/lib/arm-linux-gnueabihf + /usr/lib/arm-linux-gnueabi + /usr/lib/aarch64-linux-gnu + /usr/lib/mipsel-linux-gnu + /usr/lib/mips-linux-gnu + /usr/lib/mips64el-linux-gnuabi64 + /usr/lib/powerpc-linux-gnu + /usr/lib/powerpc64-linux-gnu + /usr/lib/powerpc64le-linux-gnu + /usr/lib/hppa-linux-gnu + /usr/lib/s390x-linux-gnu + /usr/local/lib + /usr/local/lib64 + /opt/local/lib + ${ORC_ROOT}/lib + $ENV{ORC_ROOT}/lib + ${ORC_ROOT}/lib${LIB_SUFFIX} + ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} ) find_library(ORC_LIB orc-0.4 HINTS ${PC_ORC_LIBRARY_DIRS} - PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}) + PATHS ${ORC_ROOT}/lib${LIB_SUFFIX} + ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX} +) list(APPEND ORC_LIBRARY ${ORC_LIB} diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake index b67a3c1bb..0f9b353e1 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/cmake/Modules/VolkPython.cmake @@ -133,7 +133,7 @@ file(TO_CMAKE_PATH ${VOLK_PYTHON_DIR} VOLK_PYTHON_DIR) function(VOLK_UNIQUE_TARGET desc) file(RELATIVE_PATH reldir ${PROJECT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}) execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import re, hashlib -unique = hashlib.md5(b'${reldir}${ARGN}').hexdigest()[:5] +unique = hashlib.sha256(b'${reldir}${ARGN}').hexdigest()[:5] print(re.sub('\\W', '_', '${desc} ${reldir} ' + unique))" OUTPUT_VARIABLE _target OUTPUT_STRIP_TRAILING_WHITESPACE) add_custom_target(${_target} ALL DEPENDS ${ARGN}) diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_common.h b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_common.h index f325d7c1f..387321f10 100644 --- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_common.h +++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/include/volk_gnsssdr/volk_gnsssdr_common.h @@ -27,7 +27,10 @@ // // Cross-platform attribute macros not included in VOLK // -#if defined __GNUC__ +#if defined __clang__ +#define __VOLK_GNSSSDR_PREFETCH(addr) __builtin_prefetch(addr) +#define __VOLK_GNSSSDR_PREFETCH_LOCALITY(addr, rw, locality) __builtin_prefetch(addr, rw, locality) +#elif defined __GNUC__ #define __VOLK_GNSSSDR_PREFETCH(addr) __builtin_prefetch(addr) #define __VOLK_GNSSSDR_PREFETCH_LOCALITY(addr, rw, locality) __builtin_prefetch(addr, rw, locality) #elif _MSC_VER @@ -44,7 +47,20 @@ // // Cross-platform attribute macros // -#if defined __GNUC__ +#if defined __clang__ +// AppleClang also defines __GNUC__, so do this check first. These +// will probably be the same as for __GNUC__, but let's keep them +// separate just to be safe. +#define __VOLK_ATTR_ALIGNED(x) __attribute__((aligned(x))) +#define __VOLK_ATTR_UNUSED __attribute__((unused)) +#define __VOLK_ATTR_INLINE __attribute__((always_inline)) +#define __VOLK_ATTR_DEPRECATED __attribute__((deprecated)) +#define __VOLK_ASM __asm__ +#define __VOLK_VOLATILE __volatile__ +#define __VOLK_ATTR_EXPORT __attribute__((visibility("default"))) +#define __VOLK_ATTR_IMPORT __attribute__((visibility("default"))) +#define __VOLK_PREFETCH(addr) __builtin_prefetch(addr) +#elif defined __GNUC__ #define __VOLK_ATTR_ALIGNED(x) __attribute__((aligned(x))) #define __VOLK_ATTR_UNUSED __attribute__((unused)) #define __VOLK_ATTR_INLINE __attribute__((always_inline)) @@ -58,6 +74,7 @@ #define __VOLK_ATTR_EXPORT #define __VOLK_ATTR_IMPORT #endif +#define __VOLK_PREFETCH(addr) __builtin_prefetch(addr) #elif _MSC_VER #define __VOLK_ATTR_ALIGNED(x) __declspec(align(x)) #define __VOLK_ATTR_UNUSED @@ -65,6 +82,7 @@ #define __VOLK_ATTR_DEPRECATED __declspec(deprecated) #define __VOLK_ATTR_EXPORT __declspec(dllexport) #define __VOLK_ATTR_IMPORT __declspec(dllimport) +#define __VOLK_PREFETCH(addr) #define __VOLK_ASM __asm #define __VOLK_VOLATILE #else @@ -74,6 +92,7 @@ #define __VOLK_ATTR_DEPRECATED #define __VOLK_ATTR_EXPORT #define __VOLK_ATTR_IMPORT +#define __VOLK_PREFETCH(addr) #define __VOLK_ASM __asm__ #define __VOLK_VOLATILE __volatile__ #endif diff --git a/src/tests/common-files/tracking_tests_flags.h b/src/tests/common-files/tracking_tests_flags.h index 0df70dba3..6df70d1c5 100644 --- a/src/tests/common-files/tracking_tests_flags.h +++ b/src/tests/common-files/tracking_tests_flags.h @@ -58,6 +58,10 @@ DEFINE_double(DLL_bw_hz_start, 1.0, "DLL Wide configuration start sweep value [H DEFINE_double(DLL_bw_hz_stop, 1.0, "DLL Wide configuration stop sweep value [Hz]"); DEFINE_double(DLL_bw_hz_step, 0.25, "DLL Wide configuration sweep step value [Hz]"); +DEFINE_double(fll_bw_hz, 4.0, "FLL filter bandwidth [Hz]"); +DEFINE_bool(enable_fll_pull_in, false, "Enable FLL in pull-in phase"); +DEFINE_bool(enable_fll_steady_state, false, "Enable FLL in steady-state phase"); + DEFINE_double(PLL_narrow_bw_hz, 5.0, "PLL Narrow configuration value [Hz]"); DEFINE_double(DLL_narrow_bw_hz, 0.75, "DLL Narrow configuration value [Hz]"); diff --git a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc index b9140b3cd..b886bebee 100644 --- a/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/observables/hybrid_observables_test.cc @@ -661,7 +661,6 @@ void HybridObservablesTest::configure_receiver( bool high_dyn) { config = std::make_shared(); - config->set_property("Tracking.dump", "true"); if (high_dyn) { config->set_property("Tracking.high_dyn", "true"); @@ -670,8 +669,6 @@ void HybridObservablesTest::configure_receiver( { config->set_property("Tracking.high_dyn", "false"); } - config->set_property("Tracking.smoother_length", std::to_string(smoother_length)); - config->set_property("Tracking.dump_filename", "./tracking_ch_"); config->set_property("Tracking.implementation", implementation); config->set_property("Tracking.item_type", "gr_complex"); config->set_property("Tracking.pll_bw_hz", std::to_string(PLL_wide_bw_hz)); @@ -679,6 +676,12 @@ void HybridObservablesTest::configure_receiver( config->set_property("Tracking.extend_correlation_symbols", std::to_string(extend_correlation_symbols)); config->set_property("Tracking.pll_bw_narrow_hz", std::to_string(PLL_narrow_bw_hz)); config->set_property("Tracking.dll_bw_narrow_hz", std::to_string(DLL_narrow_bw_hz)); + config->set_property("Tracking.fll_bw_hz", std::to_string(FLAGS_fll_bw_hz)); + config->set_property("Tracking.enable_fll_pull_in", FLAGS_enable_fll_pull_in ? "true" : "false"); + config->set_property("Tracking.enable_fll_steady_state", FLAGS_enable_fll_steady_state ? "true" : "false"); + config->set_property("Tracking.smoother_length", std::to_string(smoother_length)); + config->set_property("Tracking.dump", "true"); + config->set_property("Tracking.dump_filename", "./tracking_ch_"); config->set_property("Observables.implementation", "Hybrid_Observables"); config->set_property("Observables.dump", "true"); config->set_property("TelemetryDecoder.dump", "true"); @@ -696,7 +699,7 @@ void HybridObservablesTest::configure_receiver( std::memcpy(static_cast(gnss_synchro_master.Signal), str, 3); // copy string into synchro char array: 2 char + null config->set_property("Tracking.early_late_space_chips", "0.5"); - config->set_property("Tracking.early_late_space_narrow_chips", "0.5"); + config->set_property("Tracking.early_late_space_narrow_chips", "0.1"); config->set_property("TelemetryDecoder.implementation", "GPS_L1_CA_Telemetry_Decoder"); } @@ -743,8 +746,8 @@ void HybridObservablesTest::configure_receiver( } config->set_property("Tracking.early_late_space_chips", "0.5"); config->set_property("Tracking.track_pilot", "true"); - config->set_property("Tracking.pll_filter_order", "2"); - config->set_property("Tracking.dll_filter_order", "2"); + //config->set_property("Tracking.pll_filter_order", "2"); + //config->set_property("Tracking.dll_filter_order", "2"); config->set_property("TelemetryDecoder.implementation", "Galileo_E5a_Telemetry_Decoder"); } @@ -758,8 +761,8 @@ void HybridObservablesTest::configure_receiver( config->set_property("Tracking.early_late_space_chips", "0.5"); config->set_property("Tracking.track_pilot", "true"); - config->set_property("Tracking.pll_filter_order", "2"); - config->set_property("Tracking.dll_filter_order", "2"); + //config->set_property("Tracking.pll_filter_order", "2"); + //config->set_property("Tracking.dll_filter_order", "2"); config->set_property("TelemetryDecoder.implementation", "GPS_L5_Telemetry_Decoder"); } @@ -776,6 +779,9 @@ void HybridObservablesTest::configure_receiver( std::cout << "implementation: " << config->property("Tracking.implementation", std::string("undefined")) << " \n"; std::cout << "pll_bw_hz: " << config->property("Tracking.pll_bw_hz", 0.0) << " Hz\n"; std::cout << "dll_bw_hz: " << config->property("Tracking.dll_bw_hz", 0.0) << " Hz\n"; + std::cout << "fll_bw_hz: " << config->property("Tracking.fll_bw_hz", 0.0) << " Hz\n"; + std::cout << "enable_fll_pull_in: " << config->property("Tracking.enable_fll_pull_in", false) << "\n"; + std::cout << "enable_fll_steady_state: " << config->property("Tracking.enable_fll_steady_state", false) << "\n"; std::cout << "pll_bw_narrow_hz: " << config->property("Tracking.pll_bw_narrow_hz", 0.0) << " Hz\n"; std::cout << "dll_bw_narrow_hz: " << config->property("Tracking.dll_bw_narrow_hz", 0.0) << " Hz\n"; std::cout << "extend_correlation_symbols: " << config->property("Tracking.extend_correlation_symbols", 0) << " Symbols\n"; @@ -785,6 +791,7 @@ void HybridObservablesTest::configure_receiver( std::cout << "*****************************************\n"; } + void HybridObservablesTest::check_results_carrier_phase( arma::mat& true_ch0, arma::vec& true_tow_s, @@ -792,7 +799,6 @@ void HybridObservablesTest::check_results_carrier_phase( const std::string& data_title) { // 1. True value interpolation to match the measurement times - double t0 = measured_ch0(0, 0); int size1 = measured_ch0.col(0).n_rows; double t1 = measured_ch0(size1 - 1, 0); @@ -873,7 +879,6 @@ void HybridObservablesTest::check_results_carrier_phase_double_diff( const std::string& data_title) { // 1. True value interpolation to match the measurement times - double t0 = std::max(measured_ch0(0, 0), measured_ch1(0, 0)); int size1 = measured_ch0.col(0).n_rows; int size2 = measured_ch1.col(0).n_rows; @@ -969,7 +974,6 @@ void HybridObservablesTest::check_results_carrier_doppler_double_diff( const std::string& data_title) { // 1. True value interpolation to match the measurement times - double t0 = std::max(measured_ch0(0, 0), measured_ch1(0, 0)); int size1 = measured_ch0.col(0).n_rows; int size2 = measured_ch1.col(0).n_rows; @@ -1062,7 +1066,6 @@ void HybridObservablesTest::check_results_carrier_doppler( const std::string& data_title) { // 1. True value interpolation to match the measurement times - double t0 = measured_ch0(0, 0); int size1 = measured_ch0.col(0).n_rows; double t1 = measured_ch0(size1 - 1, 0); @@ -1137,6 +1140,7 @@ void HybridObservablesTest::check_results_carrier_doppler( } } + void HybridObservablesTest::check_results_duplicated_satellite( arma::mat& measured_sat1, arma::mat& measured_sat2, @@ -1389,6 +1393,7 @@ void HybridObservablesTest::check_results_duplicated_satellite( } } + bool HybridObservablesTest::save_mat_xy(std::vector& x, std::vector& y, std::string filename) { try @@ -1435,7 +1440,6 @@ void HybridObservablesTest::check_results_code_pseudorange( const std::string& data_title) { // 1. True value interpolation to match the measurement times - double t0 = std::max(measured_ch0(0, 0), measured_ch1(0, 0)); int size1 = measured_ch0.col(0).n_rows; int size2 = measured_ch1.col(0).n_rows; @@ -1522,6 +1526,7 @@ void HybridObservablesTest::check_results_code_pseudorange( } } + bool HybridObservablesTest::ReadRinexObs(std::vector* obs_vec, Gnss_Synchro gnss) { // Open and read reference RINEX observables file @@ -1662,6 +1667,8 @@ bool HybridObservablesTest::ReadRinexObs(std::vector* obs_vec, Gnss_S } return true; } + + TEST_F(HybridObservablesTest, ValidationOfResults) { // Configure the signal generator @@ -1699,7 +1706,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) } } - configure_receiver(FLAGS_PLL_bw_hz_start, FLAGS_DLL_bw_hz_start, FLAGS_PLL_narrow_bw_hz, @@ -1708,7 +1714,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) FLAGS_smoother_length, FLAGS_high_dyn); - for (auto& n : gnss_synchro_vec) { // setup the signal synchronization, simulating an acquisition @@ -1814,7 +1819,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) }) << "Failure connecting tracking to the top_block."; } - ASSERT_NO_THROW({ std::string file; if (!FLAGS_enable_external_signal_file) @@ -1982,7 +1986,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) } } - if (FLAGS_duplicated_satellites_test) { // special test mode for duplicated satellites @@ -2083,7 +2086,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) << "Error finding observation time epoch in the reference data"; } - for (unsigned int n = 0; n < measured_obs_vec.size(); n++) { // debug save to .mat @@ -2123,7 +2125,6 @@ TEST_F(HybridObservablesTest, ValidationOfResults) measured_obs_vec.at(n).col(3).colptr(0) + measured_obs_vec.at(n).col(3).n_rows); save_mat_xy(tmp_vector_x6, tmp_vector_y6, std::string("measured_cp_ch_" + std::to_string(n))); - if (epoch_counters_vec.at(n) > 100) // discard non-valid channels { arma::vec true_TOW_ref_ch_s = true_obs_vec.at(min_pr_ch_id).col(0) - receiver_time_offset_ref_channel_s(0);