rtklib的manual解讀

轉自:RTKLib的Manual解讀-耀禮士多德

Key-word:

integer ambiguity resolution :整週模糊度解算  navigation:導航  Kinematic:動態,RTK的K  rover:漫遊  validation:驗證  antena:天線  phase:相位  Augmentation:曾廣  carrier-base:基於載波  code-based:基於測距碼(僞距)  raw binary:原始二進制  receiver:接收者(接收機)   ephemeris:星曆  Post‐processing positioning:後處理定位  ionosphere:電離層  troposphere:對流層  atmosphere:大氣層  sphere:球體,範圍   calibration:校準   velocity :速度   acceleration :加速度  standard deviation:標準差   threshold:閾值  epoch:曆元  bias:偏向,偏置  delta position:增量位置  algorithm:算法

command‐line user interface(CUI):命令行用戶接口

ambiguity resolution(AR):模糊度解算

antenna reference point(ARP):天線參考點

Double difference(DD):雙差。一種對計算模型的轉換辦法,消除部分系統誤差。

linear combination(LC):線性組合

dilution of precision(DOP):精度因子

geometric DOP(GDOP):幾何精度因子

 

Global Navigation Satellite System (GNSS):全球衛星導航定位系統。其實是對衛星數據處理,並且通過網絡發送數據的系統。是一個統稱,例如:GPS系統,北斗衛星導航系統、GLONASS系統(俄羅斯)、Galileo衛星導航系統(歐盟)。

International GNSS service(IGS):國際全球衛星導航定位系統服務,可以看成比單一個GNSS用的衛星系統更廣泛的GNSS系統。爲PPP定位提供高精度的衛星座標和衛星鐘差。

continuous operating reference stations(CORS):連續運行基準站。CORS可以通過GNSS系統,發佈數據。

Cycle‐Slip:周跳

Geometry-free:無幾何。(GPS 雙頻資料所接收到的原始零次差分 (Zero-difference)觀測量作適當的線性組合成爲無幾何(Geometry-free)觀測量,即 將L 1 觀測量減去L 2 觀測量即可獲得無幾何觀測量)

Quasi-Zenith Satellite System(QZSS) :準天頂衛星系統,日本的

LEX:是QZSS調製在L6載波上的信號

precise point positioning(PPP):精密單點定位技術(GPS測量與數據處理P190)

sigle point positioning(SPP):標準單點定位。也就是僞距單點定位。在PPP中作爲定位的初始解(GPS測量與數據處理P186)

earth centered eath fixed(ECEF):該座標系以地球質心爲原點,Z軸向北沿地球自轉軸方向,X軸指向經緯度的(0,0)位置,右手系Y軸指向90度經線。該系與地球一同轉動。 

earth centered inertial(ECI):   座標原點取在地心,X軸指向春分點,Z軸指向北極,Y軸與前者構成右手系。該系不與地球一同轉動,因此可以應用牛頓定律。 

Greenwich mean sidereal time(GMST):格林尼治平均行星時

Galileo System Time(GST ):伽利略系統時間

Time Of Week(TOW):GPS中,在某個週中的時間(秒)

on-the-fly(OTF):即使生成/高速運行(計算機術語)

phase center variation(PCV):相位中心變化  

antenna phase center(APC): 天線相位中心

zenith total delay (ZTD):天頂總延遲

satellite center of mass(COM):衛星質心

inter‐frequency bias(IFB ): 頻率間偏置(頻漂?不同接收機,對同一衛星,同一衛星產生的?)

state space representation(SSR):狀態空間表示

pseudo random noise(PRN):僞隨機噪聲  *還記得pseudo inverse嗎

signal to noise ratio(SNR):信噪比(信號是波,噪聲也是波,應該怎麼比呢)

slant total electron content(STEC):斜電子含量

total electron content(TEC):總電子含量

ocean tide loading(OTL):潮汐負荷

extended Kalman filter (EKF):擴展卡爾曼濾波

fractional cycle bias(FCB):週期分數偏置

IONosphere map EXchange format(IONEX):一種用來轉換,比較,或者生成TEC分佈圖的通用格式

Satellite-Based Augmentation System(SBAS):廣域差分增強系統(星基增強系統,'基站增強')

Differential GPS(DGPS):SBAS的一種。基站計算出僞距修正值,並傳遞給流動站,達到對流動站中影響較大的大氣誤差的影響進行削弱的效果,提升了定位精度,這種方式基於基站和流動站誤差的距離相關性,隨着基線的變長,相關性降低,定位效果變差。

DGNSS:SBAS的一種。由GNSS系統提供差分數據。常將DGPS/DGNSS放到一起。

Radio Technical Commission for Maritime services(RTCM):國際海運事業無線電技術委員會 ,也代表一種GNSS差分信號格式標準(也就是說這是GNSS系統發佈差分數據的格式標準)。可用於差分改正。

