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

📄 stochasticmodel.hpp

📁 一个gps小工具包
💻 HPP
字号:
#pragma ident "$Id: $"/** * @file StochasticModel.hpp * Base class to define stochastic models, plus implementations * of common ones. */#ifndef STOCHASTICMODEL_HPP#define STOCHASTICMODEL_HPP//============================================================================////  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//  //  Dagoberto Salazar - gAGE ( http://www.gage.es ). 2007, 2008////============================================================================#include "DayTime.hpp"#include "DataStructures.hpp"namespace gpstk{      /** @addtogroup DataStructures */      //@{      /** This is a base class to define stochastic models. It computes the       *  elements of Phi and Q matrices corresponding  to a constant       *  stochastic model.       *       * @sa RandomWalkModel, WhiteNoiseModel, PhaseAmbiguityModel       *       */   class StochasticModel   {   public:         /// Default constructor      StochasticModel() {};         /// Get element of the state transition matrix Phi      virtual double getPhi()      { return 1.0; };         /// Get element of the process noise matrix Q      virtual double getQ()      { return 0.0; };         /** This method provides the stochastic model with all the available          *  information and takes appropriate actions. By default, it does          *  nothihg.          *          * @param type       Type of variable.          * @param sat        Satellite.          * @param gData      Data object holding the data.          *          */      virtual void Prepare( const TypeID& type,                            const SatID& sat,                            gnssSatTypeValue& gData )      { return; };         /** This method provides the stochastic model with all the available          *  information and takes appropriate actions. By default, it does          *  nothihg.          *          * @param type       Type of variable.          * @param sat        Satellite.          * @param gData      Data object holding the data.          *          */      virtual void Prepare( const TypeID& type,                            const SatID& sat,                            gnssRinex& gData )      { return; };         /// Destructor      virtual ~StochasticModel() {};   };      /** This class compute the elements of Phi and Q matrices corresponding        *  to a random walk stochastic model.       *       * @sa StochasticModel, ConstantModel, WhiteNoiseModel       *       * \warning RandomWalkModel objets store their internal state, so you       * MUST NOT use the SAME object to process DIFFERENT data streams.       *       */   class RandomWalkModel : public StochasticModel   {   public:         /// Default constructor. By default sets a very high Qprime and         /// previousTime is DayTime::BEGINNING_OF_TIME.      RandomWalkModel()         : qprime(90000000000.0), previousTime(DayTime::BEGINNING_OF_TIME) {};         /** Common constructor          *          * @param qp         Process spectral density: d(variance)/d(time) or          *                   d(sigma*sigma)/d(time).          * @param prevTime   Value of previous epoch          *          * \warning Beware of units: Process spectral density units are          * sigma*sigma/time, while other models take plain sigma as input.          *          */      RandomWalkModel( double qp,                       const DayTime& prevTime = DayTime::BEGINNING_OF_TIME )         : qprime(qp), previousTime(prevTime) {};         /** Set the value of previous epoch          *          * @param prevTime   Value of previous epoch          *          */      RandomWalkModel& setPreviousTime(const DayTime& prevTime)      { previousTime = prevTime; return (*this); }         /** Set the value of current epoch          *          * @param currTime   Value of current epoch          *          */      RandomWalkModel& setCurrentTime(const DayTime& currTime)      { currentTime = currTime; return (*this); }         /** Set the value of process spectral density.          *          * @param qp         Process spectral density: d(variance)/d(time) or          *                   d(sigma*sigma)/d(time).          *          * \warning Beware of units: Process spectral density units are          * sigma*sigma/time, while other models take plain sigma as input.          *          */      RandomWalkModel& setQprime(double qp)      { qprime = qp; return (*this); }         /// Get element of the process noise matrix Q      virtual double getQ();         /** This method provides the stochastic model with all the available          *  information and takes appropriate actions.          *          * @param type       Type of variable.          * @param sat        Satellite.          * @param gData      Data object holding the data.          *          */      virtual void Prepare( const TypeID& type,                            const SatID& sat,                            gnssSatTypeValue& gData );         /** This method provides the stochastic model with all the available          *  information and takes appropriate actions.          *          * @param type       Type of variable.          * @param sat        Satellite.          * @param gData      Data object holding the data.          *          */      virtual void Prepare( const TypeID& type,                            const SatID& sat,                            gnssRinex& gData );         /// Destructor      virtual ~RandomWalkModel() {};   private:         /// Process spectral density      double qprime;         /// Epoch of previous measurement      DayTime previousTime;         /// Epoch of previous measurement      DayTime currentTime;   };      /** This class compute the elements of Phi and Q matrices corresponding        *  to a white noise stochastic model.       *       * @sa StochasticModel, ConstantModel, RandomWalkModel       *       */   class WhiteNoiseModel : public StochasticModel   {   public:         /** Common constructor          *          * @param sigma   Standard deviation (sigma) of white noise process          *          */      WhiteNoiseModel( double sigma = 300000.0 )         : variance(sigma*sigma) {};         /// Set the value of white noise sigma      WhiteNoiseModel& setSigma(double sigma)      { variance = sigma*sigma; return (*this); }         /// Get element of the state transition matrix Phi      virtual double getPhi()      { return 0.0; };         /// Get element of the process noise matrix Q      virtual double getQ()      { return variance; };         /// Destructor      virtual ~WhiteNoiseModel() {};   private:         /// White noise variance      double variance;   };      /** This class compute the elements of Phi and Q matrices corresponding        *  to a phase ambiguity variable: Constant stochastic model within        *  cycle slips and white noise stochastic model when a cycle slip       *  happens.       *       * @sa StochasticModel, ConstantModel, WhiteNoiseModel       *       */   class PhaseAmbiguityModel : public StochasticModel   {   public:         /** Common constructor          *          * @param sigma   Standard deviation (sigma) of white noise process          *          */      PhaseAmbiguityModel( double sigma = 300000.0 )         : variance(sigma*sigma), cycleSlip(false) {};         /// Set the value of white noise sigma      PhaseAmbiguityModel& setSigma(double sigma)      { variance = sigma*sigma; return (*this); }         /** Feed the object with information about occurrence of cycle slips.          *          * @param cs   Boolean indicating if there is a cycle slip at current          *             epoch.          *          */      PhaseAmbiguityModel& setCS(bool cs)      { cycleSlip = cs; return (*this); };         /// Get element of the state transition matrix Phi      virtual double getPhi();         /// Get element of the process noise matrix Q      virtual double getQ();         /** This method provides the stochastic model with all the available          *  information and takes appropriate actions.          *          * @param type       Type of variable.          * @param sat        Satellite.          * @param gData      Data object holding the data.          *          */      virtual void Prepare( const TypeID& type,                            const SatID& sat,                            gnssSatTypeValue& gData );         /** This method provides the stochastic model with all the available          *  information and takes appropriate actions.          *          * @param type       Type of variable.          * @param sat        Satellite.          * @param gData      Data object holding the data.          *          */      virtual void Prepare( const TypeID& type,                            const SatID& sat,                            gnssRinex& gData );         /// Destructor      virtual ~PhaseAmbiguityModel() {};   private:         /// White noise variance      double variance;         /// Boolean stating if there is a cycle slip at current epoch      bool cycleSlip;   };      //@}   }#endif // STOCHASTICMODEL_HPP

⌨️ 快捷键说明

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