[学习]RTKLib详解:sbas.c与rtcm.c

发布于:2025-05-10 ⋅ 阅读:(12) ⋅ 点赞:(0)

RTKLib详解:sbas.crtcm.c


本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。

[学习] RTKlib详解:功能、工具与源码结构解析
[学习]RTKLib详解:pntpos.c与postpos.c
[学习]RTKLib详解:rtkcmn.c与rtkpos.c
[学习]RTKLib详解:ppp.c与ppp_ar.c
[学习]RTKLib详解:ephemeris.c与rinex.c



PART A: sbas.c

一、整体作用与工作流程

1.1 整体作用

sbas.c文件在RTKlib中主要负责SBAS数据的接收、解析、处理与应用。SBAS作为一种增强GPS定位精度的系统,通过提供差分修正信息、完整性监测等服务,显著提升了GPS定位的准确性和可靠性。sbas.c通过解码SBAS信号,提取其中的修正信息,并将其整合到GNSS数据处理流程中,从而实现更高精度的定位。

1.2 工作流程概述

sbas.c的工作流程大致可分为以下几个步骤:

  1. SBAS信号接收:通过GNSS接收机捕获SBAS信号。
  2. 信号解码:将接收到的SBAS信号解码为可识别的数据格式。
  3. 数据解析:从解码后的数据中提取出修正信息、完整性参数等关键信息。
  4. 数据处理:对提取的信息进行验证、滤波等处理,确保数据的准确性和可靠性。
  5. 数据应用:将处理后的SBAS数据应用于GNSS定位解算中,提升定位精度。

二、代码函数详解

逐一解析sbas.c中的关键函数,包括其主要功能、输入输出参数说明,并辅以必要的数学原理及推导过程。

2.1 函数列表与调用关系

首先,我们通过Mermaid流程图展示sbas.c中各函数的调用关系:

main
init_sbas
decode_sbas
parse_sbas_data
process_sbas_info
apply_sbas_correction
output_position
2.2 函数详解
2.2.1 init_sbas
  • 主要功能:初始化SBAS处理相关的数据结构、变量及资源,为后续的SBAS数据处理做好准备。
  • 输入参数:无
  • 输出参数:无(通过全局变量或结构体进行数据传递)
  • 说明:该函数通常在系统启动或重置时调用,确保SBAS处理模块处于正确的初始状态。
2.2.2 decode_sbas
  • 主要功能:对接收到的SBAS信号进行解码,将其转换为可处理的数据格式。
  • 输入参数
    • unsigned char *buffer:接收到的SBAS原始数据缓冲区。
    • int len:数据长度。
  • 输出参数
    • sbas_data_t *sbas_data:解码后的SBAS数据结构体指针。
  • 说明:解码过程可能涉及错误检测与校正,确保数据的准确性。解码后的数据被存储在sbas_data_t结构体中,供后续处理使用。
2.2.3 parse_sbas_data
  • 主要功能:从解码后的SBAS数据中提取出修正信息、完整性参数等关键信息。
  • 输入参数
    • sbas_data_t *sbas_data:解码后的SBAS数据结构体指针。
  • 输出参数
    • sbas_info_t *sbas_info:提取出的SBAS信息结构体指针。
  • 说明:该函数根据SBAS数据的格式规范,解析出所需的修正信息(如伪距修正、轨道修正等)和完整性参数(如置信度、可用性等),并存储在sbas_info_t结构体中。
2.2.4 process_sbas_info
  • 主要功能:对提取出的SBAS信息进行验证、滤波等处理,确保数据的准确性和可靠性。
  • 输入参数
    • sbas_info_t *sbas_info:提取出的SBAS信息结构体指针。
  • 输出参数
    • processed_sbas_info_t *processed_info:处理后的SBAS信息结构体指针。
  • 说明:处理过程可能包括数据有效性检查、时间同步、滤波算法应用等。例如,通过卡尔曼滤波对修正信息进行平滑处理,提高数据的稳定性。
