mirror of
				https://github.com/gnss-sdr/gnss-sdr
				synced 2025-10-30 23:03:05 +00:00 
			
		
		
		
	Merge branch 'glonass_dec' of github.com:dmiralles2009/gnss-sdr into glonass_dec
This commit is contained in:
		| @@ -54,124 +54,5 @@ Glonass_Gnav_Almanac::Glonass_Gnav_Almanac() | ||||
|   d_tau_n_A = 0.0; | ||||
|   d_C_n = false; | ||||
|   d_l_n = false; | ||||
| } | ||||
|  | ||||
| void Glonass_Gnav_Almanac::satellite_position(double N_A, double N_i, double t_i) | ||||
| { | ||||
|   double T_nom = 43200;     // [seconds] | ||||
|   double i_nom = D2R*63.0;  // [rad] | ||||
|  | ||||
|   double Delta_t = 0.0; | ||||
|   double i = 0.0; | ||||
|   double T = 0.0; | ||||
|   double n = 0.0; | ||||
|   double a = 0.0; | ||||
|   double lambda_dot = 0.0; | ||||
|   double omega_dot = 0.0; | ||||
|   double lambda = 0.0; | ||||
|   double omega = 0.0; | ||||
|   double E_P = 0.0; | ||||
|   double Delta_T = 0.0; | ||||
|   double M = 0.0; | ||||
|   double E = 0.0; | ||||
|   double E_old = 0.0; | ||||
|   double dE = 0.0; | ||||
|  | ||||
|   double e1_x = 0.0; | ||||
|   double e1_y = 0.0; | ||||
|   double e1_z = 0.0; | ||||
|  | ||||
|   double e2_x = 0.0; | ||||
|   double e2_y = 0.0; | ||||
|   double e2_z = 0.0; | ||||
|   // Compute time difference to reference time | ||||
|   Delta_t = (N_i - N_A) * 86400 + (t_i + d_t_lambda_n_A); | ||||
|  | ||||
|   // Compute the actual inclination | ||||
|   i = i_nom + d_Delta_i_n_A; | ||||
|  | ||||
|   // Compute the actual orbital period: | ||||
|   T = T_nom + d_Delta_T_n_A; | ||||
|  | ||||
|   // Compute the mean motion | ||||
|   n = 2*GLONASS_PI/T; | ||||
|  | ||||
|   // Compute the semi-major axis: | ||||
|   a = cbrt(GLONASS_GM/(n*n)); | ||||
|  | ||||
|   // Compute correction to longitude of ascending node | ||||
|   lambda_dot = -10*pow(GLONASS_SEMI_MAJOR_AXIS / a, 7/2)*D2R*cos(i)/86400; | ||||
|  | ||||
|   // Compute correction to argument of perigee | ||||
|   omega_dot = 5*pow(GLONASS_SEMI_MAJOR_AXIS / a, 7/2)*D2R*(5*cos(i)*cos(i) - 1)/86400; | ||||
|  | ||||
|   // Compute corrected longitude of ascending node: | ||||
|   lambda = d_lambda_n_A + (lambda_dot - GLONASS_OMEGA_EARTH_DOT)*Delta_t; | ||||
|  | ||||
|   // Compute corrected argument of perigee: | ||||
|   omega = d_omega_n_A + omega_dot*Delta_t; | ||||
|  | ||||
|   // Compute eccentric anomaly at point P: Note: P is that point of the orbit the true anomaly of which is identical to the argument of perigee. | ||||
|   E_P = 2*atan(tan((omega/2)*(sqrt((1 - d_epsilon_n_A)*(1 + d_epsilon_n_A))))); | ||||
|  | ||||
|   // Compute time difference to perigee passing | ||||
|   if (omega < GLONASS_PI) | ||||
|     { | ||||
|         Delta_T = (E_P - d_epsilon_n_A*sin(E_P))/n; | ||||
|     } | ||||
|   else | ||||
|     { | ||||
|       Delta_T = (E_P - d_epsilon_n_A*sin(E_P))/n + T; | ||||
|     } | ||||
|  | ||||
|   // Compute mean anomaly at epoch t_i: | ||||
|   M = n * (Delta_t - Delta_T); | ||||
|  | ||||
|   // Compute eccentric anomaly at epoch t_i. Note: Kepler’s equation has to be solved iteratively | ||||
|  | ||||
|   // Initial guess of eccentric anomaly | ||||
|   E = M; | ||||
|  | ||||
|   // --- Iteratively compute eccentric anomaly ---------------------------- | ||||
|   for (int ii = 1; ii < 20; ii++) | ||||
|       { | ||||
|           E_old   = E; | ||||
|           E       = M + d_epsilon_n_A * sin(E); | ||||
|           dE      = fmod(E - E_old, 2.0 * GLONASS_PI); | ||||
|           if (fabs(dE) < 1e-12) | ||||
|               { | ||||
|                   //Necessary precision is reached, exit from the loop | ||||
|                   break; | ||||
|               } | ||||
|       } | ||||
|  | ||||
|   // Compute position in orbital coordinate system | ||||
|   d_satpos_Xo = a*cos(E) - d_epsilon_n_A; | ||||
|   d_satpos_Yo = a*sqrt(1 - d_epsilon_n_A*d_epsilon_n_A)*sin(E); | ||||
|   d_satpos_Zo = a*0; | ||||
|  | ||||
|   // Compute velocity in orbital coordinate system | ||||
|   d_satvel_Xo = a/(1-d_epsilon_n_A*cos(E))*(-n*sin(E)); | ||||
|   d_satvel_Yo = a/(1-d_epsilon_n_A*cos(E))*(n*sqrt(1 - d_epsilon_n_A*d_epsilon_n_A)*cos(E)); | ||||
|   d_satvel_Zo = a/(1-d_epsilon_n_A*cos(E))*(0); | ||||
|  | ||||
|   // Determine orientation vectors of orbital coordinate system in ECEF system | ||||
|   e1_x = cos(omega)*cos(lambda) - sin(omega)*sin(lambda); | ||||
|   e1_y = cos(omega)*sin(lambda) + sin(omega)*cos(lambda)*cos(i); | ||||
|   e1_z = sin(omega)*sin(i); | ||||
|  | ||||
|   e2_x = -sin(omega)*cos(lambda) - sin(omega)*sin(lambda)*cos(i); | ||||
|   e2_y = -sin(omega)*sin(lambda) + cos(omega)*cos(lambda)*cos(i); | ||||
|   e2_z = cos(omega)*sin(i); | ||||
|  | ||||
|   // Convert position from orbital to ECEF system | ||||
|   d_satpos_X = d_satpos_Xo*e1_x + d_satpos_Xo*e2_x; | ||||
|   d_satpos_Y = d_satpos_Yo*e1_z + d_satpos_Yo*e2_y; | ||||
|   d_satpos_Z = d_satpos_Zo*e1_z + d_satpos_Zo*e2_z; | ||||
|  | ||||
|   // Convert position from orbital to ECEF system | ||||
|   d_satvel_X = d_satvel_Xo*e1_x + d_satvel_Xo*e2_x + GLONASS_OMEGA_EARTH_DOT*d_satpos_Y; | ||||
|   d_satvel_Y = d_satvel_Yo*e1_z + d_satvel_Yo*e2_y - GLONASS_OMEGA_EARTH_DOT*d_satpos_X; | ||||
|   d_satvel_Z = d_satvel_Zo*e1_z + d_satvel_Zo*e2_z; | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -49,13 +49,13 @@ class Glonass_Gnav_Almanac | ||||
| public: | ||||
|     double d_n_A;               //!< Conventional number of satellite within GLONASS space segment [dimensionless] | ||||
|     double d_H_n_A;             //!< Carrier frequency number of navigation RF signal transmitted by d_nA satellite as table 4.10 (0-31) [dimensionless] | ||||
|     double d_lambda_n_A;        //!< Longitude of the first (within the d_NA day) ascending node of d_nA  [semi-circles] | ||||
|     double d_lambda_n_A;        //!< Longitude of the first (within the d_NA day) ascending node of d_nA [radians] | ||||
|     double d_t_lambda_n_A;      //!< Time of first ascending node passage [s] | ||||
|     double d_Delta_i_n_A;       //!< Correction of the mean value of inclination of d_n_A satellite at instant t_lambda_n_A [semi-circles] | ||||
|     double d_Delta_T_n_A;       //!< Correction to the mean value of Draconian period of d_n_A satellite at instant t_lambda_n_A[s / orbital period] | ||||
|     double d_Delta_i_n_A;       //!< Correction of the mean value of inclination of d_n_A satellite at instant t_lambda_n_A [radians] | ||||
|     double d_Delta_T_n_A;       //!< Correction to the mean value of Draconian period of d_n_A satellite at instant t_lambda_n_A [s / orbital period] | ||||
|     double d_Delta_T_n_A_dot;   //!< Rate of change of Draconian period of d_n_A satellite at instant t_lambda_n_A [s / orbital period^2] | ||||
|     double d_epsilon_n_A;       //!< Eccentricity of d_n_A satellite at instant t_lambda_n_A [dimensionless] | ||||
|     double d_omega_n_A;         //!< Argument of preigree of d_n_A satellite at instant t_lambdan_A [semi-circles] | ||||
|     double d_omega_n_A;         //!< Argument of perigee of d_n_A satellite at instant t_lambdan_A [radians] | ||||
|     double d_M_n_A;             //!< Type of satellite n_A [dimensionless] | ||||
|     double d_KP;                //!< Notification on forthcoming leap second correction of UTC [dimensionless] | ||||
|     double d_tau_n_A;           //!< Coarse value of d_n_A satellite time correction to GLONASS time at instant  t_lambdan_A[s] | ||||
| @@ -67,24 +67,6 @@ public: | ||||
|     unsigned int i_satellite_PRN;           //!< SV PRN Number, equivalent to slot number for compatibility with GPS | ||||
|     unsigned int i_satellite_slot_number;   //!< SV Slot Number | ||||
|  | ||||
|     // satellite positions | ||||
|     double d_satpos_Xo;        //!< Earth-fixed coordinate x of the satellite in PZ-90.02 coordinate system [km]. | ||||
|     double d_satpos_Yo;        //!< Earth-fixed coordinate y of the satellite in PZ-90.02 coordinate system [km] | ||||
|     double d_satpos_Zo;        //!< Earth-fixed coordinate z of the satellite in PZ-90.02 coordinate system [km] | ||||
|     // Satellite velocity | ||||
|     double d_satvel_Xo;        //!< Earth-fixed velocity coordinate x of the satellite in PZ-90.02 coordinate system [km/s] | ||||
|     double d_satvel_Yo;        //!< Earth-fixed velocity coordinate y of the satellite in PZ-90.02 coordinate system [km/s] | ||||
|     double d_satvel_Zo;        //!< Earth-fixed velocity coordinate z of the satellite in PZ-90.02 coordinate system [km/s] | ||||
|  | ||||
|     // satellite positions | ||||
|     double d_satpos_X;        //!< Earth-fixed coordinate x of the satellite in PZ-90.02 coordinate system [km]. | ||||
|     double d_satpos_Y;        //!< Earth-fixed coordinate y of the satellite in PZ-90.02 coordinate system [km] | ||||
|     double d_satpos_Z;        //!< Earth-fixed coordinate z of the satellite in PZ-90.02 coordinate system [km] | ||||
|     // Satellite velocity | ||||
|     double d_satvel_X;        //!< Earth-fixed velocity coordinate x of the satellite in PZ-90.02 coordinate system [km/s] | ||||
|     double d_satvel_Y;        //!< Earth-fixed velocity coordinate y of the satellite in PZ-90.02 coordinate system [km/s] | ||||
|     double d_satvel_Z;        //!< Earth-fixed velocity coordinate z of the satellite in PZ-90.02 coordinate system [km/s] | ||||
|  | ||||
|     template<class Archive> | ||||
|     /*! | ||||
|      * \brief Serialize is a boost standard method to be called by the boost XML serialization. Here is used to save the almanac data on disk file. | ||||
| @@ -113,7 +95,6 @@ public: | ||||
|         archive & make_nvp("d_l_n", d_l_n); | ||||
|     } | ||||
|  | ||||
|     void satellite_position(double N_A, double N_i, double t_i); | ||||
|     /*! | ||||
|      * Default constructor | ||||
|      */ | ||||
|   | ||||
| @@ -481,8 +481,8 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_n_A = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_tau_n_A = static_cast<double>(read_navigation_unsigned(string_bits, TAU_N_A)) * TWO_N18; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_epsilon_n_A = static_cast<double>(read_navigation_unsigned(string_bits, EPSILON_N_A)) * TWO_N20; | ||||
|  | ||||
|             flag_almanac_str_6 = true; | ||||
| @@ -493,7 +493,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             // --- It is string 7 ---------------------------------------------- | ||||
|             if (flag_almanac_str_6 == true) | ||||
|                 { | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15 * GLONASS_PI; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_t_lambda_n_A = static_cast<double>(read_navigation_unsigned(string_bits, T_LAMBDA_N_A)) * TWO_N5; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_N_A)) * TWO_N9; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A_dot = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_DOT_N_A)) * TWO_N14; | ||||
| @@ -529,8 +529,8 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_n_A = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_tau_n_A = static_cast<double>(read_navigation_unsigned(string_bits, TAU_N_A)) * TWO_N18; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_epsilon_n_A = static_cast<double>(read_navigation_unsigned(string_bits, EPSILON_N_A)) * TWO_N20; | ||||
|  | ||||
|             flag_almanac_str_8 = true; | ||||
| @@ -540,7 +540,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             // --- It is string 9 ---------------------------------------------- | ||||
|             if (flag_almanac_str_8 == true) | ||||
|                 { | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15 * GLONASS_PI; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_t_lambda_n_A = static_cast<double>(read_navigation_unsigned(string_bits, T_LAMBDA_N_A)) * TWO_N5; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_N_A)) * TWO_N9; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A_dot = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_DOT_N_A)) * TWO_N14; | ||||
| @@ -570,8 +570,8 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_n_A = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_tau_n_A = static_cast<double>(read_navigation_unsigned(string_bits, TAU_N_A)) * TWO_N18; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_epsilon_n_A = static_cast<double>(read_navigation_unsigned(string_bits, EPSILON_N_A)) * TWO_N20; | ||||
|  | ||||
|             flag_almanac_str_10 = true; | ||||
| @@ -582,7 +582,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             // --- It is string 11 --------------------------------------------- | ||||
|             if (flag_almanac_str_10 == true) | ||||
|                 { | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15 * GLONASS_PI; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_t_lambda_n_A = static_cast<double>(read_navigation_unsigned(string_bits, T_LAMBDA_N_A)) * TWO_N5; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_N_A)) * TWO_N9; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A_dot = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_DOT_N_A)) * TWO_N14; | ||||
| @@ -611,8 +611,8 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_n_A = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_tau_n_A = static_cast<double>(read_navigation_unsigned(string_bits, TAU_N_A)) * TWO_N18; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|             gnav_almanac[i_alm_satellite_slot_number - 1].d_epsilon_n_A = static_cast<double>(read_navigation_unsigned(string_bits, EPSILON_N_A)) * TWO_N20; | ||||
|  | ||||
|             flag_almanac_str_12 = true; | ||||
| @@ -623,7 +623,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|             // --- It is string 13 --------------------------------------------- | ||||
|             if (flag_almanac_str_12 == true) | ||||
|                 { | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15 * GLONASS_PI; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_t_lambda_n_A = static_cast<double>(read_navigation_unsigned(string_bits, T_LAMBDA_N_A)) * TWO_N5; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_N_A)) * TWO_N9; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A_dot = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_DOT_N_A)) * TWO_N14; | ||||
| @@ -659,8 +659,8 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_M_n_A = static_cast<double>(read_navigation_unsigned(string_bits, M_N_A)); | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_n_A = static_cast<double>(read_navigation_unsigned(string_bits, n_A)); | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_tau_n_A = static_cast<double>(read_navigation_unsigned(string_bits, TAU_N_A)) * TWO_N18; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_lambda_n_A = static_cast<double>(read_navigation_signed(string_bits, LAMBDA_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_i_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_I_N_A)) * TWO_N20 * GLONASS_PI; | ||||
|                     gnav_almanac[i_alm_satellite_slot_number - 1].d_epsilon_n_A = static_cast<double>(read_navigation_unsigned(string_bits, EPSILON_N_A)) * TWO_N20; | ||||
|  | ||||
|                     flag_almanac_str_14 = true; | ||||
| @@ -670,7 +670,7 @@ int Glonass_Gnav_Navigation_Message::string_decoder(std::string frame_string) | ||||
|         case 15: | ||||
|             // --- It is string 15 ---------------------------------------------- | ||||
|             if (d_frame_ID != 5 and flag_almanac_str_14 == true) { | ||||
|                 gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15; | ||||
|                 gnav_almanac[i_alm_satellite_slot_number - 1].d_omega_n_A = static_cast<double>(read_navigation_signed(string_bits, OMEGA_N_A)) * TWO_N15 * GLONASS_PI; | ||||
|                 gnav_almanac[i_alm_satellite_slot_number - 1].d_t_lambda_n_A = static_cast<double>(read_navigation_unsigned(string_bits, T_LAMBDA_N_A)) * TWO_N5; | ||||
|                 gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_N_A)) * TWO_N9; | ||||
|                 gnav_almanac[i_alm_satellite_slot_number - 1].d_Delta_T_n_A_dot = static_cast<double>(read_navigation_signed(string_bits, DELTA_T_DOT_N_A)) * TWO_N14; | ||||
|   | ||||
| @@ -144,7 +144,6 @@ DECLARE_string(log_dir); | ||||
| #endif | ||||
|  | ||||
| #include "unit-tests/system-parameters/glonass_gnav_ephemeris_test.cc" | ||||
| #include "unit-tests/system-parameters/glonass_gnav_almanac_test.cc" | ||||
| #include "unit-tests/system-parameters/glonass_gnav_nav_message_test.cc" | ||||
|  | ||||
| // For GPS NAVIGATION (L1) | ||||
|   | ||||
| @@ -1,76 +0,0 @@ | ||||
| /*! | ||||
|  * \file code_generation_test.cc | ||||
|  * \note Code added as part of GSoC 2017 program | ||||
|  * \author Damian Miralles, 2017. dmiralles2009(at)gmail.com | ||||
|  * \see <a href="http://russianspacesystems.ru/wp-content/uploads/2016/08/ICD_GLONASS_eng_v5.1.pdf">GLONASS ICD</a> | ||||
|  * | ||||
|  * | ||||
|  * ------------------------------------------------------------------------- | ||||
|  * | ||||
|  * Copyright (C) 2010-2015  (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/>. | ||||
|  * | ||||
|  * ------------------------------------------------------------------------- | ||||
|  */ | ||||
|  | ||||
|  | ||||
| #include <complex> | ||||
| #include <ctime> | ||||
| #include "gps_sdr_signal_processing.h" | ||||
| #include "gnss_signal_processing.h" | ||||
|  | ||||
| #include <complex> | ||||
| #include <ctime> | ||||
| #include "gnss_signal_processing.h" | ||||
| #include "glonass_gnav_almanac.h" | ||||
|  | ||||
| // See A 3.2.3 | ||||
| TEST(GlonassGnavAlmanacTest, SatellitePosition) | ||||
| { | ||||
|     double N_i = 615;           // [days] | ||||
|     double t_i = 33300.0;        // [seconds] | ||||
|     double Xoi = 10947.021572;  // [km] | ||||
|     double Yoi = 13078.978287;  // [km] | ||||
|     double Zoi = 18922.063362;  // [km] | ||||
|     double Vxoi = -3.375497;     // [m/s] | ||||
|     double Vyoi = -0.161453;    // [Кm/s] | ||||
|     double Vzoi = 2.060844;     // [Кm/s] | ||||
|     double N_A  = 615;          // [days] | ||||
|  | ||||
|     Glonass_Gnav_Almanac gnav_almanac; | ||||
|  | ||||
|  | ||||
|     gnav_almanac.d_lambda_n_A       = -0.189986229;     // [half cycles] | ||||
|     gnav_almanac.d_t_lambda_n_A     = 27122.09375;      // [second] | ||||
|     gnav_almanac.d_Delta_i_n_A      = 0.011929512;      // [half cycle] | ||||
|     gnav_almanac.d_Delta_T_n_A      = -2655.76171875;   // [seconds] | ||||
|     gnav_almanac.d_Delta_T_n_A_dot  = 0.000549316;      // [Secjnds/cycle2] | ||||
|     gnav_almanac.d_epsilon_n_A      = 0.001482010;      // [unitless] | ||||
|     gnav_almanac.d_omega_n_A        = 0.440277100;      // [Half cycle] | ||||
|  | ||||
|     gnav_almanac.satellite_position(N_A, N_i, t_i); | ||||
|  | ||||
|     //ASSERT_TRUE(gnav_almanac.d_satpos_Xo - Xoi < DBL_EPSILON ); | ||||
|     //ASSERT_TRUE(gnav_almanac.d_satpos_Yo - Yoi < DBL_EPSILON ); | ||||
|     //ASSERT_TRUE(gnav_almanac.d_satpos_Zo - Zoi < DBL_EPSILON ); | ||||
|     //ASSERT_TRUE(gnav_almanac.d_satvel_Xo - Vxoi < DBL_EPSILON ); | ||||
|     //ASSERT_TRUE(gnav_almanac.d_satvel_Yo - Vyoi < DBL_EPSILON ); | ||||
|     //ASSERT_TRUE(gnav_almanac.d_satvel_Zo - Vzoi < DBL_EPSILON ); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Damian Miralles
					Damian Miralles