TA的每日心情 | 开心 2019-11-19 15:19 |
---|
签到天数: 1 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, d4 T+ a' [8 P) B' u+ V
GPS定位数据压缩算法的设计与实现 ! j, z- P% e- s1 O# \, V
摘要:为了解决嵌入式GPS车载系统存储空间小、GPS定位数据量大的矛盾,根据GPS定位数据的特点,提出了专用于GPS定全数据压缩的改进型半字节压缩算法。该算法是一种在原半字节压缩算法的基础上改进的算法,经过实际测试,压缩比可达50%。若将压缩预处理也折算法在内,总压缩比可达80%以上,为车载系统节省了大量的存储资源。除此之外,也缩短了GSM信道的占用时间,大大地缓解了向控制调度中心上传数据的压力。
. K! @4 D, r+ J+ t: B1 u 关键词:数据压缩 GPS数据格式 压缩预处理 半字节压缩算法1 b$ }/ \9 \" ^" k1 G/ k1 |4 U7 W
嵌入式GPS车载系统般体积较小,无存储量大的硬盘等设备,系统程序、应用程序一般装在FLASH或ROM中。由于FLASH或ROM等存储介质的价格相对台式机上广泛使用的硬盘、光盘等来说是非常昂贵的,因此,在开发嵌入式系统的软件产品时必须将软件所占的存储空间限制在一定的范围内。
/ X! k- C" B! f. G在GPS车载系统的研发过程中, 主要需解决的问题是:车载系统为了实现自导航,必须存储大量的GPS定位数据(每天需要存储约6MB);其二是这些数据还要通过GSM信道上传到控制调度中心(若通过短信业务发送,每次160B,则需要每分上传6次)。无疑,数据压缩是在不增加硬件成本的前提下,从软件的角度来充分发挥系统现有资源的有效办法。9 r0 ^$ `9 d+ G7 _4 Q
数据压缩方法种类繁多,可以分为无损压缩和有损压缩两大类。无损压缩利用数据的统计冗余进行压缩。数据统计冗余度的理论限制,般为2:1到5:1。这类方法广泛用于文本数据、程序和特殊应用场合的图像数据(如指纹图像、医学图像等)的压缩。有损压缩方法利用了人类视觉对图像中的某些频率成分不敏感的特性,允许压缩过程中的损失一定的信息。虽然不能完全恢复原始数据,但是所损失的部分对理解原始图像的影响较小,却换来了大得多的压缩比。有损压缩广泛应用于语音、图像和视频数据的压缩。: Z9 \' ~6 v2 a& s( n8 ]1 V& B
目前现在的压缩算法很多,但不能直接用于嵌入式系统当中,这完全由嵌入式系统的特点所决定。首先,用于嵌入式系统的数据压缩方法应是无损压缩方法。其次,压缩代码和解码所需的信息代码必须足够短,否则就会失去压缩的意义。还有,嵌入式系统的数据压缩必须结合具体的数据格式的特点,才能进一步提高数据的压缩比。除此之外,目前的压缩程序的启动执行必须人为干扰,不能自动执行,因为它们是为文件系统设计的,而嵌入式系统的数据压缩必须能够自动执行。
: P5 O7 f* F7 R3 O! H& [5 \1 GPS数据格式
9 g/ e+ G5 ^9 w5 XGPS OEM板由变频器、信号通道、 微处理器和存储单元等组成。GPS OEM板的型号甚多,性能各异,但大多采用美国国家海洋电子协会制定的NMEA-0183通信标准格式。本系统选择的是美国SiRF公司的SiRFstarII OEM板。SiRFstarII OEM板语句的输入、输出是通过RS232串行接口完成的,其通信端口的数据格式应该设置为8个数据位、1个起始位和1个停止位,校验方式选为无奇偶校验,波特率设置为4800波特。NMEA-0183通信标准的输出数据采用的是ASCII码,其内容包含了纬度、经度、高度、速度、日期、时间、航向以及卫星状况等信息,语句有六种,包括GGA,GLL、GSA、GSV、RMC和VTG。对于不同的用途,选用的语句记录也不同,例如嵌入式GPS车载系统的使用者只关心其日期和时间、纠度、面速度信息,因而可以只选用RMC记录语句。一条$GPRMC语句包括13个记录:语句标识头、世界时间、定位状态、纬度、纬度方位、经度、经度方位、地面速度、地面路线、日期、磁偏角、校验和和结束标记,它一共占用70个字节(其中还包括用于分隔记录所使用的11个逗号),例如:+ Z; d. i. t. w# s! M+ Z
$GPRMC,121530.998,A,4000.0162,N,11619.5476,E,0.00,240.81,160102,,*3B
' T! N0 H( i. J( \由此可见,从SiRFstarII OEM板接收下来的数据流是文本字符串,根据GPS数据格式的特点,本设计中拟采用半字节法完成压缩及解压缩的任务。该方法属于无损压缩技术,其原理是去除字节中的冗余位,从而达到压缩目的。然而,这种方法只适用于纯数字文本文件的压缩,显然GPS定位数据并不是纯数字的,还必须在压缩前进行一下压缩预处理,较后再利用半字节压缩算法完成数据的压缩。) ~+ G- L0 |9 x6 R& e% Y! b
2 压缩预处理* \5 f4 Y$ @( N6 {+ m" `8 D' B
仔细观察以上各段数据记录,可以发现语句之间的数据段还存在很多冗余。除此之外,这些记录中所含的信息既有英文字符又有数字,为了后续的压缩,对语句中的各个记录应做如下的预处理:2 [; R) {' P! w5 `% A) f
①语句标识头(ID):因为每个语句的标识头都一样,所以该记录段属地冗余信息,完全可以去除,在解压缩时再在每个语句前加上该标识头即可。
( [3 V9 c; N: _/ i/ f) z2 E* c , {3 D! F/ D; F8 B- @
②世界时间(UTC):该信息段以时、分、秒、毫秒的格式指示出当时世界时间。转换为北京时间还需要再加上8小时。由于车载系统的定位数据的采集是以秒为单位的,所以毫秒量级的数据对本系统根本无用,是冗余信息,由于世界时间是按秒增1,定位数据也是每委员长更新一次,所以世界时间可以在程序的一开始采集记录一下,在解压缩时根据语句的指针值再加上起始时间便可以复原,因此该记录段在一次存储后,以后的语句中的该信息全都是冗余信息。. B4 R3 `6 C+ ~( ?# O- _
③定位状态(A/V):占用1个字节,不进行预处理。由于车载系统处于的地方有可能收不到卫星信号(如隧道中),致使定位信息无效,因此尽管该字段发生变化的概率较小,又与其它信息段不相关,在此仍不能做预处理。
7 S! ~: H" ^* ^④纬度:占用9个字节,不进行预处理。
. h1 y* b7 C6 ?7 r* h" T+ M⑤纬度:占用10个字节,不进行预处理。& D5 z! F2 y) L5 E9 \1 l
⑥经度指示器(E/W):占一个字节,它指示出经度是东经,还是匹配。由于各个$GPRMC语句中的该段信息在中国都是东径,它是冗余信息,因此也采取程序一开始存储一次的方法。
3 c) Q2 H$ [: \. U3 c⑦纬度指示器(N/S):占一个字节,各个$GPRMC语句中的该段信息完全一样,是冗余信息,处理方法与上相同。9 d5 r4 t5 i4 A+ Z _2 M9 z7 v
⑧地面速度:占用4个字节,不进行预处理。
6 w4 r9 y" P! h5 N" \⑨日期:占用6个字节,以日、月、年的格式显示,各个$GPRMC语句中的该段信息在24小时内完全一样,是冗余信息,采取程序一开始存储一次的方法,以后语句中的该段信息全部废除。5 m2 f; \( q6 ]9 ~' I1 Y- Q( ]
⑩校验和:占用3个字节,该数据完成校验后便弃之,不保留和进行压缩。
$ h, L* }# |8 a l2 U8 [% l结束符合占用2个字节,只用来判断语句的有效数据范围,其它记录段与本系统的设计无关都不保留和进行压缩。+ V- D4 U6 o) c) v3 F* M# |
通过以上压缩预处理后,保留了四个数据记录,共占用24个字节,如图1所示。
9 S) |# ~, g2 Z: S( S$ _9 l" k2 B6 J3 x - t B& `5 P% a, K2 p h
3 改进型半字节压缩算法. H/ T0 ?% a' ]
文本数据的压缩的都是无损压缩技术,即还原后的文件应该与源文件完全相同。文本文件压缩的方法有很多种,如HUFFMAN编码、算术编码和字节压缩方法等。它们均是无损压缩方法,都适用于文本数据的压缩。半字节压缩方法是针对文本数据的特点所设计的,主要是去除文本中的字节中的冗余位,从而达到减少数据文件所占用的存储空间的目的。在数据压缩技术中,除压缩重复字符外,还可以根据数据本身的特点进行压缩。在计算机中,任何数据都是以某种代码的方式存储的。在些文件中,或许有一些代码具有某些相似之处,我们可以根据代码的特点进行特定的操作,压缩掉这些数据的相似部分,或者说压缩掉这些数据的特征部分,半字节压缩就是这样一种方法。半字节方法主要用于纯数字的文本文件的压缩,因为数字0~9的ASCII码的高四位都一样,是冗余的,因此每一个数字完全可以用低四位描述,即每个字节的八位编码可压缩为四位编码,压缩比理论上可趋近50%。
* C! L# R3 ~4 `从图1中可以看出,经过预处理后的数据中,包含的文本字节有:“0~9”十个数字符号,“A”、“V”两个英文大写字母和一个小数点“.”符号,共13个字符。“A”、“V”、“.”的ASCII码的高四位显然与数字字节的不一样,半字节压缩方法不能简单套用。然而,我们知道四位二进制编码可区分16种状态,用来表示13种不同的字符是足够的。8 f! K7 J) I. m& @4 v: V8 S. B
压缩数据编码表如表1的慰,为了充分利用编码表中的状态,在原来13个字节的基础上又新增添了两个字符“B”和“W”,其四位编码分别为1101和1110。这两个字符是在压缩预处理过程中,用来记录那些因语句校验和出错而舍弃的语句。因为每条语句的时间信息全部在预处理阶段被舍弃,在解压缩时要恢复时间值。该值在正常情况下是根据时间的基数再加上语句的计数值(由于每秒接受到一条语句,所以语句计数值就是以秒为单位的时间增量)确定的。当发生语句校验和出错时,若处于定位有效状态,则在定位状态记录上不填写“A”字符,而填写“B”字符;若处在定位无效状态,则不填写“V”字符,而填写“W”字节。在以后解压缩时,若检测到“A”、“V”字节,时间的还原按正常的算法进行;若检测到“B”、“W”字符时,进行的还原除了按正常的算法进行以外还要加上秒钟,这样才能确保时间能够正确的恢复,这是因为“B”、"W"字节表示上一条语句发生错误已经被丢弃,语句的压缩是非连续的,有继句现象发生。5 y t( q# d) V4 `3 e! e
# i2 S( i1 p& H) y" k
表1 压缩数据编码表
3 ~/ U+ X* i2 m: W }预处理后所含的字符 | ASCII码 | 四位二制编码 | 备 注 | 09 m- R2 S# V; L5 d, N" u
1$ F7 R# \( w' s3 Y& H" o
2
- Y1 L# m3 K; Y# F, G6 t# k3
: k o6 D# E. y5 R0 j9 b4 F- f- `6 k40 s: j4 @: Q( c8 ]) q4 g: [
5
3 W, q i l' B6" o# a! q' D0 t, G5 W3 w
7
" g' h. h$ O$ ?0 D# |$ { _/ \% I8" \2 G7 Y" b% ]+ L& a
9
5 F- y! o8 f" U! t( Q% }.
2 E/ c8 P( ?0 E1 N/ \% `A, Q2 @4 X7 w4 ?8 D2 f& _
B, D2 o$ b9 c' j2 f% `
V S- J |* T; E( c! Z
W | 00110000
" v" [! M, P* g _( }00110001
# [/ e5 I e X( U! m, |00110010/ S( m1 `8 r: }" _
00110011
# f' x+ C& l3 N( U00110100; h; F' [. [& H) R( t5 g
00110101" u8 i& h2 ?& X3 I+ G" z- ^5 X
00110110+ K( H, H- j( a: L' J1 T
00110111
) ?& O, l" ]" A$ d; N8 [. R# B00111000
9 g) u* m* f. H) ?; D4 m) Y00111001
! ?1 F V: N3 _/ M! x- g/ J: G00101110) Q$ g+ q# P# }, B8 K, m/ \
010000017 b2 j- A+ {) I I3 p2 u& O
01000010
6 p) j* `. {4 t9 w01010110
: y' {; X% V. q+ M4 _8 E+ x01010111 | 0000
9 K$ t4 k" d( o6 J9 t7 F1 l00019 ^0 W/ T7 b& ~) u) ?
0010
$ k, q; W# {$ U0011
! A7 }: Z3 @1 r9 K' B) o* z& D0100
3 p1 H3 n" T% \& m0101
; @2 K) ~/ q8 G/ v2 Y, v0110- V t3 I+ i' O) H, h* q# {+ ~
0111* C( ?, d+ [; E9 N' G
1000
, n: x9 ]7 \' q0 X$ j. n( r7 O) i- A1001. h4 h( R/ j9 k! w7 ?3 s% \; d
1010
8 s$ T5 K. K$ F1011+ C# I& O2 U ?; B1 v* ?: ~; T. h0 X
1101
1 ~( @1 E/ q' N2 |, \1100
. R: {9 x6 f# g/ N. P; r: J1110 |
, ~4 e+ g$ f( ` j% y- W# T+ [4 G' w' I( \$ [' S! Y8 h
1 ]( D& r+ _8 W3 Q5 H
" v" [; J8 C# { P8 _5 g; X! {% v* r& K) w* }8 j' N
3 Y; h4 n: w! _( Z& l/ s% w
8 @) a: ~, W/ z8 V3 W7 e$ L% k* Y. \8 I( X% r( {- y
) v2 a) K; D# q3 b
# ?" Q! p0 r. W- n2 Z9 t2 S
2 }* i) J* x S0 e* T) F定位有效3 G8 ~5 s a7 o% U
定位有效,秒值1
# y4 z$ Q) E% t* T8 Y6 ]定位无效
% A1 d* b+ A4 [% y d* b) u定位无效,秒增1 | 通过此编码表进行转换后,原来经过压缩预处理后的固定24个字节第的文本数据就可以减小一半(压缩后为固定的12个字节长),压缩比为50%,若从未经过预处理的文本数据算起,则压缩比可达到80%。
& O9 @ S) V5 f/ m5 [) y: r由图2可知,实现半字节压缩算法需要解决两上问题:首先是压缩对象的计数;其次是如何把两个数字的低位合并到一个字节中。后一个问题只要规定好压缩后的字节中奇数号字符的四位编码与偶数号字符的四位编码的存放次序即可,程序的实现非常简单,在此我们规定编号是奇数的字符放在高四位,编号为偶数的字符的编码放在低四位。假设压缩前的数据流中的前四个字节分别为“1、2、3、4”,则压缩后的数据格式如图3所示。! b* Z; J% b" ^+ f
半字节压缩中需要解决的首要问题是压缩对象的计数问题,解决此问题的方法有两种:一种是半字节计数器(Half-Byte Counter),另一种是全字节计数器(Full-Byte Counter)。不管那一种方法,它们都要占用字节,再加上压缩标识也要占用字节,所以要影响数据的压缩比。改进后的半字节压缩算法完全解决了此问题,因为GPS定位数据经过压缩预处理后的数据长度是固定的24个字节长,不是动态可变的,所以不需要解决压缩对象的计数问题。一般来说,任何一种压缩算法都需要用压缩指示字符作压缩数据的标识,压缩标识符越短越好,因为过长会影响缩效果。然而,由于GPS定位数据中的所有字符都进行了编码处理,不存在原样字符(不进行压缩的字符,在解压缩时原样输出),因此压缩标识完全可以省略,可进一步提高数据的压缩比。压缩预处理程序框图和改进后的半字节压缩算法框图如图4所示。
, V: Q) o: V* q3 ^2 J( e# h$ D' w![]()
# `& ]4 O) n0 c( S8 R6 F9 ^( L7 S* y" i 压缩文件包括解压缩所需的重要信息,由释放参数信息和依次压缩了的定长数据块组成。释放参照信息包含有解压缩所要使用的时间基数信息,它通过语句计数器以及错误代码号可以将时间还原。除此之外,释放参照信息还包括各个定长数据块在解压缩时所需的共同信息,如E/W、N/S、日期,压缩文件的格式如图5所示。
' `+ X4 _- S. }嵌入式系统的压缩是不需要人为干涉、而自动实时完成的,具体的实现方法是通过驻留内存(单任务操作系统中,如DSP)或作为一个后台任务(在多任务操作系统中,如Windows中)对数据完成实时压缩或解压缩。" u8 K' c2 g" }# F' r- z
; J! }* g' ~: U* p
表2 改进型半字节压缩算法的测试结果
* O/ h, J2 U1 n6 E7 _# r2 u 处理" Q k: ^- Y O: i( G6 N+ {
文件大小(B) | 预处理后 | 改进型半字节压缩 | 压缩比 | 1035k=69×15000
9 I. \& i1 c- |6 l5 s/ O103.5k=69×15009 U5 K/ m0 k9 W7 I, o5 h
10.36k=69×150
# x7 m) d; J0 n9 W | 360KB+23B9 b. N0 v" m" G8 Y8 t6 [
36KB+23B% P' Q& Y+ [! D! u
3.6KB+23B | 180KB+23B% \8 w' j# J' C9 s4 D$ H2 ^; ?
18KB+23B3 y# M# Q9 N* l( ^" `: Q
1.8KB+23B | 0.8260
! z G' J- ?' @0.8259
& }. o; }1 d/ z6 {& a4 _7 U3 w0.8239 | GPS定位数据的压缩算法经过实际的验证,压缩比随着压缩数据的减小而略有减少,这是因为参照信息随着压缩数据的减小其所占的比例在逐渐增加的原故。但示,该压缩方法在车载系统中使用不仅能节省存储空间,而且能减少信道占有时间及提高数据的安全性。由于压缩程序是针对GPS数据格式编写的的,因此其压缩比大但通用性不强。尽管如此,该程序略做修改可移植到其它系统中,因为各个GPS厂家所执行的规范标准都是GPS厂家所执行的规范标准都是NMEA-0183,其数据的输出格式略有差别。5 z: T. ]! C$ y
n/ n+ s: l* M0 S: g) F |
|