diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index ff45efb67..fe3018051 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -16,6 +16,9 @@ # along with GNSS-SDR. If not, see . # + +add_subdirectory(unit-tests/signal-processing-blocks/libs) + ################################################################################ # Google Test - https://github.com/google/googletest ################################################################################ @@ -230,6 +233,7 @@ include_directories( ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/adapters ${CMAKE_SOURCE_DIR}/src/algorithms/acquisition/gnuradio_blocks ${CMAKE_SOURCE_DIR}/src/algorithms/PVT/libs + ${CMAKE_SOURCE_DIR}/src/tests/unit-tests/signal-processing-blocks/libs ${GLOG_INCLUDE_DIRS} ${GFlags_INCLUDE_DIRS} ${GNURADIO_RUNTIME_INCLUDE_DIRS} @@ -271,6 +275,7 @@ if(ENABLE_UNIT_TESTING) signal_generator_blocks signal_generator_adapters pvt_gr_blocks + signak_processing_testing_lib ${VOLK_GNSSSDR_LIBRARIES} ${GNSS_SDR_TEST_OPTIONAL_LIBS} ) diff --git a/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt b/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt new file mode 100644 index 000000000..35efafc99 --- /dev/null +++ b/src/tests/unit-tests/signal-processing-blocks/libs/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copyright (C) 2012-2015 (see AUTHORS file for a list of contributors) +# +# This file is part of GNSS-SDR. +# +# GNSS-SDR is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# GNSS-SDR is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNSS-SDR. If not, see . +# + + +set(SIGNAL_PROCESSING_TESTING_LIB_SOURCES + tracking_obs_reader.cc +) + +include_directories( + $(CMAKE_CURRENT_SOURCE_DIR) + ${GLOG_INCLUDE_DIRS} + ${GFlags_INCLUDE_DIRS} +) + + +file(GLOB SIGNAL_PROCESSING_TESTING_LIB_HEADERS "*.h") +list(SORT SIGNAL_PROCESSING_TESTING_LIB_HEADERS) +add_library(signak_processing_testing_lib ${SIGNAL_PROCESSING_TESTING_LIB_SOURCES} ${SIGNAL_PROCESSING_TESTING_LIB_HEADERS}) +source_group(Headers FILES ${SIGNAL_PROCESSING_TESTING_LIB_HEADERS}) + diff --git a/src/tests/unit-tests/signal-processing-blocks/libs/tracking_obs_reader.cc b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_obs_reader.cc new file mode 100644 index 000000000..648c0fd81 --- /dev/null +++ b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_obs_reader.cc @@ -0,0 +1,57 @@ +// +// Created by javier on 1/2/2017. +// + +#include "tracking_obs_reader.h" + +bool tracking_obs_reader::read_binary_obs(double &signal_timestamp_s, + double &acc_carrier_phase_cycles, + double &doppler_l1_hz, + double &prn_delay_chips, + double &tow) + { + try { + d_dump_file.read((char *) &signal_timestamp_s, sizeof(double)); + d_dump_file.read((char *) &acc_carrier_phase_cycles, sizeof(double)); + d_dump_file.read((char *) &doppler_l1_hz, sizeof(double)); + d_dump_file.read((char *) &prn_delay_chips, sizeof(double)); + d_dump_file.read((char *) &tow, sizeof(double)); + } + catch (const std::ifstream::failure &e) { + std::cout << "Exception writing tracking obs dump file " << e.what() << std::endl; + } + return true; + } + +bool tracking_obs_reader::restart() { + d_dump_file.clear(); + d_dump_file.seekg(0, std::ios::beg); +} + +bool tracking_obs_reader::open_obs_file(std::string out_file) { + if (d_dump_file.is_open() == false) + { + try + { + d_dump_filename=out_file; + d_dump_file.exceptions ( std::ifstream::failbit | std::ifstream::badbit ); + d_dump_file.open(d_dump_filename.c_str(), std::ios::in | std::ios::binary); + std::cout << "Observables dump enabled, Log file: " << d_dump_filename.c_str()<< std::endl; + return true; + } + catch (const std::ifstream::failure & e) + { + std::cout << "Problem opening Observables dump Log file: " << d_dump_filename.c_str()<< std::endl; + return false; + } + }else{ + return false; + } +} + +tracking_obs_reader::~tracking_obs_reader() { + if (d_dump_file.is_open() == true) + { + d_dump_file.close(); + } +} diff --git a/src/tests/unit-tests/signal-processing-blocks/libs/tracking_obs_reader.h b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_obs_reader.h new file mode 100644 index 000000000..c07f539ad --- /dev/null +++ b/src/tests/unit-tests/signal-processing-blocks/libs/tracking_obs_reader.h @@ -0,0 +1,33 @@ +// +// Created by javier on 23/1/2017. +// + +#ifndef GNSS_SIM_tracking_obs_reader_H +#define GNSS_SIM_tracking_obs_reader_H + +#include +#include +#include +#include + +class tracking_obs_reader { + +public: + ~tracking_obs_reader(); + bool read_binary_obs(double &signal_timestamp_s, + double &acc_carrier_phase_cycles, + double &doppler_l1_hz, + double &prn_delay_chips, + double &tow); + bool restart(); + bool open_obs_file(std::string out_file); + bool d_dump; + +private: + + std::string d_dump_filename; + std::ifstream d_dump_file; + +}; + +#endif //GNSS_SIM_tracking_obs_reader_H diff --git a/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc b/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc index 266088777..58cddb901 100644 --- a/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc +++ b/src/tests/unit-tests/signal-processing-blocks/telemetry_decoder/gps_l1_ca_telemetry_decoder_test.cc @@ -51,6 +51,8 @@ #include "gnss_synchro.h" #include "gps_l1_ca_telemetry_decoder.h" #include "gps_l1_ca_dll_pll_tracking.h" +#include "gps_l1_ca_dll_pll_c_aid_tracking.h" +#include "tracking_obs_reader.h" // ######## GNURADIO BLOCK MESSAGE RECEVER FOR TRACKING MESSAGES ######### class GpsL1CADllPllTelemetryDecoderTest_msg_rx; @@ -200,8 +202,8 @@ void GpsL1CATelemetryDecoderTest::init() config->set_property("Tracking_1C.if", "0"); config->set_property("Tracking_1C.dump", "true"); config->set_property("Tracking_1C.dump_filename", "./tracking_ch_"); - config->set_property("Tracking_1C.pll_bw_hz", "30.0"); - config->set_property("Tracking_1C.dll_bw_hz", "4.0"); + config->set_property("Tracking_1C.pll_bw_hz", "20.0"); + config->set_property("Tracking_1C.dll_bw_hz", "1.5"); config->set_property("Tracking_1C.early_late_space_chips", "0.5"); config->set_property("TelemetryDecoder_1C.dump","true"); @@ -217,9 +219,24 @@ TEST_F(GpsL1CATelemetryDecoderTest, ValidationOfResults) int fs_in = 2600000; init(); + + //todo: call here the gnss simulator + + //open true observables log file written by the simulator + tracking_obs_reader true_obs_data; + ASSERT_NO_THROW({ + if (true_obs_data.open_obs_file("signal_samples/gps_l1_ca_obs_prn1.dat")==false) + { + throw std::exception(); + }; + })<< "Failure opening true observables file" << std::endl; + + queue = gr::msg_queue::make(0); top_block = gr::make_top_block("Telemetry_Decoder test"); std::shared_ptr tracking = std::make_shared(config.get(), "Tracking_1C", 1, 1); + //std::shared_ptr tracking = std::make_shared(config.get(), "Tracking_1C", 1, 1); + boost::shared_ptr msg_rx = GpsL1CADllPllTelemetryDecoderTest_msg_rx_make(); gnss_synchro.Acq_delay_samples = (1023-994.622/1023)*fs_in*1e-3; @@ -245,7 +262,7 @@ TEST_F(GpsL1CATelemetryDecoderTest, ValidationOfResults) ASSERT_NO_THROW( { std::string path = std::string(TEST_PATH); - std::string file = path + "signal_samples/gps_l1ca_prn1_2.6msps.dat"; + std::string file = path + "signal_samples/signal_out.dat"; const char * file_name = file.c_str(); gr::blocks::file_source::sptr file_source = gr::blocks::file_source::make(sizeof(int8_t), file_name, false); //boost::shared_ptr valve = gnss_sdr_make_valve(sizeof(gr_complex), nsamples, queue);