测绘地理信息   2017, Vol. 42 Issue (2): 122-125
0
排序算法在北斗卫星导航系统评估中的应用[PDF全文]
陈勇1, 付崇伟1    
1. 61365 部队,天津,300000
摘要: 针对北斗卫星导航系统性能评估中遇到的排序问题,提出一种计数器排序算法。该算法具有占用内存空间极少,可以完全忽略精度损失,读取原始文件仅需一次,算法损失精度和区间灵活可变的特点,解决了性能评估中95%分位数求解的问题,同时也可以解决中位数、其他分位数等问题。实测数据证明,计数器排序算法能解决性能评估中的排序问题。
关键词: 北斗卫星导航系统     定位精度评估     计数器     排序算法     海量数据    
Application of Sorting Algorithm in the Evaluation of BeiDou Satellite Navigation System
CHEN Yong1, FU Chongwei1    
1. 61365 Troops, Tianjin 300000, China
Abstract: In order to solve the sorting problem in the assessment of positioning accuracy, a counter sorting algorithm is proposed. The method fully overcomes the solution of 95% quantile as well the median and other quantile in the assessment of positioning accuracy. The method has four characteristics: small memory space, small loss of precision, only one round of reading source data, flexibility of the loss of precision and the length of interval. Experiment shows that the counter sorting algorithm can successfully solve the sorting problem in performance evaluation.
Key words: BeiDou satellite navigation system     assessment of positioning accuracy     counter     sort algorithm     massive data    

北斗卫星导航系统 (BeiDou navigation satellite system, BDS) 是我国自行研制的全球卫星导航系统,是继美国全球卫星定位系统 (global positioning system, GPS) 和俄罗斯全球卫星导航系统 (global navigation satellite syste, GLONASS) 之后第3个成熟的卫星导航系统,可全天候、全天时为各类用户提供高精度、高可靠的定位、导航和授时服务,以及短报文通信能力[1]。2012年12月27日,北斗导航业务正式对亚太地区提供无源定位、导航、授时服务。预计到2020年左右,北斗卫星导航系统将完成星座部署,对全球地区提供服务。

在北斗卫星导航系统正式提供服务之前,需要对北斗的性能进行评估,以便正式对外公布性能参数[2-6]。最简单的方式就是将接收机放置在已知点上,采集数据计算该点的坐标,并将计算出的坐标跟已知点坐标做比较,生成误差序列数据,然后对这个误差序列数据进行统计[7-9]。统计指标包括均方根值 (RMS)、平均值、95%分位数等指标。其中,RMS和平均值按照公式计算即可,95%分位数比较复杂,需要对误差序列数据取绝对值,然后按照从小到大顺序排列,最后将95%处的数据选为95%分位数,排序是主要问题。

针对排序问题,一般思路是:将数据导入到内存中,进行数据排序,将数据存入文件。但是对北斗定位性能评估存在严重问题。该评估需要大量测站的长期观测数据。假如全国有10个测站在进行连续观测,采样率是1 Hz,连续观测一年时间,需要评估的类型有单频、双频等10类,使用的是double类型的数据,那么这些数据如果全部导入内存后,占用的空间为10×10×365×86 400×8 Byte=23.5 GB,对于32位系统的普通计算机,访问2 G以上的内存非常困难,并且一般设备也没有这么大的物理内存,为了评估一个指标使用大型计算机,从经济上不现实。

随着北斗卫星导航系统的建设,观测站增多,数据量也飞速增加,读取存储在磁盘中的海量误差序列数据文件非常耗费时间,算法上应尽量设计仅读取一遍误差序列数据。

1 常用排序算法

常用的排序算法有很多种,各种算法都有自己的优缺点,下面选取几种有代表性的阐述排序算法的基本思路。

1) 插入排序。以直接插入排序为例,将数据与有序表 (长度为n) 中的数据比较后插入到其位置,使之保持有序,生成新的有序表 (长度为n+1)。

从该算法的描述可以看出,需要将所有数据读入内存进行比较,消耗巨大的内存。如果不将数据读入内存,将数据存储在磁盘文件中,需要反复将有序表写入文件,然后读取文件,操作文件的次数与误差序列数据的个数是一样的,其读写文件操作耗费的时间惊人。