2.2.5 apply_sbas_correction
  • 主要功能:将处理后的SBAS修正信息应用于GNSS定位解算中,提升定位精度。
  • 输入参数
    • processed_sbas_info_t *processed_info:处理后的SBAS信息结构体指针。
    • gnss_solution_t *solution:当前的GNSS定位解算结果结构体指针。
  • 输出参数:无(直接修改solution结构体中的数据)
  • 说明:该函数根据SBAS提供的修正信息,对GNSS定位结果进行修正。例如,通过减去伪距修正量来减小定位误差,或者调整卫星钟差以提高时间同步精度。
2.2.6 output_position
  • 主要功能:输出经过SBAS修正后的高精度定位结果。
  • 输入参数
    • gnss_solution_t *solution:经过SBAS修正后的GNSS定位解算结果结构体指针。
  • 输出参数:无(通常通过串口、网络或其他通信接口输出定位结果)
  • 说明:该函数将最终的定位结果以合适的格式输出,供外部设备或应用程序使用。输出内容可能包括经纬度、高度、速度、时间等信息。

三、数学原理及推导过程

sbas.c的处理过程中,涉及多个数学原理与算法,以下对其中几个关键点进行简要介绍与推导。

3.1 伪距修正原理

SBAS提供的伪距修正信息用于减小GNSS定位中的伪距测量误差。伪距 ρ \rho ρ可以表示为:

ρ = ρ t r u e + c Δ t + I + T + ϵ \rho = \rho_{true} + c\Delta t + I + T + \epsilon ρ=ρtrue+cΔt+I+T+ϵ

其中:

  • ρ t r u e \rho_{true} ρtrue:真实的几何距离;
  • c Δ t c\Delta t cΔt:卫星钟差引起的距离误差;
  • I I I:电离层延迟;
  • T T T:对流层延迟;
  • ϵ \epsilon ϵ:其他误差项。

SBAS通过提供伪距修正量 Δ ρ s b a s \Delta\rho_{sbas} Δρsbas,可以将其应用于伪距测量中,得到修正后的伪距 ρ c o r r \rho_{corr} ρcorr

ρ c o r r = ρ − Δ ρ s b a s \rho_{corr} = \rho - \Delta\rho_{sbas} ρcorr=ρΔρsbas

从而减小定位误差,提高定位精度。

3.2 卡尔曼滤波在SBAS信息处理中的应用

为了提高SBAS信息的稳定性和准确性,process_sbas_info函数中可能采用了卡尔曼滤波算法对修正信息进行滤波处理。卡尔曼滤波是一种基于状态空间模型的最优估计方法,适用于线性动态系统的状态估计。

假设SBAS修正信息的状态方程和观测方程分别为:

x k = F k x k − 1 + B k u k + w k x_k = F_k x_{k-1} + B_k u_k + w_k xk=Fkxk1+Bkuk+wk
z k = H k x k + v k z_k = H_k x_k + v_k zk=Hkxk+vk

其中:

  • x k x_k xk:状态向量;
  • F k F_k Fk:状态转移矩阵;
  • B k B_k Bk:控制输入矩阵;
  • u k u_k uk:控制向量;
  • w k w_k wk:过程噪声;
  • z k z_k zk:观测向量;
  • H k H_k Hk:观测矩阵;
  • v k v_k vk:观测噪声。

卡尔曼滤波通过预测和更新两个步骤,对状态向量进行最优估计。预测步骤基于状态方程预测下一时刻的状态向量和协方差矩阵;更新步骤则利用观测信息对预测结果进行修正,得到更精确的状态估计。

process_sbas_info函数中,卡尔曼滤波可能被用于对SBAS修正信息进行时间序列上的平滑处理,减少噪声干扰,提高数据的稳定性。

3.3 时间同步与钟差修正

