GPSCNavISC_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 "GPSCNavISC.hpp"
40 #include "TestUtil.hpp"
41 #include "GPSWeekSecond.hpp"
42 
43 namespace gnsstk
44 {
45  std::ostream& operator<<(std::ostream& s, gnsstk::NavMessageType e)
46  {
47  s << StringUtils::asString(e);
48  return s;
49  }
50 }
51 
53 {
54 public:
56  : oid1(gnsstk::ObservationType::Unknown,
58  gnsstk::TrackingCode::CA),
59  oid2(gnsstk::ObservationType::Unknown,
61  gnsstk::TrackingCode::L2CM),
62  oid3(gnsstk::ObservationType::Unknown,
64  gnsstk::TrackingCode::L2CL),
65  oid4(gnsstk::ObservationType::Unknown,
67  gnsstk::TrackingCode::L2CML),
68  oid5(gnsstk::ObservationType::Unknown,
69  gnsstk::CarrierBand::L5,
70  gnsstk::TrackingCode::L5I),
71  oid6(gnsstk::ObservationType::Unknown,
72  gnsstk::CarrierBand::L5,
73  gnsstk::TrackingCode::L5Q),
74  oid7(gnsstk::ObservationType::Unknown,
76  gnsstk::TrackingCode::Standard),
77  oid8(gnsstk::ObservationType::Unknown,
79  gnsstk::TrackingCode::Standard),
80  oid9(gnsstk::ObservationType::Unknown,
81  gnsstk::CarrierBand::L5,
82  gnsstk::TrackingCode::Standard),
83  oid10(gnsstk::ObservationType::Unknown,
84  gnsstk::CarrierBand::G1,
85  gnsstk::TrackingCode::CA)
86  {}
88  unsigned constructorTest();
89  unsigned validateTest();
90  unsigned getUserTimeTest();
92  unsigned getISCSFTest();
94  unsigned getISCDFTest();
95 
97 };
98 
99 
100 unsigned GPSCNavISC_T ::
102 {
103  TUDEF("GPSCNavISC", "GPSCNavISC");
104  gnsstk::GPSCNavISC uut;
106  uut.signal.messageType);
107  TUASSERTE(uint32_t, 0, uut.pre);
108  TUASSERTE(bool, false, uut.alert);
109  TUASSERTE(bool, true, std::isnan(uut.iscL1CA));
110  TUASSERTE(bool, true, std::isnan(uut.iscL2C));
111  TUASSERTE(bool, true, std::isnan(uut.iscL5I5));
112  TUASSERTE(bool, true, std::isnan(uut.iscL5Q5));
113  TURETURN();
114 }
115 
116 
117 unsigned GPSCNavISC_T ::
119 {
120  TUDEF("GPSCNavISC", "validate");
121  gnsstk::GPSCNavISC uut;
122  TUASSERTE(bool, true, uut.validate());
123  uut.pre = 0x8b;
124  TUASSERTE(bool, true, uut.validate());
125  uut.pre = 0x8c;
126  TUASSERTE(bool, false, uut.validate());
127  TURETURN();
128 }
129 
130 
131 unsigned GPSCNavISC_T ::
133 {
134  TUDEF("GPSCNavISC", "getUserTime");
135  gnsstk::GPSCNavISC uut;
136  // L2 has a 12s cadence, L5 has a 6s cadence
137  gnsstk::CommonTime expL2(gnsstk::GPSWeekSecond(2100,147.0));
138  gnsstk::CommonTime expL5(gnsstk::GPSWeekSecond(2100,141.0));
139  uut.timeStamp = gnsstk::GPSWeekSecond(2100,135.0);
152  TURETURN();
153 }
154 
155 
156 unsigned GPSCNavISC_T ::
158 {
159  TUDEF("GPSCNavISC", "getISC(single-frequency)");
160  gnsstk::GPSCNavISC uut;
161  double corr = 0.123456;
162  uut.isc = 5.58793545E-09;
163  uut.iscL1CA = -3.49245965E-10;
164  uut.iscL2C = -3.14321369E-09;
165  uut.iscL5I5 = 6.43194653E-09;
166  uut.iscL5Q5 = 6.54836185E-09;
167  double expCorr1 = uut.iscL1CA - uut.isc;
168  double expCorr2 = uut.iscL2C - uut.isc;
169  double expCorr5I = uut.iscL5I5 - uut.isc;
170  double expCorr5Q = uut.iscL5Q5 - uut.isc;
171  double expCorrX = 0.123456;
172  TUASSERTE(bool, true, uut.getISC(oid1, corr));
173  TUASSERTFE(expCorr1, corr);
174  TUASSERTE(bool, true, uut.getISC(oid2, corr));
175  TUASSERTFE(expCorr2, corr);
176  TUASSERTE(bool, true, uut.getISC(oid3, corr));
177  TUASSERTFE(expCorr2, corr);
178  TUASSERTE(bool, true, uut.getISC(oid4, corr));
179  TUASSERTFE(expCorr2, corr);
180  TUASSERTE(bool, true, uut.getISC(oid5, corr));
181  TUASSERTFE(expCorr5I, corr);
182  TUASSERTE(bool, true, uut.getISC(oid6, corr));
183  TUASSERTFE(expCorr5Q, corr);
184  // and error tests
185  corr = 0.123456;
186  TUASSERTE(bool, false, uut.getISC(oid7, corr));
187  TUASSERTFE(expCorrX, corr);
188  TUASSERTE(bool, false, uut.getISC(oid8, corr));
189  TUASSERTFE(expCorrX, corr);
190  TUASSERTE(bool, false, uut.getISC(oid9, corr));
191  TUASSERTFE(expCorrX, corr);
192  TUASSERTE(bool, false, uut.getISC(oid10, corr));
193  TUASSERTFE(expCorrX, corr);
194  TURETURN();
195 }
196 
197 
198 unsigned GPSCNavISC_T ::
200 {
201  TUDEF("GPSCNavISC", "getISC(dual-frequency)");
202  gnsstk::GPSCNavISC uut;
203  double corr = 0.123456;
205  double expCorrL5I = -1.4485582019935180719e-08;
206  double expCorrL5Q = -1.4632335676116669653e-08;
207  double expCorrL2 = -1.618467885588237585e-09;
208  uut.isc = 5.58793545E-09;
209  uut.iscL1CA = -3.49245965E-10;
210  uut.iscL2C = -3.14321369E-09;
211  uut.iscL5I5 = 6.43194653E-09;
212  uut.iscL5Q5 = 6.54836185E-09;
213  TUASSERTE(bool, true, uut.getISC(oid1, oid5, corr));
214  TUASSERTFE(expCorrL5I, corr);
215  TUASSERTE(bool, true, uut.getISC(oid1, oid6, corr));
216  TUASSERTFE(expCorrL5Q, corr);
217  TUASSERTE(bool, false, uut.getISC(oid1, oid9, corr));
218  TUASSERTE(bool, true, uut.getISC(oid1, oid2, corr));
219  TUASSERTFE(expCorrL2, corr);
220  TUASSERTE(bool, true, uut.getISC(oid1, oid3, corr));
221  TUASSERTFE(expCorrL2, corr);
222  TUASSERTE(bool, true, uut.getISC(oid1, oid4, corr));
223  TUASSERTFE(expCorrL2, corr);
224  // test error conditions
225  TUASSERTE(bool, false, uut.getISC(oid7, oid2, corr));
226  TUASSERTE(bool, false, uut.getISC(oid10, oid2, corr));
227  TUASSERTE(bool, false, uut.getISC(oid1, oid8, corr));
228  TUASSERTE(bool, false, uut.getISC(oid1, oid10, corr));
229  TURETURN();
230 }
231 
232 
233 int main()
234 {
235  GPSCNavISC_T testClass;
236  unsigned errorTotal = 0;
237 
238  errorTotal += testClass.constructorTest();
239  errorTotal += testClass.validateTest();
240  errorTotal += testClass.getUserTimeTest();
241  errorTotal += testClass.getISCSFTest();
242  errorTotal += testClass.getISCDFTest();
243 
244  std::cout << "Total Failures for " << __FILE__ << ": " << errorTotal
245  << std::endl;
246 
247  return errorTotal;
248 }
gnsstk::NavMessageType::ISC
@ ISC
Inter-signal corrections.
gnsstk::NavMessageID
Class used to identify/categorize navigation message data.
Definition: NavMessageID.hpp:52
L1
gnsstk::Matrix< double > L1
Definition: Matrix_LUDecomp_T.cpp:46
gnsstk::GPSCNavISC::getUserTime
CommonTime getUserTime() const override
Definition: GPSCNavISC.cpp:85
GPSCNavISC_T::oid10
gnsstk::ObsID oid10
Definition: GPSCNavISC_T.cpp:96
GPSCNavISC_T::oid6
gnsstk::ObsID oid6
Definition: GPSCNavISC_T.cpp:96
gnsstk::GPSCNavISC::alert
bool alert
Alert flag.
Definition: GPSCNavISC.hpp:104
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
gnsstk::GPSCNavISC::pre
uint32_t pre
The preamble from the start of the subframe.
Definition: GPSCNavISC.hpp:103
GPSCNavISC_T::oid1
gnsstk::ObsID oid1
Definition: GPSCNavISC_T.cpp:96
gnsstk::GPSCNavISC::getISC
bool getISC(const ObsID &oid, double &corr) const override
Definition: GPSCNavISC.cpp:94
GPSCNavISC_T
Definition: GPSCNavISC_T.cpp:52
GPSCNavISC_T::GPSCNavISC_T
GPSCNavISC_T()
Definition: GPSCNavISC_T.cpp:55
gnsstk::TrackingCode::L5I
@ L5I
Modernized GPS L5 civil in-phase.
gnsstk::StringUtils::asString
std::string asString(IonexStoreStrategy e)
Convert a IonexStoreStrategy to a whitespace-free string name.
Definition: IonexStoreStrategy.cpp:46
gnsstk::GPSCNavISC::validate
bool validate() const override
Definition: GPSCNavISC.cpp:78
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
GPSCNavISC_T::oid2
gnsstk::ObsID oid2
Definition: GPSCNavISC_T.cpp:96
gnsstk::InterSigCorr::isc
double isc
Definition: InterSigCorr.hpp:171
main
int main()
Definition: GPSCNavISC_T.cpp:233
gnsstk::CarrierBand::L2
@ L2
GPS L2, QZSS L2.
gnsstk::GPSWeekSecond
Definition: GPSWeekSecond.hpp:56
gnsstk::NavData::timeStamp
CommonTime timeStamp
Definition: NavData.hpp:173
gnsstk::SatelliteSystem::GPS
@ GPS
GPSCNavISC_T::constructorTest
unsigned constructorTest()
Make sure constructor initializes data members correctly.
Definition: GPSCNavISC_T.cpp:101
GPSCNavISC_T::oid5
gnsstk::ObsID oid5
Definition: GPSCNavISC_T.cpp:96
TestUtil.hpp
GPSCNavISC_T::oid8
gnsstk::ObsID oid8
Definition: GPSCNavISC_T.cpp:96
TURETURN
#define TURETURN()
Definition: TestUtil.hpp:232
GPSCNavISC_T::oid4
gnsstk::ObsID oid4
Definition: GPSCNavISC_T.cpp:96
GPSCNavISC_T::getISCDFTest
unsigned getISCDFTest()
Dual frequency ISC test.
Definition: GPSCNavISC_T.cpp:199
gnsstk::ObsID
Definition: ObsID.hpp:82
gnsstk::NavType::GPSCNAVL2
@ GPSCNAVL2
GPSCNavISC_T::oid9
gnsstk::ObsID oid9
Definition: GPSCNavISC_T.cpp:96
gnsstk::operator<<
std::ostream & operator<<(std::ostream &s, const ObsEpoch &oe) noexcept
Definition: ObsEpochMap.cpp:54
gnsstk::CommonTime
Definition: CommonTime.hpp:84
TUDEF
#define TUDEF(CLASS, METHOD)
Definition: TestUtil.hpp:56
GPSCNavISC_T::getISCSFTest
unsigned getISCSFTest()
Single frequency ISC test.
Definition: GPSCNavISC_T.cpp:157
GPSCNavISC_T::getUserTimeTest
unsigned getUserTimeTest()
Definition: GPSCNavISC_T.cpp:132
GPSCNavISC_T::oid3
gnsstk::ObsID oid3
Definition: GPSCNavISC_T.cpp:96
GPSWeekSecond.hpp
gnsstk::GPSCNavISC::iscL5I5
double iscL5I5
Intersignal corrections for L5 in-phase.
Definition: GPSCNavISC.hpp:107
gnsstk::TrackingCode::L2CM
@ L2CM
Modernized GPS L2 civil M code.
gnsstk::TrackingCode
TrackingCode
Definition: TrackingCode.hpp:64
gnsstk::NavMessageType
NavMessageType
Identify different types of navigation message data.
Definition: NavMessageType.hpp:59
gnsstk::GPSCNavISC::iscL5Q5
double iscL5Q5
Intersignal corrections for L5 quadrature.
Definition: GPSCNavISC.hpp:108
TUASSERTFE
#define TUASSERTFE(EXP, GOT)
Definition: TestUtil.hpp:103
GPSCNavISC_T::oid7
gnsstk::ObsID oid7
Definition: GPSCNavISC_T.cpp:96
gnsstk::GPSCNavISC
Class containing data elements unique to GPS CNAV ISC data.
Definition: GPSCNavISC.hpp:50
GPSCNavISC.hpp
gnsstk::GPSCNavISC::iscL2C
double iscL2C
Intersignal corrections for L2C.
Definition: GPSCNavISC.hpp:106
L2
gnsstk::Matrix< double > L2
Definition: Matrix_LUDecomp_T.cpp:46
gnsstk::GPSCNavISC::iscL1CA
double iscL1CA
Intersignal corrections for L1 C/A.
Definition: GPSCNavISC.hpp:105
GPSCNavISC_T::validateTest
unsigned validateTest()
Definition: GPSCNavISC_T.cpp:118
gnsstk::NavType::GPSCNAVL5
@ GPSCNAVL5
gnsstk::CarrierBand::L5
@ L5
GPS L5, Galileo E5a, SBAS L5, QZSS L5, BeiDou B2a, NavIC L5.
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