在车载导航系统的开发过程中,为了对自车状态进行描述,不可避免的要使用各 种物理量,如:车辆行进方向、车辆所在位置的经纬度座标、车速、时间等。容易理解,如果在一个变量被用来表示上述物理量信息时,我们需要为这个变量规定一 个单位,这样才能完整体现变量所代表的含义。没有单位,单纯通过一个变量具有的数值是无法表达物理量的完整含义的。
出于性能和资源的考虑,通常使用整型数而非浮点型来表示物理量。为了使整型变量可以在足够高的精度上对物理量进行描述,导航系统中使用 的物理量单位通常比国际标准单位更小。例如,一个经纬度变量的定义: long lLongitude; // 1/2560秒 1/2560秒是一个非常小的单位,等于0.000390625秒。
下面的表格列出了一些在导航系统中常见的物理量和单位: 物理量 常用单位 经纬度 1/256秒、1/2560秒、1/1000秒 速度 0.1千米/小时,0.25米/秒,节 长度 1/1000米,1/256米,1/2米 角度 360/65535 度、360/256度、1/1000度、分、秒 时间 秒、1/100秒、毫秒
2. 物理量单位与数据类型的选择
如果不考虑性能问题,全部使用浮点型来描述物理量的话,那么应该尽量使用国际单位制中的标准单位或者常用单位。如果使用整型来描述物理 量的话,就需要对于数据类型和单位进行适当的选择。C语言中主要整型类型有三种, char、short和long,每种类型都有各自的有符号和无符号类型。接下来对数据类型和单位的选择进行分析。
关于物理量单位的选择,一个整型变量所能表示的最小物理单位就是单位本身的物理含义,如果单位过大,这个整型变量所表示的物理量的精度 就较低,无法表示非常小的数值;反之如果选择过小的单位,虽然在精度上不存在问题,但受到整型数的数据范围限制,导致这个变量无法表示大数值的物理量。因 此在设计物理量单位的时候,要根据数据的取值范围和精度进行综合考虑。
关于数据类型的选择,数据类型的位数越多,其能够表示的数值范围就越大,同时在内存资源上的开销也就越大;反之,数据类型的位数少的话 能够节省存储空间,但受到自身数值范围的限制,无法用来表达高精度要求的数据。因此在数据类型方面的选择,就是在系统资源和数据精度要求之间的权衡。
下面以导航系统中两个典型的物理量为例进行分析。
(1) 经纬度 导航系统中,描述经纬度的数据类型是4字节有符号整型long,物理量单位是1/2560 秒。如此设计用意何在?
首先对于经纬度的数值范围进行分析。经度的范围是东经180度~西经180度,纬度的范围是南纬90度~北纬90度。为设计思路简单起 见,使用有符号整型的负数部分表示西经和南纬。因此,在地图数据的经纬度同时存在东经和西经,或者同时存在北纬和南纬的情况下,需要使用有符号数据类型来 保存经纬度。
其次,需要在char、short和long这几种类型中进行选择。需要表示的最大数值范围是(-180度,180度),假设使用这三 种数据类型的最大取值范围来表示此区间,即可计算出这三种整型数能够支持的最小单位: long:360度 / 4294967296 = 0.00000008381903171539度,赤道附近约相当于0.00905米; short:360度 / 65536 = 0.00549316406度,赤道附近约相当于593.26172米; char:360度 / 256 = 1.40625度,赤道附近约相当于151875米。
导航系统中GPS信号和地图数据的精度约为10米左右,显然char和short无法满足上述精度要求,因此数据类型便可以确定为有符号长整型long。
关于物理量单位,在GN8007的GPS协议中,经纬度的单位是1/256秒,kiwi格式的地图数据中正规化经纬度大致相当于1 /220秒。为了数据精度在运算中不受到损失,所选择的单位应小于等于上述单位。而且为了计算方便,所选择单位最好是与上面单位成整数倍数关系。
long类型能够表示的最小单位是360/4294967296度,约为1/3314秒。因此,单位的分母就是在256到3314范围 内选择一个尽量大的256的倍数。考虑到自然数中最常用的十进制,最终选择256的10倍作为单位的分母,即以1/2560秒作为经纬度的单位。
(2)车辆角度
导航系统中,车辆角度使用的是有符号short类型来表示,使用的单位是360/65536度,即以short的取值范围 [-32768, 32767]来表示360度,所能够表达的最高精度约为0.00549度。数据类型和单位的选择出于以下原因: a、 该单位的精度足以满