主函數:rtkpos
1 設置基站位置
2 統計基站和流動站的衛星數量
3 單點定位解算

4 若定位模式為單點定位,直接返回
5 精密單點定位

6 動基線,利用單點定位計算基站的位置:

7 差分定位

差分定位函數:relpos
1 計算流動站和參考站時間差

2 計算衛星位置

3 參考站非差殘差

4 基站信息插值,后處理,通過配置項進行設置

5 選擇基站和參考站之間的公共衛星:

6 狀態時間更新

7 初始變量內存申請以及賦初值

8 設置迭代次數(設置值為1, 動基線,增加2次迭代次數)

9 開始迭代量測更新

9.1 計算流動站衛星的非差殘差結果

9.2 雙差殘差以及量測矩陣等更新

9.3 KF量測更新實現

10 量測更新完成,檢測是否完成,並利用更新以后的結果計算殘差

10.1 利用浮點結果計算雙差殘差以及量測噪聲

10.2 通過方差和量測進行校驗,檢測結果是否有效

10.3 存儲浮點結果

10.4存儲模糊度相關的信息,統計有效衛星數目

10.5 檢測衛星數量是否有效

11 整周模糊度解算(WL-NL TCAR 兩種方式未實現,在rtklib中實現了LAMBDA)
模糊度解算模式定義:

11.1模糊度解算成功,根據固定結果計算雙差殘差和協方差,並進行校驗

11.2 固定解驗證有效,若配置為hold模式,需要存儲模糊度信息(具體哪些信息?怎么銜接?)

12 存儲rtk結果,位置和速度以及方差信息(若狀態為固定解,存儲固定解結果)

13 存儲當前歷元的載波相位信息,供下次使用

14 存儲SNR信息

15 更新衛星的fix信息以及周跳信息(具體怎么使用?)

16 釋放局部變量,返回定位狀態

雙差函數計算以及量測陣計算函數:ddres
1 計算基線長度
2 基站和流動站位置轉化
3 變量內存申請和變量初始化

4 計算各個衛星電離層和對流層延時因子(配置為 電離層對流層估計模式)
5 遍歷不同系統和頻點,計算雙差殘差,其中,若為差分偽距模式,需要限制遍歷次數
注: 所有模式分為四類,每一類分別挑選參考衛星,再計算雙差的結果,考慮到系統時差的影響

注: 遍歷次數設置: 載波相位在0-nf,nf至2nf為偽距,因此偽距差分定位從nf開始
5.1 選取參考衛星,根據高度角,若選取失敗,則返回
其中,m代表不同的頻點和系統,分為四類,每一類選取一次參考衛星
5.2 雙差開始,遍歷各個衛星

5.2.1 初始檢測頻點和觀測量是否有效

5.2.2 獲取波長信息,並檢測波長的有效性

5.2.3 獲取對應觀測量的H陣的位置,並進行賦初值

5.2.4 雙差殘差

5.2.5 更新H陣

5.2.6 雙差電離層延遲項,若配置為 電離層延時估計模式,包括殘差計算 ,並扣除該部分,和對應H陣更新

5.2.7雙差對流層延遲項,若配置為 對流層延時估計模式,包括殘差計算,並扣除該部分, 和對應H陣更新

5.2.8雙差整周模糊度項(只對載波相位有效)
注:區分無電離層組合,和狀態更新中整周模糊度賦初值對應

5.2.9 GLONASS硬件偏差雙差 (區分不同模式進行處理,具體估計方式?????)


5.2.10 分別保存偽距和載波殘差信息

5.2.11 新息檢查(門限值默認設置為1m)
若超過門限,則直接返回,不進行保存

5.2.11 單差觀測量噪聲計算(計算方式??????)

5.2.11 相關標志位置位(衛星有效標志位,記錄參考衛星和流動衛星號,nb:每種類型,每個頻點下雙差有效的衛星觀測量數量)

5 動基線,進行基線長度約束(基線相關的H陣更新,新息以及量測噪聲計算)

6 H陣打印

7 計算雙差量測噪聲R (具體計算方式??????)

8 釋放局部變量內存,並返回有效的觀測量數目nv

狀態時間更新:udstate
1 更新位置速度以及加速度
2 更新電離層參數(配置為:電離層估計)
3 更新對流層參數(配置為:對流層估計)
4 更新接收機硬件延遲
5 更新載波相位狀態(定位模式時載波相位定位才會進行)

電離層參數時間更新函數: udion
在這之前,先會進行電離層配置模式檢測,決定是否估計,然后計算基線的長度,然后傳進去。
1 初始檢測所有衛星電離層狀態量是否正常
2 更行當前歷元各個衛星的電離層狀態量及對應P陣(驅動噪聲和基線長度、高度角等信息有關)

對流層參數時間更新函數: udtrop
在這之前,先進行對流層參數配置模式的檢測判斷
1 更新對流層參數,狀態量數量和估計模型相關,和衛星數量無關。

更新接收機硬件偏差函數: udrcvbias
首先判斷是不是glonass系統且整周模糊度的配置的估計方式

若模糊度固定次數大於門限值且模糊度解算比例因子大於門限值,則q陣不會變。
更新相位偏差函數:udbias
首先會檢測,當前配置定位模式,是否是載波相位定位。
1 循環檢測各個衛星觀測量相位周跳情況
1.1 檢測周跳通過LLI(失鎖標志等),初始標志為清除
1.2 檢測周跳通過geometry-free phase jump
1.3 檢測周跳通過多普勒和載波相位差分
1.4 更新半周跳有效標志位
2 根據整周模糊度的解算方式、 周跳檢測標志、碼相位等信息更新整周狀態量等
遍歷不同頻點
2.1 如果是單歷元模式或者超過中斷計數器過期等,重置相位模糊度
2.2 如果檢測到周跳(無電離層組合,標志位獲取不一樣,需注意)或者單歷元模式,重置相位模糊度
2.3 通過碼相位信息,估計相位偏差初值(整周模糊度初值)
若為無電離層組合,則需要按組合方式計算初始值
2.4 修正相位偏差確保碼相位和載波一致性(??????????)

2.5 設置相位偏差初始狀態信息

檢測周跳通過LLI函數:detslp_ll
首先,遍歷各個頻點
1 檢測載波相位是否有效,以及前一歷元的時間差是否滿足條件:
2 獲取前一時刻的失鎖標志位
3 通過失鎖標志位檢測周跳(前向和后向算法此時有區別 ????????????)
4 檢測周跳情況根據前后的周跳標志(根據前后變化置位半周跳標志位)
5 存儲當前的LLI
6 存儲周跳和半周跳的標志位

通過geometry-free檢測周跳函數:detslp_gf_L1L2
1 檢測載波相位的頻點數量以及載波相位值初始值檢測,並計算幾何無關L1 L2頻點線性組合值,初步檢測值得合理性

2 通過前后歷元的差值,判斷周跳情況,門限值初始給的是0.05m

通過geometry-free檢測周跳函數:detslp_gf_L1L5
利用L1 L5頻點組合檢測周跳。
通過多普勒和相位一致性檢測周跳detslp_dop
因為時鍾跳動的原因,不使能多普勒檢測的方法

位置速度時間更新函數:udpos
1 若為PMODE_FIXED, 配置給定設定的位置和方差

2 首次初始化位置信息,用單點定位的結果

注意:這個地方可以配置KF的動態模型:

3 若為PMODE_STATIC,則不僅進行更新
4 若動態模型為一階模型,則直接重置方差,和位置
5 檢查P陣的有效性,無效,則重置
6 檢查狀態量中有效的狀態數量,並記錄索引id,檢查衛星數量
7 位置速度加速度狀態更新
首先,更新F陣和狀態量x,以及P陣

其次,進行狀態遞推

最后,考慮驅動噪聲,Q陣(更新方式)分別設置水平和垂直噪聲驅動方差?轉化?

選擇公共衛星函數:selsat
主要有高度角的限制

基站數據插值函數:intpres
1 檢查前一歷元基站衛星數目以及當前時間差是否小於門限,返回並記錄當前歷元信息
2 檢查與前一歷元的時間差:大於2倍門限,返回
3 計算前一歷元基站觀測量下的衛星位置和鍾差信息:
4 計算前一歷元基站觀測量非差殘差信息:
5 殘差通過時間推算(????????)

非差殘差函數:zdres
1 基站位置有效性檢測
2 地潮修正,影響多大?原理未知?????

其中,配置項有多重模型,如下:

3 ecef轉經緯高
4 遍歷每個衛星,計算殘差

4.1 計算幾何距離 俯仰角和方位角
4.2 刪除指定衛星,或模式
4.3 補償衛星鍾差
4.4 對流層延遲模型校正
4.5 天線相位中心校准
4.6 非差相位和碼殘差計算(衛星)

各個衛星非差殘差計算函數: zdres_sat
1 判斷是否無電離層組合(雙頻觀測量:可配置: 無電離層組合)
2 檢查 波長以及cn0是否有效
3 無電離層組合

4 各個頻點殘差計算:

利用LAMBDA解整周模糊度函數: resamb_LAMBDA
1 整周模糊度ratio賦初值,並檢測是否進行模糊度解算(定位模式,模糊度解算配置項以及模糊度驗證門限值)

2 單差到雙差的轉移矩陣D求解(轉移方式)

3 根據轉移矩陣,求解雙差整周模糊度以及協方差陣

4 從協方差陣中單獨提取整周的協方差陣 整周和狀態兩種其他項的協方差陣

5 lambda/mlambda 整數最小二乘估計(估計結果在b,s中保存了)

6 ratio值計算:

7 ratio值檢測,大於門限值,求解固定解以及固定解的協方差

8 重新存儲單差的模糊度

Fix and hold模式下模糊度保持: holdamb
進入條件: 連續固定次數大於門限值(默認門限值為0,只要固定就進入)
以及固定模式配置為fix and hold
輸入xa為固定解(單差模糊度)

1 循環遍歷各個衛星,查找滿足條件的衛星,並設置相應標志位

2 計算固定解雙差和浮點解雙差 的差值,形成量測信息,並更行H陣

3 若觀測量數量有效,設置R陣,並量測更新