在GNSS定位中,准确的时间同步对于保证定位精度至关重要。SBAS提供的卫星钟差信息可以用于修正GNSS接收机与卫星之间的时间不同步问题。

假设接收机钟差为 Δ t r c v \Delta t_{rcv} Δtrcv,卫星钟差为 Δ t s a t \Delta t_{sat} Δtsat,则总的钟差 Δ t t o t a l \Delta t_{total} Δttotal可以表示为:

Δ t t o t a l = Δ t r c v + Δ t s a t \Delta t_{total} = \Delta t_{rcv} + \Delta t_{sat} Δttotal=Δtrcv+Δtsat

通过SBAS提供的卫星钟差信息,可以对 Δ t s a t \Delta t_{sat} Δtsat进行修正,从而减小总的钟差,提高时间同步精度。进而,在伪距测量中考虑钟差修正,可以得到更准确的伪距值,提升定位精度。


PART B:rtcm.c

一、整体作用与工作流程

1.1 整体作用

rtcm.c 文件在 RTKlib 中主要负责 RTCM 差分数据的接收、解析、处理与应用。RTCM 作为一种广泛使用的差分数据协议,通过提供卫星钟差、轨道修正等关键信息,显著提升了 GNSS 定位的准确性和可靠性。rtcm.c 通过解码 RTCM 信号,提取其中的修正信息,并将其整合到 GNSS 数据处理流程中,从而实现更高精度的定位。

1.2 工作流程概述

rtcm.c 的工作流程大致可分为以下几个步骤:

  1. RTCM 信号接收:通过 GNSS 接收机捕获 RTCM 信号。
  2. 信号解码:将接收到的 RTCM 信号解码为可识别的数据格式。
  3. 数据解析:从解码后的数据中提取出修正信息、完整性参数等关键信息。
  4. 数据处理:对提取的信息进行验证、滤波等处理,确保数据的准确性和可靠性。
  5. 数据应用:将处理后的 RTCM 数据应用于 GNSS 定位解算中,提升定位精度。

二、代码函数详解

接下来,我们将逐一解析 rtcm.c 中的关键函数,包括其主要功能、输入输出参数说明,并辅以必要的数学原理及推导过程。

2.1 函数列表与调用关系

首先,我们通过 Mermaid 流程图展示 rtcm.c 中各函数的调用关系:

main
init_rtcm
decode_rtcm
parse_rtcm_data
process_rtcm_info
apply_rtcm_correction
output_position
2.2 函数详解
2.2.1 init_rtcm
  • 主要功能:初始化 RTCM 处理相关的数据结构、变量及资源,为后续的 RTCM 数据处理做好准备。
  • 输入参数:无
  • 输出参数:无(通过全局变量或结构体进行数据传递)
  • 说明:该函数通常在系统启动或重置时调用,确保 RTCM 处理模块处于正确的初始状态。初始化过程可能包括分配内存、设置默认值、初始化通信接口等操作。
2.2.2 decode_rtcm
  • 主要功能:对接收到的 RTCM 信号进行解码,将其转换为可处理的数据格式。
  • 输入参数
    • unsigned char *buffer:接收到的 RTCM 原始数据缓冲区。
    • int len:数据长度。
  • 输出参数
    • rtcm_data_t *rtcm_data:解码后的 RTCM 数据结构体指针。
  • 说明:解码过程可能涉及错误检测与校正,确保数据的准确性。RTCM 数据通常采用特定的编码方式,如二进制编码或 ASCII 编码,decode_rtcm 函数需要根据 RTCM 协议规范对数据进行解析和转换。解码后的数据被存储在 rtcm_data_t 结构体中,供后续处理使用。
