一种嵌入式系统的数据压缩方法、系统及存储介质与流程

文档序号:21541340发布日期:2020-07-17 17:43阅读:263来源:国知局
一种嵌入式系统的数据压缩方法、系统及存储介质与流程
本发明涉及数据压缩
技术领域
,特别是涉及一种嵌入式系统的数据压缩方法、系统及存储介质。
背景技术
:数据压缩分为有损压缩和无损压缩。有损压缩算法通过移除在保真情形下需要大量的数据去存储的小细节,从而使文件变小。在有损压缩里,因某些必要数据的移除,不可能完全恢复原文件。有损压缩主要用来存储图像和音频文件,可以达到一个比较高的压缩率。无损压缩是指使用压缩后的数据进行重构(或者叫做还原,解压缩),重构后的数据与原来的数据完全相同,不丢失任何数据。无损数据压缩被广泛的应用于计算机领域。无损压缩算法的基本原理是:任意一个非随机文件都含有重复数据,可以用这些重复数据的出现概率进行统计建模压缩。基于它们出现的频率,配置最短的代码给最常用的数据。这些技术包括熵编码(entropyencoding),游程编码(run-lengthencoding),以及字典压缩。发明于1838年的莫尔斯电码,是较早的数据压缩的实例,主要原理是把英语中常见的字母,如“e”和“t”用较短的莫尔斯电码来表示。后来,随着电脑主机在1949年开始崭露头角,克劳德·香农和罗伯特·范诺发明了香农-范诺编码,算法的主要原理是在一个数据块内为出现概率较低的符号分配较短的编码长度,从而用更短的方式来表示数据。1951年,罗伯特·范诺的学生哈夫曼发明了哈夫曼编码,这是最优的二进制编码方法。早期香农-范诺编码和哈夫曼编码使用硬件或者硬编码来实现,直到20世纪70年代,随着互联网和在线软件存储的发展,哈夫曼编码才实现基于输入数据动态生成。后来,在1977年,abrahamlempel和jacobziv发表了开创性的lz77算法,这是第一种利用字典对数据进行压缩的算法。更具体地,lz77使用一个常常被称为动态词典的滑动窗口模式。在1978年,他们发布了类似的也使用词典的第二个版本lz78算法,不同于lz77算法,lz78算法通过解析输入数据生成静态词典,而不是生成动态词典。随着lz77和lz78算法的迅速普及,两者都产生了许多变种,包括deflate、lzma、lzo、lzw、lzc算法。由于lz78专利问题,出现了基于deflate算法的gzip压缩格式和基于bwt变换的bzip2压缩格式。以上的几种数据压缩的方法,都对算法运行的硬件条件要求较高,并且适用较大的数据,在基于嵌入式系统的传感器小规模数据压缩上应用效果不佳。例如:在远洋渔业生产中应用较多的安装于浮标上的简易声呐鱼探,是用一个字节的整数来表示回声强度。数据通过卫星通讯方式传回使用者,由于卫星通讯费用昂贵,对这类数据在浮标上进行压缩后再传送可以节省通讯费用。由于价格和功耗的限制,浮标上一般采用单片机或嵌入式系统作为主控单元,计算能力较弱,一般的数据压缩算法效果不佳。技术实现要素:本发明所要解决的技术问题是提供一种嵌入式系统的数据压缩方法、系统及存储介质,能够有效压缩数据。本发明解决其技术问题所采用的技术方案是:提供一种嵌入式系统的数据压缩方法、系统及存储介质,方法包括:步骤(1):采集原始数据,将所述原始数据分为大于预设值的数据,和小于或等于所述预设值的数据,并进行标记,每个字节(byte)原始数据对应一个标记字节的位(bit),得到标记数组;设置标记变量,用于标记暂存变量中是否保存有效数据,当所述暂存变量中存储有效数据时,则所述标记变量为“true”,当所述暂存变量中没有存储有效数据时,则所述标记变量为“false”;步骤(2):依次读取数据,当读取的第一个数据大于所述预设值时,则将所述第一个数据直接存储到内存中,此时所述标记变量为“false”;当所述第一个数据小于或等于所述预设值时,则将所述第一个数据左移4位后暂存在暂存变量中,此时所述标记变量为“true”;步骤(3):读取下一个数据,当下一个数据大于所述预设值且所述标记变量为“true”时,则将所述下一个数据的高四位数据和低四位数据通过“位与”运算截取出来;将所述高四位数据右移4位后和所述暂存变量中的数据进行“位或”运算得到一个新的字节数据,并存储到内存中,将所述低四位数据左移4位后暂存在所述暂存变量中,此时所述标记变量为“true”;当所述下一个数据大于所述预设值且所述标记变量为“false”时,则将所述下一个数据直接存储到内存中,此时所述标记变量为“false”;当所述下一个数据小于或等于所述预设值且所述标记变量为“true”时,则将所述下一个数据和所述暂存变量中的数据进行“位或”运算得到一个新的字节数据,并存储到内存中,此时所述标记变量为“false”;当所述下一个数据小于或等于所述预设值且所述标记变量为“false”时,则将所述下一个数据左移4位后暂存在所述暂存变量中,此时所述标记变量为“true”;步骤(4):重复所述步骤(3),直到所述原始数据压缩存储完毕,上述步骤存储在内存中的数据为压缩后的数据数组;步骤(5):对所述标记数组按照8位(bit)一组进行分隔,得到待传输的标记数组,若所述待传输的标记数组不足8位,则填充0,补充至8位;步骤(6):将所述待传输的标记数组和压缩后的数据数组组成完整的压缩数组。所述步骤(1)中进行标记时,将大于所述预设值的原始数据用1标记,将小于或等于预设值的原始数据用0标记。所述步骤(2)中,所述第一个小于或等于所述预设值的数据,在所述暂存变量中只保存低4位数据。所述步骤(3)中将所述下一个数据的高四位数据和低四位数据通过“位与”运算截取出来具体为:设置二进制数据high=11110000,所述high用于选取大于所述预设值的二进制形式数据的高4位数据,设置二进制数据low=00001111,所述low用于选取大于所述预设值的二进制形式数据的低4位数据。每个所述原始数据都是8位长度的二进制形式的整形数据。所述预设值为15。所述步骤(6)具体为:按所述待传输的标记数组在前,所述压缩后的数据数组在后的方式组成完整的压缩数组。本发明说明书提供一种嵌入式系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序;所述处理器执行所述计算机程序时实现上述数据压缩方法的步骤。本发明说明书实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述数据压缩方法的步骤。有益效果由于采用了上述的技术方案,本发明与现有技术相比,具有以下的优点和积极效果:本发明在数据压缩过程中主要进行了移位、位与、位或等运算,计算量小且数据压缩效果好,有效节省了存储空间,对系统硬件要求低,适用于在计算能力较弱的系统上做数据压缩处理。附图说明图1是本发明实施方式中数据压缩对比图。具体实施方式下面结合具体实施例,进一步阐述本发明。应理解,这些实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。本发明的实施方式涉及一种嵌入式系统的数据压缩方法,采集原始数据,将所述原始数据分为大于预设值的数据,和小于或等于所述预设值的数据,并得到标记数组;设置标记变量,用于标记暂存变量中是否保存有效数据;依次读取数据,当读取的数据大于预设值时,则将数据直接存储到内存中;当读取的数据小于或等于预设值时,则将数据左移4位后暂存在暂存变量中;读取下一个数据,当下一个数据大于预设值且标记变量为“true”时,则将下一个数据的高四位数据和低四位数据通过“位与”运算截取出来;将高四位数据右移4位后和暂存变量中的数据进行“位或”运算得到一个新的字节数据,并存储到内存中,将低四位数据左移4位后暂存在暂存变量中;当下一个数据大于预设值且标记变量为“false”时,则将下一个数据直接存储到内存中;当下一个数据小于或等于预设值且标记变量为“true”时,则将下一个数据和暂存变量中的数据进行“位或”运算得到一个新的字节数据,并存储到内存中;当下一个数据小于或等于预设值且标记变量为“false”时,则将下一个数据左移4位后暂存在暂存变量中;重复上述步骤,直到所述原始数据压缩存储完毕,得到压缩后的数据数组;将标记数组与压缩后的数据数组组合成压缩数组。本发明的实施方式提供一种供计算能力较弱的嵌入式系统使用的数据压缩算法,其数据压缩算法原理如下:一、压缩后的数据由两部分组成:(1)压缩后的数据数组,将该数组中的每一个字节划分为高半字节(高4位)和低半字节(低4位),数据数组以半字节长度为单位进行操作;(2)用于标记压缩后数据原始长度的标记数组,标记数据用于标记原始数据的大小,标记数据以位为(bit)单位进行操作,每个字节(byte)由独立的8个位组成,每个位顺序对应一个原始数据,标记数组的第一个字节的最高位,对应原始数据的第一个数据,标记数组的次高位,对应原始数据的第二个数据,依次类推。如果该数据大于预设值,则将对应位置“1”,小于等于预设值,则置“0”,其位置从第一字节的最高位开始与每个原始数据一一对应。二、对每个原始数据分为两种类型,大于预设值的数据和小于等于预设值的数据。若一个数据大于预设值,则在压缩后的数据数组中占据两个半字节的长度,并将标记数组的对应位置“1”;若小于或等于预设值,则舍弃数据的高4位,将数据的低4位保存在压缩后的数据数组中,此时数据占据半个字节,并将标记数组的对应位置“0”。如图1所示,为本实施方式的数据压缩对比图,随机抽取5组对比数据,没有压缩之前的数据都要占据160byte空间,而通过本实施方式压缩方法计算之后,可以看出第一组和第二组数据经过压缩之后,数据量均在130byte左右,而另外三组数据经过本实施方式压缩方法计算之后,数据量均小于120byte,节约了存储空间。本实施方式中的内容涉及5个名词概念及3个运算符,为避免混淆,先分别解释如下:原始数据:未经压缩的原始数据。压缩后的数据数组:用于存储压缩后的数据的数组。标记数组:用于标识数据的特征,标记数组的每一位(bit)对应原始数据的一个数据(byte),原始数据值大于预设值,则该位为“1”;小于或等于预设值,则该位为“0”。暂存变量:在数据压缩过程中用于暂时存储产生的中间数据。标志变量:一个布尔变量,用于指示暂存变量中的是否保存有效数据。“&”表示“位与”运算符号:用于数据的位与操作。“|”表示“位或”运算符号:用于数据的位或操作。bitshift()表示移位函数:包含两个参数,第一个参数为待处理数据,第二个参数为移位个数,取值为正数时左移,取值为负数时右移,且移入的数据位全部补零。本实施方式的具体操作方法包括以下步骤:(1)建立一个长度为一个字节的数据变量,用于暂存数据,称为暂存变量;建立一个对暂存数据内容进行标记的标志变量,如果暂存变量中保存有效数据,则标志变量为“true”,该暂存变量中没有保存有效数据,则标志变量为“false”。(2)程序读取第一个原始数据,判断该数据的大小;本实施方式中选用的预设值为15,如果该数据大于15,将标记数组对应的位置“1”,并将这个数据存储在压缩后的数据数组中,此时暂存变量中没有有效数据,标志变量为“false”;如果数据小于或等于15,将标记数组对应的位置“0”,然后将该数据左移4位,然后保存在暂存变量中,并设置的标志变量为“true”。(3)读入下一个原始数据,将该数据与“15”作比较,根据比较结果,分别执行步骤(4)或(5)。(4)如果大于15,将标记数组对应的位置“1”;查询标志变量状态,如果为“false”,则将这个数据顺序写入压缩后的数据数组中,并保持标志变量状态为“false”;如果标志位状态为“true”,则将这次读入的原始数据通过分别与“0xf0”和“0x0f”做“位与”运算,分别取出其高4位和低4位,并将高4位数据右移4位,然后与暂存变量做“位或”运算,将原暂存变量中的4位数据和这次右移后的高4位数据合成一个完整字节,将这个完整字节存入压缩后的数据数组;将这次获得的低4位数据左移4位,写入暂存变量,并设置标志变量为“true”。(5)如果小于等于15,将标记数组对应的位置“0”;查询标志变量状态,如果为“false”,将该数据左移4位,然后写入暂存变量中,并标志变量设置为“true”;如果标志变量状态为“true”,则将这个数据与暂存变量做“位或”运算,将原暂存变量中的高4位数据和这次获得的低4位数据合成一个完整字节,将这个完整字节存入压缩后的数据数组,并设置标志变量为“false”。(6)返回步骤(3),重复以上步骤(3)到(5)直到原始数据处理完毕;当最后一个原始数据处理完后,如果标志变量状态为“true”,说明暂存变量中的高4位还是有效数据,将暂存变量与“0xf0”做“位与”运算,确保其低4位为零后存入压缩后的数据数组。(7)整理标记数组,如果所用的有效标志位不是8的整数倍,在其后面补“0”,使其为完整的字节。(8)按标记数组数据在前,压缩后的数据数组在后的方式,重新组成一个新的数组,这个数组就是本压缩算法最终得到的压缩数组。(9)至此,完成了整个的数据压缩。本实施方式的数据解压缩方法如下:根据已知的数据长度,将压缩数组重新分解成标记数组和压缩后的数据数组,并确定标记数组的有效位数,该位数与原始数据长度的字节数一致。按顺序读取标记数组和压缩后的数据数组,对于标记数据按位读取,如果为“1”则在压缩后的数据数组取连续的两个半字节,作为一个原始数据,如果标记数组位为“0”则在压缩后的数据数组取半个字节作为数据的低4位,并将高4位补“0”恢复为一个字节的原始数据。优选地,本实施方式可以应用在简易声呐数据的压缩方面,具体包括以下步骤:(1)简易声呐采集的回声数据为8位长度的无符号整型数,保存在数组a(i)中,其数值在0到255之间,水体本身回声数值较小,水中障碍物回声数值较大。首先对数据进行预处理,划分出大于15和小于15的两种数据并用“1”和“0”标记它们所在数组中的相对位置,存放在标记数组c(j)中,数组c(j)数据的每一位(bit)对应一个原始数据。暂存变量d的初值为0x00,标志变量e的初值为“false”,压缩后的数据存储在数组b(k)中。(2)读取第一个数据。如果a(1)>00001111,则数组元素c(1)的最高位置“1”,b(1)=a(1),e=false;如果a(1)≤00001111,则数组元素c(1)的最高位置“0”,d=bitshift(a(1)&0x0f,4),e=true。(3)读入下一个数据,将该数据与“00001111”作比较,根据比较结果,分别执行步骤(4)或(5)。(4)若a(2)>00001111并且e=false,则数组c(j)的元素中的相应位置“1”,b(2)=a(2),e=false;若a(2)>00001111并且e=true,则数组c(j)的元素中的相应位置“1”,d=bitshift(a(2)&0xf0,-4)|d,b(1)=d,d=bitshift(a(2)&0x0f,4),e=true。(5)若a(2)≤00001111并且e=false,则数组c(j)的元素中的相应位置“0”,d=bitshift(a(2)&0x0f,4),e=true;若a(2)≤00001111并且e=ture,则数组c(j)的元素中的相应位置“0”,d=(a(2)&0x0f)|d,b(1)=d,e=false。(6)返回步骤(3),重复以上步骤(3)到(5)直到所有的原始数据处理完毕;如果e=true,则b(k+1)=d。(7)整理标记数组c(j)。如果所用的有效标志位数不能被8整除,则在其后面补“0”,使其为完整的字节。(8)按照c(j)在前,b(k)在后的方式重新组成一个新的数组,这个数组就是本压缩方法最终得到的压缩数组。下面通过一个具体的实施例来进一步说明本发明。(1)首先选取了一组总数为160的数据,数据数组a(i)其中1≤i≤160,该数组如表1所示。表1原始数据数组a(i)1681691571251058555546481897462656374665150353943473923161430573633252023282618201717191511812131078981010119886645647655443542365456543665535324555553256645100107107106102906153232218171113131117131214171611101113101098978975679676478796555767887(2)观察表1发现当1≤i≤26时,a(i)均大于15,故将a(i)前26个数据直接存入数组b(k),1≤k≤26,e=false,数组c(j)的元素中的相应位置“1”。(3)k=27,当i=27时,a(27)≤00001111,e=false,故数组c(j)的元素中的相应位置“0”,d=bitshift(a(27)&0x0f,4),e=true。i=28,k=27。(4)k=27,当i=28时,a(28)>00001111,e=true,故数组c(j)的元素中的相应位置“1”,b(27)=bitshift(a(28)&0xf0,-4)|d,d=bitshift(a(28)&0x0f,4),e=true。i=29,k=28。(5)k=28,当i=29时,a(29)>00001111,e=true,故数组c(j)的元素中的相应位置“1”,b(28)=bitshift(a(29)&0xf0,-4)|d,d=bitshift(a(29)&0x0f,4),e=true。i=30,k=29。(6)k=29,当30≤i≤41时,a(i)>00001111,e=true,故数组c(j)的元素中的相应位置“1”,b(29)=bitshift(a(i)&0xf0,-4)|d,d=bitshift(a(i)&0x0f,4),e=true。i=i+1,k=k+1。(7)继续执行步骤(6)的操作,直到i不满足条件。(8)k=41,当i=42时,a(42)≤00001111,e=true,故数组c(j)的元素中的相应位置“0”,b(41)=(a(42)&0x0f)|d,e=false。i=43,k=42。(9)k=42,当i=43时,a(43)≤00001111,e=false,则数组c(j)的元素中的相应位置“0”,d=bitshift(a(43)&0x0f,4),e=true,i=44,k=42。(10)k=42,当i=44时,a(44)≤00001111,e=true,则数组c(j)的元素中的相应位置“0”,b(42)=(a(44)&0x0f)|d,e=false。i=45,k=43。(11)k=43,当45≤i≤102时重复步骤(9)和(10)的操作,并将i和k的数值做相应的增加。(12)k=72,当i=103时,a(103)≤00001111,e=false,则数组c(j)的元素中的相应位置“0”,d=bitshift(a(103)&0x0f,4),e=true。i=104,k=72。(13)k=72,当i=104时,a(104)>00001111,e=true,故数组c(j)的元素中的相应位置“1”,b(72)=bitshift(a(104)&0xf0,-4)|d,d=bitshift(a(104)&0x0f,4),e=true。i=105,k=73。(14)k=73,当105≤i≤115时,重复步骤(12)和(13)的操作,并将i和k的数值做相应的增加。(15)k=84,当i=116时,a(116)≤00001111,e=true,故数组c(j)的元素中的相应位置“0”,b(84)=(a(116)&0x0f)|d,e=false。i=117,k=85。(16)k=85,当i=117时,a(117)≤00001111,e=false,故数组c(j)的元素中的相应位置“0”,d=bitshift(a(117)&0x0f,4),e=true。i=118,k=85。(17)k=85,当i=118时,a(118)≤00001111,e=true,故数组c(j)的元素中的相应位置“0”,b(85)=(a(118)&0x0f)|d,e=false。i=119,k=86。(18)k=86,当i=119时,a(119)≤00001111,e=false,故数组c(j)的元素中的相应位置“0”,d=bitshift(a(119)&0x0f,4),e=true。i=120,k=86。(19)k=86,当i=120时,a(120)>00001111,e=true,故数组c(j)的元素中的相应位置“1”,b(86)=bitshift(a(120)&0xf0,-4)|d,d=bitshift(a(120)&0x0f,4),e=true。i=121,k=87。(20)k=87,当i=121时,a(121)≤00001111,e=true,故数组c(j)的元素中的相应位置“0”,b(87)=(a(121)&0x0f)|d,e=false。i=122,k=88。(21)k=88,当i=122时,a(122)≤00001111,e=false,故数组c(j)的元素中的相应位置“0”,d=bitshift(a(122)&0x0f,4),e=true。i=123,k=88。(22)k=88,当i=123时,a(123)≤00001111,e=true,故数组c(j)的元素中的相应位置“0”,b(88)=(a(123)&0x0f)|d,e=false。i=124,k=89。(23)k=89,当i=124时,a(124)>00001111,e=false,故数组c(j)的元素中的相应位置“1”,b(89)=a(124),e=false。i=125,k=90。(24)k=90,当i=125时,a(125)>00001111,e=false,故数组c(j)的元素中的相应位置“1”,b(90)=a(125),e=false。i=126,k=91。(25)k=91,当126≤i≤159时,重复步骤(9)和(10)的操作,并将i和k的数值做相应的增加。(26)k=108,当i=160时,a(160)≤00001111,e=false,故数组c(j)的元素中的相应位置“0”,b(108)=a(160)。最后得到的压缩后的数据数组如表2所示,标记数组c(j)如表3所示。表2压缩后的数据数组b(k)168169157125105855554648189746265637466515035394347392316240240176961614480112208176488016166318420516713713817115213410086711018467843510169101671028553506985855086100112962402402241121762408011211248272211762920617161861891701521511371171031501187113515085871031367表3标记数组c(j)1111111111111111111111111101111111111111100000000000000000000000000000000000000000000000000000000000000111111111111000010001100000000000000000000000000000000000压缩前数组a(i)需要160byte的空间,压缩后的数组b(k)需要108byte的空间,加上传输数组c(j)需要的20byte空间,共128byte。由此可见,本发明在数据压缩过程中主要进行了移位、位与、位或等运算,计算量小且数据压缩效果好,有效节省了存储空间,对系统硬件要求低,适用于低计算能力系统使用的做数据压缩处理。本发明的第二实施方式涉及一种嵌入式系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实施例所述压缩数据方法的步骤。另外,在本发明中的各功能可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明实施方式所述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1