霍夫曼编码和解码的制作方法

文档序号:6419784阅读:705来源:国知局
专利名称:霍夫曼编码和解码的制作方法
技术领域
本发明的实施例涉及霍夫曼编码和解码。具体地,涉及改进的编码和解码机制以及改进的霍夫曼树的表达。
背景技术
在数字处理中,如果消息包括符号序列,则每个不同的符号可以表示为不同的二进制代码字。霍夫曼算法使用每个符号在消息中出现的频率表并对可变长度代码字进行优化,使得出现频率最高的代码字具有最短的长度。这样的结果是数据压缩,并且霍夫曼编码普遍地用于音频和视频压缩编码中,例如MPEG。
David A Huffman在Proceedings of the IRE40(1952)1098-1101中的题为“A method for the construction of minimum-redundancycodes”(一种构成最小冗余编码的方法)的文章中引入霍夫曼编码。
如果存在九个分别具有出现频率为5、5、6、1、2、3、16、9和9的符号S0、S1……S8,则它们可以使用霍夫曼算法编码到图1中所示的二进制树中。
树10包括安排在H层级中的叶节点Si以及内节点Fi。每个叶节点依赖于下一个最低层级上的单个内节点并且表示一符号。每个内节点依赖于下一个最低层级上的单个内节点。
节点的L层级通过将根设定为0层级而进行定义,其它节点具有比它所依赖的节点的层级高1的层级。最高层级是霍夫曼树的高度H。符号(即,T片叶)从左到右标识为S0、S1、S2……S8。
图1中所示的霍夫曼树产生符号的下述编码
表1

在其最简单的表达中,高H的霍夫曼二进制树可以使用树的每个节点的字表示。这种表示的尺寸使得在解码期间很难进行搜索。
Hashemian在IEEE Trans on comms,Vol.43,No 10,2576-,Oct1995中的题为“Memory efficient and high speed search Huffmancoding”(存储器有效的高速搜索霍夫曼编码)中降低了表示霍夫曼树所需的存储空间并提高了使用树的解码速度。稀疏的单侧生长的霍夫曼树被创建并被分隔为更小并且更加稀疏的聚类(子树),其中每个L层级被分开。构成其中用节点表示每个聚类的超级树。超级表指定超级树。它为每个节点指定与该节点相关的聚类的长度以及该聚类的查找表的地址。在查找表中的负值输入是指到超级表的返回引用。正值输入表示已经找到符号并且输入的大小提供了符号在存储器中的位置、代码字和代码字长度。
Chen在Info Process Lett.69(1999)119-122中的题为“A memory-efficient and fast Huffman decoding algorithm”(存储器有效率的快速霍夫曼解码算法)中,将等于节点下的整个树中的叶数量的权值赋予叶节点。它依赖于树中节点的层级。每个叶节点被分配一个等于在它之前出现的所有的叶的累积权值以及它自己的权值的数量。将相当的累积权值赋予代码字,就好像它是树上的节点。对实际的累积权值进行搜索以判断是否有一个与相当的累积权值匹配。如果存在匹配并且匹配节点的权值是相同的,则代码字为树的叶节点(即,符号)。
Chowdhury等在Info Process Lett,81(2002),305-308中的题为“Anefficient decoding technique for Huffman codes”(有效率的霍夫曼代码的解码技术)通过去除所有的叶以提高存储器利用及搜索速度,将霍夫曼树截短。
需要提供一种霍夫曼二进制树的替代表示以及用于对接收到的二进制数字串进行解码的改进的霍夫曼解码机制。

