崔群超, 荆文芳
(1.中国科学院国家授时中心, 西安 710600; 2.中国科学院大学, 北京 100049)
GNSS验证系统(GNSS verification system,GVS)是中国具有自主知识产权的一种新卫星导航体制[1],该系统基于卫星转发地面站所产生的导航信号的工作模式实现卫星导航定位。GVS具有高精度载波相位授时功能,GNSS验证系统授时指标(GNSS verification system timing indicator,GVSTI)是实现GVS载波相位授时的关键性能指标,对分析GVS载波相位授时精度和误差具有重要意义,同时为GVS基带调控发射信号参数提供重要数据支持。目前对GVSTI的分析主要基于MATLAB软件,研究人员需要从采集数据开始进行大量的重复工作,耗时耗力并增加了出错概率,且不能实时获取GVSTI性能。因此,为提高GVSTI分析效率、降低人为失误,需要一个实时分析GVSTI的系统软件。使用设计模式可以帮助开发人员设计出一种更加灵活、更加模块化的、可复用和易于理解的软件[2]。MVC模式[3-4]最早在Smalltalk-80程序语言设计中被提出,MVC开发模式是一种“分治”思想,它将数据的访问和数据的表现进行了分离。通过这种模式,可以开发一个具有伸缩性、便于扩展、便于整个流程维护的平台[5]。本文应用MVC模式自主设计并开发GVSTI系统软件。
MVC模式包括模型(model)、视图(view)和控制器(controller)三部分[6],分别对应数据处理、数据表示和输入输出控制[7],MVC模式结构如图1所示。
图1 MVC模式结构图Fig.1 MVC mode structure diagram
模型是与问题相关的数据逻辑抽象,代表对象的内在属性,是整个模式的核心。模型作用为:抽象应用程序功能,封装程序数据的结构及操作;为控制器提供对数据的访问;为视图提供数据索引,接受视图的数据操作;当模型中数据变化时,通知视图数据改变,但不关心数据如何显示。
视图提供界面显示,负责与用户交互[8]。一个模型可以对应一个或者多个视图[9],如图形用户界面视图、命令行视图等。视图为用户提供输入方式,触发业务逻辑运行,同时将业务逻辑运行结果显示给用户。当模型变化时,视图也作出相应变化。视图作用为:将模型中的数据以特定方式显示给用户,获得用户输入;将用户数据转发给控制器;接收来自模型的“数据已更新”通知,并显示信息;对数据显示部分进行抽象。
控制器是视图和模型的接口。一方面,它处理来自视图的输入,将其解释为系统能够理解的对象,同时识别用户动作,将其解释为对模型方法的调用;另一方面,它处理来自模型的事件,选择适当的视图为用户提供反馈。控制器的作用为:抽象用户交互;将用户输入映射为程序的动作,并发送给模型;根据用户输入和模型的业务逻辑,选择适当的视图来显示数据。
图2 GVS组成结构示意图Fig.2 Schematic diagram of GVS structure
GVS由空间星座部分、地面监控部分、用户设备部分组成,其结构如图2所示。空间星座部分利用地球同步轨道(geosynchronous orbit,GEO)卫星和倾斜地球同步轨道(inclined geosynchronous satellite orbit,IGSO)卫星作为导航星[10],它们共同转发地面站发射的导航信号。地面监控部分由分布在中国各地的测轨站和位于西安的地面站组成,测轨站通过卫星双向时间传递对导航星进行精确定轨,精度优于2 m[11],定轨数据传递给西安地面站,地面站有高精度原子钟,稳定度为1×10-14~1×10-15[12],地面站以原子钟为时频基准,将产生的导航电文发射给导航星,地面站同时接收导航星转发的导航信号,在地面站基带中对导航信号进行闭环控制。用户设备部分接收导航星转发的信号,并产生位置、速度、时间等信息。
GVS定位原理同GPS类似,采用三星测距交会实现定位。不同之处在于GVS导航信号由地面站生成,导航星上不需要高性能的原子钟,导航信号经卫星转发器转发,播发给用户。这种卫星对导航信号转发的工作模式破坏了卫星天线相位中心出口处的载波频率连续性和码相位与载波相位一致性(简称“码载一致性”),为高精度载波相位授时带来了困扰。
为实现高精度载波相位授时,在西安地面站的基带中必须实现对载波频率连续性和码载一致性的实时监测。研究的软件具备以下几个方面功能:①基带数据管理;②载波和码指标分析处理;③操作异常管理。
GVSTI软件基于Windows操作系统、采用Qt开发环境进行GVSTI软件的开发,具体开发运行环境包括:C++开发语言,Qt4.7开发平台,Qt Creator2.4开发调试环境,Windows10操作系统。
GVSTI软件架构如图3所示。软件界面主要由view层构建,包括界面控制、参数设置、指标分析和数据编辑等。controller层负责view和model间的交互,控制软件流程。model层主要负责载波和码数据解析后的存储和组织。数据源层DataSource负责接收和解析数据。四层架构之间的耦合性很低,如果有新功能需求,分析新需求属于那一层,改变此层而其他层次基本不用改动,只需要单元测试改动层次就可以,节约了开发成本。例如当数据来源更改时,如数据来源从网络更改为数据库、串口、文件等来源时,仅需改动数据层即可。
软件主要模块组成图如图4所示。主要为界面及界面下的菜单模块,分为文件操作、数据编辑、视图、文件数据、数据分析、帮助。其中数据分析为软件组成的核心部分。
图3 GVSTI软件架构图Fig.3 GVSTI software architecture diagram
图4 软件组成图Fig.4 Software composition diagram
2.3.1 基于 Qt技术的实现
Qt是一个跨平台的图形用户界面应用程序框架,其特有的qmake编译机制使得Qt具有“一次编写,随处编译”功能,Qt编写的源代码可以不经修改在多种不同操作系统平台编译运行,包括Windows、Linux、Unix等。
图5 信号与槽机制原理图Fig.5 Schematic diagram of the signal and slot mechanism
在GVSTI软件设计和实现中,利用了Qt的信号与槽机制,其原理如图5所示,信号是操作Qt对象后,由操作系统产生的消息,槽是程序中的消息处理函数,两者通过Qt提供的connect函数操作连接。信号与槽机制实现了程序内部模块间的信息传递,包括视图和模型、模型和控制器、控制器和视图之间。Qt特有的信号与槽机制代替传统的回调技术,使得Qt事件定义和响应非常方便,最大限度弱化类之间的耦合性,为以后程序的功能扩展奠定了基础。
2.3.2 核心模块设计
(1)解析数据。根据数据源的不同,分别解析数据,并将数据存储到程序可识别的不同类中。
(2)存储数据。根据数据源的不同,设置不同的类分别存储数据,并注重数据的封装。
(3)组织数据。将存储的数据对象按照不同的方式组织起来,提供给视图层使用。
(4)处理数据。根据视图层参数设置的不同,采用不同算法处理模型中存储的数据。
针对以上核心模块的不同功能,给出GVSTI软件核心模块及对应的类如图6所示。数据解析、数据存储、数据组织、数据处理模块对应类分别为DataSource、DataInfo、DataInfoModel、QCustomPlot。
图6 GVSTI软件架构及其对应类Fig.6 GVSTI software architecture and its corresponding class
图7 DataSource类设计状态图Fig.7 DataSource class design state diagram
DataSource类设计状态图如图7所示。setDataPaht()函数获取文件路径,read()函数读取文件数据,parse()函数解析数据,并将解析好的数据存放到DataInfo类中,模型类调用fetchData()函数,组织解析好的数据。这里采用操作fetchData拿走数据而非getData获取数据,是为了有更多的空间容纳将要到达的数据。模型对应类DataInfoModel将解析的数据类DataInfo组织到模型当中。
DataInfo类设计状态图如图8所示。主要保存解析好的数据,second()、minute()、hour()、day()、data()函数分别获取秒、分、时、天、数据等信息。
图8 DataInfo类设计状态图Fig.8 DataInfo class design state diagram
DataInfoModel类设计状态图如图9所示。add(DataInfo)为add(QList
图9 DataInfoModel类设计状态图Fig.9 DataInfoModel class design state diagram
图10 DataProcess类设计状态图Fig.10 DataProcess class design state diagram
DataProcess类设计状态图如图10所示。DataProcess类中的主要算法功能函数为onDataCarrierFreAccuracy()、onDataCarrierAllanVariance()、onDataCodeCarrierResidual()、onDataResidualFFT()、onDataResidualFitting(),通过这些功能函数实现对数据的处理。
onDataCarrierFreAccuracy()函数实现载波频率准确性算法,主要利用地面站接收的载波频率数据减去上行多普勒频率推算卫星出口处的实时载波频率,上行多普勒频率采用对码相位数据求导方式获得。
onDataCarrierAllanVariance()函数实现载波频率稳定性算法,首先获取卫星出口处的实时载波频率数据,然后利用阿兰方差公式计算载波频率稳定性。
onDataCodeCarrierResidual()函数实现码载一致性算法,在数据解析后,直接将码相位减去载波相位,得到卫星出口处的码载一致性。
onDataResidualFFT()函数实现码载一致性的快速傅里叶变换,首先获得码载一致性残差数据,采用FFTW[13](fastest fourier transform in the west)软件包实现,该软件包由麻省理工学院Frigo M博士和Johoson S G博士开发,完全免费,MATLAB中的离散傅里叶变换即调用FFTW实现。
onDataResidualFitting()函数实现码载一致性的数据拟合,首先获得码载一致性残差数据,采用高斯消去法进行码载一致性数据拟合。
图11 核心模块交互序列图Fig.11 Core module interaction sequence diagram
核心模块的交互如图11所示。DataSource类首先通过setDataPath()函数获取数据,然后通过read()函数对数据源进行读取,之后通过parse()函数对数据源进行解析,而后将解析数据存入DataInfo类中,最后通过fetchData()函数拿走数据源;DataInfoModel模型将fetchData()函数获得的数据添加到模型中,DataProcess类通过getDataInfoModel()函数获得模型,并通过onDataCarrierFreAccuracy()函数得到卫星出口处载波频率数据,DataProcess类中的其他算法函数同onDataCarrierFreAccuracy()函数类似,在序列图中省略。
将开发的软件应用于GVS基带中,对GVS卫星转发器发射天线相位中心出口处载波频率准确性、载波频率稳定性、码载一致性、码载一致性数据拟合、码载一致性频域特性进行实验,软件界面及实验结果如图12所示。
经过图12分析可知,GVS卫星转发器发射天线相位中心出口处载波频率准确性和码载一致性为10-10量级,载波频率在1 000 s稳定性为10-4量级,稳定性较差,码载一致性残差数据拟合良好,可以为地面站控制卫星出口处码载一致性提供数据支持,码载一致性频域噪声主要分布在0.1 Hz以内,这对基带从频域入手进行码载一致性残差的反馈控制,有重要的指导意义。
软件可以实现GNSS验证系统卫星出口处载波频率和码载一致性的分析,为GVS载波相位高精度授时走向工程化提供了一定技术支持。
提出了一种基于MVC模式的GVSTI软件设计思想和实现方法,并将研发的软件应用于GVS基带中。实验结果证明该软件可以完成载波授时关键指标的定量分析。采用MVC模式使得软件层次明晰,便于快速开发和后续维护升级,对其他系统的软件研发具有借鉴意义。
图12 GVSTI软件实验结果Fig.12 GVSTI software experiment results