mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-01-29 02:14:51 +00:00
Modify CNAV GPS L5 files
This commit is contained in:
commit
e9e8de7d40
186
src/core/system_parameters/GPS_L5.h
Normal file
186
src/core/system_parameters/GPS_L5.h
Normal file
@ -0,0 +1,186 @@
|
|||||||
|
/*!
|
||||||
|
* \file GPS_L5.h
|
||||||
|
* \brief Defines system parameters for GPS L5 signal
|
||||||
|
* \author Javier Arribas, 2017. jarribas(at)cttc.es
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010-2017 (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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* -------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef GNSS_SDR_GPS_L5_H_
|
||||||
|
#define GNSS_SDR_GPS_L5_H_
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
#include <vector>
|
||||||
|
#include <utility> // std::pair
|
||||||
|
#include "MATH_CONSTANTS.h"
|
||||||
|
#include "gnss_frequencies.h"
|
||||||
|
#include "GPS_L2C.h"
|
||||||
|
|
||||||
|
// Physical constants
|
||||||
|
const double GPS_L5_C_m_s = 299792458.0; //!< The speed of light, [m/s]
|
||||||
|
const double GPS_L5_C_m_ms = 299792.4580; //!< The speed of light, [m/ms]
|
||||||
|
const double GPS_L5_PI = 3.1415926535898; //!< Pi as defined in IS-GPS-200E
|
||||||
|
const double GPS_L5_TWO_PI = 6.283185307179586;//!< 2Pi as defined in IS-GPS-200E
|
||||||
|
const double GPS_L5_OMEGA_EARTH_DOT = 7.2921151467e-5; //!< Earth rotation rate, [rad/s]
|
||||||
|
const double GPS_L5_GM = 3.986005e14; //!< Universal gravitational constant times the mass of the Earth, [m^3/s^2]
|
||||||
|
const double GPS_L5_F = -4.442807633e-10; //!< Constant, [s/(m)^(1/2)]
|
||||||
|
|
||||||
|
|
||||||
|
// carrier and code frequencies
|
||||||
|
const double GPS_L5_FREQ_HZ = FREQ5; //!< L5 [Hz]
|
||||||
|
|
||||||
|
const double GPS_L5i_CODE_RATE_HZ = 10.23e6; //!< GPS L5i code rate [chips/s]
|
||||||
|
const int GPS_L5i_CODE_LENGTH_CHIPS = 10230; //!< GPS L5i code length [chips]
|
||||||
|
const double GPS_L5i_PERIOD = 0.001; //!< GPS L5 code period [seconds]
|
||||||
|
|
||||||
|
const double GPS_L5q_CODE_RATE_HZ = 10.23e6; //!< GPS L5i code rate [chips/s]
|
||||||
|
const int GPS_L5q_CODE_LENGTH_CHIPS = 10230; //!< GPS L5i code length [chips]
|
||||||
|
const double GPS_L5q_PERIOD = 0.001; //!< GPS L5 code period [seconds]
|
||||||
|
|
||||||
|
const int GPS_L5_HISTORY_DEEP = 5;
|
||||||
|
|
||||||
|
const int32_t GPS_L5i_INIT_REG[210] =
|
||||||
|
{266, 365, 804, 1138,
|
||||||
|
1509, 1559, 1756, 2084,
|
||||||
|
2170, 2303, 2527, 2687,
|
||||||
|
2930, 3471, 3940, 4132,
|
||||||
|
4332, 4924, 5343, 5443,
|
||||||
|
5641, 5816, 5898, 5918,
|
||||||
|
5955, 6243, 6345, 6477,
|
||||||
|
6518, 6875, 7168, 7187,
|
||||||
|
7329, 7577, 7720, 7777,
|
||||||
|
8057, 5358, 3550, 3412,
|
||||||
|
819,
|
||||||
|
4608, 3698, 962, 3001,
|
||||||
|
4441, 4937, 3717, 4730,
|
||||||
|
7291, 2279, 7613, 5723,
|
||||||
|
7030, 1475, 2593, 2904,
|
||||||
|
2056, 2757, 3756, 6205,
|
||||||
|
5053, 6437,
|
||||||
|
7789, 2311, 7432, 5155,
|
||||||
|
1593, 5841, 5014, 1545,
|
||||||
|
3016, 4875, 2119, 229,
|
||||||
|
7634, 1406, 4506, 1819,
|
||||||
|
7580, 5446, 6053, 7958,
|
||||||
|
5267, 2956, 3544, 1277,
|
||||||
|
2996, 1758, 3360, 2718,
|
||||||
|
3754, 7440, 2781, 6756,
|
||||||
|
7314, 208, 5252, 696,
|
||||||
|
527, 1399, 5879, 6868,
|
||||||
|
217, 7681, 3788, 1337,
|
||||||
|
2424, 4243, 5686, 1955,
|
||||||
|
4791, 492, 1518, 6566,
|
||||||
|
5349, 506, 113, 1953,
|
||||||
|
2797, 934, 3023, 3632,
|
||||||
|
1330, 4909, 4867, 1183,
|
||||||
|
3990, 6217, 1224, 1733,
|
||||||
|
2319, 3928, 2380, 841,
|
||||||
|
5049, 7027, 1197, 7208,
|
||||||
|
8000, 152, 6762, 3745,
|
||||||
|
4723, 5502, 4796, 123,
|
||||||
|
8142, 5091, 7875, 330,
|
||||||
|
5272, 4912, 374, 2045,
|
||||||
|
6616, 6321, 7605, 2570,
|
||||||
|
2419, 1234, 1922, 4317,
|
||||||
|
5110, 825, 958, 1089,
|
||||||
|
7813, 6058, 7703, 6702,
|
||||||
|
1714, 6371, 2281, 1986,
|
||||||
|
6282, 3201, 3760, 1056,
|
||||||
|
6233, 1150, 2823, 6250,
|
||||||
|
645, 2401, 1639, 2946,
|
||||||
|
7091, 923, 7045, 6493,
|
||||||
|
1706, 5836, 926, 6086,
|
||||||
|
950, 5905, 3240, 6675,
|
||||||
|
3197, 1555, 3589, 4555,
|
||||||
|
5671, 6948, 4664, 2086,
|
||||||
|
5950, 5521, 1515};
|
||||||
|
|
||||||
|
|
||||||
|
const int32_t GPS_L5q_INIT_REG[210] =
|
||||||
|
{
|
||||||
|
1701, 323, 5292, 2020,
|
||||||
|
5429, 7136, 1041, 5947,
|
||||||
|
4315, 148, 535, 1939,
|
||||||
|
5206, 5910, 3595, 5135,
|
||||||
|
6082, 6990, 3546, 1523,
|
||||||
|
4548, 4484, 1893, 3961,
|
||||||
|
7106, 5299, 4660, 276,
|
||||||
|
4389, 3783, 1591, 1601,
|
||||||
|
749, 1387, 1661, 3210,
|
||||||
|
708,
|
||||||
|
4226, 5604, 6375, 3056,
|
||||||
|
1772, 3662, 4401, 5218,
|
||||||
|
2838, 6913, 1685, 1194,
|
||||||
|
6963, 5001, 6694, 991,
|
||||||
|
7489, 2441, 639, 2097,
|
||||||
|
2498, 6470, 2399, 242,
|
||||||
|
3768, 1186,
|
||||||
|
5246, 4259, 5907, 3870,
|
||||||
|
3262, 7387, 3069, 2999,
|
||||||
|
7993, 7849, 4157, 5031,
|
||||||
|
5986, 4833, 5739, 7846,
|
||||||
|
898, 2022, 7446, 6404,
|
||||||
|
155, 7862, 7795, 6121,
|
||||||
|
4840, 6585, 429, 6020,
|
||||||
|
200, 1664, 1499, 7298,
|
||||||
|
1305, 7323, 7544, 4438,
|
||||||
|
2485, 3387, 7319, 1853,
|
||||||
|
5781, 1874, 7555, 2132,
|
||||||
|
6441, 6722, 1192, 2588,
|
||||||
|
2188, 297, 1540, 4138,
|
||||||
|
5231, 4789, 659, 871,
|
||||||
|
6837, 1393, 7383, 611,
|
||||||
|
4920, 5416, 1611, 2474,
|
||||||
|
118, 1382, 1092, 7950,
|
||||||
|
7223, 1769, 4721, 1252,
|
||||||
|
5147, 2165, 7897, 4054,
|
||||||
|
3498, 6571, 2858, 8126,
|
||||||
|
7017, 1901, 181, 1114,
|
||||||
|
5195, 7479, 4186, 3904,
|
||||||
|
7128, 1396, 4513, 5967,
|
||||||
|
2580, 2575, 7961, 2598,
|
||||||
|
4508, 2090, 3685, 7748,
|
||||||
|
684, 913, 5558, 2894,
|
||||||
|
5858, 6432, 3813, 3573,
|
||||||
|
7523, 5280, 3376, 7424,
|
||||||
|
2918, 5793, 1747, 7079,
|
||||||
|
2921, 2490, 4119, 3373,
|
||||||
|
977, 681, 4273, 5419,
|
||||||
|
5626, 1266, 5804, 2414,
|
||||||
|
6444, 4757, 427, 5452,
|
||||||
|
5182, 6606, 6531, 4268,
|
||||||
|
3115, 6835, 862, 4856,
|
||||||
|
2765, 37, 1943, 7977,
|
||||||
|
2512, 4451, 4071};
|
||||||
|
|
||||||
|
const int GPS_L5_CNAV_DATA_PAGE_BITS = 300; //!< GPS L5 CNAV page length, including preamble and CRC [bits]
|
||||||
|
const int GPS_L5_SYMBOLS_PER_BIT = 2;
|
||||||
|
const int GPS_L5_SAMPLES_PER_SYMBOL = 1;
|
||||||
|
const int GPS_L5_CNAV_DATA_PAGE_SYMBOLS = 600;
|
||||||
|
const int GPS_L5_CNAV_DATA_PAGE_DURATION_S = 6;
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* GNSS_SDR_GPS_L5_H_ */
|
@ -188,7 +188,6 @@ void Gps_CNAV_Navigation_Message::decode_page(std::bitset<GPS_L2_CNAV_DATA_PAGE_
|
|||||||
|
|
||||||
page_type = static_cast<int>(read_navigation_unsigned(data_bits, CNAV_MSG_TYPE));
|
page_type = static_cast<int>(read_navigation_unsigned(data_bits, CNAV_MSG_TYPE));
|
||||||
|
|
||||||
//std::cout << "PRN=" << PRN << " TOW=" << d_TOW << " alert_flag=" << alert_flag << " page_type= " << page_type << std::endl;
|
|
||||||
switch(page_type)
|
switch(page_type)
|
||||||
{
|
{
|
||||||
case 10: // Ephemeris 1/2
|
case 10: // Ephemeris 1/2
|
||||||
|
@ -39,6 +39,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include "GPS_L2C.h"
|
#include "GPS_L2C.h"
|
||||||
|
#include "GPS_L5.h"
|
||||||
#include "gps_cnav_ephemeris.h"
|
#include "gps_cnav_ephemeris.h"
|
||||||
#include "gps_cnav_iono.h"
|
#include "gps_cnav_iono.h"
|
||||||
#include "gps_cnav_utc_model.h"
|
#include "gps_cnav_utc_model.h"
|
||||||
|
@ -64,7 +64,7 @@ DEFINE_string(configuration_file, "./default_configuration.conf", "Path of confi
|
|||||||
DEFINE_string(filename_rinex_true, "./default_rinex.txt", "Path of RINEX true observations");
|
DEFINE_string(filename_rinex_true, "./default_rinex.txt", "Path of RINEX true observations");
|
||||||
DEFINE_string(filename_rinex_obs, "default_string", "Path of RINEX true observations");
|
DEFINE_string(filename_rinex_obs, "default_string", "Path of RINEX true observations");
|
||||||
DEFINE_double(pr_error_mean_max, 25.0, "Maximum mean error in pseudorange");
|
DEFINE_double(pr_error_mean_max, 25.0, "Maximum mean error in pseudorange");
|
||||||
DEFINE_double(pr_error_std_max, 5.0, "Maximum standard deviation in pseudorange");
|
DEFINE_double(pr_error_std_max, 15.0, "Maximum standard deviation in pseudorange");
|
||||||
DEFINE_double(cp_error_mean_max, 5.0, "Maximum mean error in carrier phase");
|
DEFINE_double(cp_error_mean_max, 5.0, "Maximum mean error in carrier phase");
|
||||||
DEFINE_double(cp_error_std_max, 2.5, "Maximum standard deviation in carrier phase");
|
DEFINE_double(cp_error_std_max, 2.5, "Maximum standard deviation in carrier phase");
|
||||||
DEFINE_double(dp_error_mean_max, 75.0, "Maximum mean error in Doppler frequency");
|
DEFINE_double(dp_error_mean_max, 75.0, "Maximum mean error in Doppler frequency");
|
||||||
@ -330,7 +330,10 @@ void ObsSystemTest::read_rinex_files(
|
|||||||
meas_exist = true;
|
meas_exist = true;
|
||||||
} // End of 'if( pointer == roe.obs.end() )'
|
} // End of 'if( pointer == roe.obs.end() )'
|
||||||
} // end for
|
} // end for
|
||||||
|
if (!set_pr_min)
|
||||||
|
{
|
||||||
sow_prn_ref.insert_rows(sow_prn_ref.n_rows, arma::rowvec({sow_insert, pr_min, prn_min}));
|
sow_prn_ref.insert_rows(sow_prn_ref.n_rows, arma::rowvec({sow_insert, pr_min, prn_min}));
|
||||||
|
}
|
||||||
} // end while
|
} // end while
|
||||||
} // End of 'try' block
|
} // End of 'try' block
|
||||||
catch(const gpstk::FFStreamError& e)
|
catch(const gpstk::FFStreamError& e)
|
||||||
@ -405,10 +408,10 @@ void ObsSystemTest::time_alignment_diff_cp(
|
|||||||
index_ = arma::find(iter_meas->col(0) < iter_ref->at(iter_ref->n_rows - 1, 0));
|
index_ = arma::find(iter_meas->col(0) < iter_ref->at(iter_ref->n_rows - 1, 0));
|
||||||
arma::uword index_max = arma::max(index_);
|
arma::uword index_max = arma::max(index_);
|
||||||
mat_aux = iter_meas->rows(index_min, index_max);
|
mat_aux = iter_meas->rows(index_min, index_max);
|
||||||
mat_aux.col(1) -= arma::min(mat_aux.col(1));
|
mat_aux.col(1) -= mat_aux.col(1)(0);
|
||||||
arma::vec ref_aligned;
|
arma::vec ref_aligned;
|
||||||
arma::interp1(iter_ref->col(0), iter_ref->col(1), mat_aux.col(0), ref_aligned);
|
arma::interp1(iter_ref->col(0), iter_ref->col(1), mat_aux.col(0), ref_aligned);
|
||||||
ref_aligned -= arma::min(ref_aligned);
|
ref_aligned -= ref_aligned(0);
|
||||||
*iter_diff = ref_aligned - mat_aux.col(1);
|
*iter_diff = ref_aligned - mat_aux.col(1);
|
||||||
}
|
}
|
||||||
iter_ref++;
|
iter_ref++;
|
||||||
@ -543,13 +546,27 @@ void ObsSystemTest::compute_pseudorange_error(
|
|||||||
{
|
{
|
||||||
if(!iter_diff->is_empty())
|
if(!iter_diff->is_empty())
|
||||||
{
|
{
|
||||||
|
while(iter_diff->has_nan())
|
||||||
|
{
|
||||||
|
bool nan_found = false;
|
||||||
|
int k_aux = 0;
|
||||||
|
while(!nan_found)
|
||||||
|
{
|
||||||
|
if(!iter_diff->row(k_aux).is_finite())
|
||||||
|
{
|
||||||
|
nan_found = true;
|
||||||
|
iter_diff->shed_row(k_aux);
|
||||||
|
}
|
||||||
|
k_aux++;
|
||||||
|
}
|
||||||
|
}
|
||||||
double d_mean = std::sqrt(arma::mean(arma::square(*iter_diff)));
|
double d_mean = std::sqrt(arma::mean(arma::square(*iter_diff)));
|
||||||
means.push_back(d_mean);
|
means.push_back(d_mean);
|
||||||
double d_stddev = arma::stddev(*iter_diff);
|
double d_stddev = arma::stddev(*iter_diff);
|
||||||
stddevs.push_back(d_stddev);
|
stddevs.push_back(d_stddev);
|
||||||
prns.push_back(static_cast<double>(prn_id));
|
prns.push_back(static_cast<double>(prn_id));
|
||||||
std::cout << "-- RMS pseudorange difference for sat " << prn_id << ": " << d_mean;
|
std::cout << "-- RMS pseudorange difference for sat " << prn_id << ": " << d_mean;
|
||||||
std::cout << " +/- " << d_stddev;
|
std::cout << ". Std. dev.: " << d_stddev;
|
||||||
std::cout << " [m]" << std::endl;
|
std::cout << " [m]" << std::endl;
|
||||||
EXPECT_LT(d_mean, error_th_mean);
|
EXPECT_LT(d_mean, error_th_mean);
|
||||||
EXPECT_LT(d_stddev, error_th_std);
|
EXPECT_LT(d_stddev, error_th_std);
|
||||||
@ -581,8 +598,20 @@ void ObsSystemTest::compute_pseudorange_error(
|
|||||||
g1.set_ylabel("Pseudorange error [m]");
|
g1.set_ylabel("Pseudorange error [m]");
|
||||||
g1.plot_xy(prns, means, "RMS error");
|
g1.plot_xy(prns, means, "RMS error");
|
||||||
g1.plot_xy(prns, stddevs, "Standard deviation");
|
g1.plot_xy(prns, stddevs, "Standard deviation");
|
||||||
//g1.savetops("FFT_execution_times_extended");
|
size_t char_pos = signal_name.find(" ");
|
||||||
//g1.savetopdf("FFT_execution_times_extended", 18);
|
while(char_pos != std::string::npos)
|
||||||
|
{
|
||||||
|
signal_name.replace(char_pos, 1, "_");
|
||||||
|
char_pos = signal_name.find(" ");
|
||||||
|
}
|
||||||
|
char_pos = signal_name.find("/");
|
||||||
|
while(char_pos != std::string::npos)
|
||||||
|
{
|
||||||
|
signal_name.replace(char_pos, 1, "_");
|
||||||
|
char_pos = signal_name.find("/");
|
||||||
|
}
|
||||||
|
g1.savetops("Pseudorange_error_" + signal_name);
|
||||||
|
g1.savetopdf("Pseudorange_error_" + signal_name, 18);
|
||||||
g1.showonscreen(); // window output
|
g1.showonscreen(); // window output
|
||||||
}
|
}
|
||||||
catch (const GnuplotException & ge)
|
catch (const GnuplotException & ge)
|
||||||
@ -608,13 +637,27 @@ void ObsSystemTest::compute_carrierphase_error(
|
|||||||
{
|
{
|
||||||
if(!iter_diff->is_empty())
|
if(!iter_diff->is_empty())
|
||||||
{
|
{
|
||||||
|
while(iter_diff->has_nan())
|
||||||
|
{
|
||||||
|
bool nan_found = false;
|
||||||
|
int k_aux = 0;
|
||||||
|
while(!nan_found)
|
||||||
|
{
|
||||||
|
if(!iter_diff->row(k_aux).is_finite())
|
||||||
|
{
|
||||||
|
nan_found = true;
|
||||||
|
iter_diff->shed_row(k_aux);
|
||||||
|
}
|
||||||
|
k_aux++;
|
||||||
|
}
|
||||||
|
}
|
||||||
double d_mean = std::sqrt(arma::mean(arma::square(*iter_diff)));
|
double d_mean = std::sqrt(arma::mean(arma::square(*iter_diff)));
|
||||||
means.push_back(d_mean);
|
means.push_back(d_mean);
|
||||||
double d_stddev = arma::stddev(*iter_diff);
|
double d_stddev = arma::stddev(*iter_diff);
|
||||||
stddevs.push_back(d_stddev);
|
stddevs.push_back(d_stddev);
|
||||||
prns.push_back(static_cast<double>(prn_id));
|
prns.push_back(static_cast<double>(prn_id));
|
||||||
std::cout << "-- RMS carrier phase difference for sat " << prn_id << ": " << d_mean;
|
std::cout << "-- RMS carrier phase difference for sat " << prn_id << ": " << d_mean;
|
||||||
std::cout << " +/- " << d_stddev;
|
std::cout << ". Std. dev.: " << d_stddev;
|
||||||
std::cout << " whole cycles" << std::endl;
|
std::cout << " whole cycles" << std::endl;
|
||||||
EXPECT_LT(d_mean, error_th_mean);
|
EXPECT_LT(d_mean, error_th_mean);
|
||||||
EXPECT_LT(d_stddev, error_th_std);
|
EXPECT_LT(d_stddev, error_th_std);
|
||||||
@ -646,8 +689,20 @@ void ObsSystemTest::compute_carrierphase_error(
|
|||||||
g1.set_ylabel("Carrier phase error [whole cycles]");
|
g1.set_ylabel("Carrier phase error [whole cycles]");
|
||||||
g1.plot_xy(prns, means, "RMS error");
|
g1.plot_xy(prns, means, "RMS error");
|
||||||
g1.plot_xy(prns, stddevs, "Standard deviation");
|
g1.plot_xy(prns, stddevs, "Standard deviation");
|
||||||
//g1.savetops("FFT_execution_times_extended");
|
size_t char_pos = signal_name.find(" ");
|
||||||
//g1.savetopdf("FFT_execution_times_extended", 18);
|
while(char_pos != std::string::npos)
|
||||||
|
{
|
||||||
|
signal_name.replace(char_pos, 1, "_");
|
||||||
|
char_pos = signal_name.find(" ");
|
||||||
|
}
|
||||||
|
char_pos = signal_name.find("/");
|
||||||
|
while(char_pos != std::string::npos)
|
||||||
|
{
|
||||||
|
signal_name.replace(char_pos, 1, "_");
|
||||||
|
char_pos = signal_name.find("/");
|
||||||
|
}
|
||||||
|
g1.savetops("Carrier_phase_error_" + signal_name);
|
||||||
|
g1.savetopdf("Carrier_phase_error_" + signal_name, 18);
|
||||||
g1.showonscreen(); // window output
|
g1.showonscreen(); // window output
|
||||||
}
|
}
|
||||||
catch (const GnuplotException & ge)
|
catch (const GnuplotException & ge)
|
||||||
@ -673,13 +728,27 @@ void ObsSystemTest::compute_doppler_error(
|
|||||||
{
|
{
|
||||||
if(!iter_diff->is_empty())
|
if(!iter_diff->is_empty())
|
||||||
{
|
{
|
||||||
|
while(iter_diff->has_nan())
|
||||||
|
{
|
||||||
|
bool nan_found = false;
|
||||||
|
int k_aux = 0;
|
||||||
|
while(!nan_found)
|
||||||
|
{
|
||||||
|
if(!iter_diff->row(k_aux).is_finite())
|
||||||
|
{
|
||||||
|
nan_found = true;
|
||||||
|
iter_diff->shed_row(k_aux);
|
||||||
|
}
|
||||||
|
k_aux++;
|
||||||
|
}
|
||||||
|
}
|
||||||
double d_mean = std::sqrt(arma::mean(arma::square(*iter_diff)));
|
double d_mean = std::sqrt(arma::mean(arma::square(*iter_diff)));
|
||||||
means.push_back(d_mean);
|
means.push_back(d_mean);
|
||||||
double d_stddev = arma::stddev(*iter_diff);
|
double d_stddev = arma::stddev(*iter_diff);
|
||||||
stddevs.push_back(d_stddev);
|
stddevs.push_back(d_stddev);
|
||||||
prns.push_back(static_cast<double>(prn_id));
|
prns.push_back(static_cast<double>(prn_id));
|
||||||
std::cout << "-- RMS Doppler difference for sat " << prn_id << ": " << d_mean;
|
std::cout << "-- RMS Doppler difference for sat " << prn_id << ": " << d_mean;
|
||||||
std::cout << " +/- " << d_stddev;
|
std::cout << ". Std. dev.: " << d_stddev;
|
||||||
std::cout << " [Hz]" << std::endl;
|
std::cout << " [Hz]" << std::endl;
|
||||||
EXPECT_LT(d_mean, error_th_mean);
|
EXPECT_LT(d_mean, error_th_mean);
|
||||||
EXPECT_LT(d_stddev, error_th_std);
|
EXPECT_LT(d_stddev, error_th_std);
|
||||||
@ -711,8 +780,20 @@ void ObsSystemTest::compute_doppler_error(
|
|||||||
g1.set_ylabel("Doppler error [Hz]");
|
g1.set_ylabel("Doppler error [Hz]");
|
||||||
g1.plot_xy(prns, means, "RMS error");
|
g1.plot_xy(prns, means, "RMS error");
|
||||||
g1.plot_xy(prns, stddevs, "Standard deviation");
|
g1.plot_xy(prns, stddevs, "Standard deviation");
|
||||||
//g1.savetops("FFT_execution_times_extended");
|
size_t char_pos = signal_name.find(" ");
|
||||||
//g1.savetopdf("FFT_execution_times_extended", 18);
|
while(char_pos != std::string::npos)
|
||||||
|
{
|
||||||
|
signal_name.replace(char_pos, 1, "_");
|
||||||
|
char_pos = signal_name.find(" ");
|
||||||
|
}
|
||||||
|
char_pos = signal_name.find("/");
|
||||||
|
while(char_pos != std::string::npos)
|
||||||
|
{
|
||||||
|
signal_name.replace(char_pos, 1, "_");
|
||||||
|
char_pos = signal_name.find("/");
|
||||||
|
}
|
||||||
|
g1.savetops("Doppler_error_" + signal_name);
|
||||||
|
g1.savetopdf("Doppler_error_" + signal_name, 18);
|
||||||
g1.showonscreen(); // window output
|
g1.showonscreen(); // window output
|
||||||
}
|
}
|
||||||
catch (const GnuplotException & ge)
|
catch (const GnuplotException & ge)
|
||||||
|
Loading…
Reference in New Issue
Block a user