2023年7月16日发(作者:)
分类号
学号 M*********
密级 学校代码10487
硕士学位论文
卫星导航终端检测软件的设计与实现
学位申请人:高 山
学科专业:软件工程
指导教师:覃中平 教授
答辩日期:2013.1.11
A Thesis Submitted in Partial Fulfillment of the Requirements
for the Degree for the Master of Engineering
The Design and Implementation of the Satellite
Navigation Terminal Detection Software
Candidate : Gao Shan
Major : Software Engineering
Supervisor
: Prof. Qin Zhongping
Huazhong University of Science and Technology
Wuhan 430074, P. R. China
january, 2013
华 中 科 技 大 学 硕 士 学 位 论 文
摘 要
全球卫星定位系统的建立为用户提供了授时定位服务。作为该系统重要组成部分的卫星导航终端设备(下简称终端)承载了人机交互的重任。为了能够对终端进行性能上的评估和检测,开发一个卫星终端检测软件是非常必要的。本文对这一软件的开发进行了研究和探索。
本文首先概述了终端检测软件的组成、各部分的主要功能以及性能测试的项目;其次系统性的对GPS卫星导航系统(下简称GPS系统)的基础知识加以总结,阐述了GPS系统坐标基准及导航电文等内容;然后分析了终端的结构、分类、工作原理和数据接口;最后在此基础上对GPS用户终端检测系统数据库的建立以及评估算法进行了研究,并开发出检测系统数据库管理及性能评估软件。
本文分析了全球卫星定位导航系统,对终端的重要性进行了阐述。对终端所涉及到的概念和理论进行了阐述,如:GPS导航原理、GPS常用坐标系、GPS电文的结构等。然后就终端的测试所需的数据库的建立进行了探讨。对数据库的框架、内容以及E-R实体图进行了说明。最后对实际测试的过程和测试数据解算的算法进行了论述。
本文概括性的阐述了导航系统及终端的概念以及涉及到的相关理论。通过对终端接收到的信息分析的基础上,结合实际测试的需要,对测试数据数据库的建立进行了探索性研究。对数据库的内容、表与表间的联系、测试项目、数据之间的联系进行了说明。结合实际测试需求,对一部分常用的测试项目进行了测试方法上的说明。并对使用频率较高的定位精度测试的求解算法进行了说明。
关键词:GPS 终端设备 数据库 定位精度测试
I 华 中 科 技 大 学 硕 士 学 位 论 文
ABSTRACT
The establishment of the global positioning satellite system to provide users with
location-based services of the timing. (Hereinafter referred to as an important part of the
system, satellite navigation terminal device terminals) carries the important task of
human-computer interaction. In order to be able to performance evaluation and testing of
the terminal, the development of a satellite terminal detection software is very necessary.
In this paper, the development of this software, research and exploration.
Firstly, an overview of the composition of the terminal detection software, the main
function of each part, and performance testing of the project; followed systematically
summarize the basics of GPS satellite navigation system (GPS system), elaborated GPS
Coordinate reference and navigationmessage content; then analyzed the structure of the
terminal, classification, working principle and data interface; Finally, the establishment of
the database of the the GPS user terminal detection system as well as assessment
algorithm based on research, and the development of database management and
performance evaluation of the detection systemsoftware.
This paper analyzes the global positioning satellite navigation system, the
importance of the terminal. Terminal concepts and theories related to the elaborate, such as:
GPS navigation principles, GPS common coordinate system, GPS message structure. Then
discussed the establishment of the terminal test database. The framework of the database,
the content, and E-R entity diagram has been described. Finally, the actual process of
testing and test data solver algorithm discussed.
This article is intended as a general elaborated the concept, as well as related to the
theory of the navigation system and terminal. Exploratory studies carried out to establish
the database of test data on the basis of the analysis of the information received on the
terminal, combined with the actual test. The contents of the database, the contact between
the contact between the table and the table, the test project, data are described. The actual
test requirements, test methods on the part of the commonly used test project. And using a
higher frequency of the positioning accuracy of test solution algorithm has been described.
Key words:GPS Terminal equipment Databases Positioning accuracy test
II 华 中 科 技 大 学 硕 士 学 位 论 文
目 录
摘 要...............................................................................................................I
<.II1 绪论
1.1 研究背景与意义..................................................................................(1)
1.2 国内外研究概况..................................................................................(2)
1.3 论文的主要研究内容..........................................................................(3)
2 卫星导航终端检测软件技术分析
2.1 多线程串口通信..................................................................................(6)
2.2 高性能数据库.......................................................................................(7)
2.3 定位检测关键算法............................................................................(10)
2.4 本章小结.............................................................................................(12)
3 卫星导航终端检测软件设计
3.1 卫星导航终端检测软件总体设计....................................................(13)
3.2 卫星导航终端检测软件各功能模块设计........................................(15)
3.3 卫星导航终端检测软件数据库设计................................................(23)
3.4 本章小结.............................................................................................(29)
4 卫星导航终端检测软件实现
4.1 系统硬件软件平台与开发工具选定................................................(30)
4.2 卫星导航终端检测软件各功能模块实现........................................(31)
4.3 卫星导航终端检测软件数据库实现................................................(42)
4.4 本章小结.............................................................................................(47)
III 华 中 科 技 大 学 硕 士 学 位 论 文
5 卫星导航终端检测软件测试
5.1 测试目标.............................................................................................(48)
5.2 测试范围.............................................................................................(48)
5.3 性能测试指标.....................................................................................(49)
5.4 测试环境.............................................................................................(49)
5.5 测试方法.............................................................................................(50)
5.6 测试结果.............................................................................................(51)
5.7 本章小结.............................................................................................(51)
6 总结与展望
6.1 全文总结.............................................................................................(52)
6.2 展望.....................................................................................................(52)
致 谢..........................................................................................................(54)
参考文献......................................................................................................(55)
IV 华 中 科 技 大 学 硕 士 学 位 论 文
1 绪论
1.1 研究背景与意义
全球卫星定位系统受天气影响小、能够提供连续实时的三维定位,所以在土地勘测、水文监测、交通工具实时定位导航等诸多军用、民用领域起到的作用越来越大,很多以前需要巨大人力物力的项目变得轻而易举[1]。正因如此,近年来,导航领域相关产业得到了飞速发展。
全球卫星定位系统由导航卫星、地面监控站和卫星导航终端设备(下简称终端设备)三部分组成。根据终端设备使用需求的不同,可以分为陆用终端、海用终端、航空终端和特种终端等[2]。用户对一个导航系统的认识和实际上完全来自于终端设备。近年来,随着计算机、电子、通讯等领域的飞速发展,终端设备也有了长足的进步。这主要体现在终端设备的小型化、多导航系统支持、抗干扰能力提升缩短等方面上。以前,终端设备的关键技术如导航接收解算芯片主要都是来源于国外厂商,国内厂家大部分工作都集中在硬件平台的二次开发、用户界面开发、产品外观设计中国也逐渐开始开发自己的芯片和上[3]。而随着我国对导航领域的重视度不断提升,相应的OEM板[4]。终端设备市场也呈现出百家争鸣的态势。因此,更加专业和方便的导航定位处理测试软件也是势在必行。
正是由于终端设备的产量越来越大,所以一个可以提供标准化测试的PC测试系统的需求也就越来越迫切[5]。这个系统的建立,首先可以满足终端设备在研发过程中不同改进版本之间的对比测试需求,其次可以提供终端设备在定型阶段的自动对比测试,最主要的是可以提供一个标准的测试结果输出,不仅方便研发人员对测试结果的分析,同时也方便了测试结果归档。测试软件的设计的目标就是提供一个客观、公正、可信的测试体系,能够对待测的终端设备进行自动/人工测试,并且将测试结果存入相应数据库中方便查询。
为了建立一个满足这些需求的综合测试系统,除了一个面向用户的上位机软件界面外,还需要一个相应配套的小型数据库。上位机软件的要求是能够及时、准确
1 华 中 科 技 大 学 硕 士 学 位 论 文
的接收并处理串口传上来的信息,并且在显示屏上用相异颜色的图形和文字显示不同导航系统的定位结果。
除此之外,上位机软件还必须具有通过串口控制终端设备的功能。数据库的要求是能够快速处理上位机传进来的各种数据,并将之分门别类的储存到不同的表中;能够快速完成表内数据的检索和输出;能够方便的完成表的添加删除、表内元素的添加和删除。
1.2 国内外研究概况
对终端设备的整合性测试,目前各国根据自己国家所采用的导航系统有不同的测试标准和规范,测试的方式也各有不同。美国作为最早开始全球卫星定位系统研发的国家,在2000年8月17日发布了第一份比较全面和标准的终端设备测试标准,即《全球导航卫星系统第一部分:全球定位系统GPS用户设备性能标准、测试方法和要求的测试结果》(MARITIME NAVIGATION AND RADIOCOMMUNICATION
EQUIPMENT AND SYSTEM-GLOBAL NAVIGATION SATELLITE SYSTEM-PART
1:GLOBAL POSITIONING SYSTEM-RECEIVER EQUIPMENT-PREFORMANCE
STANDARDS,METHODS OF TESTING AND REQUIRED TEST RESULTS),并且在2001年5月1日开始实施[6]。该标准主要规范了海上终端设备的性能指标、测试方法和测试结果[7]。中国也于2005年颁布了我国的国家标准《全球导航卫星系统(GNSS)第一部分:全球定位系统(GPS)接收设备性能标准、测试方法和测试结果[8]。
国内外有很多生产终端设备的厂商,大多都在使用自己开发的检测软件对自己的产品从冷热启动时间、抗干扰能力、定位精度等方面进行测试。随着卫星导航事业的蓬勃发展,尤其是卫星导航的民用市场的不断扩大,对终端设备的测试手段、测试项目和结果分析等已经开始受到研究人员的重视[9]。
解放军信息工程大学的李海丰在其硕士论文《卫星导航用户设备测试方法与场景设计研究》中对终端设备在不同场景下的测试项目和测试方法做出了初步的探索和研究。
2 华 中 科 技 大 学 硕 士 学 位 论 文
1.3 论文的主要研究内容
卫星导航终端检测软件最主要是提供一个综合对比测试的平台,包括卫星信号源与终端设备之间的对比测试、不同的终端之间的对比测试、同一款终端的历史设计版本之间的对比测试。通过该测试系统,可以对待测终端的冷热启动时间、灵敏度、定位精度、测速精度等性能有一个量化的显示和比较,方便研究和设计人员对终端设备进行调试。并且可以针对某一个或几个特定的性能进行重复跟踪测试。
卫星导航终端检测软件由卫星信号源、测试软件、数据库、待测终端设备、对比终端设备等几个部分组成。其中卫星信号卫星信号源、对比终端设备并不是并须的,用户可以根据实际测试需求自行添加或者减少。
用户设备测试系统由以下几个部分组成:
(1)卫星信号源
卫星信号源为GNSS接收机及相关系统的测试提供了一种有效和高效的手段。卫星信号源可对GNSS星座生成的信号加以控制,并通过单台设备即可在全球测试环境中实现模拟,以便在可控的实验室条件下执行测试[10]。卫星信号源能够生成GNSS卫星信号,因此,GNSS接收机会以处理卫星信号的方式来处理这些模拟信号。
(2)测试系统
测试是整个系统的核心组成部分,包括了串口通讯模块、数据处理与计算模块、与数据库交互的ADO模块、卫星信号源控制模块、终端设备控制模块和一个人机交互界面图形模块。其中数据处理模块主要是负责将串口模块传递进来的信息规整为一条条的语句传给计算模块或图形显示模块。数据计算模块负责将相应的数据进行坐标转换、精度计算等。卫星信号源控制模块是指对特定的卫星信号源进行相应的设置(场景设置、通道设置等)。
(3)数据库
数据库提供了系统的数据储存。数据库在设计的时候就按照测试项目对表进行了划分,为了能够提供快速数据检索,采用了一个项目对应一个表的设计方式。同时,对每次测试的原始输入数据也进行的相应的储存方便日后的再次检索[11]。在数
3 华 中 科 技 大 学 硕 士 学 位 论 文
据的检索方面,提供了按测试次数进行检索,对某次测试中的数据按时间检索,对历史测试结果的检索等检索功能。并且通过显示模块可以实现历史测试图形的重新绘制等功能。
(4)待测终端设备
待测终端设备指的就是需要测试的设备。处于产品开发不同阶段的待测设备所对应的测试项目是不同的。在研发阶段主要进行的单机的性能测试和与卫星信号源联调测试,主要是测试不同改进方案下的性能。在产品定型阶段主要进行的是与不同导航系统产品以及同一导航系统的不同导航产品进行对比测试。
(5)基准终端设备
基准终端设备主要是提供在实际运行环境中的对比测试。一般选择的是成熟稳定的导航设备作为基准设备。由于卫星信号源只能提供理想状况下的测试,所以实际场景测试便通过基准终端设备来进行测试[12]。
对于测试结果的得出,除了直接可以得到的冷热启动时间,灵敏度,通道一致性等数据外,还有一些数据无法直接得到,例如定位精度和测速精度。这就有一个相应的计算过程。一般计算精度采用的是如下方法:
先按照设计要求取最新的n个测试样本,并且求出这n个测试样本的误差。然后对n个误差按从小到大的顺序进行排序。取第[n·95%]个结果为本次测量的精度。n为采集样本数,[n·95%]表示不超过n·95%的最大整数[13]。
采用这种算法计算精度可以同时兼顾计算机的对采样数据的快速处理和得到一个较为准确的精度两方面。
GPS用户设备性能测试项目主要包括以下几个方面[14]:
(1)冷启动灵敏度
冷启动灵敏度是指在规定的时间内,在冷启动条件下,被测设备输出定位信息满足要求时的最低接收信号电平。
(2)冷启动首次定位时间
冷启动首次定位时间是指被测设备在无有效星历、历书、概略位置及时间等信息条件下,从设备加电到首次获得满足定位精度要求时所需要的时间[15]。
4 华 中 科 技 大 学 硕 士 学 位 论 文
(3)重捕获时间
重捕获时间是信号在短时间内出现中断时,从信号恢复到首次获得满足定位精度要求时所需要的时间。
(4)捕获跟踪卫星数
跟踪捕获卫星数是指被测设备连接卫星信号源或是在实际运行环境中连接导航天线,测试接收机捕获和跟踪卫星信号的能力[16]。
(5)通道时延一致性
通道时延一致性测试指的是使用信号卫星信号源作为信号源并且指定接收机的所有通道同时捕获同一个星座,检测通道输出的星座伪距值是否一致[17]。
(6)定位精度
定位精度测试是衡量导航设备性能和质量的一个重要指标。定位精度直接反映了导航设备的定位数据与真实数据之间的差距。要得到被测设备的定位精度,必须先得到被测设备的经度、纬度和高程,并且通过相应的误差分析和精度分析算法最终解算得出。
(7)测速精度
测试软件将用户机上报的速度信息与卫星信号源仿真产生的基准速度进行比较,计算速度误差。
(8)动态定位测试
动态定位测试是指测试设备在实际跑车环境中与基准终端设备进行对比测试。主要测试设备在实际使用环境中跟踪捕获卫星能力、定位解算、定位精度、测速精度、信号重新捕获能力和抗干扰能力等性能指标[18]。
5 华 中 科 技 大 学 硕 士 学 位 论 文
2 卫星导航终端检测软件技术分析
对于卫星导航终端设备的测试,现在绝大部分企业采用的都是人工测试。人工测试虽然能够满足大部分的需求,但也在诸多方面存在明显的不足:1.首先人力成本高,人力测试固然离不开人力的投入,在一些复杂度和重复度要求高的测试中,人力的投入时非常明显的;2.效率低,速度慢,人工操作的效率低与速度慢是由于自身无法规避的缺陷(像人的反应、思考等);3.在软件测试的领域经常会出现一些复杂度很高的测试环境,有些测试往往需要几个单元模块的联合测试才能达到效果,比如性能和稳定性方面的测试,同时需要进行天线模块、接收机的重叠测试,这时如果只是单一的依靠人力来测试的话,可能会有些测试的细节就会不大容易把握,这样会造成测试案例的不一致,从而导致测试结果对问题追溯的不可把握性[14]。为解决上述人工测试的不足,这就需要,使用一个统一的测试平台进行自动化测试,以提高测试的效率的准确度。
为了开发这样一个平台,需要串口通信技术、高性能数据库相关技术、卫星定位数据的相关转换计算。
2.1 多线程串口通信
由于在Windows系统中线程中断是在程序解析到汇编级才会实现,这就导致多个线程可能会同时访问同一对象。正因如此,多线程技术就非常适合串口通信。在检测软件通过串口收发信息时,每个串口实例化对象只有一个缓冲区来存放信息。如果处理不当,接收线程和发送线程可能会同时调用该缓冲区,这样会导致程序出错[19]。所以必须建立相应的同步机制。使一个对象在同一时间下只会进行一种操作。同时线程与线程之间也必须协调运行,高优先级的线程(接收线程和通信线程)先运行,优先级较低的线程(指令发送线程)先挂起以节约CPU资源,在高优先级线程处理完毕后再处理低优先级线程[20],或者是通过其他主线程来唤醒不同线程。
MFC提供了同步对象来协调多线程的并行,常用的有以下几种:
6 华 中 科 技 大 学 硕 士 学 位 论 文
CEvent:当一个线程被唤醒时启动或关闭另一个线程,也可以是一个线程被唤醒时允许或禁止某一资源被访问,这一状态直到该线程被释放后才终止,适用于线程需要被唤醒的场合。
CSemaphore:决定某一个共享资源能被多少线程访问,旦访问数量达到上限就禁止其他线程继续访问,实现线程数量控制。
CCriticalSection:将一部分程序放入一个临界区,在同一时刻只允许一个线程访问这段程序,该临界区只在创建它的线程内有效,当线程被释放后,之前的访问限制就随之取消。
Cmutex:同一时刻只能有一个线程访问某个资源,一旦该资源被使用时就发出信号禁止其他线程调用,实现互斥访问。
MFC中,为了方便程序开发,将串口作为一个特殊的文件,使用标准的CFile来操作串口。用CreateFile()打开串口,申明一个新的指向串口的文件句柄。打开串口后,需要对串口进行配置,使用SetCommState()来设置信息字符串的存放地址、串口通道号等信息。当返回值为TRUE后,就可以使用ReadFile()和WriteFile()对串口进行读写操作。最后当串口对象销毁前使用CloseHandle()将打开的串口关闭。
在对串口进行读写操作时,有两种操作方式:重叠I/O执行方式和同步执行方式。当使用ReadFile()和WriteFile()对文件进行操作时,如果lpOverlapped被设置为NULL,那么该线程会一直等到读写结束后才会释放,这样会浪费大量的CPU资源,为了解决这一问题,Windows采用了重叠I/O技术,开放多个I/O读写进程,这样就不必一直等待一个读写进程的结束。而同步执行技术就是一直等到线程结束才释放并且开始下一线程,这样会导致线程阻塞。但同步执行也有其优点,就是开发简单不容易出现访问并发错误。由于检测系统需要有多串口输入,并且都数据接收的实时性有很高要求,所以采用重叠I/O执行方式。
2.2 高性能数据库
数据库是整个软件读写,尤其是历史测试过程重现的关键基础,数据库设计的
7 华 中 科 技 大 学 硕 士 学 位 论 文
好坏直接关系到硬盘空间占用大小、硬盘I/O瓶颈和CPU占用率等关键性能[21]。
第三范式是指所有非主键值均依赖于主键值而存在,主键值的添加和改变都会影响非主键值,但是非主键值的添加改变不会对主键值产生影响。对于高能数据库而言,这一特点显得尤为重要。它使数据库的冗余度大大降低,提高了磁盘空间利用率,还大大降低了数据维护的难度。并且基于第三范式设计的数据库可伸缩性也要好于其他数据库[22]。
现在对数据库的开发,开发人员往往只注重于完成用户的需求,直接按需求设计数据库,并没有过多的优化。使得数据冗余度很高,很多数据被重复储存,大大降低了数据库的性能,增加维护成本。一个数据库的基础表及其主键、外键、索引对数据库的性能有很大影响。
主键(Primary Key):主键应该是一个表中被访问频率最高的元素[23]。一个表只一个主键,并且在表中相对不常改变。在检测软件中一般使用项目名称作为主键,因为项目名称的字符串大小一般小于30bytes。由于主键存在于每个元素中,其的大小直接影响索引的大小继而影响磁盘的I/O性能。
外键(Foreign Key):外键是为了表征数据库表关系而引入的。首先外键必须是一个关键字,其次它与另外一个或多个表有关联,它就称为与另外关系的主键。
索引(Index):优化数据库最常用的手段就是通过索引优化系统,一个基于排序而创建的索引,在接到访问请求时可以不用扫描整个表,只用扫描特定区域,便可以查询到要的数据,这样有效的减少了数据存储时间。而插入数据时,只需加个顺序插入算法就可以,以较少的插入资源消耗带来高速的数据读取[24]。索引还可以加快分类操作,将相同类型的数据置于特定的索引内,可以大大提高数据的访问速度。
索引分为两种:聚族索引和非聚族索引。
聚族索引(Clustered Index):聚族索引是按照储存空间的物理地址存放,最大的优点就是所占用的空间小,但由于插入数据时需要进行排序所以插入操作性能较低。
聚族索引在查询时,由于之前数据已经按照索引进行了排序,所以只需要少量的磁盘I/O资源就可以完成大量数据的查询。非聚族索引(Nonclustered Index):非聚族索引的索引顺序是独立的,相异于数据组织的顺序。对于少量数据查询,非聚族索
8 华 中 科 技 大 学 硕 士 学 位 论 文
引和聚族索引的查询速度差不多。但是当面对大量数据的同时查询时,由于非聚族索引只能逐一检索,而聚族索引是按片检索,所以非聚族索引会比聚族索引慢很多。所以对于要求插入性能高,而对查询速度要求比较低的可以选择非聚族索引,反之选择聚族索引。
当需要重现历史测试过程时,需要高速、大量的调用数据库数据。这时,为了满足读取速度的要求,要尽可能的减少排序、子项访问等操作。有以下一些手段可以提高读取速度。
(1)尽量不要使用行排序,应为行排序将要耗费大量的系统资源。最好的做法是存入时就排好序,如果没排序又需要按顺序输出,就将相关表内数据放到一个临时开辟的表内操作。
(2)无需求的情况下不要对表内进行相关子查询操作
(3)无需求的情况下Where表达式尽可能的简单,尽量避免使用长表达式。
(4)Where表达式在使用时少用Or操作符,鼓励使用And操作符。
(5)在Where子句中多使用“与”(And)连接,少使用“或”(Or)连接;
基于第三范式设计的数据库虽然有很多优点,但由于检测软件的使用特殊性,很多时候会产生一些不利于系统性能的要求,如:多个线程在短时间内访问同一数据,并且对其不断修正;一个线程从多个表中读取某几个数据,从而导致不停扫描整表。这些需求的会严重影响磁盘I/O速度和CPU性能。
为了解决这些问题,可以采取一些牺牲资源提升性能的做法。
(1)对于需要大量进行计算的访问,如果结果稳定或需要多个表的数据参与时,如果继续沿用第三范式设计势必消耗过多的磁盘I/O和CPU性能。这是可以提升数据库冗余度,即采用冗余储存技术。
(2)如果需要对表中某一类的数据重复访问运算,为了提高访问速度,可以新建一个表并将该类内部的数据和运算结果放入该表中。如果访问目标类更改时,必须先把结果储存后释放该表并重新开始。
(3)如果需要对多类数据进行混合计算,可以在临时表内用添加列的方式来存放不同类数据,在运算访问类改变时要注销该临时表并重新开始。
9 华 中 科 技 大 学 硕 士 学 位 论 文
由以上处理方式可以看出,冗余储存可以提高处理性能,但是与第三范式设计思想相悖,会导致数据库维护的成本上升。所以检测软件采取的策略是仅对小部分数据(GSV、GGA、DHV)等储存待运算数据的表采用冗余储存设计。
数据库对象建立的原则是平均分布在磁盘空间中,尽可能减少I/O瓶颈。
(1)在储存数据时,如果采用的是硬盘阵列,就将数距按一定规则储存在不同的硬盘里,如果是同一硬盘,就储存在不同的磁盘内。使得对该类数据进行访问时可以多个I/O设备同时查询,降低I/O读取瓶颈。
(2)将正式数据表和因运算需要建立的临时表放在不同的I/O设备上,最好能够放在不同的硬盘上。当运算时,对临时表的访问和临时表对正式数据表的访问可以同时进行。
(3)按照使用频率的不同区分数据表的存放位置。将使用频繁的表,如临时表等存放在一个单独的磁盘上,但同一磁盘上的同时频繁访问表不应太多。如果频繁访问表数量过大,可以考虑分几个磁盘储存。而访问不频繁的表可以共同放在一个或几个磁盘上,按同时访问可能性来划分储存磁盘的分配。
2.3 定位检测关键算法
用于导航的卫星在太空中有自己的运行轨道,而处于地面的卫星导航终端设备对于卫星也是处于运动状态的[25]。要计算卫星相对于接收机的位置和运动状态,就必须把二者统一到一个相同的的坐标系统中。为了便于计算,假设接收机处于地表,随地球而转动,导航卫星则围绕地球转动。一般建立一个笛卡尔坐标系,用其表征接收机、卫星的位置、速度等物理量[26]。由于原点位置的不同及XYZ轴的取向差异,一般可以分为WGS-84坐标系、1954年北京坐标系和地方坐标系等。
在对导航数据进行处理时,针对不同的计算过程会用到不同的坐标系。例如为了计算终端设备的定位精度,就必须先将经纬度由角度值转化弧度值,然后由空间直角坐标(X,Y,Z)系转化为大地坐标系(B,L,H),然后再将结果与输入值进行对比和测试[27]。
(1)将空间直角坐标系转换成大地坐标系,得到大地坐标(B,L):
10 华 中 科 技 大 学 硕 士 学 位 论 文
L=arctan(Y/X)
222B=arctan⎡(ZNAsinB)/(XY)×0.5⎤++⎣⎦(2.1)
(2.2)(2.3)H=(X2+Y2)×0.5×sinB−N
用上式采用迭代法求出大地坐标(B,L)[28]
迭代初值计算公式为:
⎫⎪0acosB⎪a1=⎬
2201−esinB⎪⎪l0=y/a1⎭各次迭代计算公式为:
i−1i−1i−1⎫Bi=⎡x−F(B)−F(B,l)⎤XX⎣⎦/A0⎪⎪acosBia1=⎬
2201−esinB⎪⎪l0=[y−Fy(Bi,li−1)]/a1⎭B0=x/A0(2.4)(2.5)当迭代到以下结果时终止运算并输出结果
Bi−Bi−1≤ε⎫⎪⎬
ii−1l−l≤ε⎪⎭(2.6)ε按习惯一般取4.8×10−10弧度。
(2)将大地坐标系转换成高斯坐标系,得到高斯坐标(x,y),按高斯投影的方法求得高斯坐标[29]:
x=F1(B,L),y=F2(B,L)。
(2.7)(3)将高斯坐标系转换成任意独立坐标系,得到独立坐标(x’,y’):
x'=xcosa+ysina
y'=ycosa−xsina
(2.8)(2.9)11 华 中 科 技 大 学 硕 士 学 位 论 文
在解算过程中,为方便后续计算,一般需要将空间直角坐标换算为大地坐标,即[(B,L,H)→(X,Y,Z)]
经过转化后的坐标可带入标准的运算函数计算所需数据。
2.4 本章小结
本章介绍了本文实现导航测试所运用的理论和技术,首先对串口通信技术做了一个大概的分析,对现在的串口通信技术做了一个大概的介绍,然后对高性能数据库技术进行分析,最后对卫星定位技术简单的讲解,通过这一章我们能了解到本论文使用的关键的理论和技术,对与下面的设计与实现有着重要的意义。
12 华 中 科 技 大 学 硕 士 学 位 论 文
3 卫星导航终端检测软件设计
现在的导航设备使用的全球卫星定位系统主要包含美国的GPS、欧洲的伽利略、俄罗斯的GLONASS以及正式开始投入使用的中国的北斗导航系统。这些导航系统包括了通用的导航语句和专用的导航语句(设备接口协议)。建立一个测试系统必须
要考虑满足不同的全球定位系统,完成常用的测试项目,以及数据的处理、储存等。测试系统由3个层次构成,数据交换层负责系统的所有数据的发送与接收;数据处理层负责将原始数据过滤、分类,并将解算部分结果数据;人机交互层负责将得到的实时数据和解算结果直观、易读地显示在电脑屏幕上,并且提供了对测试设备的运行参数控制。具体层次图如图3.1所示。
卫星导航终端检测软件数据交换层
数据处理层人机交互层
通信模块
数据储存模块
数据处理模块运算模块数据储存模块显示模块控制模块
图3.1 卫星导航终端测试软件层次视图
3.1 卫星导航终端检测软件总体设计
(1)系统功能结构
卫星导航终端检测软件从功能上可以划分为以下几个部分:串口通讯模块、原始数据处理模块、显示模块、控制模块和数据储存模块。他们之间的关系如图3.2所示。
13 华 中 科 技 大 学 硕 士 学 位 论 文
串口数据流
串口通信模块
控制模块 数据处理模块
运算模块
显示模块 数据储存模块
图3.2 卫星导航终端测试软件关系视图
从图中可以看出,卫星导航终端检测软件的基础是串口通信模块,该模块主要负责与导航定位用户设备之间的底层数据交互。卫星导航终端设备发出的原始数据通过串口传入测试系统后,数据处理模块将对原始数据进行初步处理,剔除无用的或残缺的通讯语句,将有效的通讯语句按类别划分好后分别传递给运算模块、显示模块和数据存储模块。
运算模块通过相应的数据解算出测试结果,如:定位精度、定位误差、ADOP值、HDOP值、PDOP值等等,并将其存入数据库中以便以后查看比较。同时,结算结果也会通过显示模块展示给用户,方便设计人员及时了解自己负责的产品的性能。当用户需要查看或回溯历史测试场景、过程时,历史数据将从数据储存模块重新传递给数据处理模块,开始重现历史测试过程。测试系统还要求用户可以通过测试系统直接对导航定位用户设备进行一定意义上的控制,以及对卫星信号源的参数设置,这些都是通过控制模块来完成的。
(2)软件运行外部环境
检测软件和外部运行环境共同组成了终端设备总体测试系统。导航测试系统由待测设备、测试系统、储存系统等三个主要部分组成,如图3.3所示。
14 华 中 科 技 大 学 硕 士 学 位 论 文
待测设备
串口
卫星信号源
串口
数据处理器
数据库
数据解算器用户
图3.3 卫星导航终端测试系统组成视图
基于对用例图的分析,其中数据器、数据解算器和数据存储数据库测试系统最为核心的模块,也是本项目的核心关键,结合本项目的自身的特点,将本系统设计成一个C/S模式的软件[30],这样可以满足使用人员移动使用和性能优化的需求。
本系统的出现,可以使繁琐的导航设备测试工作有所简化,方便使用者对设备的性能分析和数据的后期处理,也使测试结果统一化,更有利于同一设备不同版本间、不同设备间的对比测试。方便开发人员及时、直观的了解自己的开发进度。
根据现实中不同用户的实际上的各种需求,本测试系统需要达到如下几个目标:
(1)设计一个基于多线程技术的串口通信模块。
(2)能对接收数据进行分析的读取。
(3)能正确的、易于读取的将数据显示在计算机屏幕上。
(4)能将数据快速的、准确的归档。
(5)能正确的对用户设备进行控制和通信。
(6)能正确的、足够精度的解算相关数据。
3.2 卫星导航终端检测软件各功能模块设计
3.2.1 通信模块设计
通信模块是人机交互的基础模块,测试系统其它功能的实现均是建立在通信模块正常工作的前提下的。目前PC与嵌入式系统之间的通信主要是通过PC上的RS-232C串口总线来实现的。
通信模块的设计需求如下:
15 华 中 科 技 大 学 硕 士 学 位 论 文
(1) 能够顺利完成英文、中文、全角/半角标点符号的混合输入输出。
(2) 能够顺利完成二进制、十六进制、ASCII码的单独发送接收及混合收发。
(3) 能够适应大流量、高速的收发。
(4) 能够及时回收内存资源,保证稳定运行至少24小时。
为了提供对比测试的功能,通信模块要求至少支持双串口数据的高速输入,即通信模块通过MFC的Windows消息机制与数据能迅速响应115200bps的数据输入。处理模块相互连接。并且创建多线程接受串口数据,最大限度的保证串口通信高速无误。
VC的串口通信,主要可以分为以下几种实现方式:通过Window的标准API实现、通过微软的MSComm组件实现和通过第三方的串口类实现。
(1)Windows的标准API函数虽然可以根据用户的具体需求专门定制,有很强的灵活性,但是其对Windows编程的要求比较高,如果处理不好,效率反而不如其他两种方法。
(2)MSComm组件是微软集成在Visual Studio中的一个ActiveX控件,使用非常简单,只需添加相应的接口函数就可以。但实际使用中发现,MSComm组件在大数据量高速传输中容易出现数据丢包问题。
(3)第三方的串口类,这里指的主要是SerialPort这个串口类。它集成主要的串口功能,提供了对Unicode、ASCII字符的支持,由于其在VS中的接口数据采用的是WParam类型,所以方便对接收数据的后期处理。
结合以上测试分析,最终选用了SerialPort作为本系统的串口通信实现方式。SerialPort提供了标准的二进制、十六进制的单独及混合收发。并且在稍作更改后,对Unicode和GB编码的中文内容也可以顺利收发。
根据设计需求,串口通信一般都是双串口输入数据,为了保证数据处理的及时、准确,所以串口通信线程采用多线程技术[31]。主要原理就是将接收和发送线程从主线程中分离出来,作为两个单独的线程存在。平时没有响应事件的时候就挂起,当
有相应的处理请求的时候就唤起相应线程,并且在线程函数结束后又恢复挂起状态。
16 华 中 科 技 大 学 硕 士 学 位 论 文
3.2.2 数据处理模块设计
串口通信模块只是单纯的将计算机串口接收到的数据通过Windows消息传进测试程序,并没有对数据进行任何的处理。原始数据由无效数据和有效数据组成,其中无效数据又分为乱码以及残缺的有效数据。这些无效数据不仅无法从中得到有用的数据,还会大大拖慢测试程序的运算效率。尤其是在导航定位用户设备刚开机,处于捕获卫星状态时,会产生大量的无效数据。
数据处理模块的设计需求如下:
(1) 能够及时处理通信模块传递过来的信息。
(2) 能够正确区分GGA、GSV、DHV等导航语句并将其从字符串中分离出来。
(3) 能够区分有效语句、残缺语句和无效语句并将其信息传递给显示模块。
(4) 能够支持高负荷处理,并且拥有良好的垃圾回收机制,保证运行稳定。
数据处理模块的功能就是区分有效、无效数据,并且将有效数据块划分为一句句的独立语句,并将其传入相应的计算模块或是显示模块中。对数据处理模块而言,最重要的就是数据的临时存储、读取速度,以及新数据的插入和老数据的删除。在VC里,一般可以使用数组和链表来处理这类问题。
在内存中,数组的储存方式是按内存地址顺序存放的,链表是随机分配到内存地址中。由于存储方式的不同,访问方式和储存方式都有所不同。数组是通过数组首地址后移下相应下标值后得到的数据,速度很快。
但因为是按地址顺序储存,所以当插入一个新元素时,部分数组元素需要相应移动,所以速度较慢。而对于链表,由于其元素在内存中是随机存放的,所以访问某一节点时需要遍历该元素之前的所有节点,因此速度较慢。但是优点是存储速度很快。
在实际使用过程中发现,假设串口的波特率为115200,数据1秒更新一次。当数组的大小设为500,即保留500秒的历史临时数据时,运行7秒钟不到系统卡死。根据实际情况,选择了单向链表代替数组。
在上述条件下,使用链表结构则完全没有问题,程序迅速及时的处理完了所有的串口信息。
17 华 中 科 技 大 学 硕 士 学 位 论 文
3.2.3 显示模块设计
由于串口数据的高速型,每秒都有大量的数据传入测试系统。显示模块主要功能是将高速更新的数据转为直管明了的图形实时显示在屏幕上。并且将运算模块的计算结果以直观的对比形式显示。通过显示模块,使用者可以无需把精力消耗在观察所有数据上,只用关注自己所关心的数据就可以了。大大降低了研发人员的精力消耗。
显示模块的设计需求如下:
(1)拥有良好的人机交互界面和方便的操作界面。
(2)可以稳定、长时间的运行至少24小时,没有内存溢出等影响稳定的因素。
(3)用户可以根据自己的使用喜好调整软件的显示界面。
Windows绘图主要是通过GDI接口完成的[32]。为了方便开发,简化程序开发工序,本系统采用了CDC类来将相应图形绘制到屏幕上。通过CDC类的GetClientRect()函数来获取屏幕显示区域的大小[33]。然后就可以使用CDC来声明一个显示对象[34]。下面用GSV语句的绘制来说明本软件的显示模块设计过程。
(1)确定绘制对象的属性:每次绘制的对象由不变的部分(图框、说明文字等)和实时变化的部分组成。对于星座图,由于每次显示的星座圆环是不变的,所以将其设置为底图,而卫星位置是每次都可能会改变的,所以将其设置为实时刷新。
(2)使用CDC对象绘制底图:对于GSV语句而言,用户希望看到的是可见卫星在全天星空图中的位置和对应的信号强度。底图仅只是在GSV显示类被初始化时绘制,一直持续到GSV显示类被回收时销毁。
(3)根据每次接收到的GSV实时数据,将其中的卫星号、方位角、仰角和信噪比存入一个单向链表并将其绘制到屏幕上。每次绘制都是实时更新,上一次的显示对象在新的显示对象生成之前删除,保证屏幕不会有闪烁的感觉。
3.2.4 运算模块设计
传到测试系统里的数据只包含了基本的定位信息:经度、纬度、高程、速度、卫星信噪比等。但是仅把这些数据通过显示模块显示出来并不能满足使用人员的需
18 华 中 科 技 大 学 硕 士 学 位 论 文
求。对于导航设备的开发,除了要知道基本的定位信息外,还需要知道定位误差、定位精度等信息。而这些信息必须把基本数据通过一定的计算才能得出。所以运算模块的作用就是将基本数据以一定的方法快速、准确的计算出来,并且通过显示模块展示给测试系统使用者。
(1)灵敏度测试内容
接收机灵敏度测试就是将接收机收到的卫星信号与信号满值进行比较,得到一个百分比值[35]。灵敏度测试时分为静态测试和动态测试。静态测试是指当接收机天线处于静态时进行接收灵敏度测试,测试环境尽量选择空旷、无遮拦、干扰程度小的场所。静态测量的目的主要是看接收机的信号接收能力。动态测试是指当接收机与天线处于运动环境中进行的灵敏度测试,测试环境尽可能涵盖各种场景,如:道路、高架桥、高楼旁、树林等等[36]。动态测试的目的主要是看接收机的抗干扰能力和信号丢失后的重新捕获能力。
为了能适时对比各种导航系统的信号强度,所以数据库中专门设置了一个字段来表示不同的导航系统。这样,可以在同一界面中将不同导航系统在同一测试条件下的灵敏度实时显示出来。
(2)首次定位时间模拟测试流程
模拟测试的无线模式是在专用的暗室中进行,在标准的信号输出中测试设备的首次定位时间,考察的是接收机和天线统一工作的能力。
模拟测试的有线模式是将卫星信号源产生的信号直接通过信号线传给接收机,这主要是测试接收机从开机到成功获得定位结果的能力。
在模拟测试过程中,卫星信号源产生的导航电文和接收机解算出的导航电文以测试次数作为数据库主键分别存入相应的表。输出的时候以时间作为横坐标,首次定位时间为纵坐标,生成一张曲线图,显示出设备历次改进中首次定位时间的变化情况。
(3)定位精度测试
定位精度测试是衡量导航设备性能和质量的一个重要指标。定位精度直接反映了导航设备的定位数据与真实数据之间的差距[37]。
19 华 中 科 技 大 学 硕 士 学 位 论 文
导航设备的定位精度分为水平精度和垂直精度。导航电文解析出来的是设备所处位置的经度、纬度和高程,要得到定位精度必须作相应的转换才行。下面就说明一下转换过程。
测试系统将用户机上报的定位信息与测试系统仿真的已知位置信息进行比较,计算位置误差。位置误差的计算方法如下所示
ΔP=|Pm−Pe|
(3.1)其中,ΔP表示空间位置误差,Pm表示用户机上报的定位信息,Pe表示测试系统仿真的已知位置信息。位置误差有两种表示方式:空间位置误差,水平误差和高程误差。水平误差的计算方法如下:
2Δr=Δ2E+ΔN
(3.2)其中,Δr表示水平误差,ΔE表示东向位置误差分量,ΔN表示北向位置误差分量。空间位置误差计算方法如下:
2ΔP=Δ2r+ΔH
(3.3)其中,ΔP表示空间位置误差,ΔH表示高程位置误差。
对n个定位误差按从小到大的顺序进行排序。取第[n·95%]个结果为本次测量的定位精度。n为采集样本数,[n·95%]表示不超过n·95%的最大整数[38]。
(4)测速精度
测试系统将用户机上报的速度信息与测试系统仿真的速度进行比较,计算速度误差。速度误差计算方式如下所示。
ΔV=|Vm−Ve|
(3.4)其中ΔV表示空间速度误差,Vm表示用户机上报的速度信息,Ve表示测试系统仿真的已知速度信息。
对n个定位误差按从小到大的顺序进行排序。取第[n·95%]个结果为本次测量的定位精度。n为采集样本数,[n·95%]表示不超过n·95%的最大整数。
20 华 中 科 技 大 学 硕 士 学 位 论 文
3.2.5 数据储存模块设计
通过串口传入测试系统的数据,在传递给显示模块、运算模块后并不是直接抛弃。在产品不断更新的过程中,往往伴随的是产品的探索性研发过程。在这一过程中,产品设计师并不知道自己所做的更新是否带来了产品性能上的提升,或者是提升度有多少。这时,一个记录以往测试结果的模块就必不可缺了。而有时,当一个更新出现了与理论结果不符时,需要重现历史测试过程,并将之与当前出现问题的测试过程线比较,在这种情况下,就需要测试系统将历史数据从储存模块中读取出来,并且模拟该次性能测试过程[39]。
数据储存模块的需求如下:
(1)一个满足全年测试结果数据存储和一个月的具体测试数据的数据库。
(2)可以高速存储/读取数据,良好的数据库结构,尽可能减少数据冗余。
(3)具有一定的可伸缩性,方便更新升级。
数据库储存模块主要由两部分组成:及时文本储存和数据库储存。
及时文本储存的设计思想是最及时的将所有传进来的字符串存入一个符合命名规范的文本文件中。由于使用的是MFC的CFile类来实现的,满足高效、及时和稳定储存的需求。并且如果硬件支持,采用双硬盘组成RAID0,将会获得更好的数据安全性。
数据库储存是通过MFC的ADO接口与SQL数据库相连接,通过ADO接口使MFC的类可以访问、修改数据库里的数据[40]。但是由于这种存储方式需要建立与SQL的连接,不如文本储存那么稳定。尤其是在突然断电的情况下,文本文件的信息丢失率要小于数据库。但是数据库也有其相应的优点:便于查询、数据冗余度较低、便于数据的维护。
当通信模块将数据传进来时,先调用及时文本储存的函数,将原始的数据进行备份,尽可能减少程序崩溃等突发状况时导致的数据丢失。
然后再将数据处理模块和运算模块处理后的数据存储到数据库中,方便日后的整理和查询。
21 华 中 科 技 大 学 硕 士 学 位 论 文
3.2.6 控制模块设计
控制模块的主要作用是通过测试系统对用户设备进行参数上的调整、发出通信请求并完成通信过程、对卫星信号源的工作状态进行设置。控制模块的核心还是对通信模块的调用,而控制模块得设计更多的是要考虑软件的易用性、直观性,获得更好的用户体验。
控制模块的需求如下:
(1)界面要美观,易用。按找用户的不同,分为专业版和普通版。专业版的设置选项更多,界面用语大多为专业术语。普通版要求易用性,界面用语要通俗易懂。
(2)控制模块要包含以下几个方面:GPS和GLONASS导航终端设置、信号源设置、和串口输入的快捷栏(60条)。
(3)针对某些机型的通信功能测试,包括通信语句的自发自收测试、通信成功率测试、通信编码测试等的自动化输入检测功能。
GPS和GLONASS导航终端设置主要是GPS和GLONASS的通道有效性设置,这是为了测试终端设备捕捉指定运行轨道卫星能力[41]。
信号源设置包括了信号源星历设置、信号源场景测试设置(静态、高动态、水平直线运动、水平圆周运动等场景)、通道有效性设置、信号输出幅度设置、误差修正设置和其它一些专用设置界面。串口快捷输入是直接将预先写好的通信协议语句直接发送至串口的一个控制界面。这个主要是为了方便专业设计人员进行终端设备内部调试时使用的。
输入模块中的通信测试部分主要是针对某些型号的终端设备进行通信功能的自动化测试[42]。自发自收功能指的是先建立一个内部的虚拟串口通道,将收发都指定在该虚拟串口上,当检测软件向待测终端发一条信息后,待测终端直接将该信息返回给检测软件,这样可以检测终端的内部通信传输是否正常。
通信成功率是指待测软件定时向待测终端发送信息,实时统计导航终端返回信息数量。通信编码主要是针对待测终端的特定编码需求(如:通信包头为ASCII编,可以反映出待测终端的信息解码,中间部分为十六进制编码,包尾为ASCII编码)析是否正常。
22 华 中 科 技 大 学 硕 士 学 位 论 文
3.3 卫星导航终端检测软件数据库设计
数据库是为了保存测试系统的历史数据、测试结果而引入的。数据库可以大大方便研发人员对历史数据的查看,对历史测试的过程重现,以及多版本固件之间的性能对比。数据库的建立,可以大大方便研发人员对固件进行更新记录,更好的把握研发进度。
由于涉及到大量数据的储存、读取,数据库的性能显得非常重要。而数据库的性能又由两个方面决定:数据库本身的性能和数据库内数据建立的关系来决定。数据库本身的性能是有数据库的类型来决定的。考虑到数据量巨大,且测试系统是基于CS模式的,所以采用SQL Server作为测试系统的数据库。
由于测试数据之间并不是独立的,例如测试工程代号与测试设备序列号就是一对多的关系;对关系进行投影或者链接运算后,运算结果仍然是一个关系,例如测试工程代号通过测试设备序列号连与某次测试结果线联接,结果仍然为一对多的关系。所以选择关系数据库作为测试系统的数据库。
目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、第四范式(4NF)、第五范式(5NF)和第六范式(6NF)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推。
综合以上数据库的模式,就可以完成卫星导航终端检测软件数据库的设计。当我们选定了数据库的类型后,第一步要做的就是根据实际测试项目罗列出哪些内容和项目需要设计。结合实际测试情况,考虑考唯一性和不可重复性,确定测试工程测试/时间次数为数据库中几个主表的主键。第二步是确定单一、不可再分字段。如:测试工程代号、测试开始时间、用户地址以及各个具体测试项目中的测试项。第三步就是找出那些具有相关属性的,尤其是和其他表会相互影响的属性。
下面用定位精度测试结果这一项目对应的数据库内容设计来说明一下:
定位精度测试结果包括以下测试项目:
测试工程代号、测试设备序列号、测试工程测试次数、测试类型(静态/动态)、
23 华 中 科 技 大 学 硕 士 学 位 论 文
输出纬度、输出纬度方向、输出经度、输出经度方向、标准纬度、标准纬度方向、标准经度、标准经度方向、标准高程、纬度误差、经度误差、高程误差、定位精度、校验位。
第一步先要对这些参数进行分析:
由于所有这些数据都是设计在一个表中,他们存在以下的对应关系:
测试工程代号
测试设备序列号
测试工程代号
测试工程测试次数
测试工程测试次数
测试设备序列号
测试工程测试次数
测试类型(静态/动态)、输出纬度、输出纬度方向、输出经度、输出经度方向、标准纬度、标准纬度方向、标准经度、标准经度方向、标准高程、纬度误差、经度误差、高程误差、定位精度、校验位
由以上分析,决定使用测试工程测试次数作为该表的主键。
而结合其他表里的数据,如定位精度测试表内的数据:测试工程代号、测试设备序列号、测试工程测试次数、测试类型(静态/动态)、输出纬度、输出纬度方向、输出经度、输出经度方向、校验位可以发现测试工程代号、测试设备序列号、测试、输出纬度、输出纬度方向、输出经度、输出工程测试次数、测试类型(静态/动态)经度方向、校验位这些项目二表是一致的,特别是其中的测试工程代号、测试设备序列号、测试工程测试次数与其他的很多表都是一致的。
分析其中的一个具体的项目:输出纬度。在所有针对经纬度测试的表中和输出结果的表中,这个项目都会出现,当不满足第二范式时,假设这些表的数量为n,输出纬度就重复了n-1次。尤其是输出纬度、输出纬度方向、输出经度、输出经度方向这四项一般是作为一个整体来处理的,从这个角度出发,那么重复数据的数据量就达到了4×(n-1)次。
同时,这种设置不经会带来数据冗余度的上升,还会导致数据更新无法自动同步。比如某个测试项目更新了输出纬度、输出纬度方向、输出经度、输出经度方向,其它表没有同步更新,这会导致日后时的数据不同步。
1 : N1 : N1 : N1 : N
24 华 中 科 技 大 学 硕 士 学 位 论 文
删除相关数据时也会产生相应的问题,一个表的数据删除了,但是其他表与之相关的数据有可能仍然残存,也会导致数据不同步。
为了避免出现这样的情况,将这些数据分为三个部分:
第一部分:测试工程代号、测试设备序列号、测试工程测试次数
第二部分:测试类型(静态/动态)、输出纬度、输出纬度方向、输出经度、输出经度方向
第三部分:标准纬度、标准纬度方向、标准经度、标准经度方向、标准高程、纬度误差、经度误差、高程误差、定位精度、校验位
分析这三部分可以发现,第一部分是若干表所共同拥有的,第二部分是与经纬度测试相关的表所共同拥有的,第三部分是定位精度测试结果这个表所单独拥有的。
更具以上思路,可以将第一部分和第二部分设置为一对多的关系,第一部分和第二部分为一对一的关系,而第三部分设置为一对一的关系,如图3.4所示。
第三部分项目1
第一部分 第二部分 第三部分项目2
。。。第三部分项目n
图3.4 测试数据对应关系图
将第一部分和和二部分分别存于一个公共列表中,其他表涉及到这一部分项目时将从公共表中读取这部分信息,而更改公共数据只需要更新第二部分部分即可,删除和添加的话更改第一部分就会更新整个数据表里相应的表。
一般测试时主要针对的测试项目如表3.1所示[43]。
25 华 中 科 技 大 学 硕 士 学 位 论 文
表3.1 卫星导航终端测试系统组成视图
通道时延一致性
≤20ns
温启动:≤30分钟 (历书可用,有概略位置,时间不确定度±1s,捕获概率优于95%)
热启动:≤5分钟 (历书可用,星历可用,有概略位置和时间,时间不确定度±1ms,捕获概率优于95%)
≤5分钟 (卫星信号中断或受到干扰10分钟秒后)
预测定位精度:水平100m(95%,HDOP≤4),高程156m(95%,VDOP≤5)
重复定位精度:水平141m(95%,HDOP≤5),高程221m(95%,VDOP≤5)
相对定位精度:水平1.0m(95%,HDOP≤4),高程1.5m(95%,HDOP≤5)
≤340ns
1Hz
≥12
首次定位时间
重捕时间
GPS
性能指标
定位精度
测速精度 10m/s(95%)
定时精度
定位测速更新率
跟踪通道数
针对上述测试项目设计需求,在尽可能提高数据库存取速度、较小数据冗余度的基础上,对数据库表的总体设计如图3.5所示。
开始时间工程名称
测试项目1
测试时间接收天线方位角
测试次数n
测试项目属于1
测试工程1属于测试项目2
接收天线仰角
。。。。。。。。
测试项目n
接收天线高度
用户运动状态
测试结果设备编号n
设备信息
设备类型用户地址
图3.5 数据库总体E-R图
26 华 中 科 技 大 学 硕 士 学 位 论 文
跟踪通道数是指用户机能同时接收并处理卫星信号的数目。其测试核心就是测试各卫星输出信号是否正常。测试E-R图如图3.6所示。
测试时间 测试次数通道号
卫星号
1
跟踪通道测试1
用户运动状态
属于n
接收到的数据对应信噪比导航电文
属于
校验码n
语句1丢频率测试结果
。。。。。。。通道号语句2丢频率语句n丢频率
图3.6 跟踪通道测试E-R图
通道时延一致性是指同一频点卫星信号经过用户机的各通道所需时间的差异程度。其测试核心就是针对同一颗星进行伪距值测量[44]。测试E-R图如图3.7所示。
通道号卫星号测试时间
接收天线方位角
测试次数1
通道时延一致性属于n
接收到的数据
伪距值接收天线仰角
1
属于
时钟差帧号
时钟差n
通道时延
测试结果
可见卫星总数基准通道号
图3.7 通道时延一致性测试E-R图
27 华 中 科 技 大 学 硕 士 学 位 论 文
定位精度是指用户机在特定星座和星历条件下,接收卫星导航信号进行定位解算得到的位置与真实位置的接近程度,可以水平定位精度和高程定位精度方式[45]。其核心是通过GGA语句输出的经纬度和高程值解算出水平定位精度和垂直定位精度。测试E-R图如图3.8所示。
测试时间
测试次数
定位时刻纬度
纬度方向接收天线方位角
1
定位精度测试属于n
接收到的数据
经度
经度方向接收天线仰角
天线大地高可见卫星数1
接收天线高度
属于
用户运动状态
定位状态高程异常n
测试结果
垂直定位精度水平定位精度
图3.8 定位精度测试E-R图
测速精度是指用户机在特定星座和星历条件下,接收卫星导航信号进行速度解算得到的速度与真实速度的接近程度。测试E-R图如图3.9所示。
测试时间
测试次数
速度 X方向速度
1
用户运动状态
n
属于测速精度测试1
接收到的数据Y方向速度Z方向速度属于
测速时刻n
测试结果
测速精度
图3.9 测速精度测试E-R图
28 华 中 科 技 大 学 硕 士 学 位 论 文
测试时间
接收天线方位角
测试次数定位时刻纬度
维度方向1
实际跑车测试属于n
接收到的数据
经度
经度方向接收天线仰角
天线大地高属于
用户运动状态
可见卫星数1
接收天线高度
定位状态高程异常n
测试结果
n
测试结果
测试时刻
X方向速度垂直定位精度
水平定位精度
测速精度
当前速度
Y方向速度Z方向速度
图3.10 实际跑车测试E-R图
3.4 本章小结
本章主要讲解的是对与如何实现导航测试,阐述了用户需求,对系统框架进行了分析,分析了需要一个什么样的通信模块,解释了数据处理模块的工作内容,解释了显示模块的设计思想,着重介绍了运算模块的组成和工作内容,按照测试系统所要求的测试项目,详细分析了接收灵敏度、首次定位时间、定位测速精度等性能指标的测试方法。并且通过分析数据库的数据关系对运行速度的影响,着重描述了数据库的设计思想。
29 华 中 科 技 大 学 硕 士 学 位 论 文
4 卫星导航终端检测软件实现
卫星导航终端检测软件的使用者,除了开发人员以外,还包括了生产线的测试人员。很多时候,由于测试时间的紧迫,每次的测试结果都很可能是非常重要的,因为有的测试过程并不能通过反复测试来重现。只有保证每一次测试都成功进行,才能最大程度的保障项目的开发进度。所以,对于一个测试系统的实现,优先考虑的是系统的稳定性、容错性,再次才是性能。
4.1 系统硬件软件平台与开发工具选定
卫星导航终端检测软件的运行环境由一台配置为Intel E6600,、4G内存、250G硬盘的电脑和串口集线器组成,待测终端、基准终端盒卫星信号源通过标准串口线与串口集线器相连。一个完整的RNSS闭环测试系统如图4.1所示。
待测设备
基准设备
串口集线器 测试计算机
用户
信号源图4.1 RNSS闭环测试系统视图
由于卫星导航终端检测软件需要运行在PC的Windows环境下,且尽可能的减少对其他控件、额外Windows组件的依赖,所以选用了C++作为本系统的开发语言,Visual Studio 2008作为开发工具。
数据库方面,采用SQL Server2000。这是因为SQL Server具有典型的C/S结构。
30 华 中 科 技 大 学 硕 士 学 位 论 文
使用图形化用户界面,使系统管理和数据库管理更加直观、简介。同时,还提供了丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。由于SQL Server与Windows NT完整集成,利用了NT的许多功能,使得配置维护比较简单;在Windows安全机制的基础上,实现了自身的安全管理,有着较良好的安全性。
4.2 卫星导航终端检测软件各功能模块实现
4.2.1 通信模块实现
根据开发需求,为了实现两串口的同时输入,所以选用了多线程作为通信模块的实现方式。当用户打开串口后,系统开启两个线程,读取线程和写入线程。主线程负责监控各个子线程,当读取线程或写入线程被调用时,主线程先判断是哪个串口调用的,然后将数据传递给相应串口类。由于测试系统主要是接收数据,所以接收数据的线程的优先级高于写入线程。对于不使用的线程,主线程将其挂起,以节省Windows资源[46]。具体实现过程如图4.2所示。
打开串口
串口监视
初始化串口
否
产生串口数据
读取线程 写入线程
是
数据储存模块
数据处理模块
否
通信是否结束
否
通信是否结束
是
关闭串口
主线程
图4.2 串口通信流程图
读写线程
是
线程结束
31 华 中 科 技 大 学 硕 士 学 位 论 文
通信模块主要是通过读取定义的计算机端口对象信息,然后将读取到得数据通过MFC的消息处理机制传递给监听函数。通信模块的主要算法如下:
算法_串口底层信息处理
输入:用Byte定义的二进制或十六进制字符串
输出:基于MFC消息响应机制的WPARAM格式字符串
过程
(1)串口主线程判断是否有串口信号传入。
(2)如果有信号传入,成开启一个相应的子线程来处理这个信号。
(3)使用File类中的ReadFile()函数读入底层传过来的字符串。
(4)子线程中定义一个COMM端口,定义了读取字符串、字符串大小和端口号。
(5)子线程中判断读取结果是否正确,如果出错,输出读取错误信息。
(6)子线程中将成功接收到字符的消息向上传递给主线程。
(7)主线程向串口发送一条接到的二进制电平。
(8)将接收到的字符以消息相应的方式传递给数据处理模块中的响应函数。
(9)判断是否还有数据等待传输。
(10)没有的话就主线程将该子线程注销。
4.2.2 数据处理模块实现
当数据处理模块接收到通信模块传递过来的信息后,先区分有效信息和无效信息。有效信息指的是对于可以被测试软件识别并处理的信息[47]。无效信息指的是解码时产生的乱码,残缺的定位语句。然后将有效信息按不同的语句类别区分为GSV语句、GGA语句、DHV语句等。
数据处理模块的实现流程图如图4.3所示。
32 华 中 科 技 大 学 硕 士 学 位 论 文
串口数据
否
语句是否完整
是
是否是GGA
否
是是否是GSV
否
是是否是DHV
否
数据处理模块
串口数据显示图4.3 数据处理流程图
显示模块
数据处理模块的核心就是字符串的分离算法,这其中又分为有效字符串分离和特定语句分离两个部分。数据处理模块的主要算法如下:
算法_有用信息分离
输入:MFC下的宽字符串
输出:Cstring格式的字符串
过程
(1)通过消息响应机制读入通信模块传入的宽字符串。
(2)先按位遍历一次传入的宽字符串。
(3)将字符串中以”$”开头,”/n”结尾的字符串读取出来存到一个新的字符串中。
(4)判断该字符串的倒数第4位是否是”*”。
(5)如果是,调用校验函数校验倒数两位的校验码是否正确。
(6)如果校验码正确,则开始判断是那种语句。
(7)判断该字符串的第4,5,6位是否是”GGA”,是的话就传递给getGGA(),
33 华 中 科 技 大 学 硕 士 学 位 论 文
getGGA()将GGA语句中的具体数据读出来后同一放入一个GGA类型的结构体中,然后将其传入显示模块或运算模块进行后续处理。
(8)判断该字符串的第4,5,6位是否是”GSV”,是的话就传递给getGSV(),getGSV()将GSV语句中的具体数据读出来后同一放入一个GSV类型的结构体中,然后将其传入显示模块或运算模块进行后续处理。
(9)判断该字符串的第4,5,6位是否是”DHV”,是的话就传递给getDHV(),getDHV()将DHV语句中的具体数据读出来后同一放入一个DHV类型的结构体中,然后将其传入显示模块或运算模块进行后续处理。
(10)完成后释放相关资源,等待下一次消息响应。
4.2.3 显示模块实现
MFC中绘图可通过CDC类来完成。这个类的所有对象及其派生出来的类都将相应的字符串发送到显示屏上。通过动态获取当前窗口位置并以此来绘制图形,本系统可以将经由数据处理模块和运算模块传过来的数据呈现给使用者。显示模块的主要工作流程如图4.4所示。
获取绘图区初始化底图获取数据
更改绘图比例
否
数据是否有效是
是
数据是否越界否
数据处理
显示到屏幕上
图4.4 图形绘制流程图
34 华 中 科 技 大 学 硕 士 学 位 论 文
显示模块的主要函数为数据接收函数和显示函数。下面以GSV语句的显示源文件来说明一下显示模块的实现。在GSV语句的显示模块中,绘图函数为OnDraw(),其主要功能是将传入的GSV语句中的卫星号、方位角、仰角提取出来并通过CDC绘制到屏幕上。其主要算法如下:
算法_GSV绘图
输入:GSV结构体格式的数据
输出:屏幕上实时的星座显示
过程
(1)在GSVView的OnInitDialog()函数里绘制星座图的底图。
(2)在GSVView的OnDraw()函数里初始化CDC绘图,读取绘图区域大小。
(3)遍历数据类型为GSV结构体的单向链表。
(4)判断GSV结构体链表内数据的有效性。
(5)求出坐标转换所需的半径值:r=(90−仰角)÷90×屏幕上显示圆的半径。
(6)判断该GSV语句源于什么导航系统。
(7)将方位角转为X坐标:X =
r×cos(((方位角−90)/180)×PI)。
(8)将仰角转为Y坐标:Y =
r×cos(((仰角−90)/180)×PI)。
(9)申明一个新的画笔CPen和一个绿色的画刷。
(10)用CDC类里的e将求出X、Y值的点绘至屏幕上。
(11)绘制完成后回收CDC句柄以防止出现内存泄露。
在研发阶段,检测软件的主要作用是实时显示终端的定位信息,给设计师一个直接的性能展示。这时的测试主要是针对单一设备的,其界面如图4.5所示。
35 华 中 科 技 大 学 硕 士 学 位 论 文
图4.5 单一终端测试界面
在产品定型阶段,检测软件的主要作用是实时显示设计终端和其它成熟终端或卫星信号源之间的性能对比,让设计师知道自己设计的终端性能大概处于行业内什么水平。这时的测试主要是针对两个终端之间进行的,其界面如图4.6所示。
图4.6 对比终端测试界面
4.2.4 运算模块实现
运算模块主要提供对定位误差、定位精度的计算[48]。当数据处理模块将整理过的
36 华 中 科 技 大 学 硕 士 学 位 论 文
GGA语句传递至运算模块后,运算模块先将经度、纬度和高程值从GGA语句中分离出来。GGA语句的结构如图所示。
$GPGGA,081549.00,2308.844,N,11326.408,E,1,12,0.6,39.183,M,-8.0,M,,*65
其标准格式为:$GPGGA,1,2,3,4,5,6,7,8,9,M,10,M,11,12*hh(CR)(LF)
该语句中各个元素的定义如下:
(1)定位语句产生时的UTC时间:08时15分49秒
(2)纬度(格式为度分):23度8.844分
(3)纬度方向(N/S):北纬23度8.844分
(4)经度(格式为度分):113度26.408分
(5)经度方向(E/W):东经113度26.408分
(6)质量因子(0=没有定位,1=实时GPS,2=差分GPS):1=实时GPS
(7)当前视野内卫星数:12颗
(8)水平精度因子(1.0~99.9);水平精度因子=1.4
(9)天线大地高:高程值为39.183米
(10)大地椭球面相对海平面的高度:-8米
(11)差分GPS数据年龄:该处由于是实时GPS,所以为空值
(12)差分基准站号(0000~1023):该处由于是实时GPS,所以为空值
从标准语句中分离出来的经度、纬度值先通过弧度转换后,进行相应计算。
(1)接收机灵敏度测试
对于一款导航产品而言,最基本的就是其搜星能力。如果不能捕获上卫星,那么其他的功能都无从谈起。搜星能力的具体体现就是在不同工作环境中接收机的可见卫星数及各个通道的信号强度[49]。
根据不同的用户需求,对接收机的灵敏度有不同的要求。现在的接收机为了能提高定位精度,很多都采用了两种或两种以上的导航系统,在同一时间内,传输的数据量大大上升。通过对串口接收类的重写、数据传输优化和数据库读写的优化。
接收机天线具有方向特性,方向为0~360°,仰角为5~90°,不同的方向角和仰
37 华 中 科 技 大 学 硕 士 学 位 论 文
角都可能存在各向异性的信号特性。在这样的区域内不可能对每台接收机在所有方向上都进行全面测试。而天线的性能又直接与灵敏度有关,因此,接收灵敏度测试应分为不包含天线的有线测试和包含天线的无线测试,将接收机固有接收灵敏度和天线方向图特性分离测试。有线测试能够评价接收机真实的基带信号处理能力。无线测试则用于接收机天线性能的检测以及方向图特性的影响,需要生产单位提供天线方向图等技术参数,选取最大增益方向和低仰角边界点进行抽样检测。
(2)首次定位时间
首次定位时间指的是导航设备从开机到首次定位成功(成功获得导航设备的位置和速度)所需要的时间。这一指标根据不同的用户需求会有所不同。
首次定位时间分为冷启动首次定位时间、温启动首次定位时间和热启动首次定位时间。冷启动指的是在接收机没有星历和历书的情况下进行定位;温启动指的是在接收机有历书但没有星历的情况下定位;热启动指的是在接收机已经有星历和历书的情况下定位。首次定位时间分为实际测试和模拟测试,其中模拟测试又分为有线测试和无线测试。
实际测试分为静态测试和动态测试,静态测试是指导航设备在静止状态下(定位结果输出中速度项为零)的首次定位时间测试。这时的测试误差主要源于天气的影响。
动态测试是指导航设备处于运动状态下(定位结果输出中速度项大于零)的首次定位时间测试,这时的测试误差除了受到天气的影响外周围环境的影响和电磁干扰也有很大的影响。
在实际测试中,导航设备分为基准导航设备和测试导航设备,基准导航设备一般用可信度较高的导航设备。测试过程中,二者收到的数据以测试次数为主键分别存入数据库中。
4.2.5 数据储存模块实现
数据储存模块主要分为两部分:将所有接收到的串口数据保存至TXT文档中、将有用数据及测试结果保存至数据库中。其中存储至TXT文档是通过MFC的CFile
38 华 中 科 技 大 学 硕 士 学 位 论 文
类来实现的,这样简化了开发难度。首先指定一个储存文件名,一般而言是使用项目号外加日期时间(从用户输入的项目信息中读取)。然后建立一个CFile对象,并且将字符串通过CFile类写入TXT中。具体实现如下:
CFile m_file(filename, CFile::mode ReadWrite| CFile::modeNo Truncate| CFile::shareDeny
None);
数据库存储是通过MFC的Ado来实现的。首先用_ConnectionPtr
申明一个变量m_pConnection,然后通过m_pConnection来连接/操作数据库。数据库存取的主要算法如下:
算法_数据库ADO连接
输入:数据库连接请求
输出:请求访问的数据
过程
(1)通过CreateInstance创建一个Connection对象。
(2)设置Connection对象的超时时间。
(3)通过Connection对象的Open()方法打开指定位置的数据库。
(4)如果出现连接错误则抛出错误信息。
(5)与数据库的连接建立好后就可以通过Connection对象的Execute()方法输入标准SQL语句。
(6)如果是插入数据,就用INSERT关键字向指定的表中插入数据。
(7)如果是查询数据,就用SELECT关键字向指定的表中查询数据。
(8)如果是修改数据,就用UPDATE关键字向指定的表中查询数据。
(9)如果操作完成后用Close()方法关闭数据库连接。
4.2.6 控制模块实现
控制模块主要作用就是将复杂的标准协议语句输入转为通过具有提示的EditControl控件、ComboBox控件等简化输入,让测试软件具有更好的用户体验[50]。控制模块是按照标准协议将语句中所需要的部分拆分为一个个独立的输入文本框、
39 华 中 科 技 大 学 硕 士 学 位 论 文
多选栏和下拉框,当用户点击发送时,控制模块将这些文本框、多选栏和下拉框中的内容提取出来重新组成一条完整的语句[51]。为了能够确保通信内容的正确性,所以通信语句的最后应该加上两位校验码。我们一般采用的是奇偶校验。将完整的语句输入校验函数后得到两位的校验码,最终发出的信息就是语句+校验位。
校验的核心算法如下所示。
算法_语句的奇偶校验
输入:Cstring格式协议语句
输出:Cstring格式校验位
过程
(1)通过输入界面完成协议语句内容的填写。
(2)生成一个以”$”以及5位特定字符开头,以”*”结尾的标准协议语句。
(3)将该语句传入语句校验码计算函数。
(4)先将传入语句转化char型数组pDat。
(5)读取传入语句str赋给pDat。
(6)申明一个char型变量data。
(7)将pDat的第二个数组元素值pDat[1]赋给data。
(8)data不停地和pDat[i]进行按位与操作并将计算结果重新赋给data。
(9)定义一个8个元素的char数组buf。
(10)将data值按位左移buf的数组下标值,然后再和0X80进行按位与操作。
(11)上述计算结果为true则buf相应的元素等于1,反之为0。
(12)定义整型变量a,b。
(13)按一定算法将buf值赋予a,b。
(14)将a,b值按一定算法转为16进制0至F的一个值。
(15)将a,b两个合成一个Cstring字符串,该字符串就是输入语句的校验码。
控制模块由很多输入界面组成。现将比较有代表性的界面举例如图4.7、4.8所示。
40 华 中 科 技 大 学 硕 士 学 位 论 文
图4.7 星历设置示意图
图4.8 串口监视示意图
41 华 中 科 技 大 学 硕 士 学 位 论 文
4.3 卫星导航终端检测软件数据库实现
数据库的建立是本系统中的一个核心步骤,数据库建立的好坏直接关系到系统运行的效率以及维护工作的方便与否。
检测软件数据库的主要作用是对终端设备在测试过程中所发出的数据及由这些数据分析得到的计算结果进行储存,方便进行终端设计历史版本之间的性能对比、故障重现以及测试过程重现。正因如此,检测软件数据库可以说是整个测试系统的核心。
Windows系统里有各种不同类型的数据,数据类型决定了数据的储存方式、所占用的储存空间。相应的,数据库内的数据的储存类型也各有不同,本文涉及到的变量对应的储存类型如表4.1所示。
表4.1 变量及类型说明表
数据储存类型
Char(字符型)
Int(整型)
Double(浮点型)
时间格式
字段举例
测试工程代号
通道号
输出纬度
本次测试开始时间
备注
数字文字混合的字段
纯整形数据字段
大部分测试数据字段
特殊的时间格式,兼容Excel
由于检测软件的特殊性,其数据库包含了大量表,为了提高访问速度,使用索引来加快查询速度。由于每个表中的数据都是依赖于主键而存在,并且与主键是一一对应的,所以将每个表的主键设置为索引,当进行查询操作的时候就只需要直接检索主键就可以将需要的一组数据全部读出。这样可以大大提高访问速度,尤其是在历史测试过程重现这一功能中需要短时间内从数据库中读取大量数据(约2Mb/s,数据大小约为50~100Mb),有索引存在时可以按索引顺序直接按顺序读取,有效提高读取速度。比如说想重现定位精度某次测试过程,只需要按索引依次在所指定的测试数据中直接按测试时间读取相应的经纬度及高程值就可以了。
在数据库中,主键和外键之间的关系形成了数据库表间关系,并且通过这一关
42 华 中 科 技 大 学 硕 士 学 位 论 文
系保证了数据库内数据的完整一致。避免了对数据的错误存储与删除。
数据库中的表主要划分为测试设备信息和具体的测试数据。测试设备信息包含了测试工程、测试次数、测试设备等总体信息。这些信息主要包含于三个表中,如表4.2-表4.4所示。
表4.2 测试工程总体信息表
字段
ProjectID(主键)
数据储存类型
varchar
备注
测试工程代号
测试工程测试次数
ProjectNum int
StartTime datatime
本次测试开始时间
EndTime datatime
本次测试结束时间
表4.3 测试设备信息表
字段
ProjectID(外部键)
数据储存类型
Varchar
备注
测试工程代号
测试设备类型
测试设备序列号
用户地址
EquipmentType Int
EquipmentID Int
UserAddress Int
表4.4 测试项目信息表
字段
ProjectID(外部键)
数据储存类型
varchar
备注
测试工程代号
TestItem varchar
测试项目类型
TestResult varchar
测试项目结果
EquipmentID int
测试设备序列号
具体测试数据表包括了终端搜星能力测试信息表、终端灵敏度评估表、终端测速精度测试信息、终端定位精度测试表、终端通讯功能测试表。这些数据一部分是相同的,所以必须按第三范式的设计要求对其进行降低冗余度的设计。由于进行历
43
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689457743a251482.html
评论列表(0条)