GPSCNav2ISC_T.cpp
Go to the documentation of this file.
1 //==============================================================================
2 //
3 // This file is part of GNSSTk, the ARL:UT GNSS Toolkit.
4 //
5 // The GNSSTk is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published
7 // by the Free Software Foundation; either version 3.0 of the License, or
8 // any later version.
9 //
10 // The GNSSTk is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with GNSSTk; if not, write to the Free Software Foundation,
17 // Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
18 //
19 // This software was developed by Applied Research Laboratories at the
20 // University of Texas at Austin.
21 // Copyright 2004-2022, The Board of Regents of The University of Texas System
22 //
23 //==============================================================================
24 
25 
26 //==============================================================================
27 //
28 // This software was developed by Applied Research Laboratories at the
29 // University of Texas at Austin, under contract to an agency or agencies
30 // within the U.S. Department of Defense. The U.S. Government retains all
31 // rights to use, duplicate, distribute, disclose, or release this software.
32 //
33 // Pursuant to DoD Directive 523024
34 //
35 // DISTRIBUTION STATEMENT A: This software has been approved for public
36 // release, distribution is unlimited.
37 //
38 //==============================================================================
39 #include "GPSCNav2ISC.hpp"
40 #include "TestUtil.hpp"
41 #include "GPSWeekSecond.hpp"
42 #include "UnixTime.hpp"
43 #include "TimeString.hpp"
44 
45 namespace gnsstk
46 {
47  std::ostream& operator<<(std::ostream& s, gnsstk::NavMessageType e)
48  {
49  s << StringUtils::asString(e);
50  return s;
51  }
52 }
53 
55 {
56 public:
58  : oid1(gnsstk::ObservationType::Unknown,
60  gnsstk::TrackingCode::CA),
61  oid2(gnsstk::ObservationType::Unknown,
63  gnsstk::TrackingCode::L1CP),
64  oid3(gnsstk::ObservationType::Unknown,
66  gnsstk::TrackingCode::L1CD),
67  oid4(gnsstk::ObservationType::Unknown,
69  gnsstk::TrackingCode::L2CM),
70  oid5(gnsstk::ObservationType::Unknown,
71  gnsstk::CarrierBand::L5,
72  gnsstk::TrackingCode::L5I),
73  oid6(gnsstk::ObservationType::Unknown,
74  gnsstk::CarrierBand::L5,
75  gnsstk::TrackingCode::L5Q),
76  oid7(gnsstk::ObservationType::Unknown,
78  gnsstk::TrackingCode::Standard),
79  oid8(gnsstk::ObservationType::Unknown,
81  gnsstk::TrackingCode::Standard),
82  oid9(gnsstk::ObservationType::Unknown,
83  gnsstk::CarrierBand::L5,
84  gnsstk::TrackingCode::Standard),
85  oid10(gnsstk::ObservationType::Unknown,
86  gnsstk::CarrierBand::G1,
87  gnsstk::TrackingCode::CA)
88  {}
90  unsigned constructorTest();
91  unsigned getUserTimeTest();
93  unsigned getISCSFTest();
95  unsigned getISCDFTest();
96 
98 };
99 
100 
101 unsigned GPSCNav2ISC_T ::
103 {
104  TUDEF("GPSCNav2ISC", "GPSCNav2ISC");
107  uut.signal.messageType);
108  TUASSERTE(bool, false, uut.haveSF2);
109  TUASSERTE(bool, false, uut.haveSF3);
112  TUASSERTE(bool, true, std::isnan(uut.iscL1CP));
113  TUASSERTE(bool, true, std::isnan(uut.iscL1CD));
114  TUASSERTE(bool, true, std::isnan(uut.iscL1CA));
115  TUASSERTE(bool, true, std::isnan(uut.iscL2C));
116  TUASSERTE(bool, true, std::isnan(uut.iscL5I5));
117  TUASSERTE(bool, true, std::isnan(uut.iscL5Q5));
118  TURETURN();
119 }
120 
121 
122 unsigned GPSCNav2ISC_T ::
124 {
125  TUDEF("GPSCNav2ISC", "getUserTime");
127  // using UnixTime because of rounding issues when trying to set
128  // 480ms via the GPSWeekSecond constructor.
129  gnsstk::CommonTime exp(gnsstk::UnixTime(1586044952, 480000,
131  std::cerr << gnsstk::printTime(exp, "exp=%Y/%03j/%08.2s") << std::endl;
132  uut.xmit2 = gnsstk::GPSWeekSecond(2100,135.0);
133  uut.xmit3 = gnsstk::GPSWeekSecond(2100,147.0);
140  TURETURN();
141 }
142 
143 
144 unsigned GPSCNav2ISC_T ::
146 {
147  TUDEF("GPSCNav2ISC", "getISC(single-frequency)");
149  double corr = 0.123456;
150  uut.isc = -8.78935680E-09;
151  uut.iscL1CP = -7.85803422E-10;
152  uut.iscL1CD = -3.49245965E-10;
153  uut.iscL1CA = -5.82076609E-10;
154  uut.iscL2C = -6.60656951E-09;
155  uut.iscL5I5 = -1.17870513E-08;
156  uut.iscL5Q5 = -1.17870513E-08;
157 
158  double expCorr1 = uut.iscL1CA - uut.isc;
159  double expCorr2 = uut.iscL1CP - uut.isc;
160  double expCorr3 = uut.iscL1CD - uut.isc;
161  double expCorr4 = uut.iscL2C - uut.isc;
162  double expCorr5 = uut.iscL5I5 - uut.isc;
163  double expCorr6 = uut.iscL5Q5 - uut.isc;
164  double expCorrX = 0.123456;
165  TUASSERTE(bool, true, uut.getISC(oid1, corr));
166  TUASSERTFE(expCorr1, corr);
167  TUASSERTE(bool, true, uut.getISC(oid2, corr));
168  TUASSERTFE(expCorr2, corr);
169  TUASSERTE(bool, true, uut.getISC(oid3, corr));
170  TUASSERTFE(expCorr3, corr);
171  TUASSERTE(bool, true, uut.getISC(oid4, corr));
172  TUASSERTFE(expCorr4, corr);
173  TUASSERTE(bool, true, uut.getISC(oid5, corr));
174  TUASSERTFE(expCorr5, corr);
175  TUASSERTE(bool, true, uut.getISC(oid6, corr));
176  TUASSERTFE(expCorr6, corr);
177  // and error tests
178  corr = 0.123456;
179  TUASSERTE(bool, false, uut.getISC(oid7, corr));
180  TUASSERTFE(expCorrX, corr);
181  TUASSERTE(bool, false, uut.getISC(oid8, corr));
182  TUASSERTFE(expCorrX, corr);
183  TUASSERTE(bool, false, uut.getISC(oid9, corr));
184  TUASSERTFE(expCorrX, corr);
185  TUASSERTE(bool, false, uut.getISC(oid10, corr));
186  TUASSERTFE(expCorrX, corr);
187  TURETURN();
188 }
189 
190 
191 unsigned GPSCNav2ISC_T ::
193 {
194  TUDEF("GPSCNav2ISC", "getISC(dual-frequency)");
196  double corr = 0.123456;
198  double expCorrL5I = 2.2332319776213512011e-08;
199  double expCorrL5Q = 2.2332319776213512011e-08;
200  double expCorrL1CAL2 = 1.7519506229471444802e-08;
201  double expCorrL1CPL2 = 1.7000873222053237761e-08;
202  double expCorrL1CDL2 = 1.8112229667975519701e-08;
203  uut.isc = -8.78935680E-09;
204  uut.iscL1CP = -7.85803422E-10;
205  uut.iscL1CD = -3.49245965E-10;
206  uut.iscL1CA = -5.82076609E-10;
207  uut.iscL2C = -6.60656951E-09;
208  uut.iscL5I5 = -1.17870513E-08;
209  uut.iscL5Q5 = -1.17870513E-08;
210  TUASSERTE(bool, true, uut.getISC(oid1, oid5, corr));
211  TUASSERTFE(expCorrL5I, corr);
212  TUASSERTE(bool, true, uut.getISC(oid1, oid6, corr));
213  TUASSERTFE(expCorrL5Q, corr);
214  TUASSERTE(bool, false, uut.getISC(oid1, oid9, corr));
215  TUASSERTE(bool, true, uut.getISC(oid1, oid4, corr));
216  TUASSERTFE(expCorrL1CAL2, corr);
217  TUASSERTE(bool, true, uut.getISC(oid2, oid4, corr));
218  TUASSERTFE(expCorrL1CPL2, corr);
219  TUASSERTE(bool, true, uut.getISC(oid3, oid4, corr));
220  TUASSERTFE(expCorrL1CDL2, corr);
221  // test error conditions
222  TUASSERTE(bool, false, uut.getISC(oid7, oid2, corr));
223  TUASSERTE(bool, false, uut.getISC(oid10, oid2, corr));
224  TUASSERTE(bool, false, uut.getISC(oid1, oid8, corr));
225  TUASSERTE(bool, false, uut.getISC(oid1, oid10, corr));
226  TURETURN();
227 }
228 
229 
230 int main()
231 {
232  GPSCNav2ISC_T testClass;
233  unsigned errorTotal = 0;
234 
235  errorTotal += testClass.constructorTest();
236  errorTotal += testClass.getUserTimeTest();
237  errorTotal += testClass.getISCSFTest();
238  errorTotal += testClass.getISCDFTest();
239 
240  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
241  << std::endl;
242 
243  return errorTotal;
244 }
gnsstk::NavMessageType::ISC
@ ISC
Inter-signal corrections.
gnsstk::NavMessageID
Class used to identify/categorize navigation message data.
Definition: NavMessageID.hpp:52
GPSCNav2ISC_T::oid10
gnsstk::ObsID oid10
Definition: GPSCNav2ISC_T.cpp:97
GPSCNav2ISC_T::oid5
gnsstk::ObsID oid5
Definition: GPSCNav2ISC_T.cpp:97
GPSCNav2ISC.hpp
GPSCNav2ISC_T::oid2
gnsstk::ObsID oid2
Definition: GPSCNav2ISC_T.cpp:97
gnsstk::TrackingCode::L1CD
@ L1CD
Modernized GPS L1C civil code tracking (data)
GPSCNav2ISC_T::GPSCNav2ISC_T
GPSCNav2ISC_T()
Definition: GPSCNav2ISC_T.cpp:57
gnsstk::GPSCNav2ISC::iscL2C
double iscL2C
Intersignal corrections for L2C.
Definition: GPSCNav2ISC.hpp:111
L1
gnsstk::Matrix< double > L1
Definition: Matrix_LUDecomp_T.cpp:46
GPSCNav2ISC_T::constructorTest
unsigned constructorTest()
Make sure constructor initializes data members correctly.
Definition: GPSCNav2ISC_T.cpp:102
gnsstk::GPSCNav2ISC::iscL5Q5
double iscL5Q5
Intersignal corrections for L5 quadrature.
Definition: GPSCNav2ISC.hpp:113
TUASSERTE
#define TUASSERTE(TYPE, EXP, GOT)
Definition: TestUtil.hpp:81
gnsstk::CarrierBand
CarrierBand
Definition: CarrierBand.hpp:54
gnsstk::NavMessageID::messageType
NavMessageType messageType
Definition: NavMessageID.hpp:97
gnsstk::NavSatelliteID
Definition: NavSatelliteID.hpp:57
GPSCNav2ISC_T::oid9
gnsstk::ObsID oid9
Definition: GPSCNav2ISC_T.cpp:97
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::NavData::signal
NavMessageID signal
Source signal identification for this navigation message data.
Definition: NavData.hpp:175
gnsstk
For Sinex::InputHistory.
Definition: BasicFramework.cpp:50
gnsstk::InterSigCorr::isc
double isc
Definition: InterSigCorr.hpp:171
GPSCNav2ISC_T::oid3
gnsstk::ObsID oid3
Definition: GPSCNav2ISC_T.cpp:97
GPSCNav2ISC_T::getISCDFTest
unsigned getISCDFTest()
Dual frequency ISC test.
Definition: GPSCNav2ISC_T.cpp:192
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
gnsstk::SatelliteSystem::GPS
@ GPS
gnsstk::GPSCNav2ISC::getISC
bool getISC(const ObsID &oid, double &corr) const override
Definition: GPSCNav2ISC.cpp:98
TestUtil.hpp
gnsstk::GPSCNav2ISC::haveSF3
bool haveSF3
True if iscL1CA,iscL2C,iscL5I5,iscL5Q5 are set.
Definition: GPSCNav2ISC.hpp:105
gnsstk::GPSCNav2ISC
Class containing data elements unique to GPS CNAV2 ISC data.
Definition: GPSCNav2ISC.hpp:50
GPSCNav2ISC_T::oid6
gnsstk::ObsID oid6
Definition: GPSCNav2ISC_T.cpp:97
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
gnsstk::ObsID
Definition: ObsID.hpp:82
GPSCNav2ISC_T::oid8
gnsstk::ObsID oid8
Definition: GPSCNav2ISC_T.cpp:97
gnsstk::operator<<
std::ostream & operator<<(std::ostream &s, const ObsEpoch &oe) noexcept
Definition: ObsEpochMap.cpp:54
gnsstk::CommonTime
Definition: CommonTime.hpp:84
gnsstk::GPSCNav2ISC::xmit3
CommonTime xmit3
Transmit time of subframe 3.
Definition: GPSCNav2ISC.hpp:107
gnsstk::GPSCNav2ISC::haveSF2
bool haveSF2
True if iscL1CP and iscL1CD are set.
Definition: GPSCNav2ISC.hpp:104
GPSCNav2ISC_T::oid7
gnsstk::ObsID oid7
Definition: GPSCNav2ISC_T.cpp:97
gnsstk::CarrierBand::L1
@ L1
GPS L1, Galileo E1, SBAS L1, QZSS L1, BeiDou L1.
UnixTime.hpp
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
gnsstk::UnixTime
Definition: UnixTime.hpp:67
gnsstk::GPSCNav2ISC::iscL1CA
double iscL1CA
Intersignal corrections for L1 C/A.
Definition: GPSCNav2ISC.hpp:110
GPSWeekSecond.hpp
GPSCNav2ISC_T::oid1
gnsstk::ObsID oid1
Definition: GPSCNav2ISC_T.cpp:97
GPSCNav2ISC_T::getISCSFTest
unsigned getISCSFTest()
Single frequency ISC test.
Definition: GPSCNav2ISC_T.cpp:145
gnsstk::printTime
std::string printTime(const CommonTime &t, const std::string &fmt)
Definition: TimeString.cpp:64
gnsstk::TrackingCode
TrackingCode
Definition: TrackingCode.hpp:64
gnsstk::TimeSystem::GPS
@ GPS
GPS system time.
gnsstk::NavMessageType
NavMessageType
Identify different types of navigation message data.
Definition: NavMessageType.hpp:59
gnsstk::GPSCNav2ISC::iscL1CP
double iscL1CP
Intersignal corrections for L1 CP.
Definition: GPSCNav2ISC.hpp:108
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
main
int main()
Definition: GPSCNav2ISC_T.cpp:230
gnsstk::GPSCNav2ISC::iscL1CD
double iscL1CD
Intersignal corrections for L1 CD.
Definition: GPSCNav2ISC.hpp:109
gnsstk::GPSCNav2ISC::getUserTime
CommonTime getUserTime() const override
Definition: GPSCNav2ISC.cpp:81
GPSCNav2ISC_T
Definition: GPSCNav2ISC_T.cpp:54
gnsstk::GPSCNav2ISC::iscL5I5
double iscL5I5
Intersignal corrections for L5 in-phase.
Definition: GPSCNav2ISC.hpp:112
L2
gnsstk::Matrix< double > L2
Definition: Matrix_LUDecomp_T.cpp:46
TimeString.hpp
gnsstk::GPSCNav2ISC::xmit2
CommonTime xmit2
Transmit time of subframe 2.
Definition: GPSCNav2ISC.hpp:106
GPSCNav2ISC_T::oid4
gnsstk::ObsID oid4
Definition: GPSCNav2ISC_T.cpp:97
GPSCNav2ISC_T::getUserTimeTest
unsigned getUserTimeTest()
Definition: GPSCNav2ISC_T.cpp:123
gnsstk::NavType::GPSCNAV2
@ GPSCNAV2
gnsstk::ObservationType
ObservationType
The type of observation, mostly used by ObsID.
Definition: ObservationType.hpp:55


gnsstk
Author(s):
autogenerated on Wed Oct 25 2023 02:40:39