APP下载

多线程技术在GNSS数据并行解码中的应用

2015-04-21张世能

交通科技与经济 2015年5期
关键词:电文数据格式二进制

张世能

(重庆市勘测院,重庆400020)

GNSS采集的原始数据一般以二进制文件形式存储,为了能够对观测数据进行处理和分析,需要进行解码。目前RINEX是一种普遍使用的GNSS数据交换格式,被大家认同为GNSS的标准数据格式。RINEX采用的存储形式为文本格式,记录方式不随接收机型号、厂商的不同而变化。RINEX格式在GNSS数据处理中的应用十分广泛,绝大多数测量型GNSS接收机品牌均可以将其特有的数据格式转换为RINEX格式,而几乎所有GNSS数据处理软件都可以直接读取并处理RINEX格式的数据,因此将原始观测数据通过解码转换为RINEX格式将有效提高数据的通用性。

目前大多数GNSS接收机都有自带的数据格式转换软件,但是这种软件首先需要将观测数据存储在接收机中,在观测完成之后再下载数据并进行处理,因而无法实现GNSS数据的实时处理,为解决工程应用中对数据处理实时性的要求,本文采用串口通信方式实现观测数据的实时传输,同时为了实现多台接收机观测数据的并行处理,提出了一种基于多线程技术的实时解码算法。

1 中海达Q5接收机原始观测数据结构

中海达Q5接收机采用的原厂生产核心模块为HC12A(新月),采用单频接收机,共有12个通道,其芯片为ASIC芯片,数据更新频率设置为20Hz,可进行信标接收,并具有对基准站/移动站进行差分的功能。

1.1二进制消息结构

新月-HC12A模块的二进制消息采用16进制格式进行存储,以便在计算机中直接读取。二进制信息一般以一个8字节头开始,结束标志通常设置为回车换行符。ASCII的码序列“$BIN”占据消息头的前4个字符。OEM板的导航电文消息块数据和观测值消息块数据分别对应BIN95和BIN96。通用二进制信息结构,如表1所示。

表1 通用二进制信息结构表

1.2 导航电文的消息块数据格式

导航电文与BIN95(消息块)相对应,在不计算Header和epilogue的情况下,消息的总长为128个字节。消息块包含了所有12个通道的星历信息数据,消息块的数据格式构成与GNSS定位卫星所发送的信号中导航电文结构比较相似,在进行解码时可以参考ICD-GNSS-200格式进行数据转换、提取和整理。消息内容可用表2所列的格式进行表达。

表2 导航电文消息块数据(对应BIN95消息)

1.3 GNSS观测值的消息块数据格式

GNSS观测数据与BIN96消息块对应,在不计算Header和epilogue的情况下,消息的总长为300个字节,BIN96消息所包含的内容为相位和码信息,这是观测值数据的主要来源(见表3)。

表3 观测值的消息块数据格式

2 数据解码算法及多线程技术

参照二进制文件的说明,可以从原始数据中提取需要的信息,并按照其数据类型及长度转换为十进制数据,需要注意的是,当需要的数据不是以字节为单位而是以位为单位存储时,需要通过位运算提取出数据并从高位到低位连续排列,并用0补齐高位的不足部分,然后再转换为十进制数据。

在编程实现时,本文所述案例采用C#语言,在微软开发的 Microsoft Visual Studio 2008平台下进行编译,分别设计了AnalyseBIN95()和AnalyseBIN96()两个函数实现导航电文以及观测值数据的解码。

2.1 观测值数据及导航电文解码算法

以观测值数据的解码过程为例,介绍将原始数据解码为RINEX标准格式的具体算法。

首先读取二进制原始观测数据,然后逐字节搜索,直到找到“$BIN96”字符串,继续搜索直到找出第一个回车换行符“\r\n”并记下从“$BIN96”到“\r\n”的总字节数,将其与此数据域中的校验和进行比较。如果相等则说明数据完整,此时可以用函数对GNSS原始观测数据解码,并将结果存放到自定义的BIN96DATA结构体中,继续搜索下一个历元;如果不相等,则说明观测数据并不全,应将此段观测数据放弃,继续向下搜索,如此循环,完成全部解码工作。算法流程及解码函数的核心代码如图1、图2所示。

图1 观测值文件解码算法流程

导航电文的解码过程与之类似,在解出原始数据后,就可以按照RINEX的标准格式写入到文本文件中,用于数据处理及分析。

2.2 多线程技术

GNSS测站接收机采集的观测数据一般通过GPRS等通信技术传到服务器并存储到文本文件中,本文采用数据流的方式对原始数据实时读取、转换和处理:第一步,制定一个打开GNSS原始观测值文件的数据流;第二步,制定处理DataStream读取二进制数据的数据流;最后采用前文提到的算法进行解码。通常在第一步中定义一个FilesStream对象(DataStream),第二步中定义一个BinaryReader对象(DataReader)。