发明内容
根据本发明的一个实施例,提供一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的方法,包括从所述比特流提取H比特的第一个代码字;通过使用第一移位值对它进行移位从而对所述代码字进行修改;使用这个修改后的代码字通过使用至少第一数据结构来标识符号或具有相关的第二偏移值和相关的第二移位值的第二数据结构;以及如果使用所述第一数据结构标识第二数据结构,则通过减去所述第二偏移值并用所述第二个移位值对其结果进行移位,对所述代码字进行修改;以及使用这个修改后的代码字通过使用所述第二数据结构来标识符号或具有相关的第三偏移值和相关的第三移位值的第三个数据结构。
根据本发明的另一个实施例,提供一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的方法,包括从所述比特流提取H比特的代码字;用预定的移位值对所述代码字进行移位;以及使用所述修改后的代码字通过使用至少第一数据结构来标识符号。
根据本发明的另一个实施例,提供一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的解码器,包括存储器,用于存储表示高度为H的霍夫曼编码树的多个数据结构,所述多个数据结构至少包括具有相关的第一偏移值和相关的第一移位值的第一数据结构和具有相关的第二偏移值和相关的第二移位值的第二数据结构;以及处理器,用于从H比特的代码字中减去当前的偏移值,所述H比特的代码字从所述比特流中得到;用相关的移位值对其结果进行移位;以及使用所述结果对相关的数据结构进行寻址。
根据本发明的另一个实施例,提供一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的方法,包括存储第一数据结构,所述第一数据结构包括在树的第一层级上的每个可能节点的值;存储第二数据结构,所述第二数据结构包括在树的第二较低层级上的第一子树中的每个可能节点的值;从所述比特流提取第一个H比特代码字;将所述第一个代码字的值转换到树的第一层级上的树内的第一个节点位置内;以及访问所述第一数据结构以获得对应于所述第一个节点位置的值,其中,该值参照所述第二数据结构;将所述第一个代码字的值转换到树的第二层级上的第一子树中的第二个节点的位置内;以及访问所述第二数据结构以获得对应于所述第二个节点位置的值。
根据本发明的另一个实施例,提供一种从比特流解码代码字的方法,包括接收表示为多个顺序排列数据结构的霍夫曼树,所述多个数据结构包括第一数据结构,与标识的树的第一层级L1相关并包括多个数据输入,每个数据输入对应于标识的第一层级上的完整树的节点;以及至少一个第二数据结构,与标识的树的第二层级L2及标识的第一子树相关并包括多个数据输入,每个数据输入对应于在所述第二个标识的层级上当完整时的所述第一子树的节点;获取霍夫曼树中的第一个层级L1的值,标识树的第一个层级L1中的节点,当完整时,对应于所述代码字的第一个L1比特;从所述第一数据结构获取所标识的节点的数据输入,如果标识的节点为内部节点则所述数据输入标识进一步的数据结构,否则标识符号;以及如果标识的节点为内部节点获取霍夫曼树中比所述第一层级L1高的第二层级L2的值;获取标识第一子树的值;标识所述第一子树的第二层级L2中的节点,当完整时,对应于接收到的比特流的所述第一个L2比特;从进一步的数据结构获取所标识的节点的数据输入,如果标识的节点为内部节点则所述数据输入标识进一步的数据结构,否则标识符号。
根据本发明的另一个实施例,提供一种表示霍夫曼编码树的数据,所述霍夫曼编码树包括H个层级上安排的叶节点和内部节点,其中,每个叶节点依赖于下一个最低层级上的单个内节点并且表示符号,每个内部节点依赖于下一个最低层级上的单个内部节点,所述数据包括第一数据结构,对于树的第一个指定层级中的每个节点,所述第一数据结构标识每个叶节点的符号以及每个内部节点的进一步的数据结构,包括第一个内部节点的第二数据结构;至少一个第二数据结构,由所述第一数据结构标识,对于依赖于所述第一个内部节点的子树内以及树的第二个指定层级上的每个节点,所述第二数据结构标识每个叶节点的符号以及如果有则标识进一步的内部节点的数据结构;以及至少指定所述第一层级、所述第二层级和所述第一个内部节点的数据。
根据本发明的另一个实施例,提供一种表示霍夫曼二进制树的方法,包括生成与标识的树的第一层级L1相关并包括多个数据输入的第一数据结构,每个输入对应于标识的第一层级上的完整树的节点,并且如果该节点为内部节点则所述输入标识进一步的数据结构,否则所述输入标识符号;并且生成与标识的树的第二层级L2以及标识的子树相关并且包括多个数据输入的第二数据结构,每个数据输入对应于在所述第二个标识的层级上当完整时的所述第一子树的节点,并且如果该节点为内部节点则所述输入标识进一步的数据结构,否则所述输入标识符号。
与本发明的实施例相关的一个优点是,本技术利用了代码字的出现概率。出现频率较高的代码字将首先被解码。
与本发明的实施例相关的另一个优点是与解码相关的处理开销低,在每个解码重复中仅有最多是一次减法、一次移位和一次比较。因此可以在数字信号处理器(DSP)中非常有效地进行解码。
与本发明的实施例相关的另一个优点是最大的搜索可以设计为小于log2N。