National Marine Electronics Association (NMEA):美國國家海洋電子協會,也代表GPS導航設備統一的RTCM標準協議。可用於網絡RTK。

*RTK是動態相對定位,而差分是靠基站的改正數據,改正定位,兩者數學模型不一樣。但都是實時定位。

GPGGA:是NMEA協議中的一種語句格式,描述了接收機的位置信息。類似的,有GPRMC

GPGSV:是NMEA協議中的一種語句格式,可見衛星信息。

Networked Transport of RTCM via Internet Protocol(NTRIP):基於互聯網轉發RTCM

Receiver Independent Exchange Format(RINEX):接收機獨立交換格式。是各種數據聚合的格式,常用於後處理定位。RTCM數據,也可以轉換爲RINEX格式

 

RTKLib的庫簡介:

1. 處理矩陣和向量函數

2. 處理時間和字符串函數

3. 處理座標轉換和水準面函數

4. 導航函數

5. 提供定位模型(電離層,對流層,天線PCV)

6. 使用DGPS或DGNSS兩個廣域差分增強系統進行改正

7. 單點定位

8. 基於載波或基準於測距碼的相對定位

9. OTF整週模糊度解算

10. 接收機原始二進制數據輸入

11. 定位解算以NMEA格式輸入輸出

12. RINEX觀測數據、導航信息輸入輸出

13. 精確星曆輸入

14. 數據流通訊庫(猜測是TCPC/TCPS/FILE等流)

15 基於互聯網轉發RTCM庫

16. RTK(實時動態)的GPS、GNSS定位服務器

17. RTCM 2.3/3.0/3.1/3.2格式處理

18. downloader functions

 

Windows + Visual studio下編譯:https://www.cnblogs.com/DKSoft/p/4677381.html

*使用前當然要#include "rtklib.h"了

一些基本概念:

1.  定位分爲後處理定位(Post‐processing positioning)和實時定位(real‐time positioning)。

2.  RTKLIB中,用G01-G32表示GPS衛星號,用B01-B24表示北斗,C01-C15表示伽利略

3.  通常來說,PPP定位,需要由IGS提供高精度的衛星座標和衛星鐘差。

4. GNSS系統可以提供衛星座標、衛星鐘差、CORS差分數據(RTCM)等。

5. RTKLIB內部中,運算使用的是GPST。(輸入數據會轉成GPST,輸出的時候,又可以轉回需要的時間系統)。

6. RTKLIB內部中,運算使用的是ECEF座標系統。

7. RTKLIB只能解單基線,而且輸出的基線向量,是  流動站座標 - 基準站座標


 

 

 

 函數介紹:

rtkcmn.c

衛星和衛星系統部分:

satno():將衛星系統和僞隨機噪聲編號,轉爲衛星編號

satsys():衛星編號轉衛星系統

satid2no() :衛星ID轉衛星編號 對應 satno2id():衛星編號轉衛星ID

obs2code() :觀測類型(字符串)轉觀測類型(數字值) 對應 code2obs():觀測類型(數字值)轉觀測類型(字符串)

satexclude():(返回0或1)測試排除衛星(猜測是在開始處理數據的時候用的)

testsnr() :(返回1:masked,0:unmasked)測試信噪比,猜測應該是信號是否能覆蓋噪音(換句話說噪聲的振幅很少,或者頻域很窄?)

setcodepri() :設置代碼優先級(這是針對多個衛星系統的)

getcodepri() :獲取代碼優先級

*有sat開頭都和衛星有關的

矩陣和向量部分:

mat():創建一個矩陣(allocate memory of matrix)。返回的是double*,使用堆空間(要自己釋放)。由此可見,rtklib是用double來存儲矩陣,不是用類/結構體,所以行列數要時刻傳入傳出。

imat():創建int型矩陣

zeros() :創建0矩陣,返回的是double*(用這個代替mat(),起碼會將元素初始化爲0)

eye():創建單位矩陣

dot():向量點乘(點積),向量也是double*型。a.b,幾何意義是,b在a方向上的長度,乘以a的長度。

norm():歐幾里得範數,說白了,就是同一個向量點乘後開方,求向量長度

cross3() :三維向量外積(叉積)(x1,y1,z1)×(x2,y2,z2)=(y1z2-y2z1,z1x2-z2x1,x1y2-x2y1);新向量長度|z|=|x||y|*sin<x,y>,幾何意義就是求垂直於xy方向上的向

(看《線性代數的幾何意義》)

normv3() :三維向量歸一化;就是將一個向量,變成長度爲1,方向不變的向量。

matcpy():將B矩陣的值,複製到A中,所以傳入兩個矩陣

matmul() :矩陣相乘

matinv():矩陣求逆。這個方法中,調用的dgetrf_沒有找到實現,而是一個extern的函數聲明,而且會被預編譯宏替換爲dgetrf。根據預編譯指令,可知dgetrf的定義是在Math Kernel Library(MKL)庫中****

solve():解Ax=b,求解也用到dgetrf_,同上了;

lsq():用最小二乘法,解Ax=b

filter():卡爾曼濾波狀態更新

smoother() :卡爾曼平滑 

matprint():打印矩陣

matfprint():打印矩陣到文件

字符串和時間數據處理部分:

*時間的類型,統一爲gtime_t

str2num() :字符串轉數字

str2time():字符串轉時間,參數“yyyy mm dd hh mm ss”形式

time2str():時間轉yyyy/MM/dd HH:mm:ss的形式

epoch2time() :獲取時間。 輸入double *,要先初始化,設置其元素爲:{year,month,day,hour,min,sec}

time2epoch() :獲取 {year,month,day,hour,min,sec}。傳入double*要先初始化,並且長度爲6

gpst2time() :將GPS周,以及在這週中的時間(秒)作爲參數,獲取時間值

time2gpst() :時間轉GPS周

*gst2time():伽利略時間(GST),轉時間。輸入的是衛星周,以及此週中的時間(秒)

*time2gst():時間轉GST周

*time2gst() :北斗時間(BDT),轉時間

*time2bdt() :時間轉BDT周

time_str() :time2str()差不多,只是返回的是靜態內存的首地址,所以不要亂釋放或者使用

timeadd() :給一個時間添加秒數

timediff() :兩個時間相減,返回相差秒數

*gpst2utc():GPS時轉UTC時,傳入和返回的都是統一爲gtime_t

*utc2gpst():UTC時轉GPS時

*gpst2bdt():GPS時轉北斗時(BDT)

*bdt2gpst():北斗時(BDT)轉GPS時

timeget() :當前時間轉UTC時

time2doy() :獲取時間中的日數部分

utc2gmst() :UTC轉格林尼治平均行星時(GMST), 不知爲什麼會返回弧度

adjgpsweek():調整GPS周。使用系統時間來調整GPS週數。

tickget() :獲取當前時間的毫秒位

sleepms() :線程掛起若干毫秒

reppath():將指定文件中的,指定移動站,測站的某些屬性值,替換爲另一格式,並輸出到指定的文件

reppaths() :是上一個方法的,批量處理

//

座標處理部分

ecef2pos() :地心空間直角座標(x,y,z)轉大地座標(lon,lat,h

pos2ecef() :大地座標(lon,lat,h)轉地心空間直角座標(x,y,z)

ecef2enu():ECEF座標(x,y,z)轉地方座標(N,E,U)。*參數中要輸入(X,Y,Z)以及其大地座標(lon,lat)。 地方座標(N,E,U)也就地方正切座標。

enu2ecef() :地方座標(N,E,U)轉ECEF座標(x,y,z)。*參數中要輸入(N,E,U)以及其大地座標(lon,lat)。

covenu():將ECEF座標的協方差陣,轉換爲地方座標(N,E,U)的協方差陣。*參數要輸入大地座標(lon,lat)。

covecef():將地方座標(N,E,U)的協方差陣,轉換爲ECEF的協方差陣。*參數要輸入大地座標(lon,lat)。

xyz2enu():求ECEF座標(x,y,z)轉地方座標(N,E,U)的轉換矩陣,ecef2enu()中也用到。

eci2ecef():求ECI座標(x,y,z)轉ECEF座標(x,y,z)的轉換矩陣。

deg2dms():將度數,轉爲整度,整分,整秒。 參數是double 和double*。

dms2deg() :將整度,整分,整秒,轉爲度。參數是double*。

//

輸入輸出功能

readpos() :從測站位置文件件中,讀取指定測站位置

sortobs() :對觀測數據,進去整理,排序,去重。傳入的是obs_t*

uniqnav():刪除導航數據中的重複星曆。出入的是nav_t*。

screent() :通過時間,和時間間隔,篩選數據。傳入的都是時間的參數gtime_t,猜測是找到數據文件的時間,和輸入的時間等參數做對比,看看數據是否可用。

readnav():從文件中讀取導航數據。參數是初始化了的const char *, nav_t *

savenav():將導航數據寫到文件中

freeobs() :釋放觀測數據。參數是obs_t*

freenav() :釋放導航數據。參數是nav_t *。

 

rinex.c 

RINEX文件簡介:RINEX文件有幾種,分爲觀測值文件、導航電文文件、氣象數據文件、鍾文件。各個文件中,又分爲“文件頭”和“數據體”。

觀測值文件:存放每一觀測曆元所觀測到的衛星及載波相位、僞距和多普勒等觀測值數據。其文件頭,有測站名,天線信息測站近似座標、觀測值數量及類型、曆元間隔。

導航電文文件:衛星鐘差改正模型的參數,及衛星的軌道數據。其文件頭,包含電離層模型參數,以及說明GPS時與UTC間關係的參數和跳秒。

氣象數據文件:存放觀測過程,每隔一段時間在測站天線附近所測定的乾溼、相對溼度和氣壓等數據。

ssssdddf.yyt,ssss代表測站號,ddd代表一年內的第幾日,f代表觀測時段號,yy代表年份。t : t爲O時代表觀測值文件,N代表導航電文,M代表氣象數據,C代表鍾 ,G代表GLONASS導航電文

 RTCM或BINEX格式的數據,經過一定的手段(使用RTKCONV.exe)可以轉換爲RINEX格式的觀測文件(OBS)或導航電文(NAV)

.SP3是精確星曆文件,.eph也是星曆文件

 

readrnx() :從RINEX文件中,讀取觀測數據和導航電文。參數有obs_t*nav_t *初始化爲NULL,函數中會申請內存和賦值。

readrnxt() :從RINEX文件中,讀取指定時間段的觀測數據和導航電文。

readrnxc() : 從RINEX文件中,讀取時鐘。參數是nav_t *初始化爲NULL。

outrnxobsh() :輸出從RINEX中,讀取的導航電文的‘文件頭’ 到指定文件中。參數有已經初始化好的nav_t *。RINEX文件格式,是有分‘文件頭’的。

outrnxobsb() :輸出從RINEX中,獲得的‘觀測數據體’到指定文件中。參數有已初始化的obsd_t*。RINEX文件格式,是有分‘數據體’的。obsd_tobs_t的字段成員

outrnxnavh():輸出從RINEX中,獲得的‘導航電文’文件頭到指定文件中。參數有nav_t*

outrnxnavb() :輸出從RINEX中,獲得的‘導航電文’數據體到指定文件中。參數有eph_t *,是星曆數據。是nav_t中的成員

*uncompress() :文件解壓。應該是解壓zip。參數是兩個路徑。

init_rnxctr() :初始化一個rnxctr_t,主要是申請空間rnxctr_t內部的成員有obs_t,nav_t,sta_t等重要的數據成員

free_rnxctr() :釋放rnxctr_t的空間,包含期子成員指針所指向的內存塊。

open_rnxctr() :從RINEX文件中,讀取文件信息,設置到rnxctr_t中的屬性。主要是讀文件版本,類型(是觀測值文件、還是導航電文),衛星系統(是GPS,還是北斗),時間系統(是UTC還是別的)

input_rnxctr():從RINEX文件中,讀取文件信息,設置其obs_t、nav_t信息。主要是讀取“觀測值文件”和“導航電文”這兩類RINEX文件。

options.c 

searchopt():

getsysopts():

loadopts():

 

pntpos.c  最佳解讀:https://www.cnblogs.com/taqikema/p/8819798.html

 pntpos() :標準單點定位

postpos.c

postpos() :後處理定位。是所有的定位的入口,通過參數來調節用什麼方式定位;通過輸入/輸出文件的方式,完成對觀測數據、星曆的輸入,成果的輸出;

主要參數:

gtime_t ts:處理從什麼時間開始接收的數據。在觀測數據文件或導航電文文件,是一個時段的觀測數據。這個參數是要取時段中的一個時間,作爲起始時間,起始時間前面的數據忽略。ts.time=0表示不限制。

gtime_t te:觀測時段中,作爲結束時間,結束時間後的數據忽略。ts.time=0,表示不限制。

double ti:在開始時間和結束時間之間,每隔一段時間(單位:秒),取一次觀測數據,不剛好命中時間間隔點的數據,就忽略。*這個有很多選擇,要根據接收頻率來定,如果等於0,表示處理所有數據。

double tu:在限定開始時間和結束時間的情況下,取一段時間(單位:秒)作爲觀測單元。(好像用處不大)


 

以上參數不是非常重要,以下參數比較重要,關乎一些概念:

const prcopt_t *popt:

在rtkcmn.c中,有const prcopt_t prcopt_default,可作爲默認的傳入去。

*prcopt_t 是一個結構體,因爲postpos()整個函數適用於所有的定位,所以這個是更細緻的設置,成員:

*int mode:設置定位模式(Positioning Mode)。 一下是mode的可選項,參照(《manual 》P34)

  #define PMODE_SINGLE 0 /* positioning mode: single */ 單點定位,也就是SPP,  prcopt_default 默認的
  #define PMODE_DGPS 1 /* positioning mode: DGPS/DGNSS */ 基於測距碼GPS差分定位(《GPS測量與數據處理》P208)
  #define PMODE_KINEMA 2 /* positioning mode: kinematic */  基於載波的動態相對定位。(因爲在RTKPOST.exe,僅僅放一個接收機的數據文件不能解算,提示要基準站數據)
  #define PMODE_STATIC 3 /* positioning mode: static */  基於載波的靜態相對定位。
  #define PMODE_MOVEB 4 /* positioning mode: moving-base */移動基線定位??
  #define PMODE_FIXED 5 /* positioning mode: fixed */  移動站的位置是固定的相對定位*(用於殘差分析)
  #define PMODE_PPP_KINEMA 6 /* positioning mode: PPP-kinemaric */ 移動PPP
  #define PMODE_PPP_STATIC 7 /* positioning mode: PPP-static */ 靜態PPP
  #define PMODE_PPP_FIXED 8 /* positioning mode: PPP-fixed */ 固定PPP(用於殘差分析)

int soltype:設置濾波類型(Filter Type),有(0:forward,1:backward,2:combined)。《manual 》中說,此參數對SPP無效。猜測:是設置求整週模糊度的卡爾曼濾波算法的參數,因爲RTKPOST.exe中,放在設置項Frequencies旁邊。

int nf:設置頻率(Frequencies)。 決定是使用單頻L1,雙頻L1+L2,還是三頻L1+L2+L3。《manual 》中說,此參數對PPP和SPP無效。

int navsys:設置導航系統(navigation system)。類似mode那種由宏定義的設置方法。

double elmin:設置截止高度角(elevation mask)限制,單位:rad。默認15。 猜測:因爲接收機對衛星的仰角是有要求的,一般低於15就不跟蹤或不使用其數據。

snrmask_t snrmask:設置信噪比(SNR)限制(SNR MASK)。

  typedef struct {  
    int ena[2]; /* enable flag {rover,base} */  這個應該是開啓/關閉 接收機/基準站的限制。prcopt_default是以 {0,0}對其初始化,表示不限制了。
    double mask[NFREQ][9]; /* mask (dBHz) at 5,10,...85 deg */ 這個應該是,對不同的頻率,有不同(SNR)限制,單位:dbms。因爲NFREQ是指載波頻率數目。
  } snrmask_t;

int sateph:設置衛星星曆類(satellite ephemeris/clock)的類型。

  #define EPHOPT_BRDC 0 /* ephemeris option: broadcast ephemeris */ 使用廣播星曆(默認)
  #define EPHOPT_PREC 1 /* ephemeris option: precise ephemeris */ 使用精確星曆
  #define EPHOPT_SBAS 2 /* ephemeris option: broadcast + SBAS */使用SBAS廣播星曆
  #define EPHOPT_SSRAPC 3 /* ephemeris option: broadcast + SSR_APC */由RTCM提供的,含有APC改正數的廣播星曆
  #define EPHOPT_SSRCOM 4 /* ephemeris option: broadcast + SSR_COM */由RTCM提供的,含有COM改正數的廣播星曆
  #define EPHOPT_LEX 5/* ephemeris option: QZSS LEX ephemeris */由QZSS提供的星曆

int modear:設置GPS整週模糊度解算(integer ambiguity resolution)策略。不適用於SPP。《manual P38》

  #define ARMODE_OFF 0 /* AR mode: off */ 不解算模糊度
  #define ARMODE_CONT 1 /* AR mode: continuous */ 連續靜態整數模糊度估計和解算(默認)(僅僅適用於kinematic ,static ,moving-base,fixed)

  #define ARMODE_INST 2 /* AR mode: instantaneous */ 通過歷元和曆元之間,瞬時解算(僅僅適用於kinematic ,static ,moving-base,fixed)

  #define ARMODE_FIXHOLD 3 /* AR mode: fix and hold */ 連續靜態整數模糊度估計和解算。如果符合度好,對解有較強約束。(僅僅適用於kinematic ,static ,moving-base,fixed)

  #define ARMODE_PPPAR 4 /* AR mode: PPP-AR */ (僅用於PPP模式,但是這是試驗時用的,所以一般不用)

  以下幾個說明書沒有

  #define ARMODE_PPPAR_ILS 5 /* AR mode: PPP-AR ILS */
  #define ARMODE_WLNL 6 /* AR mode: wide lane/narrow lane */
  #define ARMODE_TCAR 7 /* AR mode: triple carrier ar */

int glomodear:設置GLONASS衛星系統的整週模糊度解算策略(Inter Ambiguity Res GLO)。0:不固定整週模糊度;1:固定整週模糊度(默認);2:自動校準。IFB被作爲待估參數,代入到線性方程 ;同樣不適用於SPP。

  一般來說,只有移動站和基站接收機類型一致,才能通過雙差觀測模型來消除 IFB(頻率間偏置)。

int bdsmodear:設置北斗衛星系統的整週模糊度解算策略(Inter Ambiguity Res BDS)。同上。

int maxout: 設置數據中斷計算閾值(Outage to Reset Amb)。默認5。 如果數據中斷次數大於此值,那麼模糊度估計值,會被重置爲初始值。

int minlock:設置固定整週模糊度的最少鎖定計數(Min Lock count),少於這個數就不計算其整週模糊度,默認是0。猜測是,後續曆元的整週期計數。(《GPS測量與數據處理》P145)

int minfix:設置最少的固定計數(Min Fix count),僅當mode設置了ARMODE_FIXHOLD有效 。默認是10。

int ionoopt:設置電離層改正參數(Ionosphere Correction)。(在導航電文RINEX文件中)。(《GPS測量與數據處理》P104)

  #define IONOOPT_OFF 0 /* ionosphere option: correction off */ 不使用電離層改正。prcopt_default默認的是這個。
  #define IONOOPT_BRDC 1 /* ionosphere option: broadcast model */廣播模型(默認)。PTKPOS.exe默認的是這個。
  #define IONOOPT_SBAS 2 /* ionosphere option: SBAS model */ SBAS提供的模型
  #define IONOOPT_IFLC 3 /* ionosphere option: L1/L2 or L1/L5 iono-free LC */電離層與雙頻的線性組合(L1-L2用於GPS/GLONASS/QZSS或L1-L5用於伽利略)電離層校正。
  #define IONOOPT_EST 4 /* ionosphere option: estimation */ 估算斜電子含量 。不適用於SPP和PPP。
  #define IONOOPT_TEC 5 /* ionosphere option: IONEX TEC model */ 使用IONEX格式獲得的TEC網格數據
  #define IONOOPT_QZS 6 /* ionosphere option: QZSS broadcast model */使用QZSS衛星系統的廣播電離層模型
  #define IONOOPT_LEX 7 /* ionosphere option: QZSS LEX ionospehre */ QZSS提供的LEX信號上的電離層模型
  #define IONOOPT_STEC 8 /* ionosphere option: SLANT TEC model */

int tropopt:對流層改正(Troposphere Correction)。(《GPS測量與數據處理》P116)

  #define TROPOPT_OFF 0 /* troposphere option: correction off */ 不使用對流層改正。prcopt_default默認的是這個。
  #define TROPOPT_SAAS 1 /* troposphere option: Saastamoinen model */使用薩斯踏莫寧(Saastamoinen)模型。PTKPOS.exe默認的是這個。
  #define TROPOPT_SBAS 2 /* troposphere option: SBAS model */使用SBAS提供的模型,這個模型通常又叫MOPS。
  #define TROPOPT_EST 3 /* troposphere option: ZTD estimation */通過擴展卡爾曼濾波的方法,估計天頂總延遲。
  #define TROPOPT_ESTG 4 /* troposphere option: ZTD+grad estimation */通過擴展卡爾曼濾波的方法,估計天頂總延遲
  #define TROPOPT_COR 5 /* troposphere option: ZTD correction */
  #define TROPOPT_CORG 6 /* troposphere option: ZTD+grad correction */通過擴展卡爾曼濾波的方法,估計天頂總延遲和水平梯度參數。

int dynamics:設置接收機的動態模型,用於估計接收機的位置(Rec Dynamics)。0:不設置(默認);1:根據速度估計;2:根據加速度估計。僅僅適用於DGPS/DGNSS或Kinematic(動態RTK)模式。

int tidecorr:設置地球潮汐改正(earth tides correction)。不適於SSP。0:不設置(默認);1:使用固體潮汐校正;2. 使用固體潮汐改正和極潮改正。

int niter:設置用於測量更新的估計濾波器的迭代次數(number of filter iteration)。默認1。根據基線的長度設置。

int codesmooth:code smoothing window size 。默認:0

int intpref: interpolate reference obs (for post mission) 。默認:0

int sbascorr:SBAS correction options。默認:0

int sbassatse:   SBAS satellite selection 。默認0:all

int rovpos:設置Fix模式定位下的流動站的位置。值應該同下面一樣。

int refpos:設置相對定位下的初始(base)位置。0:默認;1:使用SPP均值;2:從文件讀取; 3:RINEX文件頭讀取; 4:由RTCM提供的

double eratio[NFREQ]:設定L1和L2/L5/L6的僞距誤差與載波相位誤差的標準差比(Code/Carrier-Phase Error Ratio L1/L2)。默認{100.0,100.0}。NFREQ是頻率總數。對每個頻率可以分別設置。

double err[5]:測量誤差因子。(對應RTKPOST.exe的Option-Stats-Measurement Errors)

  [0]:Reserved,默認100.0;

  [1]:設置載波相位誤差標準差的基準項(Carrier-Phase Error a/sinEI(m)),默認0.003;

  [2]:設置載波相位誤差標準差的仰角相關項(Carrier-Phase Error b/sinEI(m)),默認0.003;

  [3]:設置載波相位誤差標準差的基線長度相關項(Carrier-Phase Error/Baseline(m/10 km)),默認0;

  [4]:設置多普勒誤差的標準差(Doppler Frequency(Hz)),默認1.0(《manual》和代碼是默認1.0,RTKPOS.exe是10);

double std[3]:設置初始狀態。

  [0]:設置載波相位偏差的過程噪聲的標準差,默認30.0

  [1]:設置每10km基線的垂直電離層延遲的過程噪聲標準差,默認0.03

  [2]:設置天頂對流層延遲的過程噪聲標準差,默認0.3

double prn[5]:設置過程噪聲( 對應RTKPOST.exe的Option-Stats-Process Noises)

  [0]:設置載波相位偏差的過程噪聲的標準差(Carrier -Phase Bias(cycle))。默認1E-4

  [1]:設置每10km基線的垂直電離層延遲的過程噪聲標準差(Vertical Ionospheric Dely(m/10km))。默認1E-3

  [2]:設置天頂對流層延遲的過程噪聲標準差 (Zenith Tropospheric Delay(m))。 默認1E-4

  [3]:設置接收機加速度的過程噪聲標準差爲水平分量(Receiver Accel Horiz(m/s^2))。默認1(《manual》和RTKPOST.exe),prcopt_default默認1E-1。

  [4]:設置接收機加速度的過程噪聲標準差爲垂直分量(Receiver Accel Vertical(m/s^2))。默認0.1(《manual》和RTKPOST.exe),prcopt_default默認1E-2。

double sclkstab:設置衛星時鐘穩定性(s/s)。該值用於基站觀測數據的插值(Satelite Clock Stability(s/s))。默認5.00E-12。

double thresar[4]:設置模糊度解算驗證閾值。

  [0]:爲ʺ比率測試ʺ設置整數模糊度驗證閾值,它使用最佳整數向量的平方殘差與第二最佳向量的比率(Min Ratio to Fix Ambiguity)。默認:3(《GPS測量與數據處理》P171 解的確認)(回憶,各個整週模糊度有很多整數組合,哪個組合纔是最佳?)

  [1]:設定最小置信度以固定ppp-AR模式中的模糊度(Min Confidence to fix Amb(Ambiguity ))。默認0.9999(《GPS測量與數據處理》P172 ,應該是最佳和次最佳模糊度組合的解的單位權中誤差,顯著差異的置信度。)

  [2]:設置最大 分數週期偏差(fcb)以解決ppp-AR模式下的模糊問題(Max FCB to fix Amb(Ambiguity ))。prcopt_default默認0.2,RTKPOST.exe默認0.25。

double elmaskar: /* elevation mask of AR for rising satellite (deg) */ 默認0。
double elmaskhold:設置保持(Hold,是不是指持續跟蹤的意思)模糊度的最小俯仰角(Min Elevation(°) to Hold Amb) ,僅當mode設置了ARMODE_FIXHOLD有效 。默認0。
double thresslip;  設置 曆元間無幾何(geometry‐free)線性組合載波相位差 的周跳閾值(Slip Thres(m))。默認0.05
double maxtdiff:設置基準站和流動站之間,最大的觀測時間(age)差(Max Age of Diff(s))。默認30.0
double maxinno:設置innovation的拒絕閾值(Reject Threshold of Innov(innovation)(m))。默認30.0。如果超過閾值,那麼觀測值在估計過程中,作爲異常值被排除。
double maxgdop: 設置幾何精度因子的拒絕閾值(Reject Threshold of GDOP(m))。默認30.0。如果超過閾值,那麼觀測值在估計過程中,作爲異常值被排除。

double baseline[2]:設置限制的長度和標準偏差(Baseline Length Constraint(m))。僅僅對 如果移動-基準(moving-base)定位模式有效。

  [0]:長度約束

  [1]:標準差約束

double ru[3]; /* rover position for fixed mode {x,y,z} (ecef) (m) */ 。使用ECEF座標系座標,設置流動站天線座標。僅在FIX定位模式下有用,天線的位置要固定。
double rb[3]; /* base position for relative mode {x,y,z} (ecef) (m) */ 使用ECEF座標系座標,設置基準站天線座標。僅在非SPP,PPP,Moving-Base模式下有用。

char anttype[2][MAXANT]:設置天線類型。(Antenna Type)MAXANT是最大移動站/基準站的type的字符串長度。默認{"",""}。

  [0][MAXANT]:設置多個移動站的天線類型。

  [1][MAXANT]:設置多個基準站的天線類型。

double antdel[2][3]:設置天線偏置(Antenna Delta)。不適用於SPP。設置測站天線的位置增量(delta position) 爲(ENU)值,通過參考測站標記,來抵消天線參考點的位置。

  /* antenna delta {{rov_e,rov_n,rov_u},{ref_e,ref_n,ref_u}} */

  [0][]:流動站的ENU

  [1][]:參考ENU????

pcv_t pcvr[2]:設置[0]流動站的天線參數,[1]基準站的天線參數。pcv_t是天線參數

  typedef struct {  /* antenna parameter type */
    int sat; /* satellite number (0:receiver) */  設置衛星的號碼,0代表接收機。那麼可以猜測,衛星和接收機的可以用這個天線參數。
    char type[MAXANT]; /* antenna type */    天線類型
    char code[MAXANT]; /* serial number or satellite code */ 
    gtime_t ts,te; /* valid time start and end */
    double off[NFREQ][ 3]; /* phase center offset e/n/u or x/y/z (m) */ 每個頻率的相位中心偏置。NFREQ是載波總數。可以使得每個頻率都有特定的天線??
    double var[NFREQ][19]; /* phase center variation (m) */  每個頻率的相位中心變化。
              /* el=90,85,...,0 or nadir=0,1,2,3,... (deg) */
  } pcv_t;

unsigned char exsats[MAXSAT] :設置排除的衛星進行定位。填寫由空格分隔的衛星的PRN號碼。對於GLONASS、伽利略、QZSS、北斗和SBAS,分別使用RNN、ENN、Jnn、CNN和SNN( NN:衛星PRN或插槽號)(Excluded Satelites )


這個是對postpos()方法,要輸出的成果格式的控制。相當於RTKPOST.exe中的Output

solopt_t *sopt :

typedef struct 
  int posf:設置解算結果輸出的樣式(Solution Format)。

    #define SOLF_LLH 0 /* solution format: lat/lon/height */經緯度(默認)
    #define SOLF_XYZ 1 /* solution format: x/y/z-ecef */ ECEF型座標系下的XYZ
    #define SOLF_ENU 2 /* solution format: e/n/u-baseline */ 基線輸出ENU
    #define SOLF_NMEA 3 /* solution format: NMEA-183 */
    #define SOLF_GSIF 4 /* solution format: GSI-F1/2/3 */

  int times:設置時間系統(Time System)

    #define TIMES_GPST 0 /* time system: gps time */(默認)
    #define TIMES_UTC 1 /* time system: utc */
    #define TIMES_JST 2 /* time system: jst */ 一種日本定的時間

  int timef:設置時間樣式(Time Format) 。0:sssss.s;1:yyyy/mm/dd hh:mm:ss.s (默認)
  int timeu:設置時間樣式的小數點位數(Time Format of Decimals)。默認3
  int degf:設置輸出經緯度的樣式(Latitude / Longitude Format)。 0:ddd.ddd(默認);1:ddd mm ss。
  int outhead:設置是否輸出文件頭 (output header)。 0:no;1:yes(默認)
  int outopt:設置是否在結果中輸出一些操作參數(Output Processing Options)。主要是 電離層對流層改正的來源,定位模式等。0:no(默認);1:yes
  int datum:設置基準當輸出樣式爲”經緯度”的基準(Datum)。 0:WGS84(默認);1:Tokyo;
  int height:設置高的類型(Height)。0:橢球高,指點離橢球面的高(默認);1: 大地高,值點離大地水準面的高
  int geoid:如果高的類型設置爲“大地高”,那麼這裏設置大地水準面 (Geoid model)。0:EGM96(默認);1:JGD2000;
  int solstatic:設置解的類型(solution for static mode),僅爲PPP-Static和Static定位模式有用。 0:輸出處理週期的所有解(默認);1:僅輸出第一曆元的解
  int sstat: 設置定位解算的狀態輸出(Output solution status) 。輸出的文件後綴爲.pos.stat。0:不輸出(默認);1: 輸出估計狀態;2:輸出殘差值
  int trace: 設置定位解算的跟蹤日誌輸出(Ouput solution trace)。輸出的文件後綴爲.pos.trace。 0:不輸出(默認);1-5: 可選1-5等級的追逐信息的輸出,可以看到處理過程。
  double nmeaintv[2]:設置差分定位中的NMEA格式數據的輸出間隔(NMEA Interval(s))。小於0不輸出,等於0輸出全部,應該還可以大於0。(僅僅對於導航或實時定位有用)
     nmeaintv[0]:GMGMC,GPGGA語句輸出間隔。

     nmeaintv[1]:GPGSV語句輸出間隔
  char sep[64]:設置輸出的解算結果中的,每個字段間的分隔符,默認“ ”(空格)。
  char prog[64]:設置調用函數的程序名。在output herder中會顯示。
} solopt_t;


char **infile :多個數據文件,支持多種格式,可以一次輸入觀測值RINEX,導航電文RINEX,鍾RINEX等等。

int n:數據文件個數。

char *outfile:輸出文件。一般爲.pos後綴

char *rov: I rover id list (separated by " ") 。默認“”“
char *base :I base station id list (separated by " ")。默認“”

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章