2) 交换排序。将较大的数据向序列的后部移动, 较小的数据向前移动。以冒泡法排序为例,该算法同样需要将数据读入内存中,算法复杂度较高,为O(n2)。

3) bit位排序[10]。这是一种经典的排序算法,将待排序序列中的数据对应的bit置为1。该算法存储空间较小,效率非常高,但是该算法要求待排序序列中不能有重复的情况。北斗定位误差序列无法满足这个要求。

4) 计数排序。对于给定的输入序列中的每一个元素x,确定值小于x的元素的个数。将x直接存放到最终的输出序列的正确位置上。对北斗定位误差序列百分数求取中,该算法需要对所有元素求取一次位置,计算时间较长。

此外还有并行排序、合并排序、分配排序和使用数据库等方法,这些方法要么占用内存大,要么需要反复读取文件,造成计算时间较长等问题,完全无法适应北斗定位性能评估中的海量数据问题。

2 计数器排序算法 2.1 算法基本思路

以平面定位误差统计为例,统计95%的第N个数的计算公式为:

$ N = {\rm{INT}}\left( {0.95 \times {\rm{COUNT}}} \right) $ (1)

式中,INT表示取整;COUNT表示误差序列中数据的个数。

研究误差序列的特点可以发现,误差序列都是正数 (因为取绝对值),总体上都是有概略上限的,如北斗卫星导航系统的平面定位误差一般都小于1 000 m,可以根据这两个特点来设计排序算法。

排序算法的基本思路如图 1所示,图 1表示只有正向的半坐标轴,误差序列都落在该半坐标轴上。d0表示坐标原点0,dn表示误差数据序列概略上限,将区间[d0, dn]均分成n份,对应节点分别标注成dii=1, 2, …, n,半坐标轴被划分成了n个封闭区间[di, di+1]和1个半开区间 (dn, +∞)。图上黑点表示误差序列中的数据,根据定义所有黑点都会落在某一个区间,每一个区间定义一个计数器。然后逐一判断误差序列数据中的每一个数据落在哪一个区间,对应的计数器加1。最后根据计数器记录的个数确定95%的数据位于哪一个区间,并取该区间的中间数作为95%的值,写成伪代码。

图 1 算法示意图 Figure 1 Algorithm Diagram

由于95%的值一定位于计算的区间内,所以该算法计算的最大误差ε是半个区间的大小为:

$ \varepsilon = \left( {{d_{i + 1}} - {d_i}} \right)/2 $ (2)

需要说明的是,95%的值不能位于第n+1个区间,即半开区间[dn, +∞),所以在设计误差序列概略上限时,应尽量设计准确。此外,由于95%是一个输入参数,所以可以较容易地改为50%、68%等,所以上面方法同时也可以解决中位数、其他分位数 (如68%) 等问题。

2.2 算法特点

关于计数器排序方法的特点总结如下:

1) 占用内存空间极少。以引言中的假设为例,以1 cm为区间大小,概略上限为1 000 m,那么将分为100 000个区间,针对10种测试类型数据,其占用的内存空间为100 001×10×8 Byte=7.6 MB,7.6 MB的内存对于普通计算机而言微不足道,相对于原先的23.5 GB下降剧烈。

如果考虑北斗定位精度的实际情况,将概略上限设为50 m,以1 dm为区间大小,那么占用的内存空间仅仅为501×10×8 Byte=39.1 kB。

2) 精度损失完全可以忽略。根据算法精度评估公式,对于上面的1 cm区间大小,其统计误差小于0.5 cm,这对于北斗卫星导航系统定位精度评估来讲是完全可以忽略的。

3) 仅需读取原始文件一次。根据算法描述,仅仅需要读取存储误差序列数据的原始数据文件一次就可以了,这是所有算法中的最低要求,因为无论什么排序算法,都需要至少读取一次原始数据文件。

4) 算法损失精度和区间灵活可变。上面算法阐述中,算法设计时将区间平均分配,如果知道误差序列的先验信息,可以按照误差序列数据特点进行设计,比如,在误差序列数据密集的位置多设置区间,在数据稀疏的地方减少区间设置个数。

3 实验分析