为了更好地理解本发明的实施例以及如何以同样的方式实施,现在以示例的方式参照附图,其中图1表示霍夫曼二进制树;图2表示可用作编码器和/或解码器的装置;图3表示解码过程;以及图4表示另一个霍夫曼树。
具体实施例方式
编码在这个例子中,存在9个其出现频率分别为5、5、6、1、2、3、16、9、9的符号S0、S1……S8。它们可以使用霍夫曼算法编码到图1中表示的二进制树中。
这个霍夫曼树可以表示为数据结构的排序序列,如下面查找表中的定义(表2、3和4)。
表2

表3

表4

第一数据结构(表2)为第一查找表。它对一对偏移值和移位值进行标识以便和每个标识的子表一起使用。在这个例子中,它指定偏移值0和移位值2应当和子表0(表3)一起使用,指定偏移值12和移位值0应当和子表1(表4)一起使用。
第二数据结构(表3)为查找表。它使用值y进行寻址并返回符号位置值。符号位置值可以指向符号值或指向另一个查找表。例如,等于0、1、2、4、5、6和7的值y分别指向符号S0、S1、S2、S6、S6、S7和S8,等于3的值y指向子表1(表4)。
第三数据结构(表4)为查找表。它使用值y进行寻址并返回符号位置值。符号位置值可以指向符号值或指向另一个查找表。在这个例子中,等于0、1、2和3的值y分别指向符号S3、S4、S5和S5。
8比特符号位置可以被格式化从而它的最重要比特(MSB)对它是指向符号的指针(MSB=0)还是指向另一个查找表的指针(MSB=1)作出识别。比特1-7给出正确的符号或查找表的地址。例如,在y=3的子表0中的符号位置的值是1000 0001,表示子表1。根据下面的表5,在y=1的子表0中的符号位置的值是0000 0000,表示符号S0。
表5

现在对前面所述数据结构的创建进行描述。表6表示用于创建数据结构的方法。
在表6中,第1栏顺序列出了符号Si,其中i=0,1,2……N-1。第2栏靠近每个符号列出了它的代码字。第3栏给出每个代码字的计数值CountSi。
CountSi为通过在符号Si的代码字上加1直到它具有长度H而获得的比特序列值。例如,S0的计数值为0011(2+1),S2的计数值为01011(8+2+1)。可选择地,对于每个占据Li层级的符号Si以及值为V的代码字,可以将计数值CountSi计算为[(V+1)*2^(H-Li)]-1。例如,对于S3{01100}、V=12和L=0,count=[(12+1)*(2^0)]-1=12,对于S8{111}、V=7和L=2,count=[(7+1)*(2^2)]-1=31。
第4栏给出了每个符号的因数。对于符号Si,其被计算为countSi-countSi-1,其中counts-1=-1。对于Li层级上的符号Si,这可以替换地计算为2^(H-Li)。
第5栏给出了每个符号的“移位”。它是对符号因数的基数2的算法。对于每个符号Si,该移位可以替换地计算为Li。