而在工程实际中,往往是多个测站同时观测,为了实现多测站实时数据处理,必须对各个测站接收的数据进行并行实时解码,这就是本文所介绍的多线程技术。多线程技术可解决多测站数据并行解码。

图2 观测值文件解码函数

多线程解码通过三个步骤来实现:第一步,设定一个主线程,用它来读取各个GNSS测站获取的原始观测值数据;第二步,统计GNSS测站的数量,每一个测站创建一个子线程,在解码过程中,子线程和GNSS测站数据是一对一的关系;第三步,设置主线程的“时间片”,使主线程在不同的时间片段中,切换于多个子线程之间,如此进行,直到完成全部解码工作,结束主线程。在现有的硬件条件下,程序运行速度极快,全部子线程同步工作,在这样的模式下,多个GNSS测站的观测数据实现了实时并行解码。采用多线程技术进行实时并行解码的算法流程如图3所示。

图3 多线程技术实现多测站数据实时解码流程

3 实例及验证

本研究通过GPRS通信技术将接收机接收到的原始数据实时发送到数据处理中心,解码程序以数据流的方式读取原始数据并进行处理,实现了对原始数据的实时解码,同时将多线程技术引入到GNSS原始数据解码过程中,实现了多测站数据的实时并行解码,为后续的实时数据处理及定位提供了必要的前提条件和保障。

在实际测试过程中,共设置3个观测站,包括一个基准站和两个流动站,将基准站固定在某一位置,两个流动站以一定的速率进行移动。GNSS接收机将采集到的原始观测数据通过无线传输,储存到服务器,随即调用本文所述程序进行GNSS数据的实时并行解码,解码得到某一测站的RINEX格式观测值文件,以及导航电文文件,如图4和图5所示。

图4 解码得到的RINEX格式观测值文件

图5 解码得到的RINEX格式导航电文文件

多次测试表明,由自编程序得到的解码结果与接收机自带软件的解算结果一致,能够为后续的数据处理提供合格的标准格式数据,且解码效率优于自带软件,达到了实时并行解码的要求。

4 结束语

本文以具体数据为案例,引入多线程技术实现了多个测站观测数据的实时并行解码。经过测试表明,该程序能够对多个测站的观测数据进行实时以及并行解码,效率较高,且满足工程应用中对观测数据实时处理的格式要求。

[1] 李征航,黄劲松.GPS测量与数据处理[M].2版.武汉:武汉大学出版社,2010:240-242.

[2] Hemisphere GPS crescent integrator's manual[Z].Canada:CSI Wireless Inc,2005.

[3] 侯金亮,吴风华,王涛.GPS数据格式转换的研究[J].河北联合大学学报:自然科学版,2014(1):57-61.

[4] 孟祥广,郭际明.GPS接收机(OEM)二进制文件向RINEX文件的转换[J].测绘工程,2009,18(5):18-21.

[5] 郑祎,王解光.GPS卫星预报星历的解码及卫星预报[J].工程勘察,2000(3):52-55.

[6] 周礼,C#和.NET3.0第一步[M].北京:清华大学出版社,2008:327-334.

[7] 陈磊,李康.基于ARM的GPS接收机解码系统设计[J].科技信息,2013(19):96-97.

[8] 张显云,张勤.GPS数据实时通讯中数据解码问题的算法研究[J].测绘科学,2009,34(3):74-75.

[9] 李克昭,袁建平.GPS文件的解码及其实时通信实现研究[J].全球定位系统,2005(3):43-45.

[10]贾蓉,王解先.NovAtel OEM4主板的GPS原始数据解码[J].现代科学仪器,2010(1):57-60.

[11]阳德胜.全站仪自由设站辅助计算程序设计[J].交通科技与经济,2014,16(6):110-113.

[12]甘雨,隋立芬,张鹤,等.利用接收机钟差实时滤波提高GNSS精度[J].测绘工程,2014,23(5):6-8.

[13]陈豪,余记远,杨金玲,等.GPS精确定位技术在小湾水电站工程变形测量中的应用[J].测绘工程,2015,24(4):46-52.

猜你喜欢

电文数据格式二进制
用二进制解一道高中数学联赛数论题
一种与内部缺陷仪设备通讯的接口模块
ADS-B延迟转发电文检测及干扰台定位方法
有趣的进度
二进制在竞赛题中的应用
在智能交通系统中PLC数据格式转换方法的研究
卫星导航系统导航电文编排结构研究
论子函数在C语言数据格式输出中的应用
DWG与SHP数据格式互转换方法研究——以龙岩规划测绘数据为例
基于ArcGIS的规划数据格式转换研究