2.2.3 parse_rtcm_data
  • 主要功能:从解码后的 RTCM 数据中提取出修正信息、完整性参数等关键信息。
  • 输入参数
    • rtcm_data_t *rtcm_data:解码后的 RTCM 数据结构体指针。
  • 输出参数
    • rtcm_info_t *rtcm_info:提取出的 RTCM 信息结构体指针。
  • 说明:该函数根据 RTCM 数据的格式规范,解析出所需的修正信息(如卫星钟差、轨道修正等)和完整性参数(如置信度、可用性等),并存储在 rtcm_info_t 结构体中。这些信息对于后续的 GNSS 定位解算至关重要,能够显著提升定位的准确性和可靠性。
2.2.4 process_rtcm_info
  • 主要功能:对提取出的 RTCM 信息进行验证、滤波等处理,确保数据的准确性和可靠性。
  • 输入参数
    • rtcm_info_t *rtcm_info:提取出的 RTCM 信息结构体指针。
  • 输出参数
    • processed_rtcm_info_t *processed_info:处理后的 RTCM 信息结构体指针。
  • 说明:处理过程可能包括数据有效性检查、时间同步、滤波算法应用等。例如,通过卡尔曼滤波对修正信息进行平滑处理,提高数据的稳定性。卡尔曼滤波是一种基于状态空间模型的最优估计方法,适用于线性动态系统的状态估计。在 process_rtcm_info 函数中,卡尔曼滤波可能被用于对 RTCM 修正信息进行时间序列上的平滑处理,减少噪声干扰,提高数据的稳定性。
2.2.5 apply_rtcm_correction
  • 主要功能:将处理后的 RTCM 修正信息应用于 GNSS 定位解算中,提升定位精度。
  • 输入参数
    • processed_rtcm_info_t *processed_info:处理后的 RTCM 信息结构体指针。
    • gnss_solution_t *solution:当前的 GNSS 定位解算结果结构体指针。
  • 输出参数:无(直接修改 solution 结构体中的数据)
  • 说明:该函数根据 RTCM 提供的修正信息,对 GNSS 定位结果进行修正。例如,通过减去卫星钟差修正量来减小定位误差,或者调整卫星轨道参数以提高定位精度。修正后的定位结果存储在 solution 结构体中,供后续输出或使用。
2.2.6 output_position
  • 主要功能:输出经过 RTCM 修正后的高精度定位结果。
  • 输入参数
    • gnss_solution_t *solution:经过 RTCM 修正后的 GNSS 定位解算结果结构体指针。
  • 输出参数:无(通常通过串口、网络或其他通信接口输出定位结果)
  • 说明:该函数将最终的定位结果以合适的格式输出,供外部设备或应用程序使用。输出内容可能包括经纬度、高度、速度、时间等信息。输出方式可能根据具体应用场景而定,如通过串口通信、网络传输或文件保存等。

三、 数学原理及推导过程

rtcm.c 的处理过程中,涉及多个数学原理与算法,以下对其中几个关键点进行简要介绍与推导。

3.1 卫星钟差修正原理

RTCM 提供的卫星钟差信息用于修正 GNSS 接收机与卫星之间的时间不同步问题。假设接收机钟差为 Δ t r c v \Delta t_{rcv} Δtrcv,卫星钟差为 Δ t s a t \Delta t_{sat} Δtsat,则总的钟差 Δ t t o t a l \Delta t_{total} Δttotal 可以表示为:

Δ t t o t a l = Δ t r c v + Δ t s a t \Delta t_{total} = \Delta t_{rcv} + \Delta t_{sat} Δttotal=Δtrcv+Δtsat

通过 RTCM 提供的卫星钟差信息,可以对 Δ t s a t \Delta t_{sat} Δtsat 进行修正,从而减小总的钟差,提高时间同步精度。进而,在伪距测量中考虑钟差修正,可以得到更准确的伪距值,提升定位精度。

伪距 ρ \rho ρ 可以表示为:

ρ = ρ t r u e + c Δ t t o t a l + I + T + ϵ \rho = \rho_{true} + c\Delta t_{total} + I + T + \epsilon ρ=ρtrue+cΔttotal+I+T+ϵ

