摘要:在GNSS测量定位中,接收机的观测数据的质量是决定了测量定位的精度的重要因素。使用TEQC软件通过命令行模式实现了GNSS数据的转换、编辑和质量检查等功能,该软件的不足在于其质量检查输出的文本文件缺乏直观的图形化表达功能,非专业认识很难从数据处理结果分析GNSS观测数据质量的好坏。本课题旨在通过标准的数据格式存储TEQC程序处理的质量检查结果,并用Python实现数据质量的可视化,并通过标准化的报表格式统计对观测数据的质量实现定量化的分析。直观显示数据质量不足之处,帮助用户判断所采集GNSS观测数据质量是否满足实际测量需求;为用户提供数据编辑、剔除等操作的可视化依据,甚至提高GNSS测量用户提高测量定位的精度。
关键字:GPS观测数据,质量检查,可视化
1 引言
在GNSS测量定位中,接收机的观测数据的质量是决定了测量定位的精度的重要因素。
美国卫星导航系统与地壳形变观测研究大学联盟(UNAVCO Facility)提供的TEQC主要有格式转换(Translate)、数据编辑(Edit)、质量检查(QualityCheck)、单点定位(Coordinate)四方面的功能。TEQC软件通过命令行模式实现了GNSS数据的转换、编辑和质量检查等功能,该软件的不足在于其质量检查输出的文本文件缺乏直观的图形化表达功能,非专业认识很难从数据处理结果分析GNSS观测数据质量的好坏。
依照软件的发展趋势,TEQC必然要能够做到跨平台,可视化,操作简单,界面友好,自由度高,应用平台广泛,数据质量高。
本文旨在通过标准的数据格式存储TEQC程序处理的质量检查结果,并用Python实现数据质量的可视化,并通过标准化的报表格式统计对观测数据的质量实现定量化的分析。
2 技术路线
本软件的技术路线采用如下方案完成,首先对TEQC质量控制的输出文件,包括总结文件和8个子文件进行标准化存储,采用netcdf格式存储输出文件;然后,使用python中的matplotlib图形显示工具,通过读取标准化的netcdf格式文件实现质量检查的可视化输出;最后,用latex排版自动生成GNSS观测值质量检查的图文报表。
3 实现过程
3.1 TEQC软件使用过程
进行质量检查的基本语句为:
不使用导航文件时:teqc +qc cham0020.02o
使用导航文件时:teqc +qc –nav cham0020.02n cham0020.02o
执行上面语句之后,将生成如下几个文件:
cham0020.ion L2电离层观测值
cham0020.iod L2电离层观测值变率
cham0020.mp1 P1多路径观测值(包括接收机噪声)
cham0020.mp2 P2多路径观测值(包括接收机噪声)
cham0020.sn1 L1频率上的信噪比
cham0020.sn2 L2频率上的信噪比
cham0020.azi 卫星方位角 (在广播星历和观测数据同时使用时产生)
cham0020.ele 卫星高度角 (在广播星历和观测数据同时使用时产生)
cham0020.02S 质量检查摘要文件
其中cham0020.02s是质量检查统计的结果文件,是TEQC软件的核心部分,主要用于对观测数据的质量评定,一般情况下观测人员主要是对该文件进行检查,从而确定观测数据的质量。其它几个文件主要用于作图,从而可直观的对每一颗卫星的单项质量进行检查。
3.2 数据转netCDF4格式
直接使用原本数据也并非是不行,但是那种数据结构缺少通用性,而且没有合适的函数库来调用,提取想要的数据就会变得异常的麻烦,需要手动再编写一个能自由读写原本数据结构接口函数库出来。这样无疑极大的增加工作量,同时也不能保证编写出来的该接口函数库能够稳健的工作。为了避免这个问题,我们得选用一种通用的,有着方便使用的接口函数库数据结构来转化得到的数据。经过筛选和甄别,最终选用了netCDF4这种数据结构。
3.2.1 netCDF4数据结构
NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目 前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。
从数学上来说,netcdf存储的数据就是一个多自变量的单值函数。 用公式来说就是f(x,y,z,...)=value,函数的自变量x,y,z等在netcdf中叫做维(dimension)或坐标轴(axix),函 数值value在netcdf中叫做变量(Variables).而自变量和函数值在物理学上的一些性质,比如计量单位(量纲)、物理学名称等等在 netcdf中就叫属性(Attributes)
其格式大致为:
NetCDF name{
Dimensions:… //定义维数
Variables:… //定义变量
Attributes:… //属性
Data:…//数据
}
而netCDF4是比较新的一种格式,增加一个组群的概念,每一个组群就有着各自的维度、变量、属性、以及数据。组群的概念大大的方便了GPS的数据的存储。
3.2.2 GPS数据读入内存
想要将数据转换成netCDF4的格式,那么必须可分析原始数据的结构,找出其中的规律:
以L1多路径效应文件为例:
T_SAMP表示30s记录一次数据,START_TIME_MD 表示记录数据的开始时间,这样就可以推算任意一次数据记录的时间了。接下就表示18颗卫星及具体编号,再接下来说是18颗卫星的具体数据了。
解析数据,然后按照规则读到内存中去,存储的数据结构采用的map里面嵌套vector的结构:
map<satename,struct{GPSweek,vector<GPSsec>,vector<Data>}
Satename:卫星名
GPSweek :GPS周
GPSsec:GPS秒
Data:具体数据
从上面的数据结构就可看出,采用的是GPS时作为存储的时间,但是源数据中的START_TIME_MJD却并非是GPS时,而是儒略日,是另一种计时方式。这种计时方式并不直观,在显示秒数的时候却是以小数形式来表示,不够直观,因此,采用GPS时,编写程序使得儒略日转换成GPS时即可。
在结构体struct中,采用vector这种线性列表的存储结构,而并非其它的链表的数据结构,是考虑到由netCDF4的接口函数nc_put_var里面参数需要首地址,采用其它的结构,则还要将数据存到数组中,然后再被接口函数调用。
3.2.3 内存数据转成netCDF4结构
在之前就已经介绍了netCDF4的数据结构,接下来就是利用已经读入内存的数据转成netCDF4这种数据的文件。
其其体的结构为:
netCDF4 filename{
Group satename{
Dimensions:size(Data)
Variables:GPSsec
Data:data
}
GlobeAttributes:GPSweek
}
也就是将卫星的名称作为了组群名,而将GPSweek作了全局变量。然后参考netCDF4和C的接口函数的官方文档,实现netCDF4的程序的编写。
最后为了能够真正能够使用该程序,修改程序使得其能够接收外界的参数,编写makefile文件,添加netCDF4的头文件和链接库,编译得出可执行文件。在以后的部分,只需要用使用该可执行文件,而不必再考虑过程问题。
3.2.4 文件合并
发现L1和L2的多路径效应文件以及电离层延迟和其变化率文件,以及高度角和方位角的文件大小相等,里面的数据量和也是完全一样的,卫星出现的时间也是相同的。所以这些数据理论上是可以进行合并,即同一个netCDF的数据里面存在着两组数据。
通过修改程序的数据结构,给netCDF的文件中添加了新的一组Data,编译出可执行文件。
相对单个文件和原始来说,转换后数据还有着额外的好处:节省了存储空间的。在一组实例中,原始的mp1和mp2文件大小均为572.6KB,而转换完成的netCDF文件则只有927.2KB,节省了约为10%的空间。
最终的成果是两个可执行文件,将其命名为:SateToCDFsingle和SateToCDFdouble。SateToDCDFsingle接受两个参数:单个原始数据文件名和输出数据文件名,而SateToCDFdoublem则接受三个参数:两个原始数据文件名和输出数据文件名。
3.3 GPS观测数据可视化处理
将数据转成netCDF4的格式不是目的,只是为了方便的提取的数据以便成图得到可视化的结果。成图软件可采用荐于经费问题,采用了是开源免费的python的matplotlib库,而并非使用matlib来成图。同时另外一个比较重要的原因就是:python有着netCDF4库,能够很好读取该格式的数据。
3.3.1 关于python,numpy与matplotlib
Python是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议。Python语法简洁而清晰,具有丰富和强大的类库。Python专用的科学计算扩展库就很多,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为 Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。
3.3.2 GPS时与通用时的转换
在读取原始数据的过程,实际上也中用到了时间和时区的转换,在绘制图形的时候,涉及到时间的为坐标轴的时候,如果仍然使用GPS时,看起来就是显得比较难看,而且与真实的时间无法对应起来,十分不便。
在第一个部分实际上也是用到了时间的转换函数,那个时候已经完成了该函数的编写,并且该转换函数能够自由的在GPS时,儒略日,通用时间三种时间格式自由的转换。但是该函数使用的C语言来完成的,无法直接在python中使用。解决方法有三种:(1)使用python重写源代码;(2)将函数编译成可执行文件,利用“通道”,将程序的输出作为python程序的输入;(3)混合式编程,将函数编译成动态链接库(.so文件),然利用python的ctypes模块来使用C语言编译的动态链接库的接口。
选择了第三种方式,将函数编译成动态链接库文件。已经有了源代码文件:
Timetrans.c和timetrans.h,然后使用编译命令:
gcc -shared -fPIC timetrans.c -o timetrans.so
即可生成可以供python.ctypes使用的动态链接库。
3.3.3 numpy与matplotlib生成图表
以G01星名为例,跟据高度角和方位角可以绘制出可以绘制出单颗卫星的轨迹图(如图3-1):
同时可以绘制卫星轨迹图和其它数据的关系,如卫星轨迹与电离层延迟的关系图(如图3-7):
图3-7 卫星轨迹与电离层延迟的关系图
后期优化参数,使得绘图程序能够接收更多的参数,提高了绘图的自由度,能够灵活的得到更多类型的图形,为数据分析提供更直观的印象。
3.4 质量分析报告
Teqc分析源数据完成后,会产生数据质量报告文件,也是平时所说的S文件。S文件内容丰富,但是却使用的是文本的格式,同时也是英文写出的,并不直观。为了方便的得到可读性更高、更直观、更美观的质量分析报告,我们将会基于该S文件,生成中文版本的,有着丰富图片的具有通用性的PDF文档。PDF文档采用标准的LaTex排版。
3.4.1 LaTex简介
LaTeX是一种基于Tex的排版系统。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。
3.4.2 分析S文件
S文件是一个比较固定格式质量分析报告,可以通过识别其中的关键词来读取所要数据,这为直接使用和提取里面的数据建立的基础。Latex是可以通过\include和\input来分别导入外界的图片和文本,所以如果能够将S文件关键数据进行提取,然后按latex格式输出到文本中去,再通过一个主tex文档来\include和\input这些图片和文本,添加合适的环境和注释。
3.4.3 绘制S文件的图表
S文件中存着不少的图表,但是这些图表并不直接,看起来比较费力,不过latex是能够直接绘制表格的,只要按照Latex格式将数据存入文本中即可。对于一些特殊的图形,则还是要提取数据,然后使用matplotlib来进行绘制,绘制完成后再导入到PDF中即可。
S文件最后部分有着对多路径效应、电离层延心及变化率等的相关统计,提取里面的数据就可以直接进行绘图了。下面则是其中L1的多路径效应的相关统计直方图(如图3-8):
图3-8 L1多路径效应图
4 自动化与应用界面开发
§4.1自动化脚本编写
到此为止,所有的核心功能都初步完工,不过却都是各自独立的零部件,想要无论是自己使用和别人来说都得得比较复杂,所以必然要对这些功能进行整合,通过脚本来调用合适的程序来自动化完成任务。
本次所有内容都放在一个叫作process的文件夹内(如表4-1):
表4-1 自动化脚本文件功能以及存储文件夹
这些自动化的脚本会归纳整理所有生成的资料,所需要就仅仅是输入一个命令。
§4.2 Qt与应用界面开发
使用终端进行输入输出尽管强大而方便,但是却并不人性化,为此该程序开发出简易的使用界面。
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,易于扩展,允许组件编程。
简易界面可以导入数据,然后实时的预览图形,方便许多,效果图如下所示(如图4-1,4-2):
5 总结
通过标准的数据格式存储TEQC程序处理的质量检查结果,并用Python实现数据质量的可视化,并通过标准化的报表格式统计对观测数据的质量实现定量化的分析。直观显示数据质量不足之处,帮助用户判断所采集GNSS观测数据质量是否满足实际测量需求;为用户提供数据编辑、剔除等操作的可视化依据,甚至提高GNSS测量用户提高测量定位的精度。
参考文献
[1].余文坤;戴吾蛟;杨哲;;基于TEQC的GNSS数据质量分析及预处理软件的设计与实现[J];大地测量与地球动力学;2010(05):81-85.
[2].张显云,姚黔贵,张鹏飞,等. 基于TEQC 的GNSS 数据质量可视化表达与分析[J]. 测绘通报,2014 ( 4) : 26-29.
[3].范士杰,郭际明,彭秀英. TEQC在GPS数据预处理中的应用与分析[J]. 测绘信息与工程. 2004(02):33-35.
[4].聂桂根, 王院. TEQC 软件对GPS 数据质量的评定及软件界面的开发[ J]. 全球定位系统, 2003, (4): 32 - 38.
[5].陈中新,奚长元, 范占永,蒋华. 应用TEQC对GPS连续参考站数据进行质量分析[J]. 全球定位系统,2007.3:35-37.
[6].白征东,吴刚祥,任常. 北斗观测数据的质量检查与分析[J]. 测绘通报, 2014( 6) : 10-13.
[7].丁锐. 利用TEQC 软件对GNSS连续参考站选址的数据分析[ J]. 城市勘测, 2009, ( 1): 56- 59.
[8].赵红强;郭际明;李宗华;李向民;绘图工具QCVIEW在GPS数据预处理中的应用[J];测绘通报;2008(11):44-46.
[9].贾莹媛,黄张裕,杨富春,李斌. 基于Matlab的TEQC在GPS数据预处理中的应用[J]. 海洋测绘,2012,32(2):52-54.