转发式测定轨系统卫星地面站观测数据质量分析及可视化
2017-02-05何大林孙高文韩伟
何大林,孙高文,韩伟
转发式测定轨系统卫星地面站观测数据质量分析及可视化
何大林,孙高文,韩伟
(中国科学院 新疆天文台,乌鲁木齐 830011)
在转发式的卫星测定轨系统中,卫星地面观测站是其重要组成部分,每天不间断产生大量高精度测距数据、气象数据、时间同步等测量数据,这些数据是实现卫星精密测定轨的基础。因此,地面观测站的数据质量及其可视化显得尤其重要,基于此目的,采用Unix时间戳算法及vector迭代器技术,利用C++ Builder开发一套对卫星地面站观测数据质量分析及其可视化的系统。在实际应用中表明:此套系统能有效统计、初步筛选数据,发现在观测过程中的数据质量、验证数据记录时存在的问题,更直观地反应各个天线系统的运行情况,提高了观测系统及设备故障排除和维护的效率。
卫星地面站;转发式测定轨;Unix时间戳;Vector迭代器;可视化
0 引言
世界上现有的四大卫星导航系统分别是美国的GPS,俄罗斯的GLONASS,中国的BDS和欧盟的Galileo[1]。而转发式卫星导航系统不同于他们,高精度的原子钟装置在地面站,其利用位于地球同步轨道的现有在轨通信卫星上的转发器,把地面站产生的时间信号、轨道参数等导航电文及测距码由地面站天线上行发射至卫星,经卫星转发器转发,再下行广播给用户[2],这样用户接收机接收到转发的导航信息后就可以进行导航、定位、测速和授时。这样做不仅绕过了星载原子钟的技术限制,而且能够提高导航定位的精度,所以地面站在转发式卫星导航系统占有举足轻重的作用。
目前转发式测定轨系统共有6个地面站,21套天线观测系统[3]。这些系统分别接收不同站点或同一站点不同天线发射的信号,并测量时延信息。此外,同时被采集的数据还包括各个站点的钟差数据、温度、湿度、风向和气压等气象数据[4]。通常,由于存在着设备故障、仪器调试、系统异常等不同的情况,导致很多被记录的数据并不能被加以利用。对于转发式测定轨系统而言,解算某一时刻观测目标的位置信息需要依赖于多个站点的测距信息、钟差数据和气象数据[5]。在后期数据处理方面,这些错误数据将严重影响解算结果和效率。因此,对各类观测数据进行采集、分析、统计处理等,是整体研究过程中十分重要的工作,为此,编写一套数据质量分析及可视化系统用来分析某一时间段内、某个观测系统的有效数据,通过有效统计,进行初步筛选,便于发现在观测过程中的数据质量,验证数据记录时存在的问题,可视化后更加直观地反应每一天各个天线的运行情况,提高数据有效率,方便以后的计算以及观测系统和设备故障排查等各种运行维护工作。
1 算法分析
1.1 Unix时间戳的利用
Unix时间戳又被称作是Unix epoch或POSIX time。Unix时间戳的计算是从1970年1月1日0时开始到现在所经过的所有的秒数,包括UTC的午夜和GMT的午夜,值得注意的是,我们在计算Unix时间戳的时候是不考虑闰秒的。Unix时间戳是根据国际体系ISO 8601规范中的1970-01-01 T 00:00:00 Z进行计算的。在大多数情况下,Unix时间戳把时间储存为32位。
在Unix时间计算方法中,1 min用Unix时间戳的格式进行表达的话是60 s,不考虑闰秒,1 h用Unix时间戳的格式进行表达的话,表示为3 600 s,不考虑闰秒。1 d用Unix时间戳的格式表示的话是86 400 s,同样地,闰秒是不在计算范围之内的。1周用Unix时间戳的格式进行表达的话是604 800 s,也是不考虑闰秒。1个月(30.44d)用Unix时间戳的格式进行表达的话是2629 743 s,也是不考虑闰秒的。1 a(365.24 d)用Unix时间戳的格式进行表达的话是31556 926 s,同样地,也是不考虑闰秒的[6]。
Unix时间戳在运用时有很多方便的地方,不用考虑年、月、日等周期长短问题,利用struct tm结构体和localtime,mktime等函数可以很好的在时间戳之间转换,但是也存在很多不方便的地方,比如说互相转换的代码过多,很多时候会出现冗赘,为简便代码编写,在很多地方可以利用C++ Builder自带的时间处理函数TDateTime。在利用TDataTime函数时每秒所增加的二分之一秒量为(1/86 400)×0.5,如图1所示,数据在连续增加到一定程度的时候就会出现跳秒现象,这是因为TDataTime函数返回的实际是double型的数据,由于计算机对双精度浮点型数据的有限长度处理导致了这样现象的产生,而struct tm机构体及time-t类型数据是long型,能够避免计算机有限长度计算的问题,从而解决数据不均匀时间间隔的问题。
图1 Unix时间戳处理实际效果图
1.2 Vector迭代器技术
C++容器主要分为两大类:顺序容器和关联容器。顺序容器有:vector,list,deque和string等,是一系列元素的有序集合。关联容器:set,multiset,map,multimap等,包含查找元素的键值;迭代器的作用是遍历容器。
vector向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容器,完全可以代替数组。
值得注意的是vector容器具有自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间;使用vector向量容器,需要包含头文件#include
vector容器的下标是从0开始计数的,也就是说,如果vector容器的大小是,那么元素的下标是从0~-1;对于vector容器的容量定义,可以实现定义一个固定的大小,事后,可以随时调整大小,也可以事先不定义,随时使用push_back()方法从尾部扩张元素,也可以使用insert()在某个元素位置前插入新元素。
vector容器有两种重要的方法,begin()和end()。begin()返回的是首元素位置的迭代器;end()返回的是最后一个元素的下一元素位置的迭代器[7]。
创建vector对象,有3种形式:
①不指定容器的元素个数,如定义一个用来存储整型的容器:vector
②创建时,指定容器的大小,如定义一个用来存储10个double类型元素的向量容器:vector
③创建一个具有个元素的向量容器对象,每个元素具有指定的初始值;例如vector
2 程序设计
目前转发式测定轨卫星地面站观测到的数据常出现的错误主要有以下4大类:①采集软件记录数据为空;②数据采集内容重复;③数据量记录异常;④数据采集为0。
数据的存储及文件的存储都是根据时间流保存,这方面的处理办法较多,包括TDataTime,Linux时间戳等,其中TDataTime为C++ Builder自带的一种时间流处理办法,使用非常方便,对其处理继承了很多的处理函数。但是由于TDataTime处理的时间单位在整数上都是按照day这样的整天数为基数,每天中就有很多1/86 400,在测试中秒连加等相关处理就会由于计算机精度的不同存在跳秒的现象。所以时间处理过程中是利用以整秒为单位的Linux时间戳的处理办法,在年月日的换算过程中利用了tm结构体的自动转换。需要注意的是由于没有办法给tm结构体中的成员全部赋值初始化(结构体中成员的关联性),所以在初始化时使用了struct tm A={0}这样的办法,初始化完成后再进行赋值转换,否则就会出现不规则的转换。图2为算法流程图。
图2 算法流程图
此外,本系统还增加了服务器数据备份功能。由于数据量大并且多,一方面在时间算法中重复计算年月日等内容严重影响了对数据本身的解算速度,另一方面如果用链表法解算也严重影响运算速度,对提高工作效率有限。为解决此问题,采用上文介绍的Unix时间戳算法及Vector迭代器的技术,以便在数据循环计算中提高统计工作效率及准确性。
部分源代码如下:
数据筛选的判断
if(Edit3->Text=="0")
star_ID="???";
else
star_ID=Edit3->Text;
单个站点数据文件的处理过程
for(int temp_site=0; temp_site { AnsiString site_name=Memo1->Lines->Strings[temp_site]; Memo2->Clear (); 建立TChart图表[8] TPointSeries *series_x1=new TPointSeries (XH_tchart1); TPointSeries *series_d1=new TPointSeries (DH_tchart1); TPointSeries *series_x2=new TPointSeries (XH_tchart2); TPointSeries *series_d2=new TPointSeries (DH_tchart2); TPointSeries *series_x3=new TPointSeries (XH_tchart3); TPointSeries *series_d3=new TPointSeries (DH_tchart3); …… 单个文件的链表搜索起点,每个文件的间隔秒数为1 800 s。 for( int temp_long_time=start_long_time; temp_long_time temp_long_time=temp_long_time+1800) { if(Pro_int==10) Pro_int=0; else Pro_int=Pro_int+1; …… 在程序开发中由于存在数据的备份,利用NMFTP控件,在文件整体下载方面存在递归过程[9],代码如下: if(DIR_TEMP[cc]=="-"&&FileExists(localdir+"\"+temp_ansif[cc])==false) { ListBox1->Items->Add(temp_ansif[cc]+"正在下载…"); NMFTP1->Download("/"+romedir+"/"+temp_ansif[cc], localdir+"\"+temp_ansif[cc]); ListBox1->Items->Add(temp_ansif[cc]+"下载完毕!"); ListBox1->ItemIndex=ListBox1->Items->Count-1; } else { //递归函数,作用是如果是文件夹进入下一级继续判断文件,如果是文件继续下载。 temp_source(NMFTP1,RemoteDir,LocalDir,ListBox1); } …… 在实际分析过程中,利用Unix时间戳算法和Vector迭代器技术,能够避免计算机有限长度计算的问题,解决了数据不均匀时间间隔的问题。基于前文的分析,编制软件,并在每台数据采集计算机上安装,对采集数据(一般24h作为一周期)进行处理。图3是整个分析系统主界面,可以选择相关参数进行设置。 图3 分析评估软件主界面 我们利用5号站点I1系统所接收的C01和Z04两颗卫星在2015年4月9日00时至4月10日23时2 d的数据进行测试,得到结果和报告,如图4至图7所示。 图4 3个通道有效数据总量 图5 一通道测卫星环路数据 图6 一通道内部时延环路数据 图7 数据总体分析 从5号站点I1系统2015年4月9日00时至4月10日23时实际结果可以看出,在有效观测时间内没用空数据,小环(内部时延环路)有些溢出结果与大环(卫星环路)相当,但是观测时间只有大环1/5,说明此环路衰减过小,结合大环综合考虑,需要在此环路设备接口接入衰减器或者调整软件衰减值,大环数据比较平稳,总体数据质量良好,由于篇幅有限其他监测不一一列举。 测试结果表明此套转发式测定轨系统地面观测站数据质量分析及其可视化系统简单实用,实时性强,界面友好,能够对测定轨系统地面基站所有天线系统任意时段的有效数据进行统计;能够验证数据中存在的空、重复、无记录与超出范围错误,并精确定位错误出处;能够对服务器数据进行备份。解决了影响后期数据解算结果和效率的问题。可视化后更直观反映了每套天线系统运行情况,可以为快速排查天线系统故障和系统维护工作提供依据,提高工作效率。 [1] 施浒立, 孙希延, 李志刚. 转发式卫星导航原理[M]. 北京: 科学出版社, 2009. [2] 黄承强. 转发式卫星测轨地面站设备时延标定方法[D]. 北京: 中科院科学院大学, 2015. [3] 曹芬. 基于转发测距数据的GEO导航卫星转发式定轨方法研究[D]. 北京: 中国科学院大学, 2014. [4] 李志刚, 杨旭海, 施浒立, 等. 转发器式卫星轨道测定新方法[J]. 中国科学G辑: 物理学 力学 天文学, 2008, 38(12): 1711-1722. [5] 李志刚, 杨旭海, 李伟超, 等. 转发器式卫星测轨方法[J]. 时问频率学报, 2006, 29(2): 81-89. [6] 孙胜. unix时间戳是什么[EB/OL]. (2015-11-04)[2017-03-20]. http://www.xuexila.com/diannao/weihu/taishiji/310303.html. [7] Istvh. C++容器: 顺序容器, 关联容器[EB/OL]. (2009-09-29)[2017-03-11]. http://blog.chinaunix.net/uid-22002972-id-1805606.html. [8] 陆卫忠, 刘文亮. C++ Builder 6程序设计教程[M]. 2版. 北京: 科学出版社, 2005. [9] 余昌盛, 汪晓平, 权毓舒. C++ Builder 6数据库系统开发实例导航[M]. 北京: 人民邮电出版社, 2003. Quality analysis and visualization for observation data of orbit determination stations by transfer tracking system HE Da-lin, SUN Gao-wen, HAN Wei (Xinjiang Astronomical Observatory, Chinese Academy of Sciences, Urumqi 830011, China) Satellite ground observation stations are important parts in the system of orbit determination by transfer tracking, they produce a large number of high precision ranging, meteorological and time synchronous measuring data every day, which are the basis for the realization of satellite orbit determination. Therefore, the quality and integrity of the observational data are of particularly importance. A quality analysis and visualization system was developed based on Unix timestamp and Vector iterator technique by using C++ builder. The practical application has shown that this system can be able to give effective statistics and preliminary filtering for observing data, to detect the problem of data quality in the process of observation and to verify the problem of data records. It can reveal the operation of each antenna system visually and improve the efficiency of the observation system and troubleshooting and maintenance of equipment. satellite ground station; orbit determination by transfer tracking; Unix timestamp; vector iterator; visualization TN927+.21 A 1674-0637(2017)04-0251-09 10.13875/j.issn.1674-0637.2017-04-0251-09 2017-04-18 中国科学院精密导航定位与定时技术重点实验室开放课题 何大林,男,工程师,主要从事卫星导航数据处理及脉冲星计时相关研究。3 实际结果
4 结论