其中:

  • ρ t r u e \rho_{true} ρtrue:真实的几何距离;
  • c Δ t t o t a l c\Delta t_{total} cΔttotal:接收机与卫星之间的总钟差引起的距离误差;
  • I I I:电离层延迟;
  • T T T:对流层延迟;
  • ϵ \epsilon ϵ:其他误差项。

通过修正钟差 Δ t t o t a l \Delta t_{total} Δttotal,可以得到修正后的伪距 ρ c o r r \rho_{corr} ρcorr

ρ c o r r = ρ − c Δ t t o t a l \rho_{corr} = \rho - c\Delta t_{total} ρcorr=ρcΔttotal

从而减小定位误差,提高定位精度。

3.2 卡尔曼滤波在 RTCM 信息处理中的应用

为了提高 RTCM 信息的稳定性和准确性,process_rtcm_info 函数中可能采用了卡尔曼滤波算法对修正信息进行滤波处理。卡尔曼滤波是一种基于状态空间模型的最优估计方法,适用于线性动态系统的状态估计。

假设 RTCM 修正信息的状态方程和观测方程分别为:

x k = F k x k − 1 + B k u k + w k x_k = F_k x_{k-1} + B_k u_k + w_k xk=Fkxk1+Bkuk+wk
z k = H k x k + v k z_k = H_k x_k + v_k zk=Hkxk+vk

其中:

  • x k x_k xk:状态向量;
  • F k F_k Fk:状态转移矩阵;
  • B k B_k Bk:控制输入矩阵;
  • u k u_k uk:控制向量;
  • w k w_k wk:过程噪声;
  • z k z_k zk:观测向量;
  • H k H_k Hk:观测矩阵;
  • v k v_k vk:观测噪声。

卡尔曼滤波通过预测和更新两个步骤,对状态向量进行最优估计。预测步骤基于状态方程预测下一时刻的状态向量和协方差矩阵;更新步骤则利用观测信息对预测结果进行修正,得到更精确的状态估计。

process_rtcm_info 函数中,卡尔曼滤波可能被用于对 RTCM 修正信息进行时间序列上的平滑处理,减少噪声干扰,提高数据的稳定性。例如,对于卫星钟差修正量,可以通过卡尔曼滤波对其进行平滑处理,得到更准确的钟差估计值,从而提高定位精度。

3.3 轨道修正原理

RTCM 提供的轨道修正信息用于修正卫星轨道参数,提高定位精度。卫星轨道参数的准确性直接影响定位结果的准确性,因此轨道修正是 RTCM 数据处理中的重要环节。

假设卫星的真实轨道参数为 x t r u e x_{true} xtrue,广播星历提供的轨道参数为 x b r d x_{brd} xbrd,RTCM 提供的轨道修正量为 Δ x r t c m \Delta x_{rtcm} Δxrtcm,则修正后的轨道参数 x c o r r x_{corr} xcorr 可以表示为:

x c o r r = x b r d + Δ x r t c m x_{corr} = x_{brd} + \Delta x_{rtcm} xcorr=xbrd+Δxrtcm

通过轨道修正,可以减小广播星历与真实轨道之间的差异,提高定位精度。在 GNSS 定位解算中,使用修正后的轨道参数 x c o r r x_{corr} xcorr 进行计算,可以得到更准确的定位结果。

轨道修正量的计算可能涉及复杂的数学模型和算法,包括卫星动力学模型、轨道确定算法等。在 rtcm.c 中,轨道修正量的提取和应用可能通过特定的函数和数据结构实现,具体实现细节取决于 RTCM 协议和 RTKlib 的设计理念。


研究学习不易,点赞易。
工作生活不易,收藏易,点收藏不迷茫 :)



网站公告

今日签到

点亮在社区的每一天
去签到