Kinematic Processing

From GeodesyLab
Jump to: navigation, search

Workflow

  • define subnet file (including clock site, a couple of non-kinematically estimated sites, at the ones you are really interested in)
  • define namelist (nml) file (RANDOM-WALK!), at best put them into /home/akda/Kinematic . That's also were examples live
  • adapt script that calls solve (check whether you need a rapid solution -- when orbits aren't in yet)
  • run solution
  • extract data from .trop files
  • plot results.

Temporal Resolution below 5 min

The standard solutions run with a temporal solution of 5 minutes (6 minutes if older than 1995). This means the standard qm files do not contain enough information if you need a finer resolution. Here is what to do:

  • create campaign directory: newcamp /gps/data/CAMPAIGN_NAME-interval
  • create qm files for all rinex files from sites that go into that campaign for respective time:
           
            rnx2qm RINEX-file -dir $procdir -interval 30
    
            or
    
            reprocess_rinex station-name start-day end-day rinexdir outdir interval
           
    

    where $procdir=/gps/data/CAMPAIGN_NAME-interval, i.e. the campaign directory you just created.

  • copy the orbits for the repective day(s) into /gps/data/CAMPAIGN_NAME-interval/orbit
  • add the -nosvclkfile flag to your solve call, to make sure the satellite clocks are not used ...
  • or get high resolution clocks for the respective days from ftp://sideshow.jpl.nasa.gov/pub/gipsy_products/hrclocks/ and copy those into /gps/data/CAMPAIGN_NAME-interval/orbit
  • if you got the high resolution orbits, make sure to rename them: mv *.tdp *.tdpc
  • make sure to update the $CAMP variable in the make-xxxxx file that you copy into your /gps/data/CAMPAIGN_NAME-interval/flt directory

Standard/Automated Processing for Kinematic PPP Solutions

There are some new scripts available to make it quick and easy to do high rate static and kinematic solutions. These implement a standard solution using 1 sample per second data, and using the 3.0 solution strategy otherwise.

  1. Create a new campaign directory using the newcamp script. Copy the orbit files you will need for whatever days you are processing. Also, collect the 1 sample per second rinex files in some directory (not in the campaign data structure).
  2. Run the script f-e.kinematic to create 1 sample per second qm files. The full command line is f-e.kinematic rinexdir [campdir]. The first argument is the directory where your rinex files (compressed .Z or .gz files) are, and the optional second directory is the top-level campaign directory (default is $CAMP).
  3. You will need to check the data for cycle slips and other problems using a high-rate static solution. Run the script make_static_pppsolve_script in $CAMP/flt to make a script that will generate a script to run such a solution for all qm files. You may want to edit the resulting script make-static to add lines defining the $CAMP variable so that you can run it more automatically.
  4. Check the residuals, add ambiguity parameters as needed. Same as a regular solution.
  5. Run PPP solutions for all stations using the script run_3.0_kinematic_solution. Full syntax is run_3.0_kinematic_solution -date yymmmdd [-update]. The script will run all qm files for that date, putting the solutions in the sub-directory PPP3.0kin. The time-depenent parameter files (TDP files) are in the $CAMP/trop directory. With the -update flag, the script will only run qm files that have not been run before.
  6. Extract the time-dependent solutions for each station and make SAC files using the script <trop2enu>. Give it the .trop file as an argument, and it will create corresponding .enu and .SAC files.

Defining Custom Solution Parameters

Use an NML file to define the solution parameters. Here is an example to start with.

$PREP                       !namelist input for preprefilter           
! reference clock is REQUIRED.  you need to use one of 
! your sites, generally one with a stable clock.  Mostly
! it means anything except a trimble.  If an external
! oscillator is used, then it can be a reference clock.
  REFCLOCK = 'THU1' 
! just says whether the troposphere will be estimated stochastically.
! except for very short baselines, this is always true.
  WETZTROP  = .TRUE.                                                    
! This is the white noise sigma applied to phase ambiguity parameters 
! whenever a new ambiguity needs to be estimated (.1 seems to work).
  yaddsg = 0.1
! this is the random walk constraint for the troposphere, in km/sqrt(sec)
  TROPDRIFT = 1.70D-7                                                   
! if you want to estimate additional paraetmeters stochastically, you
! put them here.  You don't have to put clocks here, because GIPSY
! assumes that all clocks will be estimated stochastically.
  SSTCH = 'STA E   SCOB','STA N   SCOB', 'STA V   SCOB'
! in this example they are the east, north, and vertical components 
! for station SCOB.  Generally station locations are not
! estimated stochastically
! This tells you how to constrain the parameters you named above.
  SPSIG = 3*1.0D-6,  ! random walk constraint
  SMTAU = 3*'RANDOMWALK', 
! how often do you want to estimate these stochastic parameters
  SDELT = 3*'/00:05', ! compute a position every 5  minutes 

                                                                       
$END                                                                   
                                                                       
                                                                       
$INIT                       !namelist input for filter                 
  YDEL(1) = 'STABIAS THU1' ! same for the reference clock
 ! STABIAS is the GIPSY name for a station clock. SATBIAS is 
 ! for a satellite clock

 ! this is if you are estimating station positions stochastically.
 ! just do it.
  grounddelete = 'SCOB',
 STAINT    = .FALSE.                                                   
 IDIGIT    = 9                                                         
                                                                       
  ! this is a list of all the parameters you DO NOT                         
  ! want GIPSY to estimate.  look at the cartoon book
  ! for more info.  X, Y, Z, DX, DY, DZare the satellite orbits.
  ! you don't want to estimate them if youare using someone
  ! else's orbits, which I would assume you are all going to do
 YDEL(2)      = 'UT1-UTC', 'UT1-UTC RATE', 'X POLE *', 'Y POLE *',     
             'GEOCENTER*', 'V LOVE', 'H LOVE', 'DRYZTROP*',            
             'LMPZTROP*', 'STA DRFT*', 'STA ACCL*', 'SAT DRFT*',       
             'SAT ACCL*', 'BIASPSR*', 'SOLARSCLTOP*','Y_BIAS  TOP*',   
             'XPOLEMOTION','XPOLERATE','YPOLEMOTION','YPOLERATE',      
             'X*',  'Y*', 'Z*',  'DX*', 'DY*', 'DZ*','TRPAZ*', 
              'SOLSCL_X*', 'Y_BIAS*', 'SOLSCL_Z*', 'SOLARSCL*'
                                                                       
 SOLPRT    = .TRUE.                                                    
 NOMEAS    = .FALSE.                                                   
 SOLVE     = .TRUE.                                                    
 DEBUG     = 1                                                         
 OUTNAME   = 'OASIS'                                                   
$END                                                                   
                                                                       
$APRIORI                    !namelist input for filter                 
 APALL     = .TRUE.                                                    
 !  The following are NOT currently estimated                          
 !                                                                     
 ! Parameters actually estimated start here                            
 !                                                                     
    APNAMS( 1) =      'WETZTROP*',        APSIGS( 1) = 10.0D-5  !10 cm 
    APNAMS( 2) =      'STABIAS*',         APSIGS( 2) = 3.0D5   !1 sec  
    APNAMS( 3) =      'SATBIAS*',         APSIGS( 3) = 3.0D5   !1 sec  
    APNAMS( 4) =      'PHASE*',           APSIGS( 4) = 1.0D-1   !1 micr
   ! I am using ENV here, but you should set these for XYZ if you are doing
   ! it in the Cartesian frame
    APNAMS( 5) =      'STAE*',            APSIGS( 5) = 1.  !1 km
    APNAMS( 6) =      'STAN*',            APSIGS( 6) = 1.  !1 km
    APNAMS( 7) =      'STAV*',            APSIGS( 7) = 1.  !1 km
    APNAMS( 8) =      'STA E   KOKB',     APSIGS( 8) = 10.0D-3  !10 m
    APNAMS( 9) =      'STA N   KOKB',     APSIGS( 9) = 10.0D-3  !10 m
    APNAMS(10) =      'STA V   KOKB',     APSIGS(10) = 10.0D-3  !10 m
                                                                      
                                                                       
                                                                       
                                                                       
$END                                                                   
                                                                       
$DATAWGHT                 !namelist input for filter, edtpnt2, and post
 ELMINSTA  = 15.0D0 ! elevation angle minimum                          
 ! 110 is pseudorange, 120 is phase
 DATYPE    = 110,    120,   
 DATSIG    = 1.0D-3, 1.0D-5, ! these are in km
 XRECNM(1) = 'HOLE' ! this is to delete a specific receiver
 XXMTNM(1) = 'GPS04' ! this is to delete a specific satellite
$END                                                                   
                                                                       
$SMINPUT                  !namelist input for smapper                  
 SAVEUD     = 'LAST'                                                   
 SAVESIGMA  = .TRUE.                                                  
 IDIGIT     = 9                                                        
 MAPTYP = 'CARTESIAN'
 OUTNAME    = 'OASIS'                                                  
  TDPFULLPRECISION = .TRUE.
 ! write out these parameters for stochastic parameters
 ! GIPSY only creates this file if asked for (it is a TDP
 ! - time-dependent-parameter file).  If you want to know
 ! clock values, then you need to write their names here.
 WRTTDP  =  'STA E   SCOB',  'STA N   SCOB',  'STA V   SCOB',
 TDPTYP  = 'TIMEVARY',
 TDPTOL  = 1.0d00,
 STAINT     = .FALSE.                                                  
$END                                                                   
                                                                       
$APRIORINML              !namelist input for smapper                   
$END                                                                   
                                                                       

$LIMITS                 !namelist input for postfit                    
 ! outlier criterion, i.e. flag all phase data greater than 5 cm.
 STAINT = .FALSE.                                                      
 DATYPE  = 120                                                         
 WINDOW  = 5.0D-5,                                                     
$END                                                                   
                                                                       
$EDTINIT                !namelist input for edtpnt2                    
 STAINT = .FALSE.                                                      
 DEBUG  = .TRUE.                                                       
$END