译码变长码的方法和设备
发明领域
本发明涉及译码变长码的方法和设备,特别涉及利用霍夫曼码树高速译码诸如数字图像信号这样的变长码字的方法和设备。
背景技术
一般来说,数字图像信号具有许多优点。例如,数字图像信号在图像质量方面优于模拟图像信号。因此,数字图像信号渐渐地被更加经常地使用,这是近来的趋向。另一方面,因为数字化的图像信息具有大量的信息容量,所以为了有效地传送图像信息,必需对其进行压缩和精减。因此,利用了图像特性的有效的图像压缩方法可被认为是图像通信的主要领域。在压缩图像数据的方法中,已知混合编码方法是组合了概率编码以及空间和时间压缩的最有效的方法。大多数混合编码方法利用差分脉码调制(DPCM)、离散余弦变换(DCT)、DCT系数的量化以及变长编码(VLC)。
变长编码是经常用于无损失数据压缩的编码技术。根据这一技术,固定长度数据按照数据的统计资料被变换为可变长度码字。一般来说,这样选择码字的长度使较短的码字用来表示较经常出现的数据和较长的码字用来表示不那么经常出现的数据。通过恰当地将变长码字分配给所有可能源码字的库,变长码的平均字长度比原始数据的平均字长度短,因此,实现了数据压缩。霍夫曼代码设计是通常用来对于已知的数据统计资料构成最小冗余变长码的方法。一般来说,可以通过利用输入数据来寻址查阅表的查阅表查阅操作来实现编码操作。码字和字长作为表的内容被存储并以恒定的数据速率经缓冲器被顺序地输出至数据信道。但是,在接收端的译码操作较复杂。由于可变长度特性,在每一码字能够被译码成源符号之前不得不根据接收位串对每一码字进行分段。因此,可变长度译码器的设计总是难于可变长度编码器的设计。
有若干种译码一连串变长码字的方法。最经常使用的一种称为树搜索算法。变长码总是可以用将码字作为树页(也称为终端节点)的树来表示。译码从码树的根开始,在接收位串的引导下沿着每一节点处的两条分支之一进行。一旦到达了终端节点,就检测到码字的结束并将其与剩余的位串分割开来。这种译码器包括相应于树的逻辑电路和通过码树的控制电路。由于对每一译码符号需要沿码树逐位进行搜索,所以这一方法会是很慢的,尤其对长的码字更是如此。在一般的应用中,一个输入符号用若干位来表示。接收位移入译码器的速度是译码数据平均速度的若干倍。因此,基于树搜索的译码器必需以是输出数据速率若干倍的速度进行操作。
这种高速需要求对于高清晰度电视(HDTV)信号的数字传输尤其重要。在这种HDTV系统中,总取样速率(组合了亮度和色度信号)很可能是100MHz。如果采用变长编码,最大长度的码字常为16位。逐位译码器于是将需要以是该取样速率16倍的速度、即以1.6千兆位/秒的速度进行移位来检测处于该取样速率的码字。这样高的速度用目前的IC技术来实现是非常困难的。
还提出了各种设备来译码一连串变长码字。变长译码设备被分成顺序译码和并行译码。首先,顺序译码是按照在位串前端的顺序开始译码位串的方法,并且被分成正常速度输入结构、正常速度输出结构和可变输入/输出结构。顺序译码的设计很容易,但由于它具有每次一位地对输入位串进行处理的正常速度输入结构,所以它有速度慢的问题。Bell Core的M.T.Sun提出的正常速度输出结构的变长译码设备是在将输入位串压缩成与最长码字长度一般长之后将其输入到只读存储器/可编程逻辑阵列(ROM/PLA)表中的设备,该变长译码设备在码字的译码期间搜索存储在该表中的码字、将搜索到的码字长度移位到桶形移位器(barrel shifter)、以及搜索下一个码字(授权给Bell Core的美国专利5173695和5245338号)。即由于正常速度输出结构的变长译码设备在一周期内译码一个码字,所以它的译码速度比正常输入结构的变长译码设备的译码速度快。
此后,普通译码器的操作可更容易地被理解。假定从数据信道107输入到缓冲器106的数据流由图13所示的位流a1-a8b1-b6 c1-c15 d1-d15 e1-e12 f1-f10 g1-g9 h1-h16......组成,a1-a8表示在第一变长码字中的8个位,b1-b6表示在第二变长码字中的6个位,等等。
在第一时钟信号之前,锁存器131被初始化,所以“读”输出是“1”。锁存器121也被初始化,所以第一桶形移位器109具有“16”的初始移位。由于从锁存器121输入“16”给加法器130和还从锁存器131输入16模16(等于“0”)给加法器130,所以加法器130的输出、即第二桶形移位器127的移位是“16”,“进位”为“1”。由于“读”为“1”,所以由16位a1-a8 b1-b6 c1c2组成的第一数据段通过导线105输入给接口部分102。此时,全部锁存器、桶形移位器109和127的输出以及PLA 116的输出都是噪声值,在图2中用“X”来表示。
在第一时钟周期信号时,先前“进位”“1”变成“读”“1”,这就从缓冲器106中检索下一数据段至导线105。但是,在这一时钟信号时,先前“进位”“1”使缓冲器106的先前输出被读入锁存器126。锁存器121仍初始化在“16”,所以第一桶形移位器109的移位的仍然是“16”,加法器130仍为“16”,“读”为“1”,“进位”为“1”。由于第二桶形移位器127的移位为
“16”和第17-第32位是来自锁存器126的a1-a8 b1-b6 C1C2,所以该序列出现在第二桶形移位器127的输出端。锁存器100、111和125含有噪声,正如第一桶形移位器109的输出和PLA116的译码字和码字长度输出也包含噪声一样。
在第二时钟信号时,第二桶形移位器127的先前输出被锁存入锁存器111。由于“读”仍为“1”并且先前进位是“1”,所以从缓冲器106检索下一数据段(第三),在锁存器126中的数据段(第一)被锁存入锁存器125,第二数据段被锁存入锁存器126。锁存器121仍被初始化,所以第一桶形移位器109的移位是“16”。这就保持了加法器130的输出为“16”、“进位”和“读”为“1”。由于第二桶形移位器127的先前输出包括了第一数据段,所以在第二时钟信号时,该段出现在锁存器111中和在第一桶形移位器109的第17-第32输入位置上。在第一桶形移位器109移位输入端处的“16”于是通过导线112将该第一段传送至桶形移位器的输出端。在第二桶形移位器127移位输入端处的“16”将在锁存器126中的第二数据段C3-C5 d1-d13传送至第二桶形移位器127的输出端。PLA116中的码字表将在第一段中的最先8个位识别为码字“A”。译码字表119在导线103上输出这一定长译码字A。码字长度表118在导线120上输出该字的长度“8”。
在第三时钟信号时,该第一数据段被锁存入锁存器110,并因此被锁存入第一桶形移位器109的第一16输入端。以前的译码长度“8”被锁存入锁存器121,它即是第一桶形移位器109的移位。第一桶形移位器109的输出移位到第9-第24个输入位,即序列b1-b6 C1-C5 d1-d5。第二时钟信号时的“进位”“1”在该第三时钟信号时变成“读”“1”,于是从缓冲器106检索下一数据段。一旦第三时钟信号出现,这一先前“进位”“1”就将以前的段从缓冲器106传送至锁存器126,并从锁存器126传送至锁存器125。在锁存器121输出端处的“8”被加法器130与锁存器131以前的模16输出(等于“0”)相加,形成新的等于“8”的输出。第二桶形移位器127的移位现在是“8”,“进位”为“0”。第二桶形移位器127的输出现在从其第9个输入(d6)开始。这一序列于是与在第一桶形移位器109输出端处的序列连上,连在一起的该序列将形成在下一时钟信号时第一桶形移位器109的输入。在该第三时钟周期内,码字B在码字表117的前6位输入中被识别,定长译码字B在导线103上被输出,码字长度“6”由码字长度表118进行输出。
由于先前“进位”为“0”,所以在第四时钟信号时不从缓冲器106中检索下一数据段,锁存器125和126的内容保持与先前时钟周期下的内容相同。第一桶形移位器109的先前输出以位b1开始被送入锁存器110,第二桶形移位器127的先前输出以位b6开始被送入锁存器111。现在在锁存器121输出端的“6”将第一桶形移位器109的输出移位至第7-第22位,以位C1开始,以位d11结束。该同一“6”被加法器130与先前的“8”相加,产生第二桶形移位器127为“14”的移位。第二桶形移位器127的输出于是以第15个位输入即d12开始,它是跟在第一桶形移位器109的最后位之后的下一个位。由于累加的码字长度仍然小于“16”,所以“进位”输出仍是“0”。码字C由译码字表119输出,其码字长度“5”由码字长度表118输出。
在第五时钟信号时,桶形移位器112的先前输出被锁存入锁存器110,以位C1-C5开始,第二桶形移位器127的先前输出被锁存入锁存器111。第一桶形移位器109的输出窗口根据先前码字长度移位5个位,因此以位d1开始。锁存器121中的“5”与锁存器131中先前的“14”相加,在加法器130的输出端得到“19”,这就将第二桶形移位器127移位至第20-第35位,产生了“进位”“1”。码字D由译码字表119输出,其长度“15”由码字长度表118输出。
在第六时钟信号时,由于先前“进位”为“1”,所以“读”为“1”并从缓冲器106中检索下一数据段,作为先前段的第二桶形移位器127的输入被移入锁存器126和锁存器125。按照与上述方式相同的方式,第一桶形移位器109的输出被移位至以下一个要被译码的字的第一个位e1开始。在模16先前累加的码字长度“15”来产生累加的码字长度“18”时,码字E被译码并产生一“进位”。
但是,上述普通变长译码设备必需使用ROM/PLA表来搜索码字。因此,当编码码字改变时,普通变长译码设备就有也许需要用户改变ROM或改变PLA的设计的问题。
发明内容
因此,本发明的第一个目的是提供利用霍夫曼码树高速译码变长码的方法,当译码码字改变时,不改变存储基于霍夫曼码树的码字的存储器或存储器的设计。
本发明的第二个目的是提供利用霍夫曼码树高速译码变长码的设备,当译码码字改变时,不改变存储基于霍夫曼码树的码字的存储器或存储器的设计。
为了实现本发明的上述第一个目的,提供了译码变长码的方法,该方法包括以下步骤:
a)接收具有多个基于霍夫曼码树结构的变长码字的用于译码的编码位串,按照最长的码字长度对接收的用于译码的编码位串进行压缩,输出被压缩的用于译码的编码位串;
b)计算被压缩编码位串的节点位置值来进行步骤a)输出的最长码字长度的译码,以便检测来自被压缩编码位串的码字的边界线来进行该最长的码字长度的译码;
c)根据步骤b)计算的节点位置值检测变长码字的码长度;
d)计算从级“0”至在相应于符合步骤c)的检测码长的码字的节点所位于的级之前的级的总终端节点数;
e)将步骤b)中所计算的节点位置值中的相应于在步骤c)中检测的码长的节点位置值与在步骤d)中计算的总终端节点数相加,输出该相加值;
f)从一存储器中读出具有步骤e)的相加值作为地址的待译码码字,该所述存储器根据译码码字的节点位置从正则霍夫曼码树的根起,顺序地存储该译码码字;
g)判断是否还有输入的待译码位串,如果没有输入的待译码位串,就结束程序,如果有输入的待译码位串,就返回到步骤a)。在步骤b)最好用公式
来计算节点位置值,其中的PTk表示与在霍夫曼树的级k中的从1至k的二进制输入位γ1,γ2,γ3....γk一致的节点位置,γi是每一位串γ1,γ2,γ3......的位值,Li是级“i”上的总终端节点数。最好通过从在步骤c)计算的节点位置值中的最先具有负值的节点位置值中减去“1”来计算码长来得到编码码字的长度。另外,其中在步骤d)中利用
来计算检测的码字长度相应的节点所位于的级之前的级的总终端节点数Sk,Sk表示从级“0”至级“k”前一级的总终端节点数,Li表示级“i”的终端节点数。
为了实现本发明的上述第二个目的,提供了译码变长码的设备,该设备包括:
压缩部分,接收在其中根据霍夫曼码树结构包含许多变长码字的用于译码的译码位串以便按照最长的码字长度压缩所接收的用于译码的编码位串,并且移出译码码字以便按照最长码字长度对在用于译码的编码位串中的除译码码字外的后续编码位串进行压缩;
边界线取样部分,从压缩部分接收最长码字长度的被压缩的用于译码的编码位串来对码字的边界线进行取样,以便并行地计算具有最长码字长度的所接收的用于译码的编码位串的节点位置值和输出所计算的节点位置值,还输出所计算的节点位置值的最高有效位;
至少一个寄存器,存储从级“0”至在相应具有霍夫曼树结构的码字译码的级之前的级的总终端节点数;
码长检测部分,根据由边界线取样部分得出的所计算的节点位置值的最高有效位检测来自边界线取样部分的译码位串中的用于译码的变长码字的长度,并且产生选择相应于被检测的变长码字长度的节点位置值的第一选择信号和产生为了选择及使能至少一个寄存器中的寄存器来存储从级“0”至在相应于被检测的变长码字长度的节点所位于的级之前的级的总终端节点数的第二选择信号;
多路复用器,顺序输出由码长检测部分的第一选择信号选择的边界线取样部分的相应节点位置值;
锁存器,锁存寄存器中的从级“0”至相应级之前的级的总终端节点数中的总终端节点数以及多路复用器的相应的节点位置值;
加法器,将相应节点位置值与总终端节点数相加。输出相加值;以及
存储器,按照编码码字的节点位置存储从正则码树的根起的译码码字,并且利用加法器的相加值作为地址输出相应的译码码字。
压缩部分最好包括从接收译码位串中移出译码码字的桶形移位器。码长检测部分最好包括多个异或门,它们对边界线取样部分的节点位置值的最高有效位在逻辑上进行异或组合,以便使能至少一个寄存器中的一个寄存器。锁存器包括锁存在寄存器中的多个总终端节点数中的总终端节点数的第一锁存器和锁存来自多路复用器的相应节点位置值的第二锁存器。存储器是只读存储器、随机存取存储器和可编程逻辑阵列中的任一种。并且,霍夫曼码树包括具有符号的终端节点和没有符号的连接节点,具有使其终端节点位于一级中的全部连接节点左侧的正则霍夫曼码树。可以不增大平均码长地将霍夫曼码树变换为正则霍夫曼码树。
在本发明的变长码译码方法和设备中,由于变长编码码字按照与正则霍夫曼码树结构的级一致的节点顺序存储在查阅存储器中,并且利用预定的计算操作来检测编码码字的节点顺序,所以在译码变长编码码字时该节点顺序被作为译码码字的地址。因此,当霍夫曼码树被中央系统的操作改变时,可以不改变硬件而按照只在存储器和锁存器中存储变量的方式来实现变长码的译码。还有,由于在本发明中可以利用并行计算来根据时钟对编码码字进行处理,不考虑译码码字的长度,所以能够以比以位为单位进行译码的普通变长码译码设备和方法高的速度译码编码码字。
附图说明
通过参看附图描述本发明的最佳实施例将更加清楚其上述目的和优点。
图1是普通变长译码器的方框图;
图2是说明图1的译码器在几个时钟周期内的译码操作实例的图示;
图3是表示用于图2实例的输入位流的图示;
图4是说明可在本发明中使用的正则霍夫曼码树的结构的示意图;
图5是说明本发明一实施例的变长码译码设备的配置的方框图;
图6是表示图5所示的码长检测部分的实例的电路图;
图7是说明本发明一实施例的变长译码方法的流程图。
具体实施方式
以下将参看附图详细描述本发明一实施例的译码变长码的方法和设备的物理结构、电路配置和操作方法。
图4示意性地说明正则霍夫曼码树的结构。有n个符号的霍夫曼码树由(2n-1)个节点组成。即(2n-1)个节点包括有符号的n个终端节点和没有符号的(n-1)个连接节点。正则霍夫曼码树的结构是全部终端节点都位于一级上全部连接节点的左侧。可以不增大平均码长地将所有霍夫曼码树变换为正则霍夫曼码树。在图4中,示出了[a,b,c,d,e,f,g,h]的正则霍夫曼码树的结构。8个符号都位于所有连接节点的左侧。每一符号具有从根到其终端节点的作为码字的编码位串。例如,符号C具有3个位的码字101,符号f具有5个位的码字11110。即每一符号具有与其出现概率一致的霍夫曼码树的变长码字。图4中所示的[x:y]的意义如下。“x”表示相应码字的符号值。“y”表示该符号存储在存储器中的相应地址。表1表示每一符号的存储器地址。
表1霍夫曼二进制树的存储器映象
存储器地址 符号数据
0 a
1 b
2 c
3 d
4 e
5 f
6 g
7 h
例如,[C:2]表示包括3个位的变长码字“101”的符号“C”,符号“C”意味着它被存储在存储器的地址“2”中。最长的码字长度在图4中是6个位,相应于符号“g”和“h”。
图5表示本发明一实施例的变长码译码设备的配置。参看图5,本发明一实施例的变长码译码设备包括压缩部分51、边界线取样部分52、寄存器53、码长检测部分54、多路复用器55、锁存器56、加法器57和存储器58。压缩部分51接收在其中根据霍夫曼码树结构包含了许多变长码字的待译码编码位串,压缩部分51按照最长的码字长度压缩接收的待译码编码位串,利用其内的桶形移位器511移出译码码字,以便按照最长的码字长度对除在待译码编码位串内的译码码字外的连续编码位串进行压缩。边界线取样部分52从压缩部分51接收最长码字长度的被压缩待译码编码位串来取样码字的边界线,利用后面将说明的公式(1)计算PTk来将所计算的PTk输出给多路复用器55,输出计算的PTk的MSB(Most Significant Bit,最高有效位)给码长检测部分54以便判断所计算的PTk是正还是负。计算PTk的方法如下: 其中的PTk表示与在霍夫曼树的k级中的从1至k的二进制输入位γ1,γ2,γ3....γk一致的节点位置,(每一级的顶部是节点位置“0”,每当级向下递降时节点位置增加“1”),γi是每一位串(γ1,γ2,γ3....)的位值,Li是级“i”的总终端节点数。即当最长的码字长度是“M”时,边界线取样部分52并行地计算1≤i≤M的所有PTi。一码字的全部PTk为正值,该正值表示节点位置。但是,在一码字边界线以外的所有PTi都具有负值。因此,从所有PTi中首先具有负值的PTi的“i”中减去“1”的数值就成为编码码字的长度。在寄存器53中,包括S1,S2,S3......SM的Si分别被存储在第一寄存器531、第二寄存器532、第三寄存器533......第M寄存器53M中。寄存器53根据码长检测部分54的输出信号的电平将存储在第一寄存器531、第二寄存器532、第三寄存器533......第M寄存器53M中的一个寄存器中的Si输出给锁存器56的第一锁存器561。
码长检测部分54根据由边界线取样部分52得出的所计算的节点位置值PTk的MSB从边界线取样部分52的译码位串中检测用于译码的变长码字长度,产生选择相应于被检测的变长码字长度的节点位置的第一选择信号和产生选择及使能至少一个寄存器53中的寄存器来存储从级“0”至在相应于被检测的变长码字长度的节点所位于的级之前的级的总终端节点数的第二选择信号。Sk是利用后面将描述的公式(2)所得到的计算值,它表示从级“0”至级“i”之前的级的总终端节点数。
图6表示图5所示码长检测部分的电路图。码长检测部分54包括多个异或门61、62、63......和6M,它们对边界线取样部分52提供的PTk的MSB进行逻辑上的异或组合,以便使能寄存器53中的一个寄存器。多路复用器55顺序地输出根据第一选择信号选择的边界线取样部分52的节点位置值PTk,以便输出码长检测部分54的Sk给锁存器56的第二锁存器562。锁存器56包括第一和第二锁存器561和562。锁存器56锁存(暂存)来自寄存器53的一个Si和来自多路复用器55的一个PTi。加法器57利用后面将描述的公式(3)将一个PTi与锁存器56的一个Si相加,输出相加值Aij给存储器58。
Aij=Si+PTi (3)这里的Aij是一终端节点的码字位于正则霍夫曼码树中的“i”级的“j”位置的存储器地址。换句话说,加法器57将在其中存储了相应于在相应于搜索边界线的码字的节点的级中的搜索边界线的码字的节点位置值Si的第二锁存值与在其中存储了从级0至在相应于搜索边界线的码字的节点所位于的级之前的级的总终端节点数的第一锁存值相加。在存储器58中,译码码字按照编码码字的节点位置从正则码树的根起被存储,利用加法器57的Aij作为地址输出相应译码码字,具有ROM、RAM或可编程逻辑阵列(PLA)。
以下面通过对作为二进制编码位串“101100001110......”的待译码码字进行译码来说明变长码译码设备和变长码译码方法的操作。该二进制位串“101100001110......”代表符号串“cbaae......”。图7是说明本发明一实施例的变长码译码方法的流程图。
本发明的译码方法将说明如下,在查阅表存储器中,根据相应于编码码字的正则码树的终端节点从根至最低级地顺序存储待译码码字。压缩部分51计算指出在存储器58中存储待译码码字的位置的地址值。
在步骤S71,压缩部分51接收待译码编码位串“101100001110......”,按照最长的码字长度(M)6只压缩接收的待译码编码位串中的接收位串“101100”,然后输出压缩位串“101100”给边界线取样部分52。然后在步骤S72,边界线取样部分52并行地从压缩部分51接收最长码字长度的压缩待译码编码位串来取样码字的边界线和利用公式(1)计算节点位置值PTk。在该实施例中,由于如图4所示最长的码字长度是6个位,所以边界线取样部分52利用γ1γ2γ3γ4γ5γ6计算所有1≤i≤6范围的PTi。通过利用公式(1)将“1”代入“K”如下地计算PT1。
在此期间,由于γi是二进制代码“1”和代表在每一级中的终端节点数的L0和L1分别是十进制代码“0”和“1”,所以PT1值可如下地得到。
PTi=20·1-21·0=1
PT4按照相同的方式通过将“4”代入“K”来如下地进行计算,因为γ1γ2γ3γ4是二进码代码“1011”,并且代表每一级中的终端节点数的L0,L1,L2和L3分别是“0”,“1”,“0”和“3”, =(23·γi+22·γ2+21·γ3+20·γ4)-(24·L0+23·L1+22·L2+21·L3)=-3
当十进制代码“-3”被变换为2的补码时,十进制代码“-3”用6个位表示成为“1011101”。因为最左的位MSB是“1”,所以能够指出PT4是负值。可以按照与上述方式相同的方式计算PT2,PT3,PT5和PT4的各个值。结果如以下的表2所示。
表2
PTk |
PTk |
正负号 |
十进制 |
二进制(MSB→LSB) |
PT1 |
1 |
000001 |
正 |
PT2 |
0 |
000000 |
正 |
PT3 |
1 |
000001 |
正 |
PT4 |
-3 |
111101 |
负 |
PT5 |
-8 |
111000 |
负 |
PT6 |
-18 |
101110 |
负 |
此时,边界线取样部分52输出所计算的PT1,PT2,PT3,PT4,PT5和PT6给多路复用器55以便使用译码码字的地址。边界线取样部分52还输出PT1,PT2,PT3,PT4,PT5和PT6的计算值的MSB0,0,0,1,1和1给码长检测部分54,以便判断PT1,PT2,PT3,PT4,PT5和PT6的计算值是正还是负。即在本发明中,由于节点数已被存储在寄存器53的第一、第二、第三、第四、第五、第六......第M寄存器531、532、533、534、535、536......53M中,所以码长检测部分54从边界线取样部分52接收PT1,PT2,PT3,PT4,PT5和PT6的计算值的MSB0,0,0,1,1和1来控制相应的寄存器。即码长检测部分54通过第一异或门61的第一输入端接收MSB0,0,0,1,1和1的第一位“0”,通过第一异或门61的第二输入端和第二异或门62的第一输入端接收第二位“0”,通过第二异或门62的第二输入端和第三异或门63的第一输入端接收第三位“0”,通过第三异或门63的第二输入端和第四异或门64的第一输入端接收第四位“1”,通过第四异或门64的第二输入端和第五异或门65的第一输入端接收第五位“1”,通过第五异或门65的第二输入端和第六异或门66的第一输入端接收第六位“1”,通过第六异或门66的第一输入端接收第六位“1”和通过第六异或门66的第二输入端接收“1”以便只使能第三异或门63成为“1”。因此,为“1”的S3从如上所述已被使能的第三异或门63输出给第一锁存器561。
如表2所示,因为PT1,PT2和PT3的MSB都是“0”,所以它们都具有正号。PT1,PT2和PT3的十进制代码“1”、“0”和“1”分别指出在相应极上的节点位置。因此PT4,PT5和PT6的MSB都是“1”,所以它们都具有负号。因此,码长检测部分54可以通过搜索产生“1”的位置,即在边界取样部分52的PTk中最先的负值来计算当前译码码字的最后位所在的码树结构的级。即根据输入的位串计算第一码字长度。在本发明的实施例中,在步骤S73中通过从“i”、即最先产生负值的“4”中减去“1”(i-1=4-1)获得了位于第三级中最先指出译码码字长度的码字长度“3”(即“101100001110......”的“101”)。然后在步骤S74中利用公式(2)计算在从级“0”至在相应于码字长度“3”的译码码字“101”的码树结构中的节点所位于的级之前的级的总节点数S3。
码长检测部分54然后根据所计算的码字长度“3”产生第二选择信号,用于从边界线取样部分52选择所计算的PT3、即在用于译码的被检测码字的码树结构的节点所在级上的节点位置,并输出所产生的第二选择信号给多路复用器55。然后多路复用器55选择PT3值来输出给第二锁存器562。
然后,在步骤S75,加法器57将第二锁存器562的PT3与第一锁存器561的S3相加,输出相加值A33给存储器58。相加值A33是其中存储了相应于搜索代码边界线的编码码字的译码码字的存储器58的地址。因此,在步骤S76,存储器58从加法器57接收地址A33=2以便输出相应于该地址“2”的译码码字“C”,所以码字被译码。然后,压缩部分51从码长检测部分54接收译码码字“101”的码长“3”,它按照最长的码字长度(M)6压缩后续位中除译码位串“101”外的输入位(100001110......)(100001),将压缩位串“100001”输出给边界线取样部分52,以同样的方式译码压缩位串“100001”,因此能够对全部输入位串100001110......进行译码。
压缩部分51然后在步骤S77中判断是否还有待译码位串。作为步骤S77判断的结果,如果没有待译码位串并且译码已完成,压缩部分51就结束译码。但是,当有待译码位串时,压缩部分51就返回到步骤S71,以同样的方式重复在步骤S71之后的操作。
换句话说,首先计算译码码字长度,利用公式(3)计算存储了该码字的存储器地址。即通过将在霍夫曼码树中的相应码字的PTi与其Si相加来获得该存储器地址。在该实施例中,码长是3位。因此存储器地址可以根据PT3+S3来得到。由于PT3如表2所示是“1”而S3作为从根至级“2”的总终端节点数是“1”,所以存储器地址是“2”。因此,在最后的步骤中,系统通过读出相应于存储器地址“2”的数据得到了最后的译码符号。即用户能够知道在存储器地址“2”中存储的译码符号是“C”。换句话说,通过计算操作得到了在编码位串中的三个有效位γ1γ2γ3(=“101”)相应于符号“C”的码字。可以通过将剩余的编码位串移位多译码码字的码长来利用与上述方式相同的方式对其进行编码。即因为γ1γ2γ3被译码,所以桶形移位器从译码位串中移出被译码的γ1γ2γ3并接收后续值γ3γ4γ5γ6γ7γ8γ9γ10γ11......(“100001110......”)来按照同样的方式译码这些被接收的后续值γ3γ4γ5γ6γ7γ8γ9γ10γ11......。因此,就得到了相应于位串101100001110......的信息符号串“cbaae......”。
如上所述,根据本发明,由于变长编码码字按照与正则霍夫曼码树结构的级一致的节点顺序存储在查阅存储器中,并且利用预定的计算操作来检测编码码字的节点顺序,所以在译码变长编码码字时节点顺序被用作译码码字的地址。因此,当霍夫曼码树被中央系统的操作改变时,可以不改变硬件而按照只在存储器和锁存器中存储变量的方式来实现变长码的译码。还有,由于在本发明中可以利用并行计算来根据时钟对编码码字进行处理而不考虑译码码字的长度,所以能够以比以位为单位进行译码的普通变长码译码设备和方法高的速度译码编码码字。因此,本发明可被用于能够补偿运动的逆压缩图像,例如MPEG1、MPEG2和H261,还可被用于静止图像的多重压缩,例如JPEG,以及所有能进行熵编码的应用。
在不违背本发明的精神或主要特点的情况下,可以按照其它具体的方式来实施本发明。因此应当从所描述的各个角度来看待目前的实施例,本发明的范围由所附的权利要求而不是由以上描述来指出,在权利要求的等同物的意义和范围之内的所有改动因此都将被权利要求所包容。