主函數: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陣,並量測更新