mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 23:03:05 +00:00 
			
		
		
		
	Improve tracking dump saving
Dump files can now be saved anywhere, including absolute paths. If directories do not exist, they will be created. Added new dump_mat to deactivate generation of .mat files
This commit is contained in:
		| @@ -38,6 +38,7 @@ set(GNSS_SPLIBS_SOURCES | ||||
|         conjugate_cc.cc | ||||
|         conjugate_sc.cc | ||||
|         conjugate_ic.cc | ||||
|         gnss_sdr_create_directory.cc | ||||
| ) | ||||
|  | ||||
| set(GNSS_SPLIBS_HEADERS | ||||
| @@ -60,6 +61,7 @@ set(GNSS_SPLIBS_HEADERS | ||||
|         conjugate_cc.h | ||||
|         conjugate_sc.h | ||||
|         conjugate_ic.h | ||||
|         gnss_sdr_create_directory.h | ||||
|         gnss_circular_deque.h | ||||
| ) | ||||
|  | ||||
|   | ||||
							
								
								
									
										87
									
								
								src/algorithms/libs/gnss_sdr_create_directory.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/algorithms/libs/gnss_sdr_create_directory.cc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,87 @@ | ||||
| /*! | ||||
|  * \file gnss_sdr_create_directory.cc | ||||
|  * \brief Create a directory | ||||
|  * \author Carles Fernandez-Prades, 2018. cfernandez(at)cttc.es | ||||
|  * | ||||
|  * ------------------------------------------------------------------------- | ||||
|  * | ||||
|  * Copyright (C) 2010-2018  (see AUTHORS file for a list of contributors) | ||||
|  * | ||||
|  * GNSS-SDR is a software defined Global Navigation | ||||
|  *          Satellite Systems receiver | ||||
|  * | ||||
|  * 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 <https://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * ------------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #include "gnss_sdr_create_directory.h" | ||||
| #include <boost/filesystem/operations.hpp>   // for create_directories, exists | ||||
| #include <boost/filesystem/path.hpp>         // for path, operator<< | ||||
| #include <boost/filesystem/path_traits.hpp>  // for filesystem | ||||
| #include <fstream> | ||||
|  | ||||
|  | ||||
| bool gnss_sdr_create_directory(const std::string& foldername) | ||||
| { | ||||
|     std::string new_folder; | ||||
|     for (auto& folder : boost::filesystem::path(foldername)) | ||||
|         { | ||||
|             new_folder += folder.string(); | ||||
|             boost::system::error_code ec; | ||||
|             if (!boost::filesystem::exists(new_folder)) | ||||
|                 { | ||||
|                     try | ||||
|                         { | ||||
|                             if (!boost::filesystem::create_directory(new_folder, ec)) | ||||
|                                 { | ||||
|                                     return false; | ||||
|                                 } | ||||
|                         } | ||||
|                     catch (std::exception& e) | ||||
|                         { | ||||
|                             return false; | ||||
|                         } | ||||
|                 } | ||||
|             new_folder += boost::filesystem::path::preferred_separator; | ||||
|         } | ||||
|  | ||||
|     // Check if we have writing permissions | ||||
|     std::string test_file = foldername + "/test_file.txt"; | ||||
|     std::ofstream os_test_file; | ||||
|     os_test_file.open(test_file.c_str(), std::ios::out | std::ios::binary); | ||||
|  | ||||
|     if (os_test_file.is_open()) | ||||
|         { | ||||
|             boost::system::error_code ec; | ||||
|             os_test_file.close(); | ||||
|             try | ||||
|                 { | ||||
|                     boost::filesystem::remove(test_file, ec); | ||||
|                 } | ||||
|             catch (std::exception& e) | ||||
|                 { | ||||
|                     return false; | ||||
|                 } | ||||
|             return true; | ||||
|         } | ||||
|     else | ||||
|         { | ||||
|             os_test_file.close(); | ||||
|             return false; | ||||
|         } | ||||
| } | ||||
							
								
								
									
										38
									
								
								src/algorithms/libs/gnss_sdr_create_directory.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								src/algorithms/libs/gnss_sdr_create_directory.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| /*! | ||||
|  * \file gnss_sdr_create_directory.h | ||||
|  * \brief Create a directory | ||||
|  * \author Carles Fernandez-Prades, 2018. cfernandez(at)cttc.es | ||||
|  * | ||||
|  * ------------------------------------------------------------------------- | ||||
|  * | ||||
|  * Copyright (C) 2010-2018  (see AUTHORS file for a list of contributors) | ||||
|  * | ||||
|  * GNSS-SDR is a software defined Global Navigation | ||||
|  *          Satellite Systems receiver | ||||
|  * | ||||
|  * 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 <https://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * ------------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
| #ifndef GNSS_SDR_GNSS_SDR_CREATE_DIRECTORY_H_ | ||||
| #define GNSS_SDR_GNSS_SDR_CREATE_DIRECTORY_H_ | ||||
|  | ||||
| #include <string> | ||||
|  | ||||
| bool gnss_sdr_create_directory(const std::string& foldername); | ||||
|  | ||||
| #endif | ||||
| @@ -63,6 +63,11 @@ GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( | ||||
|     trk_param.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param.dump_mat = dump_mat; | ||||
|     trk_param.high_dyn = configuration->property(role + ".high_dyn", false); | ||||
|     if (configuration->property(role + ".smoother_length", 10) < 1) | ||||
|         { | ||||
| @@ -109,9 +114,6 @@ GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( | ||||
|         } | ||||
|     trk_param.track_pilot = track_pilot; | ||||
|     trk_param.extend_correlation_symbols = extend_correlation_symbols; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); | ||||
|     trk_param.vector_length = vector_length; | ||||
|     trk_param.system = 'E'; | ||||
|   | ||||
| @@ -65,6 +65,11 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( | ||||
|     trk_param_fpga.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param_fpga.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param_fpga.dump_mat = dump_mat; | ||||
|     float pll_bw_hz = configuration->property(role + ".pll_bw_hz", 5.0); | ||||
|     if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast<float>(FLAGS_pll_bw_hz); | ||||
|     trk_param_fpga.pll_bw_hz = pll_bw_hz; | ||||
| @@ -102,9 +107,6 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( | ||||
|     trk_param_fpga.track_pilot = track_pilot; | ||||
|     d_track_pilot = track_pilot; | ||||
|     trk_param_fpga.extend_correlation_symbols = extend_correlation_symbols; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(fs_in / (Galileo_E1_CODE_CHIP_RATE_HZ / Galileo_E1_B_CODE_LENGTH_CHIPS)); | ||||
|     trk_param_fpga.vector_length = vector_length; | ||||
|     trk_param_fpga.system = 'E'; | ||||
|   | ||||
| @@ -63,6 +63,11 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( | ||||
|     trk_param.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param.dump_mat = dump_mat; | ||||
|     trk_param.high_dyn = configuration->property(role + ".high_dyn", false); | ||||
|     if (configuration->property(role + ".smoother_length", 10) < 1) | ||||
|         { | ||||
| @@ -85,9 +90,6 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( | ||||
|     trk_param.dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); | ||||
|     trk_param.early_late_space_chips = early_late_space_chips; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(fs_in / (Galileo_E5a_CODE_CHIP_RATE_HZ / Galileo_E5a_CODE_LENGTH_CHIPS)); | ||||
|     trk_param.vector_length = vector_length; | ||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -67,6 +67,11 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga( | ||||
|     trk_param_fpga.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param_fpga.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param_fpga.dump_mat = dump_mat; | ||||
|     float pll_bw_hz = configuration->property(role + ".pll_bw_hz", 20.0); | ||||
|     if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast<float>(FLAGS_pll_bw_hz); | ||||
|     trk_param_fpga.pll_bw_hz = pll_bw_hz; | ||||
| @@ -79,9 +84,6 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga( | ||||
|     trk_param_fpga.dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); | ||||
|     trk_param_fpga.early_late_space_chips = early_late_space_chips; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(fs_in / (Galileo_E5a_CODE_CHIP_RATE_HZ / Galileo_E5a_CODE_LENGTH_CHIPS)); | ||||
|     trk_param_fpga.vector_length = vector_length; | ||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -74,6 +74,11 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( | ||||
|         } | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param.dump_mat = dump_mat; | ||||
|     float pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); | ||||
|     if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast<float>(FLAGS_pll_bw_hz); | ||||
|     trk_param.pll_bw_hz = pll_bw_hz; | ||||
| @@ -88,9 +93,6 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( | ||||
|     trk_param.early_late_space_chips = early_late_space_chips; | ||||
|     float early_late_space_narrow_chips = configuration->property(role + ".early_late_space_narrow_chips", 0.5); | ||||
|     trk_param.early_late_space_narrow_chips = early_late_space_narrow_chips; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|     trk_param.vector_length = vector_length; | ||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -67,6 +67,11 @@ GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga( | ||||
|     trk_param_fpga.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param_fpga.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param_fpga.dump_mat = dump_mat; | ||||
|     float pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); | ||||
|     if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast<float>(FLAGS_pll_bw_hz); | ||||
|     trk_param_fpga.pll_bw_hz = pll_bw_hz; | ||||
| @@ -81,9 +86,6 @@ GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga( | ||||
|     trk_param_fpga.early_late_space_chips = early_late_space_chips; | ||||
|     float early_late_space_narrow_chips = configuration->property(role + ".early_late_space_narrow_chips", 0.5); | ||||
|     trk_param_fpga.early_late_space_narrow_chips = early_late_space_narrow_chips; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(fs_in / (GPS_L1_CA_CODE_RATE_HZ / GPS_L1_CA_CODE_LENGTH_CHIPS)); | ||||
|     trk_param_fpga.vector_length = vector_length; | ||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -63,6 +63,11 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking( | ||||
|     trk_param.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param.dump_mat = dump_mat; | ||||
|     float pll_bw_hz = configuration->property(role + ".pll_bw_hz", 2.0); | ||||
|     if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast<float>(FLAGS_pll_bw_hz); | ||||
|     trk_param.pll_bw_hz = pll_bw_hz; | ||||
| @@ -72,9 +77,6 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking( | ||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); | ||||
|     trk_param.early_late_space_chips = early_late_space_chips; | ||||
|     trk_param.early_late_space_narrow_chips = 0.0; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(static_cast<double>(fs_in) / (static_cast<double>(GPS_L2_M_CODE_RATE_HZ) / static_cast<double>(GPS_L2_M_CODE_LENGTH_CHIPS))); | ||||
|     trk_param.vector_length = vector_length; | ||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -66,6 +66,11 @@ GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga( | ||||
|     trk_param_fpga.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param_fpga.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param_fpga.dump_mat = dump_mat; | ||||
|     float pll_bw_hz = configuration->property(role + ".pll_bw_hz", 2.0); | ||||
|     if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast<float>(FLAGS_pll_bw_hz); | ||||
|     trk_param_fpga.pll_bw_hz = pll_bw_hz; | ||||
| @@ -75,9 +80,6 @@ GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga( | ||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); | ||||
|     trk_param_fpga.early_late_space_chips = early_late_space_chips; | ||||
|     trk_param_fpga.early_late_space_narrow_chips = 0.0; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(static_cast<double>(fs_in) / (static_cast<double>(GPS_L2_M_CODE_RATE_HZ) / static_cast<double>(GPS_L2_M_CODE_LENGTH_CHIPS))); | ||||
|     trk_param_fpga.vector_length = vector_length; | ||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -63,6 +63,11 @@ GpsL5DllPllTracking::GpsL5DllPllTracking( | ||||
|     trk_param.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param.dump_mat = dump_mat; | ||||
|     trk_param.high_dyn = configuration->property(role + ".high_dyn", false); | ||||
|     if (configuration->property(role + ".smoother_length", 10) < 1) | ||||
|         { | ||||
| @@ -85,9 +90,6 @@ GpsL5DllPllTracking::GpsL5DllPllTracking( | ||||
|     trk_param.dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); | ||||
|     trk_param.early_late_space_chips = early_late_space_chips; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(static_cast<double>(fs_in) / (static_cast<double>(GPS_L5i_CODE_RATE_HZ) / static_cast<double>(GPS_L5i_CODE_LENGTH_CHIPS))); | ||||
|     trk_param.vector_length = vector_length; | ||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -67,6 +67,11 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga( | ||||
|     trk_param_fpga.fs_in = fs_in; | ||||
|     bool dump = configuration->property(role + ".dump", false); | ||||
|     trk_param_fpga.dump = dump; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     bool dump_mat = configuration->property(role + ".dump_mat", true); | ||||
|     trk_param_fpga.dump_mat = dump_mat; | ||||
|     float pll_bw_hz = configuration->property(role + ".pll_bw_hz", 50.0); | ||||
|     if (FLAGS_pll_bw_hz != 0.0) pll_bw_hz = static_cast<float>(FLAGS_pll_bw_hz); | ||||
|     trk_param_fpga.pll_bw_hz = pll_bw_hz; | ||||
| @@ -79,9 +84,6 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga( | ||||
|     trk_param_fpga.dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); | ||||
|     trk_param_fpga.early_late_space_chips = early_late_space_chips; | ||||
|     std::string default_dump_filename = "./track_ch"; | ||||
|     std::string dump_filename = configuration->property(role + ".dump_filename", default_dump_filename); | ||||
|     trk_param_fpga.dump_filename = dump_filename; | ||||
|     int vector_length = std::round(static_cast<double>(fs_in) / (static_cast<double>(GPS_L5i_CODE_RATE_HZ) / static_cast<double>(GPS_L5i_CODE_LENGTH_CHIPS))); | ||||
|     trk_param_fpga.vector_length = vector_length; | ||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||
|   | ||||
| @@ -49,6 +49,7 @@ | ||||
| #include "gps_l2c_signal.h" | ||||
| #include "GPS_L5.h" | ||||
| #include "gps_l5_signal.h" | ||||
| #include "gnss_sdr_create_directory.h" | ||||
| #include <boost/lexical_cast.hpp> | ||||
| #include <glog/logging.h> | ||||
| #include <gnuradio/io_signature.h> | ||||
| @@ -415,6 +416,42 @@ dll_pll_veml_tracking::dll_pll_veml_tracking(const Dll_Pll_Conf &conf_) : gr::bl | ||||
|             d_carr_ph_history.resize(1); | ||||
|             d_code_ph_history.resize(1); | ||||
|         } | ||||
|  | ||||
|     d_dump = trk_parameters.dump; | ||||
|     d_dump_mat = trk_parameters.dump_mat and d_dump; | ||||
|     if (d_dump) | ||||
|         { | ||||
|             d_dump_filename = trk_parameters.dump_filename; | ||||
|             std::string dump_path; | ||||
|             // Get path | ||||
|             if (d_dump_filename.find_last_of("/") != std::string::npos) | ||||
|                 { | ||||
|                     std::string dump_filename_ = d_dump_filename.substr(d_dump_filename.find_last_of("/") + 1); | ||||
|                     dump_path = d_dump_filename.substr(0, d_dump_filename.find_last_of("/")); | ||||
|                     d_dump_filename = dump_filename_; | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     dump_path = std::string("."); | ||||
|                 } | ||||
|             if (d_dump_filename.empty()) | ||||
|                 { | ||||
|                     d_dump_filename = "trk_channel_"; | ||||
|                 } | ||||
|             // remove extension if any | ||||
|             if (d_dump_filename.substr(1).find_last_of(".") != std::string::npos) | ||||
|                 { | ||||
|                     d_dump_filename = d_dump_filename.substr(0, d_dump_filename.find_last_of(".")); | ||||
|                 } | ||||
|  | ||||
|             d_dump_filename = dump_path + boost::filesystem::path::preferred_separator + d_dump_filename; | ||||
|             // create directory | ||||
|             if (!gnss_sdr_create_directory(dump_path)) | ||||
|                 { | ||||
|                     std::cerr << "GNSS-SDR cannot create dump files for the tracking block. Wrong permissions?" << std::endl; | ||||
|                     d_dump = false; | ||||
|                 } | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -592,17 +629,9 @@ dll_pll_veml_tracking::~dll_pll_veml_tracking() | ||||
|                     LOG(WARNING) << "Exception in destructor " << ex.what(); | ||||
|                 } | ||||
|         } | ||||
|     if (trk_parameters.dump) | ||||
|     if (d_dump_mat) | ||||
|         { | ||||
|             if (d_channel == 0) | ||||
|                 { | ||||
|                     std::cout << "Writing .mat files ..."; | ||||
|                 } | ||||
|             save_matfile(); | ||||
|             if (d_channel == 0) | ||||
|                 { | ||||
|                     std::cout << " done." << std::endl; | ||||
|                 } | ||||
|         } | ||||
|     try | ||||
|         { | ||||
| @@ -928,7 +957,7 @@ void dll_pll_veml_tracking::save_correlation_results() | ||||
|  | ||||
| void dll_pll_veml_tracking::log_data(bool integrating) | ||||
| { | ||||
|     if (trk_parameters.dump) | ||||
|     if (d_dump) | ||||
|         { | ||||
|             // Dump results to file | ||||
|             float prompt_I; | ||||
| @@ -1060,10 +1089,16 @@ int32_t dll_pll_veml_tracking::save_matfile() | ||||
|     int32_t epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars + | ||||
|                                sizeof(float) * number_of_float_vars + sizeof(uint32_t); | ||||
|     std::ifstream dump_file; | ||||
|     std::string dump_filename_ = d_dump_filename; | ||||
|     // add channel number to the filename | ||||
|     dump_filename_.append(boost::lexical_cast<std::string>(d_channel)); | ||||
|     // add extension | ||||
|     dump_filename_.append(".dat"); | ||||
|     std::cout << "Generating .mat file for " << dump_filename_ << std::endl; | ||||
|     dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||
|     try | ||||
|         { | ||||
|             dump_file.open(trk_parameters.dump_filename.c_str(), std::ios::binary | std::ios::ate); | ||||
|             dump_file.open(dump_filename_.c_str(), std::ios::binary | std::ios::ate); | ||||
|         } | ||||
|     catch (const std::ifstream::failure &e) | ||||
|         { | ||||
| @@ -1168,7 +1203,7 @@ int32_t dll_pll_veml_tracking::save_matfile() | ||||
|     // WRITE MAT FILE | ||||
|     mat_t *matfp; | ||||
|     matvar_t *matvar; | ||||
|     std::string filename = trk_parameters.dump_filename; | ||||
|     std::string filename = dump_filename_; | ||||
|     filename.erase(filename.length() - 4, 4); | ||||
|     filename.append(".mat"); | ||||
|     matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73); | ||||
| @@ -1296,17 +1331,23 @@ void dll_pll_veml_tracking::set_channel(uint32_t channel) | ||||
|     d_channel = channel; | ||||
|     LOG(INFO) << "Tracking Channel set to " << d_channel; | ||||
|     // ############# ENABLE DATA FILE LOG ################# | ||||
|     if (trk_parameters.dump) | ||||
|     if (d_dump) | ||||
|         { | ||||
|             std::string dump_filename_ = d_dump_filename; | ||||
|             // add channel number to the filename | ||||
|             dump_filename_.append(boost::lexical_cast<std::string>(d_channel)); | ||||
|             // add extension | ||||
|             dump_filename_.append(".dat"); | ||||
|  | ||||
|             if (!d_dump_file.is_open()) | ||||
|                 { | ||||
|                     try | ||||
|                         { | ||||
|                             trk_parameters.dump_filename.append(boost::lexical_cast<std::string>(d_channel)); | ||||
|                             trk_parameters.dump_filename.append(".dat"); | ||||
|                             //trk_parameters.dump_filename.append(boost::lexical_cast<std::string>(d_channel)); | ||||
|                             //trk_parameters.dump_filename.append(".dat"); | ||||
|                             d_dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||
|                             d_dump_file.open(trk_parameters.dump_filename.c_str(), std::ios::out | std::ios::binary); | ||||
|                             LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << trk_parameters.dump_filename.c_str(); | ||||
|                             d_dump_file.open(dump_filename_.c_str(), std::ios::out | std::ios::binary); | ||||
|                             LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << dump_filename_.c_str(); | ||||
|                         } | ||||
|                     catch (const std::ifstream::failure &e) | ||||
|                         { | ||||
|   | ||||
| @@ -196,6 +196,9 @@ private: | ||||
|  | ||||
|     // file dump | ||||
|     std::ofstream d_dump_file; | ||||
|     std::string d_dump_filename; | ||||
|     bool d_dump; | ||||
|     bool d_dump_mat; | ||||
| }; | ||||
|  | ||||
| #endif  // GNSS_SDR_DLL_PLL_VEML_TRACKING_H | ||||
|   | ||||
| @@ -47,6 +47,7 @@ | ||||
| #include "gps_l2c_signal.h" | ||||
| #include "GPS_L5.h" | ||||
| #include "gps_l5_signal.h" | ||||
| #include "gnss_sdr_create_directory.h" | ||||
| #include <boost/lexical_cast.hpp> | ||||
| #include <glog/logging.h> | ||||
| #include <gnuradio/io_signature.h> | ||||
| @@ -420,6 +421,42 @@ dll_pll_veml_tracking_fpga::dll_pll_veml_tracking_fpga(const Dll_Pll_Conf_Fpga & | ||||
|     multicorrelator_fpga->set_output_vectors(d_correlator_outs, d_Prompt_Data); | ||||
|  | ||||
|     d_pull_in = 0; | ||||
|  | ||||
|     d_dump = trk_parameters.dump; | ||||
|     d_dump_mat = trk_parameters.dump_mat and d_dump; | ||||
|     if (d_dump) | ||||
|         { | ||||
|             d_dump_filename = trk_parameters.dump_filename; | ||||
|             std::string dump_path; | ||||
|             if (d_dump_filename.find_last_of("/") != std::string::npos) | ||||
|                 { | ||||
|                     std::string dump_filename_ = d_dump_filename.substr(d_dump_filename.find_last_of("/") + 1); | ||||
|                     dump_path = d_dump_filename.substr(0, d_dump_filename.find_last_of("/")); | ||||
|                     d_dump_filename = dump_filename_; | ||||
|                 } | ||||
|             else | ||||
|                 { | ||||
|                     dump_path = std::string("."); | ||||
|                 } | ||||
|             if (d_dump_filename.empty()) | ||||
|                 { | ||||
|                     d_dump_filename = "trk_channel_"; | ||||
|                 } | ||||
|             // remove extension if any | ||||
|             if (d_dump_filename.substr(1).find_last_of(".") != std::string::npos) | ||||
|                 { | ||||
|                     d_dump_filename = d_dump_filename.substr(0, d_dump_filename.find_last_of(".")); | ||||
|                 } | ||||
|  | ||||
|             d_dump_filename = dump_path + boost::filesystem::path::preferred_separator + d_dump_filename; | ||||
|  | ||||
|             // create directory | ||||
|             if (!gnss_sdr_create_directory(dump_path)) | ||||
|                 { | ||||
|                     std::cerr << "GNSS-SDR cannot create dump files for the tracking block. Wrong permissions?" << std::endl; | ||||
|                     d_dump = false; | ||||
|                 }; | ||||
|         } | ||||
| } | ||||
|  | ||||
|  | ||||
| @@ -583,17 +620,9 @@ dll_pll_veml_tracking_fpga::~dll_pll_veml_tracking_fpga() | ||||
|                     LOG(WARNING) << "Exception in destructor " << ex.what(); | ||||
|                 } | ||||
|         } | ||||
|     if (trk_parameters.dump) | ||||
|     if (d_dump_mat) | ||||
|         { | ||||
|             if (d_channel == 0) | ||||
|                 { | ||||
|                     std::cout << "Writing .mat files ..."; | ||||
|                 } | ||||
|             save_matfile(); | ||||
|             if (d_channel == 0) | ||||
|                 { | ||||
|                     std::cout << " done." << std::endl; | ||||
|                 } | ||||
|         } | ||||
|     try | ||||
|         { | ||||
| @@ -842,7 +871,7 @@ void dll_pll_veml_tracking_fpga::save_correlation_results() | ||||
|  | ||||
| void dll_pll_veml_tracking_fpga::log_data(bool integrating) | ||||
| { | ||||
|     if (trk_parameters.dump) | ||||
|     if (d_dump) | ||||
|         { | ||||
|             // Dump results to file | ||||
|             float prompt_I; | ||||
| @@ -968,10 +997,16 @@ int32_t dll_pll_veml_tracking_fpga::save_matfile() | ||||
|     int32_t epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars + | ||||
|                                sizeof(float) * number_of_float_vars + sizeof(uint32_t); | ||||
|     std::ifstream dump_file; | ||||
|     std::string dump_filename_ = d_dump_filename; | ||||
|     // add channel number to the filename | ||||
|     dump_filename_.append(boost::lexical_cast<std::string>(d_channel)); | ||||
|     // add extension | ||||
|     dump_filename_.append(".dat"); | ||||
|     std::cout << "Generating .mat file for " << dump_filename_ << std::endl; | ||||
|     dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||
|     try | ||||
|         { | ||||
|             dump_file.open(trk_parameters.dump_filename.c_str(), std::ios::binary | std::ios::ate); | ||||
|             dump_file.open(dump_filename_.c_str(), std::ios::binary | std::ios::ate); | ||||
|         } | ||||
|     catch (const std::ifstream::failure &e) | ||||
|         { | ||||
| @@ -1070,7 +1105,7 @@ int32_t dll_pll_veml_tracking_fpga::save_matfile() | ||||
|     // WRITE MAT FILE | ||||
|     mat_t *matfp; | ||||
|     matvar_t *matvar; | ||||
|     std::string filename = trk_parameters.dump_filename; | ||||
|     std::string filename = dump_filename_; | ||||
|     filename.erase(filename.length() - 4, 4); | ||||
|     filename.append(".mat"); | ||||
|     matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73); | ||||
| @@ -1188,17 +1223,21 @@ void dll_pll_veml_tracking_fpga::set_channel(uint32_t channel) | ||||
|     multicorrelator_fpga->set_channel(d_channel); | ||||
|     LOG(INFO) << "Tracking Channel set to " << d_channel; | ||||
|     // ############# ENABLE DATA FILE LOG ################# | ||||
|     if (trk_parameters.dump) | ||||
|     if (d_dump) | ||||
|         { | ||||
|             std::string dump_filename_ = d_dump_filename; | ||||
|             // add channel number to the filename | ||||
|             dump_filename_.append(boost::lexical_cast<std::string>(d_channel)); | ||||
|             // add extension | ||||
|             dump_filename_.append(".dat"); | ||||
|  | ||||
|             if (!d_dump_file.is_open()) | ||||
|                 { | ||||
|                     try | ||||
|                         { | ||||
|                             trk_parameters.dump_filename.append(boost::lexical_cast<std::string>(d_channel)); | ||||
|                             trk_parameters.dump_filename.append(".dat"); | ||||
|                             d_dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||
|                             d_dump_file.open(trk_parameters.dump_filename.c_str(), std::ios::out | std::ios::binary); | ||||
|                             LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << trk_parameters.dump_filename.c_str(); | ||||
|                             d_dump_file.open(dump_filename_.c_str(), std::ios::out | std::ios::binary); | ||||
|                             LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << dump_filename_.c_str(); | ||||
|                         } | ||||
|                     catch (const std::ifstream::failure &e) | ||||
|                         { | ||||
|   | ||||
| @@ -195,6 +195,9 @@ private: | ||||
|  | ||||
|     // file dump | ||||
|     std::ofstream d_dump_file; | ||||
|     std::string d_dump_filename; | ||||
|     bool d_dump; | ||||
|     bool d_dump_mat; | ||||
|  | ||||
|     // extra | ||||
|     int32_t d_correlation_length_samples; | ||||
|   | ||||
| @@ -41,7 +41,8 @@ Dll_Pll_Conf::Dll_Pll_Conf() | ||||
|     fs_in = 0.0; | ||||
|     vector_length = 0U; | ||||
|     dump = false; | ||||
|     dump_filename = "./dll_pll_dump.dat"; | ||||
|     dump_mat = true; | ||||
|     dump_filename = std::string("./dll_pll_dump.dat"); | ||||
|     pll_pull_in_bw_hz = 50.0; | ||||
|     dll_pull_in_bw_hz = 3.0; | ||||
|     pll_bw_hz = 35.0; | ||||
|   | ||||
| @@ -38,12 +38,12 @@ | ||||
|  | ||||
| class Dll_Pll_Conf | ||||
| { | ||||
| private: | ||||
| public: | ||||
|     /* DLL/PLL tracking configuration */ | ||||
|     double fs_in; | ||||
|     uint32_t vector_length; | ||||
|     bool dump; | ||||
|     bool dump_mat; | ||||
|     std::string dump_filename; | ||||
|     float pll_pull_in_bw_hz; | ||||
|     float dll_pull_in_bw_hz; | ||||
|   | ||||
| @@ -35,35 +35,12 @@ | ||||
|  | ||||
| Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() | ||||
| { | ||||
|     //    /* DLL/PLL tracking configuration */ | ||||
|     //    fs_in = 0.0; | ||||
|     //    vector_length = 0; | ||||
|     //    dump = false; | ||||
|     //    dump_filename = "./dll_pll_dump.dat"; | ||||
|     //    pll_bw_hz = 40.0; | ||||
|     //    dll_bw_hz = 2.0; | ||||
|     //    pll_bw_narrow_hz = 5.0; | ||||
|     //    dll_bw_narrow_hz = 0.75; | ||||
|     //    early_late_space_chips = 0.5; | ||||
|     //    very_early_late_space_chips = 0.5; | ||||
|     //    early_late_space_narrow_chips = 0.1; | ||||
|     //    very_early_late_space_narrow_chips = 0.1; | ||||
|     //    extend_correlation_symbols = 5; | ||||
|     //    cn0_samples = 20; | ||||
|     //    carrier_lock_det_mav_samples = 20; | ||||
|     //    cn0_min = 25; | ||||
|     //    max_lock_fail = 50; | ||||
|     //    carrier_lock_th = 0.85; | ||||
|     //    track_pilot = false; | ||||
|     //    system = 'G'; | ||||
|     //    char sig_[3] = "1C"; | ||||
|     //    std::memcpy(signal, sig_, 3); | ||||
|  | ||||
|     /* DLL/PLL tracking configuration */ | ||||
|     fs_in = 0.0; | ||||
|     vector_length = 0U; | ||||
|     dump = false; | ||||
|     dump_filename = "./dll_pll_dump.dat"; | ||||
|     dump_mat = true; | ||||
|     dump_filename = std::string("./dll_pll_dump.dat"); | ||||
|     pll_bw_hz = 40.0; | ||||
|     dll_bw_hz = 2.0; | ||||
|     pll_bw_narrow_hz = 5.0; | ||||
| @@ -86,6 +63,6 @@ Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() | ||||
|     multicorr_type = 0U; | ||||
|     code_length_chips = 0U; | ||||
|     code_samples_per_chip = 0U; | ||||
|     //int32_t* ca_codes; | ||||
|     //int32_t* data_codes; | ||||
|     ca_codes = nullptr; | ||||
|     data_codes = nullptr; | ||||
| } | ||||
|   | ||||
| @@ -38,35 +38,12 @@ | ||||
|  | ||||
| class Dll_Pll_Conf_Fpga | ||||
| { | ||||
| private: | ||||
| public: | ||||
|     //    /* DLL/PLL tracking configuration */ | ||||
|     //    double fs_in; | ||||
|     //    uint32_t  vector_length; | ||||
|     //    bool dump; | ||||
|     //    std::string dump_filename; | ||||
|     //    float pll_bw_hz; | ||||
|     //    float dll_bw_hz; | ||||
|     //    float pll_bw_narrow_hz; | ||||
|     //    float dll_bw_narrow_hz; | ||||
|     //    float early_late_space_chips; | ||||
|     //    float very_early_late_space_chips; | ||||
|     //    float early_late_space_narrow_chips; | ||||
|     //    float very_early_late_space_narrow_chips; | ||||
|     //    int32_t extend_correlation_symbols; | ||||
|     //    int32_t cn0_samples; | ||||
|     //    int32_t carrier_lock_det_mav_samples; | ||||
|     //    int32_t cn0_min; | ||||
|     //    int32_t max_lock_fail; | ||||
|     //    double carrier_lock_th; | ||||
|     //    bool track_pilot; | ||||
|     //    char system; | ||||
|     //    char signal[3]; | ||||
|  | ||||
|     /* DLL/PLL tracking configuration */ | ||||
|     double fs_in; | ||||
|     uint32_t vector_length; | ||||
|     bool dump; | ||||
|     bool dump_mat; | ||||
|     std::string dump_filename; | ||||
|     float pll_bw_hz; | ||||
|     float dll_bw_hz; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez