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_t是obs_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 " ")。默認“”