为验证计数器排序法的效果,选取3组数据进行计算,分别为北京站和喀什站的静态数据和郑州地区跑车实验的动态数据。平面定位误差序列的概略上限设为20 m,区间宽度设为1 cm。3组数据的平面定位误差序列图如图 2(a)图 3(a)图 4(a)所示,区间计数器计数柱状图如图 2(b)图 3(b)图 4(b)所示。柱状图显示了各个区间上的数据个数。

图 2 北京站平面定位误差序列图和区间计数柱状图 Figure 2 Plane Positioning Error and Counting Interval Histogram of Beijing Station

图 3 喀什站平面定位误差序列图和区间计数柱状图 Figure 3 Plane Positioning Error and Counting Interval Histogram of Kashi Station

图 4 郑州动态实验平面定位误差序列图和区间计数柱状图 Figure 4 Plane Positioning Error and Counting Interval Histogram of Zhengzhou Dynamic Experiment

利用计数器排序法计算得到的分位数与真实的分位数的误差如表 1所示,无论是98%、68%还是50%分位数,误差都在5 mm以内,这对于北斗卫星导航系统的精度而言完全可以忽略不计。

表 1 计数器排序算法计算误差/mm Table 1 Calculation Error of Counter Sort Algorithm/mm

3组数据不同方法占用的内存比较如图 5所示。很明显,计数器法占用的内存要少于传统方法,而且计数器法不会随着数据量的变大而变化。

图 5 3组数据不同方法内存占用大小比较 Figure 5 Data Memory Size Comparison of Different Approaches

由于测试数据量较少,仅为2~4 h的时间,下面比较在测试时间较长情况下的内存差异。如图 6所示,以10个测站为例。传统方法的内存大小随着数据量的变大而变大,当数据量累积到100 d时,内存大小已经达到将近7 G大小,这是无法接受的。与之形成鲜明对比的是,计数器法的内存一直不变,保持在150 kB左右。这说明计数器排序法能够较好地求取不同的分位数,且内存占用量并没有变大。

图 6 在海量数据情况下的内存比较 Figure 6 Data Memory Size Comparison Under the Condition of Mass Data

4 结束语

本文针对北斗卫星导航系统定位精度评估中遇到的排序问题,充分利用误差序列数据有概略上限的特点,提出了计数器排序算法。计数器排序算法将坐标轴划分为n个封闭区间和1个半开区间,并判断误差序列数据隶属的区间,同时利用对应的计数器计数。计数器排序算法具有占用内存空间极少,精度损失可以完全忽略,读取原始文件仅需一次,算法损失精度和区间灵活可变的特点,解决性能评估中的求解95%分位数的问题。由于95%是一个输入参数,所以可以较易改为50%、68%等,同时也可以解决中位数、其他分位数等问题。

参考文献
[1] 杨元喜. 北斗卫星导航系统的进展、贡献与挑战[J]. 测绘学报, 2010, 39(1): 1–6
[2] 胡志刚. 北斗卫星导航系统性能评估理论与试验验证[D]. 武汉: 武汉大学, 2013
[3] 李作虎. 卫星导航系统性能监测及评估方法研究[D]. 郑州: 信息工程大学, 2012
[4] 高为广, 苏牡丹, 李军正, 等. 北斗卫星导航系统试运行服务性能评估[J]. 武汉大学学报·信息科学版, 2012, 37(11): 1 352–1 355
[5] 苏牡丹, 高为广, 李军正, 等. 北斗卫星导航系统远洋评估试验及初步结果[J]. 飞行器测控学报, 2013, 32(5): 449–453
[6] 唐旭, 何秀凤. 北斗卫星导航系统高精度相对定位性能分析[J]. 导航定位学报, 2013, 1(3): 32–34
[7] 杨元喜, 李金龙, 王爱兵, 等. 北斗区域卫星导航系统基本导航定位性能初步评估[J]. 中国科学:地球科学, 2014, (1): 72–81
[8] 杨青, 张锋, 李超, 等. 北斗系统B1频点定位性能评估[J]. 测绘科学技术学报, 2013, 30(6): 586–588
[9] 申俊飞, 郑冲, 何海波, 等. 北斗卫星导航系统民用单频定位性能分析[J]. 全球定位系统, 2014, (2): 30–33
[10] BentleyJ L, 谢君英, 石朝江. 编程珠玑[M]. 北京: 中国电力出版社, 2004