一种哈夫曼解码方法及其装置与流程

文档序号:12489760阅读:232来源:国知局
一种哈夫曼解码方法及其装置与流程
本发明涉及编解码
技术领域
,特别是涉及一种哈夫曼解码方法及其装置。
背景技术
:当前,随着互联网、物联网的飞速发展,数据文件规模越来越大。为节省存储成本,各数据中心均对数据进行压缩出来。大量的数据压缩占用较高的CPU资源,不仅降低了服务器性能,而且提升了服务器功耗,增加了能源成本。目前,数据压缩中常采用哈夫曼解码方法。哈夫曼(Huffman)编码是一种一致性编码法(又称“熵编码法”),用于数据的无损耗压缩。它根据每一个字符出现的概率建立起来编码表,出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,使得编码后的字符串的平均期望长度降低,从而达到无损压缩数据的目的。由于哈夫曼编码是一种变长编码,各字符编码长度不定,故哈夫曼解码时只能串行执行,不能够预先将待解码比特流预先分为特定长度的二进制码串再进行处理,且在解码过程中,是先读取一位二进制码,与哈夫曼码表比较后,再读取下一位二进制码,直至与哈夫曼码表匹配成功,效率低,解码速度慢。因此,如何提供一种效率高的哈夫曼解码方法及其装置是本领域技术人员目前需要解决的问题。技术实现要素:本发明的目的是提供一种哈夫曼解码方法及其装置,以组为单位读取多位二进制码进行解码,解码效率高;且读取过程与解码过程互不干涉,能够实现流水作业,哈夫曼解码的速度快。为解决上述技术问题,本发明提供了一种哈夫曼解码方法,包括:步骤s1:从待解码比特流上依次读取若干组二进制码组;每组所述二进制码组内包含的二进制码个数大于1;步骤s2:分别依次对每组二进制码组进行哈夫曼解码,得到所述待解码比特流上的二进制码对应的解码结果,所述解码结果包括解码字符和解码长度,所述解码长度为所述解码字符在预设的哈夫曼码表内对应的二进制码的位数;步骤s3:读取所述解码位置对应的解码字符,将所述解码位置按照自身对应的解码长度依次后移相应的位数,并将后移后对应的位置作为解码位置,重复步骤s3;直至解码完成;其中,初始解码位置为所述待解码比特流的起始二进制码。优选地,步骤s1的过程具体为:从所述待解码比特流上的读取起始位置开始,依次读取L位二进制码,得到二进制码组;L≥m+n-1;m为解码器的个数,n为所述哈夫曼码表的最长编码长度;令所述读取起始位置后移m位,作为新的读取起始位置,重复读取操作;相应的,步骤s2的过程具体为:m个所述解码器分别依次对每组所述二进制码组进行哈夫曼解码;其中,第i个所述解码器自所述二进制码组的第i位开始进行哈夫曼解码,得到所述二进制码组的第i位处的解码结果;1≤i≤m且i为正整数。优选地,步骤s1的过程具体为:分别将所述待解码比特流上的每一位二进制码作为读取起始位置依次读取n位二进制码,得到若干组二进制码组。优选地,步骤s2的过程具体为:分别从每位所述二进制码组的首位二进制码开始进行哈夫曼解码,得到所述二进制码组的首位二进制码对应的解码结果。优选地,所述哈夫曼码表为范式哈夫曼码表,步骤s2的过程具体为:对不足n位的二进制码组右侧补零,扩充为n位二进制码组;将所述哈夫曼码表内每个字符对应的编码右侧补零,扩充为n位编码;计算每个扩充后编码的数值,并分别记录原始编码长度相同的若干个编码的编码数值中的最小值,得到k个最小值作为阈值,k≤n;计算每组所述二进制码组的数值D;将D分别按照从小到大的顺序与k个所述阈值进行比较,若D小于当前比较的阈值,则记录比较结果为0,反之,记录比较结果为1,并将比较结果按照比较顺序的先后从左至右进行排序,得到k位掩码;若k<n,则按照预设规则调整为n位掩码;令所述二进制码组与所述n位掩码按位进行与操作,得到n位结果码,计算所述n位结果码的数值I;依据I得到所述二进制码组的首位二进制码对应的解码结果。优选地,所述解码结果还包括有效标识符,当得到解码字符后,所述解码结果对应的有效标识符为真,反之,为假。为解决上述技术问题,本发明还提供了一种哈夫曼解码装置,包括:读取模块,用于从待解码比特流上依次读取若干组二进制码组;每组所述二进制码组内包含的二进制码个数大于1;解码模块,用于分别依次对每组二进制码组进行哈夫曼解码,得到所述待解码比特流上的二进制码对应的解码结果,所述解码结果包括解码字符和解码长度,所述解码长度为所述解码字符在预设的哈夫曼码表内对应的二进制码的位数;合并模块,用于读取所述解码位置对应的解码字符后,将所述解码位置按照自身对应的解码长度依次后移相应的位数,并将后移后对应的位置作为解码位置,重复自身操作;直至解码完成;其中,初始解码位置为所述待解码比特流的起始二进制码。优选地,所述解码模块包括m个解码器;所述读取模块具体用于:从所述待解码比特流上的读取起始位置开始,依次读取L位二进制码,得到二进制码组;L≥m+n-1;m为解码器的个数,n为所述哈夫曼码表的最长编码长度;令所述读取起始位置后移m位,作为新的读取起始位置,重复读取操作;m个所述解码器,用于分别依次对每组所述二进制码组进行哈夫曼解码;其中,第i个所述解码器自所述二进制码组的第i位开始进行哈夫曼解码,得到所述二进制码组的第i位处的解码结果;1≤i≤m且i为正整数;当m个所述解码器完成对一组所述二进制码组的解码后,将得到的一组二进制码发送至所述合并模块进行处理。优选地,所述读取模块具体用于:分别将所述待解码比特流上的每一位二进制码作为读取起始位置依次读取m位二进制码,得到若干组二进制码组。本发明提供了一种哈夫曼解码方法及其装置,每次从待解码比特流上读取一组二进制码组,然后分别对读取到的各组二进制码组进行哈夫曼解码,得到待解码比特流上的二进制码对应的解码结果,进而得到解码字符。可见,本发明不是每次读取一位二进制码,而是并行读取多位二进制码作为一组进行解码,大大提高了哈夫曼解码的速度,解码效率高。并且,本发明的读取过程时从待解码比特流上依次读取二进制码组,即每读取完一组后即继续读取下一组;而解码过程中是分别依次对各组二进制码组进行解码,然后根据解码结果进行合并操作,得到最终解码结果。可见,本发明实现了流水作业,读取过程与解码过程互不干涉,可以同时并列进行,相比目前仅能解码完成后再进行下一次读取的串行操作,本发明的解码速度大大提高。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对现有技术和实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明提供的一种哈夫曼解码方法的过程的流程图;图2为本发明提供的另一种哈夫曼解码方法的过程的流程图;图3为本发明提供的另一种哈夫曼解码方法的过程的流程图;图4为本发明提供的一种哈夫曼解码装置的结构示意图。具体实施方式本发明的核心是提供一种哈夫曼解码方法及其装置,以组为单位读取多位二进制码进行解码,解码效率高;且读取过程与解码过程互不干涉,能够实现流水作业,哈夫曼解码的速度快。为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。实施例一本发明提供了一种哈夫曼解码方法,参见图1所示,图1为本发明提供的一种哈夫曼解码方法的过程的流程图;该方法包括:步骤s1:从待解码比特流上依次读取若干组二进制码组;每组二进制码组内包含的二进制码个数大于1;步骤s2:分别依次对每组二进制码组进行哈夫曼解码,得到待解码比特流上的二进制码对应的解码结果,解码结果包括解码字符和解码长度,解码长度为解码字符在预设的哈夫曼码表内对应的二进制码的位数;步骤s3:读取解码位置对应的解码字符后,将解码位置按照自身对应的解码长度依次后移相应的位数,并将后移后对应的位置作为解码位置,重复步骤s3;直至解码完成;其中,初始解码位置为待解码比特流的起始二进制码。可以理解的是,哈夫曼码表中每个字符对应一串二进制码串,二进制码串内包含的二进制码的位数即为该字符对应的解码长度。由于本发明能够得到待解码比特流中每一位二进制码对应的解码结果(这里二进制码对应的解码结果指的是以二进制码作为解码起始位置解码后得到的解码结果),而待解码比特流中包含有多位二进制码对应一个字符的情况,故得到的解码结果中包含有无效的解码结果,具体哪些二进制码对应的解码结果无效,则通过步骤s4的方式识别。例如,若待解码比特流为10,哈夫曼码表内b的编码为10,e的编码为0,则通过步骤s2后得到的对应结果应为第一个1对应b,解码长度为2;第二个0对应e,解码长度为1;但实际上10应该表示一个字符b,故仅第一个1的位置为解码位置,而第二个0应该跳过,为无效解码位置。本发明提供了一种哈夫曼解码方法,每次从待解码比特流上读取一组二进制码组,然后分别对读取到的各组二进制码组进行哈夫曼解码,得到待解码比特流上的二进制码对应的解码结果,进而得到解码字符。可见,本发明不是每次读取一位二进制码,而是并行读取多位二进制码作为一组进行解码,大大提高了哈夫曼解码的速度,解码效率高。并且,本发明的读取过程时从待解码比特流上依次读取二进制码组,即每读取完一组后即继续读取下一组;而解码过程中是分别依次对各组二进制码组进行解码,然后根据解码结果进行合并操作,得到最终解码结果。可见,本发明实现了流水作业,读取过程与解码过程互不干涉,可以同时并列进行,相比目前仅能解码完成后再进行下一次读取的串行操作,本发明的解码速度大大提高。实施例二基于实施例一的基础上,本发明还提供了另一种哈夫曼解码方法。其中,参见图2所示,图2为本发明提供的另一种哈夫曼解码方法的过程的流程图。步骤s1的过程具体为:从待解码比特流上的读取起始位置开始,依次读取L位二进制码,得到二进制码组;L≥m+n-1;m为解码器的个数,n为哈夫曼码表的最长编码长度;令读取起始位置后移m位,作为新的读取起始位置,重复读取操作;相应的,步骤s2的过程具体为:m个解码器分别依次对每组二进制码组进行哈夫曼解码;其中,第i个解码器自二进制码组的第i位开始进行哈夫曼解码,得到二进制码组的第i位处的解码结果;1≤i≤m且i为正整数。可以理解的是,由于哈夫曼解码串行解码的特点,每次需要先完成解码,才能确定下一个开始解码的位置,故每次只能对一个字符进行解码速度慢,效率低;通过m个解码器分别从每组二进制码组内前m位二进制码进行解码,能够得到待解码比特流上以每一位二进制码作为起始位置解码后得到的解码结果,然后再通过步骤s4去掉其中无效的解码结果,即可得到最终的解码字符。即本实施例采用并行解码的方式,能够每次对m位二进制码进行解码,得到多个解码字符,大大提高了解码速度和效率。并且,步骤s4中,可以每得到一组二进制码组解码得到的一组解码结果后,即开始进行处理,而此时m个解码器可以对下一组二进制码组进行解码。可见,此时读取过程、解码过程与步骤s4中的字符合并过程同时进行,之间互不干涉,从而实现了整个流程的流水化处理,大大提高了解码速度。另外,由于m个解码器需要分别从每组二进制码组内前m位二进制码进行解码,故为了保证最后一个解码器也能正常工作,故每组二进制码组不能仅包含m位,而是要多加n-1位,因为,解码所需的最长编码长度为n,故加上最后一个解码器所对的解码起始位置处的二进制码,最后一个解码器能够有n位二进制码供其进行解码操作。其中,m应不小于1,m与n的大小视具体情况而定。为方便理解,下面就一个具体例子对上述实施例进行解释。假设待解码比特流为“1000111011111000110”,共8(m)个解码器,所用的哈夫曼码表如表1;表1为该例中的哈夫曼码表;表1哈夫曼码表每次从待解码比特流中读取12位(m+n=8+4=12),以后每次读取时,右移8位,直至结束位。本实施例中共读取三次,每次读取二进制码结果如表2。表2各次读入二进制码结果8个解码器分别从当前一组读入二进制码组的第i位开始解码(i是解码器编号)。各次读取的二进制码组对应的解码结果如表3。表3每次解码结果对表1的结果按照步骤s4进行有效解码字符读取,得到解码字符串“beepbeer”。见表4所示,表4为解码最后结果。表4解码最后结果比特流1000111011111000110解码字符beep空格beer解码长度211442113解码位置0234812141516解码器023404670在另一种实施例中,步骤s1的过程具体为:分别将待解码比特流上的每一位二进制码作为读取起始位置依次读取n位二进制码,得到若干组二进制码组。进一步可知,参见图3所示,图3为本发明提供的另一种哈夫曼解码方法的过程的流程图。步骤s2的过程具体为:分别从每位二进制码组的首位二进制码开始进行哈夫曼解码,得到二进制码组的首位二进制码对应的解码结果。可以理解的是,由于哈夫曼码表内的最长编码长度为n,故每组包括n位二进制码的话,除起始位置不对外,一般能够解码得到将该二进制码组的首位作为解码起始位置后的解码结果,从而得到待解码比特流内每一位二进制码对应的解码结果。其中,该步骤可以令多个解码器同时分别对一位二进制码组进行解码操作,从而实现并行解码的目的。进一步可知,哈夫曼码表为范式哈夫曼码表,步骤s2的过程具体为:步骤s201:对不足n位的二进制码组右侧补零,扩充为n位二进制码组;可以理解的是,分别将待解码比特流上的每一位二进制码作为读取起始位置依次读取n位二进制码,最后n-1组二进制码组内包含的二进制码数小于n,故此时需要进行补0.步骤s202:将哈夫曼码表内每个字符对应的编码右侧补零,扩充为n位编码;这样使得哈夫曼码表内每个字符均对应一个n位编码,由于在范式哈夫曼编码中,相同长度的编码是连续整数的二进制描述,即若两个字符对应的编码长度相同,则这两个字符对应的二进制编码计算后得到的数值时连续的,例如0011,0100。故在范式哈夫曼编码中,字符对应的编码补零后得到的n位编码的数值按照从小到大的顺序排列。步骤s203:计算每个扩充后编码的数值,并分别记录原始编码长度相同的若干个编码的编码数值中的最小值,得到k个最小值作为阈值,k≤n;其中,这里的原始编码长度指的是未补零之前字符对应的编码长度,例如,b和e均对应2位编码,补零后均补为4位编码1100和0100,其数值分别为12和4,故记录4。步骤s204:计算每组二进制码组的数值D;将D分别按照从小到大的顺序与k个阈值进行比较,若D小于当前比较的阈值,则记录比较结果为0,反之,记录比较结果为1,并将比较结果按照比较顺序的先后从左至右进行排序,得到k位掩码;若k<n,则按照预设规则调整为n位掩码;其中,哈夫曼码表中有几种长度的原始编码,则会得到几个阈值,这里的k不一定会等于n,若k<n,可在得到的k为掩码的最前面补1。步骤s205:令二进制码组与n位掩码按位进行与操作,得到n位结果码,计算n位结果码的数值I;依据I得到二进制码组的首位二进制码对应的解码结果。其中,将结果码的数值与之前补零后各个字符对应的n位编码的数值比较,若相等,则该二进制码组的首位对应的解码字符为上述相等的n位编码对应的字符,进而得到解码长度(该解码字符对应的原始编码长度)。作为优选地,解码结果还包括有效标识符,当得到解码字符后,解码结果对应的有效标识符为真,反之,为假。可以理解的是,步骤s4中,当解码位置处未得到解码结果时,一般表明该处的解码尚未完成,需要等待;但是,有时候即使解码位置处已经有解码结果了,但是该解码结果为系统错误操作生成或解码结果中并不包含解码字符,故此时可通过有效标识符为假来判断跳过该解码位置。其中,正常解码完成后解码结果对应的有效标识符为真,若当前解码位置的起始位置不对导致得不到解码字符的话,解码结果中有效标识符为假,当然,系统错误的话,有效标识符为假。另外,在以上各个实施例中,步骤s3和步骤s4可以在得到待解码比特流中全部二进制码对应的解码结果后再进行,也可以在得到一组二进制码对应的解码结果后开始进行,或每得到一位二进制码对应的解码结果即进行。采用第二种方式的话,能够在解码下一组二进制码的过程中同时对上一组二进制码进行字符筛选读取,进行实现提高解码速度的目的。当然,具体采用哪种方式本发明不作限定。与实施例一相比,本实施例能够实现多个解码器并行解码,提高了哈夫曼解码的速度,效率高;并且,本发明还在解码结果中增加了有效标识符,避免系统错误时读取解码位置处的错误解码字符,提高了解码的准确性。本发明还提供了一种哈夫曼解码装置,参见图4所示,图4为本发明提供的一种哈夫曼解码装置的结构示意图。该装置包括:读取模块1,用于从待解码比特流上依次读取若干组二进制码组;每组二进制码组内包含的二进制码个数大于1;解码模块2,用于分别依次对每组二进制码组进行哈夫曼解码,得到待解码比特流上的二进制码对应的解码结果,解码结果包括解码字符和解码长度,解码长度为解码字符在预设的哈夫曼码表内对应的二进制码的位数;合并模块3,用于读取解码位置对应的解码字符后,将解码位置按照自身对应的解码长度依次后移相应的位数,并将后移后对应的位置作为解码位置,重复自身操作;直至解码完成;其中,初始解码位置为待解码比特流的起始二进制码。作为优选地,解码模块2包括m个解码器;读取模块1具体用于:从待解码比特流上的读取起始位置开始,依次读取L位二进制码,得到二进制码组;L≥m+n-1;m为解码器的个数,n为哈夫曼码表的最长编码长度;令读取起始位置后移m位,作为新的读取起始位置,重复读取操作;m个解码器,用于分别依次对每组二进制码组进行哈夫曼解码;其中,第i个解码器自二进制码组的第i位开始进行哈夫曼解码,得到二进制码组的第i位处的解码结果;1≤i≤m且i为正整数;并将得到的一组二进制码发送至合并模块3进行处理。可以理解的是,每得到一组解码结果即发送至合并模块3进行处理,能够实现读取过程、解码过程以及合并过程同时进行,即实现流水化处理,大大提高解码速度。在另一种实施例中,读取模块1具体用于:分别将待解码比特流上的每一位二进制码作为读取起始位置依次读取m位二进制码,得到若干组二进制码组。本发明提供了一种哈夫曼解码装置,每次从待解码比特流上读取一组二进制码组,然后分别对读取到的各组二进制码组进行哈夫曼解码,得到待解码比特流上的二进制码对应的解码结果,进而得到解码字符。可见,本发明不是每次读取一位二进制码,而是并行读取多位二进制码作为一组进行解码,大大提高了哈夫曼解码的速度,解码效率高。并且,本发明的读取过程时从待解码比特流上依次读取二进制码组,即每读取完一组后即继续读取下一组;而解码过程中是分别依次对各组二进制码组进行解码,然后根据解码结果进行合并操作,得到最终解码结果。可见,本发明实现了流水作业,读取过程与解码过程互不干涉,可以同时并列进行,相比目前仅能解码完成后再进行下一次读取的串行操作,本发明的解码速度大大提高。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其他实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1