mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-31 07:13:03 +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_cc.cc | ||||||
|         conjugate_sc.cc |         conjugate_sc.cc | ||||||
|         conjugate_ic.cc |         conjugate_ic.cc | ||||||
|  |         gnss_sdr_create_directory.cc | ||||||
| ) | ) | ||||||
|  |  | ||||||
| set(GNSS_SPLIBS_HEADERS | set(GNSS_SPLIBS_HEADERS | ||||||
| @@ -60,6 +61,7 @@ set(GNSS_SPLIBS_HEADERS | |||||||
|         conjugate_cc.h |         conjugate_cc.h | ||||||
|         conjugate_sc.h |         conjugate_sc.h | ||||||
|         conjugate_ic.h |         conjugate_ic.h | ||||||
|  |         gnss_sdr_create_directory.h | ||||||
|         gnss_circular_deque.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; |     trk_param.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param.dump = dump; |     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); |     trk_param.high_dyn = configuration->property(role + ".high_dyn", false); | ||||||
|     if (configuration->property(role + ".smoother_length", 10) < 1) |     if (configuration->property(role + ".smoother_length", 10) < 1) | ||||||
|         { |         { | ||||||
| @@ -109,9 +114,6 @@ GalileoE1DllPllVemlTracking::GalileoE1DllPllVemlTracking( | |||||||
|         } |         } | ||||||
|     trk_param.track_pilot = track_pilot; |     trk_param.track_pilot = track_pilot; | ||||||
|     trk_param.extend_correlation_symbols = extend_correlation_symbols; |     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)); |     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.vector_length = vector_length; | ||||||
|     trk_param.system = 'E'; |     trk_param.system = 'E'; | ||||||
|   | |||||||
| @@ -65,6 +65,11 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( | |||||||
|     trk_param_fpga.fs_in = fs_in; |     trk_param_fpga.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param_fpga.dump = dump; |     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); |     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); |     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; |     trk_param_fpga.pll_bw_hz = pll_bw_hz; | ||||||
| @@ -102,9 +107,6 @@ GalileoE1DllPllVemlTrackingFpga::GalileoE1DllPllVemlTrackingFpga( | |||||||
|     trk_param_fpga.track_pilot = track_pilot; |     trk_param_fpga.track_pilot = track_pilot; | ||||||
|     d_track_pilot = track_pilot; |     d_track_pilot = track_pilot; | ||||||
|     trk_param_fpga.extend_correlation_symbols = extend_correlation_symbols; |     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)); |     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.vector_length = vector_length; | ||||||
|     trk_param_fpga.system = 'E'; |     trk_param_fpga.system = 'E'; | ||||||
|   | |||||||
| @@ -63,6 +63,11 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( | |||||||
|     trk_param.fs_in = fs_in; |     trk_param.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param.dump = dump; |     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); |     trk_param.high_dyn = configuration->property(role + ".high_dyn", false); | ||||||
|     if (configuration->property(role + ".smoother_length", 10) < 1) |     if (configuration->property(role + ".smoother_length", 10) < 1) | ||||||
|         { |         { | ||||||
| @@ -85,9 +90,6 @@ GalileoE5aDllPllTracking::GalileoE5aDllPllTracking( | |||||||
|     trk_param.dll_bw_narrow_hz = dll_bw_narrow_hz; |     trk_param.dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); |     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_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)); |     int vector_length = std::round(fs_in / (Galileo_E5a_CODE_CHIP_RATE_HZ / Galileo_E5a_CODE_LENGTH_CHIPS)); | ||||||
|     trk_param.vector_length = vector_length; |     trk_param.vector_length = vector_length; | ||||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); |     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -67,6 +67,11 @@ GalileoE5aDllPllTrackingFpga::GalileoE5aDllPllTrackingFpga( | |||||||
|     trk_param_fpga.fs_in = fs_in; |     trk_param_fpga.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param_fpga.dump = dump; |     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); |     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); |     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; |     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; |     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); |     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_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)); |     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; |     trk_param_fpga.vector_length = vector_length; | ||||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); |     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -74,6 +74,11 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( | |||||||
|         } |         } | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param.dump = dump; |     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); |     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); |     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; |     trk_param.pll_bw_hz = pll_bw_hz; | ||||||
| @@ -88,9 +93,6 @@ GpsL1CaDllPllTracking::GpsL1CaDllPllTracking( | |||||||
|     trk_param.early_late_space_chips = early_late_space_chips; |     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); |     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; |     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)); |     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; |     trk_param.vector_length = vector_length; | ||||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); |     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -67,6 +67,11 @@ GpsL1CaDllPllTrackingFpga::GpsL1CaDllPllTrackingFpga( | |||||||
|     trk_param_fpga.fs_in = fs_in; |     trk_param_fpga.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param_fpga.dump = dump; |     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); |     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); |     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; |     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; |     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); |     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; |     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)); |     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; |     trk_param_fpga.vector_length = vector_length; | ||||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); |     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -63,6 +63,11 @@ GpsL2MDllPllTracking::GpsL2MDllPllTracking( | |||||||
|     trk_param.fs_in = fs_in; |     trk_param.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param.dump = dump; |     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); |     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); |     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; |     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); |     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_chips = early_late_space_chips; | ||||||
|     trk_param.early_late_space_narrow_chips = 0.0; |     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))); |     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; |     trk_param.vector_length = vector_length; | ||||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); |     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -66,6 +66,11 @@ GpsL2MDllPllTrackingFpga::GpsL2MDllPllTrackingFpga( | |||||||
|     trk_param_fpga.fs_in = fs_in; |     trk_param_fpga.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param_fpga.dump = dump; |     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); |     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); |     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; |     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); |     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_chips = early_late_space_chips; | ||||||
|     trk_param_fpga.early_late_space_narrow_chips = 0.0; |     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))); |     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; |     trk_param_fpga.vector_length = vector_length; | ||||||
|     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); |     int symbols_extended_correlator = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -63,6 +63,11 @@ GpsL5DllPllTracking::GpsL5DllPllTracking( | |||||||
|     trk_param.fs_in = fs_in; |     trk_param.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param.dump = dump; |     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); |     trk_param.high_dyn = configuration->property(role + ".high_dyn", false); | ||||||
|     if (configuration->property(role + ".smoother_length", 10) < 1) |     if (configuration->property(role + ".smoother_length", 10) < 1) | ||||||
|         { |         { | ||||||
| @@ -85,9 +90,6 @@ GpsL5DllPllTracking::GpsL5DllPllTracking( | |||||||
|     trk_param.dll_bw_narrow_hz = dll_bw_narrow_hz; |     trk_param.dll_bw_narrow_hz = dll_bw_narrow_hz; | ||||||
|     float early_late_space_chips = configuration->property(role + ".early_late_space_chips", 0.5); |     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_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))); |     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; |     trk_param.vector_length = vector_length; | ||||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); |     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -67,6 +67,11 @@ GpsL5DllPllTrackingFpga::GpsL5DllPllTrackingFpga( | |||||||
|     trk_param_fpga.fs_in = fs_in; |     trk_param_fpga.fs_in = fs_in; | ||||||
|     bool dump = configuration->property(role + ".dump", false); |     bool dump = configuration->property(role + ".dump", false); | ||||||
|     trk_param_fpga.dump = dump; |     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); |     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); |     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; |     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; |     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); |     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_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))); |     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; |     trk_param_fpga.vector_length = vector_length; | ||||||
|     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); |     int extend_correlation_symbols = configuration->property(role + ".extend_correlation_symbols", 1); | ||||||
|   | |||||||
| @@ -49,6 +49,7 @@ | |||||||
| #include "gps_l2c_signal.h" | #include "gps_l2c_signal.h" | ||||||
| #include "GPS_L5.h" | #include "GPS_L5.h" | ||||||
| #include "gps_l5_signal.h" | #include "gps_l5_signal.h" | ||||||
|  | #include "gnss_sdr_create_directory.h" | ||||||
| #include <boost/lexical_cast.hpp> | #include <boost/lexical_cast.hpp> | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| #include <gnuradio/io_signature.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_carr_ph_history.resize(1); | ||||||
|             d_code_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(); |                     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(); |             save_matfile(); | ||||||
|             if (d_channel == 0) |  | ||||||
|                 { |  | ||||||
|                     std::cout << " done." << std::endl; |  | ||||||
|                 } |  | ||||||
|         } |         } | ||||||
|     try |     try | ||||||
|         { |         { | ||||||
| @@ -928,7 +957,7 @@ void dll_pll_veml_tracking::save_correlation_results() | |||||||
|  |  | ||||||
| void dll_pll_veml_tracking::log_data(bool integrating) | void dll_pll_veml_tracking::log_data(bool integrating) | ||||||
| { | { | ||||||
|     if (trk_parameters.dump) |     if (d_dump) | ||||||
|         { |         { | ||||||
|             // Dump results to file |             // Dump results to file | ||||||
|             float prompt_I; |             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 + |     int32_t epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars + | ||||||
|                                sizeof(float) * number_of_float_vars + sizeof(uint32_t); |                                sizeof(float) * number_of_float_vars + sizeof(uint32_t); | ||||||
|     std::ifstream dump_file; |     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); |     dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||||
|     try |     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) |     catch (const std::ifstream::failure &e) | ||||||
|         { |         { | ||||||
| @@ -1168,7 +1203,7 @@ int32_t dll_pll_veml_tracking::save_matfile() | |||||||
|     // WRITE MAT FILE |     // WRITE MAT FILE | ||||||
|     mat_t *matfp; |     mat_t *matfp; | ||||||
|     matvar_t *matvar; |     matvar_t *matvar; | ||||||
|     std::string filename = trk_parameters.dump_filename; |     std::string filename = dump_filename_; | ||||||
|     filename.erase(filename.length() - 4, 4); |     filename.erase(filename.length() - 4, 4); | ||||||
|     filename.append(".mat"); |     filename.append(".mat"); | ||||||
|     matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73); |     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; |     d_channel = channel; | ||||||
|     LOG(INFO) << "Tracking Channel set to " << d_channel; |     LOG(INFO) << "Tracking Channel set to " << d_channel; | ||||||
|     // ############# ENABLE DATA FILE LOG ################# |     // ############# 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()) |             if (!d_dump_file.is_open()) | ||||||
|                 { |                 { | ||||||
|                     try |                     try | ||||||
|                         { |                         { | ||||||
|                             trk_parameters.dump_filename.append(boost::lexical_cast<std::string>(d_channel)); |                             //trk_parameters.dump_filename.append(boost::lexical_cast<std::string>(d_channel)); | ||||||
|                             trk_parameters.dump_filename.append(".dat"); |                             //trk_parameters.dump_filename.append(".dat"); | ||||||
|                             d_dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); |                             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); |                             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: " << trk_parameters.dump_filename.c_str(); |                             LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << dump_filename_.c_str(); | ||||||
|                         } |                         } | ||||||
|                     catch (const std::ifstream::failure &e) |                     catch (const std::ifstream::failure &e) | ||||||
|                         { |                         { | ||||||
|   | |||||||
| @@ -196,6 +196,9 @@ private: | |||||||
|  |  | ||||||
|     // file dump |     // file dump | ||||||
|     std::ofstream d_dump_file; |     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 | #endif  // GNSS_SDR_DLL_PLL_VEML_TRACKING_H | ||||||
|   | |||||||
| @@ -47,6 +47,7 @@ | |||||||
| #include "gps_l2c_signal.h" | #include "gps_l2c_signal.h" | ||||||
| #include "GPS_L5.h" | #include "GPS_L5.h" | ||||||
| #include "gps_l5_signal.h" | #include "gps_l5_signal.h" | ||||||
|  | #include "gnss_sdr_create_directory.h" | ||||||
| #include <boost/lexical_cast.hpp> | #include <boost/lexical_cast.hpp> | ||||||
| #include <glog/logging.h> | #include <glog/logging.h> | ||||||
| #include <gnuradio/io_signature.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); |     multicorrelator_fpga->set_output_vectors(d_correlator_outs, d_Prompt_Data); | ||||||
|  |  | ||||||
|     d_pull_in = 0; |     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(); |                     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(); |             save_matfile(); | ||||||
|             if (d_channel == 0) |  | ||||||
|                 { |  | ||||||
|                     std::cout << " done." << std::endl; |  | ||||||
|                 } |  | ||||||
|         } |         } | ||||||
|     try |     try | ||||||
|         { |         { | ||||||
| @@ -842,7 +871,7 @@ void dll_pll_veml_tracking_fpga::save_correlation_results() | |||||||
|  |  | ||||||
| void dll_pll_veml_tracking_fpga::log_data(bool integrating) | void dll_pll_veml_tracking_fpga::log_data(bool integrating) | ||||||
| { | { | ||||||
|     if (trk_parameters.dump) |     if (d_dump) | ||||||
|         { |         { | ||||||
|             // Dump results to file |             // Dump results to file | ||||||
|             float prompt_I; |             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 + |     int32_t epoch_size_bytes = sizeof(uint64_t) + sizeof(double) * number_of_double_vars + | ||||||
|                                sizeof(float) * number_of_float_vars + sizeof(uint32_t); |                                sizeof(float) * number_of_float_vars + sizeof(uint32_t); | ||||||
|     std::ifstream dump_file; |     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); |     dump_file.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||||
|     try |     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) |     catch (const std::ifstream::failure &e) | ||||||
|         { |         { | ||||||
| @@ -1070,7 +1105,7 @@ int32_t dll_pll_veml_tracking_fpga::save_matfile() | |||||||
|     // WRITE MAT FILE |     // WRITE MAT FILE | ||||||
|     mat_t *matfp; |     mat_t *matfp; | ||||||
|     matvar_t *matvar; |     matvar_t *matvar; | ||||||
|     std::string filename = trk_parameters.dump_filename; |     std::string filename = dump_filename_; | ||||||
|     filename.erase(filename.length() - 4, 4); |     filename.erase(filename.length() - 4, 4); | ||||||
|     filename.append(".mat"); |     filename.append(".mat"); | ||||||
|     matfp = Mat_CreateVer(filename.c_str(), NULL, MAT_FT_MAT73); |     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); |     multicorrelator_fpga->set_channel(d_channel); | ||||||
|     LOG(INFO) << "Tracking Channel set to " << d_channel; |     LOG(INFO) << "Tracking Channel set to " << d_channel; | ||||||
|     // ############# ENABLE DATA FILE LOG ################# |     // ############# 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()) |             if (!d_dump_file.is_open()) | ||||||
|                 { |                 { | ||||||
|                     try |                     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.exceptions(std::ifstream::failbit | std::ifstream::badbit); | ||||||
|                             d_dump_file.open(trk_parameters.dump_filename.c_str(), std::ios::out | std::ios::binary); |                             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: " << trk_parameters.dump_filename.c_str(); |                             LOG(INFO) << "Tracking dump enabled on channel " << d_channel << " Log file: " << dump_filename_.c_str(); | ||||||
|                         } |                         } | ||||||
|                     catch (const std::ifstream::failure &e) |                     catch (const std::ifstream::failure &e) | ||||||
|                         { |                         { | ||||||
|   | |||||||
| @@ -195,6 +195,9 @@ private: | |||||||
|  |  | ||||||
|     // file dump |     // file dump | ||||||
|     std::ofstream d_dump_file; |     std::ofstream d_dump_file; | ||||||
|  |     std::string d_dump_filename; | ||||||
|  |     bool d_dump; | ||||||
|  |     bool d_dump_mat; | ||||||
|  |  | ||||||
|     // extra |     // extra | ||||||
|     int32_t d_correlation_length_samples; |     int32_t d_correlation_length_samples; | ||||||
|   | |||||||
| @@ -41,7 +41,8 @@ Dll_Pll_Conf::Dll_Pll_Conf() | |||||||
|     fs_in = 0.0; |     fs_in = 0.0; | ||||||
|     vector_length = 0U; |     vector_length = 0U; | ||||||
|     dump = false; |     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; |     pll_pull_in_bw_hz = 50.0; | ||||||
|     dll_pull_in_bw_hz = 3.0; |     dll_pull_in_bw_hz = 3.0; | ||||||
|     pll_bw_hz = 35.0; |     pll_bw_hz = 35.0; | ||||||
|   | |||||||
| @@ -38,12 +38,12 @@ | |||||||
|  |  | ||||||
| class Dll_Pll_Conf | class Dll_Pll_Conf | ||||||
| { | { | ||||||
| private: |  | ||||||
| public: | public: | ||||||
|     /* DLL/PLL tracking configuration */ |     /* DLL/PLL tracking configuration */ | ||||||
|     double fs_in; |     double fs_in; | ||||||
|     uint32_t vector_length; |     uint32_t vector_length; | ||||||
|     bool dump; |     bool dump; | ||||||
|  |     bool dump_mat; | ||||||
|     std::string dump_filename; |     std::string dump_filename; | ||||||
|     float pll_pull_in_bw_hz; |     float pll_pull_in_bw_hz; | ||||||
|     float dll_pull_in_bw_hz; |     float dll_pull_in_bw_hz; | ||||||
|   | |||||||
| @@ -35,35 +35,12 @@ | |||||||
|  |  | ||||||
| Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() | 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 */ |     /* DLL/PLL tracking configuration */ | ||||||
|     fs_in = 0.0; |     fs_in = 0.0; | ||||||
|     vector_length = 0U; |     vector_length = 0U; | ||||||
|     dump = false; |     dump = false; | ||||||
|     dump_filename = "./dll_pll_dump.dat"; |     dump_mat = true; | ||||||
|  |     dump_filename = std::string("./dll_pll_dump.dat"); | ||||||
|     pll_bw_hz = 40.0; |     pll_bw_hz = 40.0; | ||||||
|     dll_bw_hz = 2.0; |     dll_bw_hz = 2.0; | ||||||
|     pll_bw_narrow_hz = 5.0; |     pll_bw_narrow_hz = 5.0; | ||||||
| @@ -86,6 +63,6 @@ Dll_Pll_Conf_Fpga::Dll_Pll_Conf_Fpga() | |||||||
|     multicorr_type = 0U; |     multicorr_type = 0U; | ||||||
|     code_length_chips = 0U; |     code_length_chips = 0U; | ||||||
|     code_samples_per_chip = 0U; |     code_samples_per_chip = 0U; | ||||||
|     //int32_t* ca_codes; |     ca_codes = nullptr; | ||||||
|     //int32_t* data_codes; |     data_codes = nullptr; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -38,35 +38,12 @@ | |||||||
|  |  | ||||||
| class Dll_Pll_Conf_Fpga | class Dll_Pll_Conf_Fpga | ||||||
| { | { | ||||||
| private: |  | ||||||
| public: | 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 */ |     /* DLL/PLL tracking configuration */ | ||||||
|     double fs_in; |     double fs_in; | ||||||
|     uint32_t vector_length; |     uint32_t vector_length; | ||||||
|     bool dump; |     bool dump; | ||||||
|  |     bool dump_mat; | ||||||
|     std::string dump_filename; |     std::string dump_filename; | ||||||
|     float pll_bw_hz; |     float pll_bw_hz; | ||||||
|     float dll_bw_hz; |     float dll_bw_hz; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Carles Fernandez
					Carles Fernandez