基于Matlab读取标准RINEX格式的GPS星历数据

2010-03-13 08:54王标标
电子设计工程 2010年8期
关键词:格式文件电文数组

张 妮,王标标

(1.西安工业大学 北方信息工程学院,陕西 西安 710025;2.中国人民解放军96275部队 河南 洛阳 471003)

全球定位系统GPS (Global Positioning System)以其具有多维,全天候的连续、实时导航、定位、定时功能,可为各类用户实时地提供精研的三维坐标、速度和时间等优点而广泛应用于民用和军用领域。为了能统一使用来自不同接收机的数据,目前普遍采用一种与接收机无关的接收机自主交换格式 RINEX(The Receiver Independent Exchange Format)。目前,RINEX数据的读取方法很多,例如利用Visual Basic和Visual C++来实现,但这些方法都存在不能快速地从表面上分析出接收机接收的数据质量,编程代码烦琐,循环结构过多,而且不同的GPS网仍需选用不同的软件进行数据处理,兼容性很差[1]等缺点。本文提出了一种基于Matlab读取RINEX文件的方法。

1 星历数据文件格式

1.1 本机格式

本机格式是指接收机存储数据的格式,存储方式为二进制存储,存储的数据内容包括:观测值、广播星历、电离层信息、气象元素等,并具有如下特点:1)不同厂家的接收机具有不同的本机格式;2)与接收机配套的数据处理软件(随机软件/商用软件)一般可以直接读取自身本机格式的数据,而不能读取其他厂家的本机格式的数据;3)不利于多种型号的接收机联合作业。

1.2 RINEX格式

RINEX格式为纯ASCII码文本文件,是与接收机无关的数据交换格式[3]。存储内容包括:观测值、星历(导航信息)、气象数据、钟数据等。它具有如下特点:1)通用性强;2)利于多种型号的接收机联合作业;3)大多数软件能够处理。

RINEX格式文件类型有:1)观测数据文件:GPS观测值;2)导航电文文件:GPS卫星导航电文;3)气象数据文件:在测站处所测定的气象数据;4)GLONASS导航电文文件:GLONASS卫星导航电文;5)GEO导航电文文件:增强系统中搭载有类GPS信号发生器的地球同步卫星(GEO)的导航电文;6)卫星和接收机钟文件:卫星和接收机时钟信息的。

RINEX格式文件有规定的命名方法,简称8+3文件名,即ssssdddf.yyt[2]。具体命名方法如图1所示。

图1RINEX格式文件命名规则Fig.1 Named Rule of RINEX format file

RINEX格式文件结构是以节、记录、字段和列为单位逐级组织的。所有类型的RINEX文件均分为2节:文件头和数据记录。每个记录占一行,不超过80列宽。RINEX格式的头文件用于存放整个文件有关的全局性信息,位于每个文件的最前部,其最后一个记录为“END OF HEADER”。文件头中每个记录的第61~80列为标签,用于说明相应行上第1~60列中所表示的内容。RINEX格式文件的记录数据紧跟在文件头的后面,随文件类型的不同,所存放数据的内容和具体格式也不相同[4]。

由于在实际定位中,主要使用观测数据文件和导航文件,其他文件的读取和处理与这两类文件类似。因此,这里着重以导航文件为例说明RINEX格式文件的读取方法。

1.3 导航文件的数据格式

卫星星历是取自卫星的广播导航电文,导航文件像其他文件一样由头文件和星历数据组成,是地面位置计算的基础数据。由于观测数据内容比较复杂,而且具有相似的数据块。在数据文件中数据之间的间隔是以空格或回车换行字符隔开的,所以在数据读取过程中根据这些特殊字符进行控制。导航文件的头文件主要包括RINEX版本号、观测类型、文件纲要名称、文件机构名称、文件建立日期、载波和天线的介绍内容、电离层参数时间改正参数和秒跳。星历数据主要包括卫星号、星历时间和位置参数。

2 读取RINEX格式文件

RINEX格式文件读取时可以根据卫星、历元信息来存储数据。用Matlab读取RINEX文件的方式即就是用Matlab由程序命令按字符串进行读取。一般情况下,当读取指定的字符串(如“END OF HEADER”)时,开始读取有效数据,即星历数据。根据RINEX格式文件结构特点,导航文件中有效数据为字符串“END OF HEADER”以后的数据。

