⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svpcodegen.hpp

📁 一个gps小工具包
💻 HPP
字号:
#pragma ident "$Id: SVPCodeGen.hpp 500 2007-04-27 12:02:53Z ocibu $"//============================================================================////  This file is part of GPSTk, the GPS Toolkit.////  The GPSTk is free software; you can redistribute it and/or modify//  it under the terms of the GNU Lesser General Public License as published//  by the Free Software Foundation; either version 2.1 of the License, or//  any later version.////  The GPSTk 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 Lesser General Public License for more details.////  You should have received a copy of the GNU Lesser General Public//  License along with GPSTk; if not, write to the Free Software Foundation,//  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA//  //  Copyright 2004, The University of Texas at Austin////============================================================================//============================================================================////This software developed by Applied Research Laboratories at the University of//Texas at Austin, under contract to an agency or agencies within the U.S. //Department of Defense. The U.S. Government retains all rights to use,//duplicate, distribute, disclose, or release this software. ////Pursuant to DoD Directive 523024 //// DISTRIBUTION STATEMENT A: This software has been approved for public //                           release, distribution is unlimited.////=============================================================================#ifndef SVPCODEGEN_HPP#define SVPCODEGEN_HPP#include "DayTime.hpp"#include "PCodeConst.hpp"#include "CodeBuffer.hpp"#include "X1Sequence.hpp"#include "X2Sequence.hpp"namespace gpstk {/** @defgroup code    Code generator   *///@{   /**    *     SV P-code Generator.    *     Applied Research Laboratories, The University of Texas at Austin    *     August 2003    *    *  SVPCodeGen handles the P-code generation for a particular SV.  Each object    *  is initialized based on the particular satellite (identified by PRN code)     *  and the Z-count when generation is to begin.  The Z-count must be an even    *  four Z-count (six second) interval.  Input values that do not align with four    *  Z-count boundaries are rounded BACK to the next earliest 4 Z-count boundary.    *    *  After initializaiton, P-code is generated in 6-second "chunks".  The chunks    *  are returned to the caller in CodeBuffer objects.  After each call to    *  getNextSixSeconds( ), the application shall call increment4ZCounts( )     *  to advance the time by four Z-counts.  This separation between getting the     *  bits and advancing the time is purposely done to allow for easier     *  coordination when generating code for multiple satellites and performing    *  other operations on the data after generating the P-code and before moving    *  on to the next increment.    *    *  A key aspect of this class is the use of the X1Sequence and X2Sequence    *  classes.  Analysis of the P-code generation processes reveals that the     *  combined X1A/X1B bit stream repeats every 1.5s (1 Z-count) and is the    *  same for all satellites.  At the end of 6s (4 Z-counts), the number of     *  bits is evenly divisable by 32 (which is the assumed wordsize for the     *  applicationn). Therefore, to obtain X1 bits, getNextSixSeconds( ) need only    *  access the indiviual words from the X1Sequence starting at the beginning    *  of the array and progressing to the end.  The restriction that the coder    *  must start on an even 6-second (4 Z-count) epoch and generate intervals of     *  six seconds obviates the need to build code to compute bit positions    *  within X1A cycles or any information on the X1A/X1B relationship.  See    *  documentation on the class X1Sequence for more information.    *    *  The situation with respect to X2A/X2B is somewhat more complicated.  Once    *  again, the X2A/X2B sequence is only 1.5s long.  However, the X2 sequence is    *  "slipped" wrt the X1 sequence in two ways: (1.) once per week (at the     *  beginning of week), it is slipped by a number of bits corresponding to    *  the PRN ID, (2.) slipped 37 bits for each X2A cycle.  This    *  means that it is necessary to keep track of the bit position within the    *  X2 sequence and "chop out" 32 bits at a time.  See documentation for the    *  class X2Sequence for more information.    */   class SVPCodeGen   {   public:      /**       *  SVPCodeGen::SVPCodeGen( const int PRNID, const DayTime ) -        *  Instantiate and initialize a SVPCodeGen object.  Based on the       *  PRNID and the ZCount, determine the appropriate starting        *  location in the X2 sequence and set it up.  Set the current        *  time.        */      SVPCodeGen( const int SVPRNID, const gpstk::DayTime& dt );      ~SVPCodeGen( ) {};               /**       *  Starting at the beginning of the X1 sequence and at the        *  appropriate location (as determined by time and PRN), advance       *  through both the X1 sequence and X2 sequences combining the        *  sequences 32 bits at a time until the X1 sequence for this       *  six second period has been exhausted.  Sometime within that        *  period, the X2 sequence will be exahusted  (including the       *  appropriate delays) and will rollover to the beginning of        *  the sequence.       */      void getCurrentSixSeconds( CodeBuffer& pcb );               /**       * Generally, the only action is to increment the Z-count by        * 4 counts.  This function COULD be included at the end of        * getCurrentSixSeconds( ), however, it has been separated to       * allow the calling application to have a consistent view of        * all the state conditions (for output and debug) before        * moving the time forward for the next generation.       */      void increment4ZCounts();               /**       * Returns the current time to the calling method.         */      const gpstk::DayTime& getCurrentZCount() const {return currentZTime;}      /** Allows the user to set the current time. While a any time may          be specified, this routine will take the Z % 4 for the actuall           time.      **/      void setCurrentZCount(const gpstk::GPSZcount& z);        private:      gpstk::X1Sequence X1Seq;      gpstk::X2Sequence X2Seq;      gpstk::DayTime currentZTime;      int PRNID;   };   //@}}     // end of namespace#endif // SVPCODEGEN_HPP

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -