PPP软件包使用说明(版本1.4.3)
1. 交付包
PPPWizardxy内容是按照以下模式组成:
PPPWizardxy
|-- PPPSoftwarePackage_v1.4.3.pdf
|-- RTRover
|-- compile.sh
|-- generateLowLevel.cpp
|-- getStream.cpp
|-- laurichesse_ion_gnss_2015_september_bdp.pdf
|-- processLowLevel.cpp
|-- processStream.cpp
|-- rtklib
|-- tst
2. 包装内容
该软件包包含以下项目:
- “rtklib”目录包含修改后的rtklib库源文件,用于解码RTCM相位偏差消息(1265)
- “rtrover”目录包含PPP实现(这是一个与BNC接口兼容的rtrover库)
- 可执行文件的源文件(getStream、processStream、processLowLevel、generateLowLevel)
- “tst”目录包含每个可执行文件的示例。
- 编译和配置文件
- 文档
- 来自用户的反馈
3. 软件包的编译
3.1. LINUX下编译
要编译库和可执行文件,请在命令窗口运行“./compile.sh”。这将生成rtklib和rtrover库,以及四个可执行文件getStream、processStream、processLowlevel和generateLowLevel。
3.2. MOBAXTERM下的编译(WINDOWS)
按照以下两个步骤在MobaXterm中进行编译
- 第1步:安装mobaxterm和插件development.mxt3
- 第2步:包含以下编译指令: CFLAGS=“-O3 -lm -lpthread -lrt -static”
[如果没有静态标志,仍会生成可执行程序,但会因共享库错误而无法运行] - 第3步:在命令窗口中的运行 ./compile.sh
3.3. MINGW (WINDOWS)下编译
在Windows环境下用同样的方法进行编译
-
第1步:使用以下软件包安装MinGW免费软件
• mingw-developer-tools
• mingw32-base
• mingw32-gcc-g++
• msys-base -
步骤2:编辑PATH环境:
<dir>\msys\1.0\bin
<dir>\bin
<dir>是MinGW安装目录
- 步骤3:修改RTRover\Makefile文件中的编译选项:
CFLAGS=-O3 -DRTRover_STATIC_LIB
- 步骤4:修改文件compile.sh中的编译选项:
CFLAGS="-O3 -Wl,--stack,4194304 -DRTRover_STATIC_LIB -lm -lWs2_32 -lWinmm"
- 步骤5:在命令窗口中运行
sh compile.sh
4. 可执行文件说明
从1.4版本开始,所有输出文件都带有一个新的完好性指示符字段(最后一列),用于描述精密定位的完好性。
4.1. GETSTREAM可执行文件
该可执行文件使用rtklib库从多种数据源和格式(本地接收机、远程接收机(NTRIP)、BRDC、SSR校正等)中恢复一系列数据流。然后,对数据流进行同步、组合并转换成ASCII码。输出文件是独立的,包含PPP所需的所有信息。可以直接处理该文件(例如在管道中)或存储该文件以供回放。
下面给出一条典型的运行命令:
./getStream <conf_get.txt > stream.out
getStream的配置文件来自标准输入,符合以下约定:
• 流地址(rtklib约定)
• 源类型(rtklib约定)
• 流格式(rtklib约定,用于进一步解码)
在配置文件中,接收机必须放在其他流之前。
输出文件写在标准输出。
下面是一个输出示例:
要停止getStream,请使用带有getStream进程PID的kill命令。
4.2. PROCESSSTREAM可执行文件
processStream可执行文件使用getStream恢复的数据执行PPP计算。它使用以下命令:
./processStream –conf conf_process.txt –rover rover.txt –dcb "*.DCB" [-verbose] [-lowlevel]< stream.out
其中:
- conf_process.txt是通用配置文件(每个流动站的配置都是相同的)
- rover.txt包含每个接收机的名称(与getStream配置文件的顺序相同)和流动站先验坐标(如果未使用,则为0.0 0.0 0.0)
- "*.DCB”是PPP (P1C1,P1P2,P2C2)使用的码偏差文件。这些文件可从以下位置获得ftp://ftp.aiub.unibe.ch/CODE/ 大约一个月需要更换一次。
- 详细:详细模式(仅供内部使用)
- 原始数据:生成观测文件(lowlevel.txt)
从1.4版本开始,引入了电离层VTEC(垂直总电子含量)。为了对其进行测试,将配置文件中SigMesIono的第3列设置为“0.0”,然后与1.3版本中对应相同结果的数据进行对比。
4.2.1. 配置文件
下表显示了通用配置文件中每个条目的结构:
参数 | 类型/单位 | 说明 | 典型值 |
---|---|---|---|
mode | 枚举 | 处理模式: mode_PPP_双频,(PPP bi) mode_SPP_双频,(SPP bi) mode_PPP_单频,(PPP mono) mode_SPP_单频,(SPP mono) mode_PPP_AR,(模糊度固定的PPP) | mode_PPP_AR |
antexFileName | 字符串 | 天线文件名 | |
AR/JumpsIndicators | 布尔 | AR/周跳标识(窄巷/宽巷/超宽巷) | 1 1 0 |
useGPS | 布尔 | 使用GPS | 1 |
useGlonass | 布尔 | 使用Glonass | 1 |
useGalileo | 布尔 | 使用伽利略 | 1 |
useBeidou | 布尔 | 使用北斗 | 0 |
sbasCorrection | 布尔 | 0 -> RTIGS钟差改正,1 -> SBAS钟差改正 | 0 |
convergence | 整型/秒 | 收敛时间。连续两次收敛之间的时间(用于收敛时间测试),如果没有收敛,则为0 | 0 |
outputVerbose | 布尔 | 输出详细信息 | 0 |
step | 实数/秒 | 观测量间隔 | 一 |
maxAge | 实数/秒 | RTCM改正数的最大龄期 | 10 |
stepMin | 整型/无符号 | AR之前的最小步长 | 3600 |
maxReject | 整型/无符号 | RAIM失败最大次数 | 2 |
raim | 布尔 | 开启RAIM算法 | 1 |
mapThr | 实数/无符号 | 对流层标测阈值(1/sin(ele)) | 6 |
sigIniTro | 实数/m | 对流层初始噪声 | 0.5 |
sigModTro | 实数/m | tropo模型噪声 | 0.000005 |
nbSatFixAmb | 整型/无符号 | AR的最少卫星数 | 0 |
threAmb | 实数/m | AR的模糊阈值 | 0.01 |
sigIniBiasClk | 实数/m | 初始时钟误差噪声 | 0 |
sigModBiasClk | 实数/m | 模型时钟误差噪声 | 0.001 |
sigIniIono | 实数/m | 初始电离层噪声 | 10 |
sigModIono | 实数/m | 模型电离层噪声 | 0.002 |
sigMeasIono | 实数/m | 电离层测量噪声 | 1 |
ionoThr | 实数/m | 电离层测量拒绝阈值 | 5 |
sigMeasTropo | 实数/m | 对流层测量噪声 | 0.1 |
tropoThr | 实数/m | tropo测量拒绝阈值 | 1 |
sigIniPos | 实数/m | 初始位置噪声 | 50 0(位置固定) |
sigModPos | 实数/m | 模型位置噪声 | 10(移动接收机) 0.02(静态接收机) 0(位置固定) |
preDTMax | 实数/秒 | 最大测量间隔 | 300 |
codeThr | 实数/m | 伪码测量拒绝阈值 | 10 |
phaseThr | 实数/m | 相位测量抑制阈值 | 0.05 |
sigMeasCodeGps | 实数/m | GPS伪码测量噪声 | 1 |
sigMeasPhaseGps | 实数/m | GPS相位测量噪声 | 0.01 |
sigMeasCodeGlo | 实数/m | Glonass伪码测量噪声 | 5 |
sigMeasPhaseGlo | 实数/m | Glonass相位测量噪声 | 0.01 |
sigMeasCodeGal | 实数/m | 伽利略伪码测量噪声 | 1 |
sigMeasPhaseGal | 实数/m | 伽利略相位测量噪声 | 0.01 |
sigMeasCodeBds | 实数/m | 北斗伪码测量噪声 (GEO/IGSO/MEO) | 5 5 5 |
sigMeasPhaseBds | 实数/m | 北斗相位测量噪声(GEO/IGSO/MEO) | 0.01 0.01 0.01 |
Smooth | 实数/无符号 | 多普勒平滑系数 | 不平滑时为0 平滑时为0.95 |
4.2.2. 流动站文件
流动站文件中每一行包含一个流动站。每行具有以下格式:
字段 | 说明 |
---|---|
Name | 流动站名称 |
X | 流动站先验位置X ITRF 08 |
Y | 流动站先验位置Y ITRF 08 |
Z | 流动站先验位置Z ITRF 08 |
4.2.3. 输出格式
处理的输出结果中每一行包含一个历元。每行具有以下格式:
字段 | 说明 |
---|---|
Date | 日* |
Hour | 小时* |
Rover | 流动站名称 |
PPP mode | SPP、PPP等 |
Measurements | 观测量总数 |
ExtraWidelanes | #超宽巷固定的测量值 |
Widelanes | #宽巷固定的测量值 |
Narrowlane | #窄巷固定的测量值 |
X | x(m,ITRF 08) |
CovX | X方差(m) |
Y | Y(m,ITRF 08) |
CovY | Y方差(m) |
Z | Z(m,ITRF 08) |
CovZ | Z方差(m) |
DryTropo | 对流层干延迟(m) |
Tropo | 估计的对流层湿延迟(m) |
Cov tropo | 对流层湿延迟的方差(m) |
Integrity | 完好性标识 |
如果在配置文件中激活了outputVerbose,则输出具有以下格式:
字段 | 说明 |
---|---|
Date | 日* |
Hour | 小时* |
Rover | 流动站名称 |
PPP mode | SPP、PPP等 |
HstaGPS | GPS钟差 |
HstaGlo | Glo钟差 |
HstaGal | Gal钟差 |
HstaBds | Bds钟差 |
Measurements | 观测量总数 |
ExtraWidelanes | #超宽巷固定的观测量 |
Widelanes | #宽巷固定的观测量 |
Narrowlane | #窄巷固定的观测量 |
X | x(m,ITRF 08) |
CovX | X方差(m) |
Y | y(m,ITRF 08) |
CovY | Y方差(m) |
Z | Z(m,ITRF 08) |
CovZ | Z 方差(m) |
DryTropo | 对流层干延迟(m) |
Tropo | 估计的对流层湿延迟(m) |
Cov tropo | 对流层湿延迟的方差(m) |
Integrity | 完好性标识 |
4.2.4. 详细选项
processStream的verbose选项([-verbose])会在stderr上输出以下信息。该输出信息中每一行包含一个历元。每行具有以下格式:
字段 | 说明 |
---|---|
Rover | 流动站号 |
Date | 日 |
Hour | 小时 |
Tropo | 对流层 |
对于每个星座和每颗卫星:
字段 | 说明 |
---|---|
PRN | 例如:G01,R10,E11,C06 |
iono | 电离层 |
为了使用详细选项输出,软件内部定义了特定的RTCM消息(99)。该RTCM消息可以由“decode_tropo_iono”函数读取并解析。
4.2.5. 原始文件
下表显示了原始文件([-lowlevel])的每一行的结构:
字段序号 | 字段 | 单位 | 说明 |
---|---|---|---|
1 | 流动站号 | - | |
2 | 卫星 | - | 示例G01 |
3 | CNES·儒略日 | 天 | 第一天1950年1月1日 |
4 | 天内秒 | 秒 | |
5 | C1/P1/E1 | m | 伪距 |
6 | P2 | m | |
7 | C6(北斗) | m | |
8 | C5/E5a(伽利略) | m | |
9 | E5b/C7(北斗) | m | |
10 | L1 | 周 | 相位 |
11 | L2 | 周 | |
12 | L6(北斗) | 周 | |
13 | L5/L5a(伽利略) | 周 | |
14 | L5b/L7(北斗) | 周 | |
15 | D1 | Hz | 多普勒 |
16 | D2 | Hz | |
17 | D6(北斗) | Hz | |
18 | D5/D5a(伽利略) | Hz | |
19 | D5b/D7(北斗) | Hz | |
20 | Slot/typeBds | - | Glo卫星频点或BDS卫星类型: 0:GEO,1:IGSO,2:MEO |
21 | X | m | 卫星位置.信号发射时的APC |
22 | Y | m | |
23 | Z | m | |
24 | H | m | 信号发射时刻的卫星钟差,包括相对论效应 |
25 | Vx | m/s | 卫星速度 |
26 | Vy | m/s | |
27 | Vz | m/s | |
28 | 电离层延迟 | m | 在L1频率上的斜电离层延迟 |
29 | 电离层延迟来源 | - | 1:精确,2:SBAS,3:全球 |
30 | 对流层延迟 | m | 天顶对流层延迟 |
31 | 偏航 | 圈 | 卫星偏航角 |
32 | bC1 | m | L1频率上的码偏差.与字段5和字段24一致 |
33 | bP2 | m | |
34 | bC6 | m | |
35 | bC5 | m | |
36 | bE5b | m | |
37 | bL1 | 周 | L1频率上的相位偏差.与字段10和字段24一致 |
38 | bL2 | 周 | |
39 | bL6 | 周 | |
40 | bL5 | 周 | |
41 | bL5b | 周 | |
42 | N1指示器 | 0/1 | 对应N1整周模糊度的偏差 |
43 | Wl指示器 | 0/1 | 对应W1整周模糊度的偏差 |
44 | 不连续计数 | - | 不连续历元的计数值 |
*日期是间隔的倍数。
4.3. 完整的PPP流程
在conf_get.txt文件中更新您的配置。
执行如下命令启动整个PPP流程(数据流采集和处理):
./getStream <conf_get.txt | ./processStream –conf conf_process.txt –rover rover.txt –dcb "*.DCB"
下面是一个输出示例:
4.4. GENERATELOWLEVEL可执行文件
从1.4版本开始增加了电离层SBAS接口。增加了对GLONASS的RF信道的警告(当文件不存在时)。
generateLowLevel可执行文件可用于从输入文件(dcb、atx…)创建低级文件。它使用以下命令:
./generateLowlevel –rinex rinex.rnx -sp3 ephem.sp3 –clk clock.clk –bias bias.bia –atx igs.atx –dcb "*.DCB" -chan channelGlo.txt > lowlevel.txt
其中:
- rinex.rnx:测量文件
- ephem.sp3:星历文件
- clock.clk:钟差文件
- bias.bia: sinex格式的偏差文件(如果使用了GRG产品,则无需为A.R .指定此文件)。
- igs.atx是天线文件名
- "*.DCB”是PPP (P1C1,P1P2,P2C2)使用的码偏差文件。这些文件可从以下地址获得ftp://ftp.aiub.unibe.ch/CODE/ 大约一个月需要更换一次。
- channelGlo.txt是一个包含每个Glonass卫星通道的文件
(请参阅4.2.5 中关于原始文件的描述。)
下面是一个输出示例:
4.5. PROCESSLOWLEVEL可执行文件
processLowLevel可执行文件使用从原始文件中读取的数据来执行PPP计算。它使用以下命令:
./processLowlevel –conf conf_process.txt –rover rover.txt < lowlevel.txt
其中:
- conf_process.txt是通用配置文件(每个流动站的配置都是相同的),请参考4.2.1
- rover.txt包含每个接收机的名称(与getStream配置文件的顺序相同)和流动站先验位置(如果未使用,则为0.0 0.0 0.0),请参考4.2.2
原始文件的描述参考4.2.5。该文件可通过使用processStream的[-lowlevel]选项 (参考4.2)或者由generateLowLevel可执行文件生成。
下面是一个输出示例:
从1.4版本开始,processLowlevel可执行程序中的详细模式与processStream中已定义的详细模式使用方式一致,以协调这两个进程。
5. 算法的描述
不同的算法、模型和软件的内部结构在本软件包的附件文档中进行了描述。
D.Laurichesse, A. Privat, “An Open-source PPP Client Implementation for the CNES PPP-WIZARD Demonstrator”, Proceedings of the ION GNSS+ 2015, September 2015, Tampa, Florida
http://www.ppp-wizard.net/Articles/laurichesse_ion_gnss_2015_september_bdp.pdf
6. 例子
“tst”目录包含一些示例及其配置文件和相关结果。要执行所有这些示例,请使用命令: ./test.sh.
这些示例是通过以下不同步骤创建的:
-
使用getStream进行数据采集:
getStream < conf_get.txt > brut_gamg.txt
要停止getStream,请使用带有getStream进程PID的kill命令。“conf_get.txt”文件的内容是:
login:password@94.23.202.142:2101/GAMG00KOR0 7 1
login:password@94.23.202.142:2101/SSRA00CNE0 7 1
login:password@94.23.202.142:2101/RTCM3EPH-MGEX 7 1 -
使用进程流的PPP计算:
执行三种不同的PPP计算。
(1). 使用GPS和Glonass的PPP_SF模式:
zcat brut_gamg.txt.gz | ../processStream -conf conf_process_PPP_SF_GPSGLO.txt -rover rover_gamg.txt -dcb "*.DCB" >output_PPP_SF_GPS
(2). 使用GPS和Glonass的PPP_AR模式:
zcat brut_gamg.txt.gz | ../processStream -conf conf_process_PPP_AR_GPSGLO.txt - rover rover_gamg.txt -dcb "*.DCB" >output_PPP_AR_GPSGLO
(3).使用GPS、Glonass和Galileo的PPP_AR模式:
zcat brut_gamg.txt.gz | ../processStream -conf conf_process_PPP_AR_ALL.txt -rover rover_gamg.txt -dcb "*.DCB" >output_PPP_AR_ALL
- 用进程流生成原始文件;
zcat brut_gamg.txt.gz | ../processStream -conf conf_process_PPP_AR_ALL.txt -rover rover_gamg.txt -dcb "*.DCB" -lowlevel >output_PPP_AR_GPSGLO
- 使用processLowlevel的PPP计算:
zcat lowlevel_gamg.txt.gz | ../processLowLevel -conf conf_process_PPP_AR_GPSGLO.txt - rover rover_gamg.txt > output_lowlevel 2>/dev/null
- 使用generateLowLevel生成原始文件:
time ../generateLowLevel -rinex "GAMG*.rnx" -sp3 "cnt21102.sp3" -clk "cnt21102.clk" - atx igs14_2108.atx -dcb "P1*.DCB" -chan channelGlo.txt >meas_gamg.spa
所有输入和输出文件都位于“tst”目录中。