2.1 导航文件的读取及部分代码

导航文件读取时,以“END OF HEADER”作为特殊字符串,标识导航文件中头文件与星历数据的分界点,通过简单的循环结构,并利用Matlab强大的矩阵优势,将星历数据存放于结构体数组(其中共有38个字段名,分别存放星历数据中的卫星号、星历的时间和位置参数),以方便获取卫星参数,求取卫星坐标。具体代码实现如下:

1)存放星历数据的结构体数组创建 结构体数组的创建采用了struct函数[5],具体代码示例如下:

所创建结构体的字段名,如‘prn’,‘year’,..,类型均为NaN,共38个,在读取RINEX的观测文件和导航文件时,可将数据根据卫星的属性存储至相应的字段名。

2)打开文件,获取星历数据开始位置[6]利用findstr及循环语句逐行查找字符串“END OF HEADER”,获取星历数据开始位置。具体代码示例如下:

3)获取星历数据,并存放至结构体数组 首先通过简单的循环语句获取数据行数,计算出卫星个数,再按照卫星编号将数据存放至所定义的结构体数组中,部分具体代码如下:

2.2 星历数据的读取

星历数据的读取采用结构体数组显示的相关命令读取,若要获取某个卫星的相关参数可输入如示例命令:>>navdata(1)。获取结果如图2所示,为1号卫星参数读取结果。

图21号卫星参数读取结果Fig.2 Reading result of parameter of satliete NO.1

也可利用Matlab元包数组,将数据存放并显示出来,具体实现代码如下:

读取结果如图3所示。

采用Matlab软件读RINEX导航文件,可以将文件所有的数据用矩阵保存,数据的显示精度不仅不会影响计算精度,而且可以随时修改,并可根据卫星坐标的计算公式和步骤,利用Matlab矩阵的计算优势,很方便地计算不同时刻卫星的坐标,此外,还可方便查看卫星导航表层信息,判断导航数据的质量。

图3读取星历数据结果Fig.3 Reading result of ephemeris data

3 结 论

利用Matlab以矩阵为单位进行计算的优势对RINEX文件进行读取,较其他语言简单易行,结果精确,程序可移植性好,便于后续数据处理,同时还可利用Matlab的仿真功能,实现卫星动态变化的实时模拟。

[1]陈东银,刘立龙,陈雷.GPS导航定位技术中面向对象读取 RINEX 格式数据[J].测绘与空间地理信,2009(6):41-43.CHEN Dong-yin,LIU Li-long,CHEN Lei.An object-oriented method of reading RINEX formatdat in GPS navigation technology[J].Geomatics and Spatial Information Technology,2009(6):41-43.

[2]Gurtner W.RINEX:The receiver independent exchange format:Version 2.10[M]Canada:Astronomical Institute University of Berne,2002.

[3]孟广祥,郭标明.GPS接收机(OEM)二进制文件向RINEX文件的转换[J].测绘工程,2009(10):18-21.MENG Guang-xiang,GUO Biao-ming.The transformation from GPS receiver(OEM) binary data to RINEX file[J].Engineering of Surveyying and Mapping, 2009(10):18-21.

[4]陈桂珍,戴建军.GPS-OEM原始数据向RINEX格式转换的方法[J].测绘技术装备,2006(4):26-27.CHENG Gui-zhen,DAI Jian-jun.The transformation from GPS-OEM orignal data to RINEX Format[J].Surveying technical equipment, 2006(4):26-27.

[5]张志涌.精通 Matlab 6.5[M].北京:北京航空航天大学出版社,2004.

[6]Chapman Stephen J.Matlab Programming for engineers[M].北京:科学出版社,2003.

猜你喜欢
格式文件电文数组
JAVA稀疏矩阵算法
基于WebGL的轨道交通BIM轻量化应用方案
一种与内部缺陷仪设备通讯的接口模块
JAVA玩转数学之二维数组排序
使用“格式文件”将徕卡仪器数据导出成cass 格式的方法
Excel数组公式在林业多条件求和中的应用
编写徕卡TS02型全站仪格式文件的方法探索
回归基础 到底什么是RAW格式文件?
寻找勾股数组的历程
卫星导航系统导航电文编排结构研究