等式1用于计算第6栏和第7栏中的值,第6栏和第7栏提供第二数据结构和第三数据结构的内容(表3和表4)。
Y=(x-offset_value)>>(shift_value)-----------------等式1其中,x为代码字的值,偏移值为大于或等于0的整数,移位值为大于或等于0的整数。操作符“>>”表示值(x-偏移值)应当被移位值截短,丢掉最不重要比特的移位值。这个向左的移位操作相当于被2^移位值相除的操作,但是可以容易地由数字信号处理器(DSP)执行。
对于第6栏,即第二数据结构(表3),偏移值被置为0,移位值被置为2。等式y=(x-0>>2用于计算第6栏中对应于子表0(表3)中的y值的每个输入。符号S3、S4和S5共享一个公共的y值。进一步的子表用于这些符号。
对于第7栏,即第三数据结构(表4),偏移值为12,移位值被置为0。等式y=(x-12)>>0用于计算第7栏中的未求解的符号S3、S4和S5的各个输入,对应于子表1(表4)中的y值。
因此,子表0表示图1的在Li层级上霍夫曼二进制树中的节点,层级Li为从树顶去除的偏移值层级,即Li=H-移位值。
L=3上的节点依次为S0、S1、S2、F2、空、空、S7和S8。空节点将依赖于与符号S6相关的叶节点。符号S6从而被置于从属的空节点中。L=3上的节点可以重新写为S0、S1、S2、F2、S6、S6、S7和S8。这对应于子表0中的输入内容。
内部节点F2为子树的根。子表1表示这个子树。任何依赖于F2的叶节点的计数值将具有12到15之间的值。代码字的计数值通过减去子表1的偏移值12被再次标准化。
子表1表示在霍夫曼二进制树的等于H-移位值的L层级上的子树的节点。对于这个子树,子表1的移位值为0,所以L=5。
L=5上的节点依次为S3、S4、空和空。空节点将依赖于与S5相关的叶节点。符号S5从而被置于从属的空节点中。L=5上的节点可以重写为S3、S4、S5和S5。这对应于子表1中的输入内容。
因此,图1中的霍夫曼树由第一数据结构、表示L=3层级上的树的子表0以及由第二数据结构、表示L=5层级上的子树的子表1表示。
需要断开树以便允许首先以有效的方式发现最可能的符号。但是,对于片段的过多的引用使用了额外的存储器来存储额外的子表以及额外的移位和偏移值,并且需要额外的处理步骤来对较少出现的符号进行解码。
例如,可能通过以与L=3和L=5不同的层级将它断开来表示该霍夫曼树。例如,如果在L=3、L=4和L=5上断开树,则将会有三个子表。L=4的子表的第一个输入将参照L=5的子表,而第二个输入将参照S5。L=5的子表的第一个输入将参照S3,第二个输入将参照S4。这些子表的偏移为12。L=4的子表的移位为1,L=5的子表的移位为0。
下面将描述对图1的霍夫曼树的断开,图1给出了表2、3、4和5的数据结构。
表示树的层级L(即,在L断开的树)的数据结构具有等于H-L的移位值。从树中的节点N参考的数据结构具有偏移值V*2^(H-L),其中节点N具有代码字值V并且位于层级L。。
对于子表0,移位值被设置为等于H-L*,其中L*为树被断开的层级。这里它是其上出现多个叶的最低层级。在图1中在L=2上存在一个叶,但是在L=3上存在多个叶。因此,在L=3上树被断开,并且移位值=2。偏移值为0。
例如,子表1经过L=3上的节点{011}被参照。V=3,所以子表1的偏移值为3*2^2。子表1的移位值被设定为等于H-L*,其中L*为树被断开的层级。这里,它是其中多个叶出现在子树中的最低层级。在图1中子树在L=3层级中有它的根F2。这个子树在L=4上有一个叶,但是在L=5上有两个叶。因此,在L=5上断开树,并且移位值=0。
图2表示可作为编码器操作的装置20。该编码器装置包括处理器22和存储器24。存储器24存储控制处理器22执行前面所述的编码处理的计算机程序指令。
计算机程序指令可以经过合适的其中包含指令的存储介质被传递到存储器中,或者它们可以经过包含指令的电信号被传递。
处理器22具有输入端21,用于接收用于编码的数据,并且具有输出端23,用于提供编码的数据。编码的数据包括多个表示霍夫曼树的数据结构和树的高度H的值。
解码图2表示可以操作解码器的装置20。解码器包括处理器22和存储器24。存储器存储表示前面所述霍夫曼树的数据结构。例如,存储器24可以存储对应于前面所述的表2、3、4和5中的表。存储器还存储控制处理器22执行下面参照图3所述的解码处理的计算机程序指令。
计算机程序指令可以经过包含指令的合适的存储介质被传递给存储器,或者它们可以经过包含指令的电信号被传递。
处理器22具有输入端21,用于接收用于解码的数据,并具有输出端23,用于提供解码后的数据。霍夫曼树的高度在解码器中是已知的。这可以在具有用于解码的数据的报头中被传送给解码器。
解码器执行下面的步骤,如图3中所示在步骤100,当前的子表标识符z被设定为0。
然后,在步骤102,从比特流中提取H个比特,具有值x。
然后,在步骤104,访问查找表。获得子表z的偏移值和移位值。
然后,在步骤106,使用x及所获得的当前子表的偏移值和移位值从等式1计算当前子表的y值。
然后,在步骤108,访问当前子表,子表z。从对应于计算的y值的子表z获得符号位置。
然后,在步骤110,在所获得的符号位置的MSB上执行比较。如果获得的符号位置的MSB为0,则处理跳到步骤114;如果获得的符号位置的MSB为1,则处理跳到步骤112。
在步骤112,当前的子表标识符z被设定为等于在步骤108获得的符号位置的剩余的最不重要比特。然后处理返回到步骤104。
在步骤114,符号对应于在步骤108获得的符号位置。
现在将使用前面给出的示例的查找表(表2、3、4和5)描述处理的示例。将要进行搜索的代码字为{0,1,1,1}。使得提取的比特为{0,1,1,1,0}。
在步骤100,设定当前子表指示符z=0。
在步骤102,提取比特{0,1,1,1,0}。所以x=14。
在步骤104,访问查找表(表2)。子表0的偏移值=0,子表0的移位值=2。
在步骤106,使用等式1计算y。
Y=(x-0)>>2=3在步骤108,访问当前子表,子表0(表3)。从对应于计算的y值的子表0获得符号位置。符号位置为{1000 0001}。
在步骤110,所获得的符号位置的MSB被确定为1,所以前进到步骤112。
在步骤112,将z设定为等于所获得的符号位置的剩余的最小比特{000 0001},即z=1。
在步骤104,访问当前的查找表(表2)。获得新的当前子表(子表1)的新偏移值和新移位值。子表1的偏移值=12,子表1的移位值=0。
在步骤106,使用等式1计算当前子表即子表1的y。
Y=(x-12)>>0=2在步骤108,访问当前子表(子表1)。获得对应于新的y值(y=2)的符号位置。符号位置为{0000 0101}。
在步骤110,所获得的符号位置的MSB被确定为0,因此前进到步骤114。
在步骤114,获得对应于所获得的符号位置的符号。对应于从表5获得的符号位置{0000 0101}的符号为S5。
应当理解,如果提取的比特是{0,1,1,1,1}而不是{0,1,1,1,0},则将取得相同的结果。
进一步的描述作为进一步的描述,现在将简单地描述图4中所示的霍夫曼树的编码。创建表7

在L=3处断开树,给出y=(x-0)>>4

在L=4处断开树,给出y=(x-48)>>3,其中V{011}*2^4=48

在L=5处断开树,给出y=(x-48)>>2,其中V{0110}*2^3=48

在L=7处断开树,给出y=(x-52)>>0,其中V{01101}*2^2=52

虽然本发明已经参照各个具体的例子进行了描述,但是应当理解,对它的各种变形和修改没有超出本发明的精神和范围。
权利要求
1.一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的方法,包括从所述比特流提取H比特的第一个代码字;通过使用第一移位值对它进行移位从而对所述代码字进行修改;使用这个修改后的代码字通过使用至少第一数据结构来标识符号或具有相关的第二偏移值和相关的第二移位值的第二数据结构;以及如果使用所述第一数据结构标识第二数据结构,则通过减去所述第二偏移值并用所述第二个移位值对其结果进行移位,对所述代码字进行修改;以及使用这个修改后的代码字通过使用所述第二数据结构来标识符号或具有相关的第三偏移值和相关的第三移位值的第三个数据结构。
2.根据权利要求1所述的方法,还包括,访问查找表以获得所述第一移位值,并访问所述查找表以获得所述第二偏移值和所述第二移位值。
3.根据权利要求1或2所述的方法,其中,所述第一数据结构表示所述霍夫曼编码树的第一层级,所述第二数据结构表示所述霍夫曼编码树的第二的较低层级。
4.根据权利要求1到3中任何一个所述的方法,还包括,至少接收高度H的值、所述第一移位值、所述第二偏移值、所述第二移位值、所述第一数据结构和所述第二数据结构。
5.根据权利要求1到4中任何一个所述的方法,其中,通过用第一移位值对所述代码字进行移位从而对代码字进行修改的步骤包括,首先如果有第一偏移值则从所述代码字中减去第一偏移值,然后,用所述第一移位值对其结果进行移位。
6.一种用于执行权利要求1到5中任何一个所述的计算机程序。
7.一种包含权利要求6的计算机程序的存储介质或传输介质。
8.一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的方法,包括从所述比特流提取H比特的代码字;用预定的移位值对所述代码字进行移位;以及使用所述修改后的代码字以使用至少第一数据结构标识符号。
9.根据权利要求7所述的方法,还包括访问查找表以获得所述预定的移位值。
10.根据权利要求8或9所述的方法,其中,所述第一数据结构表示所述霍夫曼编码树的第一层级。
11.根据权利要求8到10中的任何一个所述的方法,还包括接收至少高度H的值、所述预定的移位值和所述第一数据结构。
12.根据权利要求8到10中的任何一个所述的方法,其中,所述用预定移位值对所述代码字进行移位的步骤包括,首先如果有第一偏移值则从所述代码字减去第一偏移值,然后用所述预定的移位值对其结果进行移位。
13.一种用于执行权利要求8到12中的任何一个所述的方法的计算机程序。
14.一种包含权利要求13的计算机程序的存储介质或传输介质。
15.一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的解码器,包括存储器,用于存储表示高度为H的霍夫曼编码树的多个数据结构,所述多个数据结构至少包括具有相关的第一偏移值和相关的第一移位值的第一数据结构和具有相关的第二偏移值和相关的第二移位值的第二数据结构;以及处理器,用于从H比特的代码字中减去当前的偏移值,所述H比特的代码字从所述比特流中得到;用相关的移位值对其结果进行移位;以及使用所述结果对相关的数据结构进行寻址。
16.根据权利要求15的解码器,其中,所述第一数据结构表示所述霍夫曼编码树的第一层级,所述第二数据结构表示所述霍夫曼编码树的第二的较低层级。
17.根据权利要求16所述的解码器,其中,所述第一移位值对应于所述第一层级。
18.根据权利要求16或17所述的解码器,其中,所述第二移位值对应于所述第二层级。
19.根据权利要求16、17或18所述的解码器,其中,所述第二偏移值对所述霍夫曼树中的第一子树的位置进行标识。
20.根据权利要求17到19中的任何一个所述的解码器,其中,所述处理器具有通过对所述相关的数据结构进行寻址而获取的数值,且可以使用该数值进行比较,并且使用该数据并根据所述比较对符号或新的当前偏移值进行标识。
21.根据权利要求20所述的解码器,其中,所述比较使用所述数值的MSB。
22.根据权利要求20或21所述的解码器,其中,最初将所述当前偏移值设定为所述第一偏移值。
23.一种对根据高度为H的霍夫曼编码树进行编码的比特流进行解码的方法,包括存储第一数据结构,所述第一数据结构包括在树的第一层级上的每个可能节点的值;存储第二数据结构,所述第二数据结构包括在树的第二的较低层级上的第一子树中的每个可能节点的值;从所述比特流提取第一个H比特代码字;将所述第一个代码字的值转换到树的第一层级上的树内的第一个节点位置内;以及访问所述第一数据结构以获得对应于所述第一个节点位置的值,其中,该值参照所述第二数据结构;将所述第一个代码字的值转换到树的第二层级上的第一子树中的第二个节点的位置内;以及访问所述第二数据结构以获得对应于所述第二个节点位置的值。
24.一种执行权利要求23中所述方法的计算机程序。
25.一种包含权利要求24中所述的计算机程序的存储介质或传输介质。
26.一种从比特流解码代码字的方法,包括接收表示为多个顺序排列数据结构的霍夫曼树,所述多个数据结构包括第一数据结构,与标识的树的第一层级L1相关并包括多个数据输入,每个数据输入对应于标识的第一层级上的完整树的节点;以及至少一个第二数据结构,与标识的树的第二层级L2及标识的第一子树相关并包括多个数据输入,每个数据输入对应于在所述第二个标识的层级上当完整时的所述第一子树的节点;获取霍夫曼树中的第一个层级L1的值,标识树的第一个层级L1中的节点,当完整时,对应于所述代码字的第一个L1比特;从所述第一数据结构获取所标识的节点的数据输入,如果标识的节点为内部节点则所述数据输入标识进一步的数据结构,否则标识符号;以及如果标识的节点为内部节点获取霍夫曼树中比所述第一层级L1高的第二层级L2的值;获取标识第一子树的值;标识所述第一子树的第二层级L2中的节点,当完整时,对应于接收到的比特流的所述第一个L2比特;从进一步的数据结构获取所标识的节点的数据输入,如果标识的节点为内部节点则所述数据输入标识进一步的数据结构,否则标识符号。
27.一种执行权利要求26中的方法的计算机程序。
28.一种包含权利要求27的计算机程序的存储介质或传输介质。
29.一种表示霍夫曼编码树的数据,所述霍夫曼编码树包括H个层级上安排的叶节点和内部节点,其中,每个叶节点依赖于下一个最低层级上的单个内节点并且表示符号,每个内部节点依赖于下一个最低层级上的单个内部节点,所述数据包括第一数据结构,对于树的第一个指定层级中的每个节点,所述第一数据结构标识每个叶节点的符号以及每个内部节点的进一步的数据结构,包括第一个内部节点的第二数据结构;至少一个第二数据结构,由所述第一数据结构标识,对于依赖于所述第一个内部节点的子树内以及树的第二个指定层级上的每个节点,所述第二数据结构标识每个叶节点的符号以及如果有则标识进一步的内部节点的数据结构;以及至少指定所述第一层级、所述第二层级和所述第一个内部节点的数据。
30.根据权利要求29所述的数据,其中,如果有空节点,则所述第一数据结构标识每个空节点的符号。
31.根据权利要求29或30所述的数据,其中,所述第二数据结构标识树的第二层级上的子树的每个空点节的符号。
32.根据权利要求29、30或31所述的数据,其中,所述第一层级为具有至少两个叶节点的树中的最低层级。
33.根据权利要求29到32中的任何一个所述的数据,其中,所述第二层级为具有至少两个叶节点的子树中的最低层级。
34.根据权利要求29到33中的任何一个所述的数据,其中,所述第一个内部节点当其在层级L(L=0,1,2......)上并具有值V时,由依赖于V*2^(H-L)的值指定。
35.根据权利要求29到34中的任何一个所述的数据,还包括指定H的数据。
36.一种包含权利要求29到35中的任何一个所述的数据的存储介质或传输介质。
37.一种表示霍夫曼二进制树的方法,包括生成与标识的树的第一层级L1相关并包括多个数据输入的第一数据结构,每个输入对应于标识的第一层级上的完整树的节点,并且如果该节点为内部节点则所述输入标识进一步的数据结构,否则所述输入标识标识符号;并且生成与标识的树的第二层级L2以及标识的子树相关并且包括多个数据输入的第二数据结构,每个数据输入对应于在所述第二个标识的层级上当完整时的所述第一子树的节点,并且如果该节点为内部节点则所述输入标识进一步的数据结构,否则所述输入标识符号。
38.根据权利要求37所述的方法,运行算法以确定数据结构的数量以及在霍夫曼树中它们的相关层级。
39.根据权利要求37或38所述的方法,还包括,使用依赖于V*2^(H-L)的值对在层级L(L=0,1,2......)上具有根节点和值V的子树进行标识。
40.一种基本上在前面参照附图描述和/或在附图中显示的编码方法和/或解码方法。
41.一种基本上在前面参照附图描述和/或在附图中显示的编码器和解码器。
全文摘要
一种对根据高度为H的霍夫曼编码树编码的比特流进行解码的方法,包括从所述比特流提取H比特的第一个代码字;通过使用第一移位值对它进行移位从而对所述代码字进行修改;使用这个修改后的代码字以使用第一数据结构标识符号或具有相关的第二偏移值和相关的第二移位值的第二数据结构;以及如果使用所述第一数据结构标识第二数据结构,则通过减去所述第二偏移值并将其结果移位所述二个移位值,对所述代码字进行修改;以及使用这个修改后的代码字以使用所述第二数据结构标识符号或具有相关的第三偏移值和相关的第三移位值的第三个数据结构。
文档编号G06T9/00GK1826732SQ03827014
公开日2006年8月30日 申请日期2003年9月2日 优先权日2003年9月2日
发明者吉于恩·贝 申请人:诺基亚公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1