An Open Source Toolkit for GPS Processing , Total Electron Content Effects , Measurements and Modeling

Applied Research Laboratories, The University of Texas at Austin (ARL:UT) has established a cross platform, open source software project called the GPS Toolkit, or GPSTk. The goal of the GPSTk is to provide a best-of-class software suite that supports GPS research, analysis, and development. The code is released under the terms of the Lesser GNU Public License. The GPSTk software suite consists of a library and a set of applications that build on the library. The library provides base functionality common to most GPS processing, including algorithms and standards commonly defined in GPS textbooks. Library capabilities include reading and writing observations in standard formats such as RINEX; ephemeris evaluation; position determination using receiver autonomous integrity monitoring (RAIM); atmospheric delay modeling; cycle slip detection and correction; and P-code generation. The applications extend the capabilities of the library to support research and advanced applications of GPS. The GPSTk provides the core set of functionality that is used for GPS research and development at ARL:UT. ARL:UT has been involved with satellite navigation since Transit in the 1960's and is currently conducting research in a wide variety of GPS related fields, including precise survey, monitor station networks, and ionospheric studies. ARL:UT continually improves the library and is committed to its development and maintenance. ARL:UT’s goal is to make the GPSTk a community-wide resource for all users of GPS and GNSS technology. Participation is welcomed at all areas including: new algorithms, suggestions for improvement, bug reports and contributions of additional functionality or applications. Introduction Applied Research Laboratories, The University of Texas at Austin (ARL:UT) has established an open source software project called the GPS Toolkit, or GPSTk. The GPSTk software suite consists of a library and collection of applications that support GPS research, analysis, and development. The software is distributed as source code, released under the terms of the Lesser GNU Public License [1]. The LGPL grants the user a number of rights, notably the ability to choose whether to modify and redistribute the source with any application whether commercial or open source. The design of GPSTk is object oriented and the code is written in platform independent ANSI C++. It has been installed and tested successfully under Windows, Linux, Solaris, and AIX. The GPSTk distribution is available for download at the GPSTk website, http://www.gpstk.org. [2] The website is hosted by SourceForge [3], which provides web services to this and thousands of other open source projects. In addition, the GPSTk website provides an API reference for the latest stable release. The application programmer interface (API) provided by the GPSTk library can be generated by the user directly from the distributed source code using the doxygen package [4]. This article presents the GPSTk starting with the most general information first. The capabilities of the library are summarized by topic. Then, a simple example of using the library is presented and explained. An in-depth application of the GPSTk is also described, in which GPSTk applications are used in a process to model the total electron content of the ionosphere. In conclusion, the future direction of the GPSTk project is discussed. Project Details Background ARL:UT has been active in satellite navigation research and application development since the time of the Transit constellation. ARL:UT has since diversified its work to include, among other areas, precise surveying, radio wave propagation, global tracking networks, receiver design, ionosphere modeling, and deployable sensors. All of these projects have included a substantial software development effort. Over the years, the work of all the GPS-related projects within ARL:UT have contributed software, experience and testing to the creation of a unified common code base for basic GPS software processing. The resulting ARL:UT software suite has now been released as the open source GPS Toolkit. License The source code for the GPSTk is licensed under the Lesser GNU Public License, or LGPL, which grants any user a number of rights and responsibilities. Under terms of this license, users are allowed to redistribute the source code and to modify it. However, unlike the related GNU Public License, or GPL, users may choose not to redistribute code. Notably, commercial applications may use the library and the resulting products may be sold for profit. The details of the LGPL are included in the GPSTk distribution. Documentation The GPSTk website is the best place to begin reading about the GPSTk. The website provides guidance on how to obtain, build and install the software suite. The website also describes example code found in the code distribution. Publications describing the GPSTk, similar to this one, are available for download. Furthermore, the entire library API for the latest stable release is available at the website. The library API can also be generated directly from the source code using the doxygen utility [3]. The website is hosted by SourceForge [3], which hosts a vast number of other open source projects. The SourceForge project supplies a number of online support services vital to the GPSTk project, including: file downloads, bug tracking, mail lists, task lists, and requested features lists. The design goals of the GPSTk library are portability, modularity, understandability, extensibility, and maintainability. These goals allow the GPSTk to maximize the audience and lifetime of the library while decreasing the costs associated with long-term maintenance. The GPSTk meets these goals by strict adherence to the ANSI standard C++ and Object Oriented (OO) analysis and design techniques. OOA/D contrasts with procedural design supported by the C, FORTRAN, and MATLAB languages. In procedural programming, a function library is provided to the user. In OO programming, a class library is provided. Each class is an independent module that can be invoked by the user as an object or extended by the user in the form of a new class. Classes can build upon each other through a number of object-oriented principles, such as inheritance or encapsulation. The GPSTk library relies heavily on the Standard Template Library, or STL [5], which is part of the ANSI C++ standard library. The STL provides uniform OO data structures known as ‘containers’. These include linked lists, maps and vectors; the STL also includes standard operations such as the quicksort algorithm that act on containers. All of the GPSTk code includes documentation designed for extraction by doxygen, a freely available package that generates HTML-based API documentation [4]. Like the GPSTk, doxygen is platform-independent. The doxygen documents are available on the GPSTk web site or easily generated from the code in the distribution. The GPSTk library supports a wide range of functions generally necessary for processing GPS observations. Such functions are commonly described in GPS textbooks or in standards definitions. The library provides file input and output for standard file types such as RINEX and SP-3. The library provides time transformations necessary to reconcile GPS time with other calendars such as the Julian system. Fundamental mathematics such as matrix manipulation and bivariate statistics are also provided. Atmospheric delay models, such as from the troposphere, are available in the GPSTk library. Each of these topics is discussed in depth in the following paragraphs. RINEX Input and Output The library provides for the reading and writing of data files in the RINEX format that is common to many projects. The RINEX specification version 2.1 is completely supported. The library also includes the capability to define custom ‘extended RINEX’ observation types that are useful for storing results and intermediate quantities in RINEX-like files. Ephemeris Handling The library provides complete satellite ephemeris storage and evaluation capabilities with input from both broadcast ephemeris (RINEX navigation files) [6] and SP-3 format files [7]. The ephemeris storage classes encapsulate all the details of ephemeris handling. They require only input file names to load the ephemerides and implement the standard computation algorithms such as the satellite position computation algorithm defined in ICD-GPS-200 [8]. The ephemeris store objects are designed using object-oriented methods (inheritance and polymorphism) so that user can trivially switch usage between broadcast and precise ephemeris. Time Handling Dates and times are fundamental to GPS and to the GPSTk. The ‘DayTime’ class implements many useful date and time formats into a single very powerful object. These formats include Modified Julian Date, GPS time, and calendar dates. Operators are provided to enable the user to treat a DayTime object like any other fundamental C type like int or double. There are also text string-based routines that allow custom formatting of time tags, as well as text string interpretation. Vector and Matrix Routines The GPSTk library includes an extensive matrix and vector package built entirely using templates. The package includes the usual arithmetic operators like addition, subtraction, multiplication, and division. It also includes LU decomposition, singular value decomposition, and Cholesky decomposition. There are also several mathematical algorithms in the library that include bivariate statistics, polynomial fitting, Lagrange interpolation, and Runge-Kutta interpolation. Troposphere Delay Modeling Several troposphere models are provided in the library. Their design uses inheritance and polymorphism so that the user may trivially switch models, or create a new one. There are currently five models implemented that include Hopfield models [9] and the New Brunswick UNB3 model [10]. Positioning Positio