编码器的制作方法

文档序号:2822258阅读:456来源:国知局
专利名称:编码器的制作方法
技术领域
本发明涉及一种使用霍夫曼代码的编码器,具体地说,本发明涉及一种能够从多个霍夫曼代码簿中选择一个最佳代码簿从而使用最佳选择的霍夫曼代码簿对数字数据进行编码的编码器。
近年来,高效音频信号压缩方法使用霍夫曼编码方案对量化音频信号的频数进行编码。下面将描述例如在MPEG2-AAC标准中描述的传统数据压缩方法(见ISO/IEC 13818-7)。
首先,经过MDCT(改进的离散余弦变换)操作将输入PCM(脉冲码调制)信号转换成频谱数据的1024个元素。这个处理在“ISO/IEC 13818-7 ANNEX B2.3 FilterBank and block switching”进行了描述,这里不再讨论。“ISO/IEC13818-7ANNEX B 2.3 Filter Bank and block switching”的全部内容在这里作为参考。
然后,使用一种非线性量化方法量化(转换成整数)所述频谱数据的1024个元素。这个处理在“ISO/IEC 13818-7 ANNEX B 2.7 Quantizing”做出了详细的描述,这里不再讨论。“ISO/IEC 13818-7 ANNEX B 2.7 Quantizing”的全部内容在这里作为参考。
然后,量化频谱数据的1024个元素被分组成一定数量的比例因子频带(在本说明书中,比例因子频带(SFB)也可以被称之为“数据组”)。使用例如48KHz的取样频率,量化频谱数据的1024个元素将被分组成49个SFB。参看

图14,频谱数据的分组如表450所示执行。例如,所述频谱数据被分组成多个SFB,以便使SFB0包括频谱数据的4个元素0-3(行451所示)、SFB1包括频谱数据的4个元素4-7(行452所示)和SFB2包括频谱数据的4个元素8-11(行453所示)(见“ISO/IEC 13818-73.8表”)。
参看图15,表500示出了已经在上述处理中被量化和分组成一定数量SFB(SFB0-SFB(G-1))的频谱数据。在图15中,指定“SFB”的左列501示出了一定数量的SFB(SFB0-SFB(G-1)),指定“频谱”的中心列502示出了频谱数据量,和指定“值”的右列示出了每个频谱数据的绝对值。
然后,对被量化和分组的频谱数据进行霍夫曼编码以用于每个SFB。所述霍夫曼编码操作是在从多个霍夫曼代码簿中选择的用于每个SFB的一个霍夫曼代码簿的基础上执行的。根据所述MPEG2-AAC标准,从11个霍夫曼代码簿(霍夫曼代码簿1-11)当中选择一个霍夫曼代码簿。但是,在下面的描述中,为简便起见,只使用4个霍夫曼代码簿(霍夫曼代码簿3-6)。
图16-19分别示出了霍夫曼代码簿3-6。在图16-19分别示出的霍夫曼代码簿3-6中,指定“索引”的最左边的一列表示将被编码的每个数据的索引号,指定“长度”的第二列表示每个编码数据的码长,和指定“代码字(16进制)”的第三列表示每个编码数据(代码字)的16进制形式。在图16-19中示出的霍夫曼代码簿3-6的每一个都包含与索引号0-80相关的每个编码数据的码长(长度)和每个编码数据的16进制形式(代码字)。
在图15所示的SFB0中,最大的绝对频谱数据值是4。根据MPEG2-AAC标准,利用输入信号的最大绝对值限制可以被选择用于输入信号的霍夫曼代码簿。这个限制是由图20所示的LAV(最大绝对值)确定的。一个霍夫曼代码簿的LAV表明可以使用特定霍夫曼代码簿进行编码的输入数据的最大绝对值。根据图20所示的表,当SFB0中的最大绝对频谱数据值是4时,霍夫曼代码簿5和6是候选的霍夫曼代码簿。当对数据编码时由所述候选霍夫曼代码簿5导致的码长与当对数据编码时由所述候选霍夫曼代码簿6导致的码长进行比较。从中选择给出比较小码长的霍夫曼代码簿。在这个例子中,在霍夫曼代码簿5和6是候选的情况下,当对数据进行霍夫曼编码时由所述候选霍夫曼代码簿导致的码长如下计算首先,根据下述等式(1)和(2)计算两个索引值“index0”和“index1”index0=(D0+LAV)*(2*LAV+1)+(D1+LAV)…(1)index1=(D2+LAV)*(2*LAV+1)+(D3+LAV)…(2)其中,D0、D1、D2和D3分别表示SFB0的4个频谱数据元素(值)。所计算的“index0”和“index1”的值被用做所述索引值。在所述索引值的基础上获得与候选霍夫曼代码簿5和6相关的码长“长度”。
参看图15,将D0=4、D1=2、D2=0、D3=3和LAV=4代入等式(1)和(2),结果是index0=74和index1=43。参看图18所示的霍夫曼代码簿5,可以确定用于index0=74的长度=12和用于index1=43的长度=8,所以当使用霍夫曼代码簿5对数据进行霍夫曼编码时,所述码长将是20(12+8)位。参看图19所示的霍夫曼代码簿6,可以确定用于index0=74的长度是9和用于index1=43的长度是7,所以,当使用霍夫曼代码簿6对数据进行编码时所述编码长度将是16(9+7)。因此,选择候选霍夫曼代码簿6对SFB0中包括的每个频谱数据进行编码是特别有利的。因此选择霍夫曼代码簿6。
类似的,对于SFB1来讲,当利用霍夫曼代码簿5对数据进行编码时,所述码长将是18,当利用霍夫曼代码簿6对数据进行编码时将是13。因此,也选择霍夫曼代码簿6对包括在SFB1中的每个频谱数据进行编码是有利的。
对于图15所示的SFB2来讲,它的最大绝对频谱数据值是1,霍夫曼代码簿3-6是所述候选霍夫曼代码簿。对于霍夫曼代码簿5和6来讲,可以如上所述地确定被霍夫曼编码数据的码长;对一霍夫曼代码簿5的长度是9位,和对于霍夫曼代码簿6的长度是8位。
对于霍夫曼代码簿3和4来讲,如下计算霍夫曼编码数据的码长。霍夫曼代码簿3和4是所谓的“无符号”代码簿,它被用于对没有符号的数据(无符号数据)进行编码。当使用无符号代码簿时,输入数据的绝对值被进行霍夫曼编码,而被忽略符号的数量被单独计数并加到霍夫曼编码操作的代码总合当中。被忽略符号的数量对应于将被编码数据的非零元素(需要符号的元素)的数量。在使用这种无符号霍夫曼代码簿对数据进行霍夫曼编码时导致的码长可以如下获得首先,根据等式(3)计算索引值“index0”index0=abs(D0)*(k^3)+abs(D1)*(K^2)+abs(D2)*k+abs(D3) …(3)其中,D0、D1、D2和D3分别表示SFB2的4个频谱数据元素(值),“abs(x)”表示x的绝对值,“^”表示取幂,和k=LAV+1。
所计算的“index0”的值被用做所述索引值,以用于获得与霍夫曼代码簿3和4中的每一个相关的“长度”。例如对于图15所示的SFB2来讲,D0=1、D1=-1、D2=1、D3=0和LAV=2。参看图16所示的霍夫曼代码簿3,长度=6被确定用于index0=39。由于符号信息位没有包括在从霍夫曼代码簿3中获得的代码字中,所以需要符号信息以重新存储所述代码位。所需符号信息位的数量等于SFB2频谱数据4个元素当中非零元素的数量。图15所示的SFB2包括三个非零元素。因此,需要将三个符号信息位加到所述霍夫曼编码的代码字上。结果,所述霍夫曼编码数据的码长是9(位)(长度=6+三个符号信息位)。
参看图17所示的霍夫曼代码簿4,长度=4可以被确定用于index0=39。三个符号信息位被再次加到长度=4。因此,霍夫曼编码数据的码长是7(位)(长度=4+三个符号信息位)。
这样,当使用霍夫曼代码簿3、4、5和6对SFB2进行霍夫曼编码时导致的码长分别是9、7、9和8。因此,选择霍夫曼代码簿4,利用这个霍夫曼代码簿4,可以获得最小的码长。
类似的,选择最佳的霍夫曼代码簿并用于对其它SFB中的每一个进行霍夫曼编码。通过从所选择的霍夫曼代码簿中输出作为编码数据并与每个索引号(例如能够通过上述获得的index0、index1等)相关的一个代码字(16进制)执行本身很简单的霍夫曼编码操作。
然后,关于每个SFB来讲,对所选择的霍夫曼代码簿的代码簿号进行编码。根据MPEG2-AAC标准,对霍夫曼代码簿号进行编码的这个操作如下执行。使用4位对被选择用于感兴趣SFB的霍夫曼代码簿的代码簿号进行编码。然后,然后使用5位对指出是否选择相同的霍夫曼代码簿用于与所述感兴趣SFB相邻的任意其它SFB的值进行编码。在图15所示的例子中,选择所述霍夫曼代码簿6用于相邻的SFB(SFB0-和SFB1)。因此,对于SFB0,使用4位(0110)对霍夫曼代码簿6的代码簿号(即6)编码,和使用5位(00001)对所述值(“1”)(该值指出选择相同的霍夫曼代码簿用于下述的SFB(SFB1))进行编码。接着,选择霍夫曼代码簿4用于SFB2。因此,使用4位(0100)对霍夫曼代码簿4的代码簿号(即4)进行编码。随后的位流取决于所选择用于随后SFB(SFB3)的霍夫曼代码簿,关于这一点下面将不再讨论。对于随后的SFB,所选择霍夫曼代码簿的代码簿号被进行类似的编码。
与上述讨论传统方法相关的问题在于选择用于每个SFB的最佳霍夫曼代码簿的处理需要进行大量的计算。这个问题的部分起因是符号信息位数量的计算,因为每当选择一个无符号代码簿时都要执行这种计算。这个问题也可能是由于为获得当利用霍夫曼代码簿对感兴趣的SFB进行编码时所导致的码长的操作所引起的,这个操作对每一个候选霍夫曼代码簿都要单独执行。
与传统方法相关的其它问题是从需要对每个所选择的霍夫曼代码簿编码的代码量的角度来讲,所述方法不可能总是能够选择最佳用于一个SFB的霍夫曼代码簿。换言之,传统方法选择用于SFB的一个霍夫曼代码簿以便使那个SFB编码数据量最小。传统方法不能在考虑编码每个所选择霍夫曼代码簿的代码簿数量所需代码量的同时选择最佳的霍夫曼代码簿使所有编码SFB的总代码数量最小。
根据本发明的一个方面,提供了一种编码器,包括G个存储部分(G是等于或大于1的整数),用于存储G组数据;一个霍夫曼代码簿选择部分,用于从H(H是等于或大于1的整数)个霍夫曼代码簿中选择用于存储在各存储装置中的数据组中的每一个的一个霍夫曼代码簿,所述霍夫曼代码簿中的每一个都具有一个代码簿号;G个霍夫曼编码部分,所述霍夫曼编码部分中的每一个使用由所述霍夫曼代码簿选择部分选择的用于一组数据的多个霍夫曼代码簿中的一个对G组数据中相应的一个进行霍夫曼编码;和一个代码簿号编码部分,用于对由所述霍夫曼代码簿选择部分选择的每个霍夫曼代码簿编码。所述霍夫曼代码簿选择部分包括一个码长计算部分,用于计算由使用每个霍夫曼代码簿的G组数据中的每一个的霍夫曼编码操作所导致的码长;还包括一个控制部分,用于在由所述码长计算部分所计算的码长的基础上选择一个适于该组数据的霍夫曼代码簿。当所选择的霍夫曼代码簿是一个无符号代码簿时,符号信息所需的位量已经预先被加到由所述码长计算部分计算的所述码长上。
在本发明的一个实施例中,所述码长计算部分有一个包括预先计算的用于每个霍夫曼代码簿的码长的数据表。
根据本发明的另一个方面,提供了一个编码器,包括G个用于存储G组数据的存储部分(G是等于或大于1的整数);用于选择存储在各存储部分中每组数据的H(H是等于或大于1的整数)个霍夫曼代码簿中的一个的霍夫曼代码簿选择部分,每个霍夫曼代码簿都具有一个代码簿号;G个霍夫曼编码部分,其中每个霍夫曼编码部分使用由所述霍夫曼代码簿选择部分选择的与一组数据相关的一个霍夫曼代码簿对G组数据中相应的一个进行霍夫曼编码;和一个代码簿号编码部分,用于对由所述霍夫曼代码簿选择部分选择的每个霍夫曼代码簿的代码簿号编码。所述霍夫曼代码簿选择部分包括一个用于计算由使用每个霍夫曼代码簿的G组数据中的一个进行霍夫曼编码操作所导致的码长的码长计算部分和一个用于在由所述码长计算部分计算的所述码长的基础上选择一个适于所述数据组的霍夫曼代码簿的控制部分。所述码长计算部分能够同时获得用于多个霍夫曼代码簿的码长。
在本发明的一个实施例中,码长计算部分自适应输出一组数据的霍夫曼编码操作所导致的码长以用于多个霍夫曼代码簿。所述控制部分选择霍夫曼代码簿中的一个,从码长计算部分输出一个用于该霍夫曼代码簿的最小码长。
在本发明的一个实施例中,所述码长计算部分自适应输出用于多个霍夫曼代码簿的由一组数据的霍夫曼编码操作导致的相应码长。所述控制部分在从所述码长计算部分输出的霍夫曼代码簿码长的基础上并从所述霍夫曼代码簿的代码簿号的角度选择一个霍夫曼代码簿。
在本发明的一个实施例中,所述控制部分通过首先获得码长Bmin和另一个码长Bg选择用于第(g+1)组数据(g是1≤g≤G-1的一个整数)的一个霍夫曼代码簿,所述码长Bmin是一个由使用从所述码长计算部分为其输出最小长度代码的一个霍夫曼代码簿的第(g+1)组数据的霍夫曼编码操作所导致的码长,码长Bg是一个由使用已经被选择用于第g组数据的霍夫曼代码簿Hg的第g组数据的霍夫曼编码操作所导致的码长,如果Bmin<(Bg-A)(A是一个预定整数),则选择霍夫曼代码簿Hmin,如果Bmin≥(Bg+A),则选择霍夫曼代码簿Hg。
在本发明的一个实施例中,所述控制部分选择一个从所述码长计算部分向其输出一个最小码长的霍夫曼代码簿作为用于第一组数据的霍夫曼代码簿。
在本发明的一个实施例,所述控制部分通过首先获得码长Bmin和另一个码长Bg选择用于第(g-1)(g是一个2≤g≤G的整数)组数据的一个霍夫曼代码簿,所述码长Bmin是一个由使用从所述码长计算部分向其输出一个最小码长的霍夫曼代码簿的第(g-1)组数据的霍夫曼编码操作导致的码长,所述码长Bg是一个由使用已经被选择用于第g组数据的霍夫曼代码簿Hg的第g组数据的霍夫曼编码操作导致的码长,如果Bmin<(Bg-A)(A是一个预定整数)则选择霍夫曼代码簿Hmin,或如果Bmin≥(Bg-A)则选择霍夫曼代码簿Hg。
在本发明的一个实施例中,所述控制部分选择由所述码长计算部分向其输出一个最小码长的霍夫曼代码簿作为用于第G组数据的霍夫曼代码簿。
在本发明的一个实施例中,当选择一个相同的霍夫曼代码簿用于两个或多个连续的数据组时,代码簿号编码部分利用等于预定整数A的一定数量的位对所述霍夫曼代码簿的代码簿号和连续数据组的号进行编码。
在本发明的一个实施例中,所述H个霍夫曼代码簿是用于对如MPEG2-AAC标准规定的频谱数据进行霍夫曼编码的11个霍夫曼代码簿。
在本发明的一个实施例中,所述码长计算部分自适应输出当使用在MPEG2-AAC标准规定的霍夫曼代码簿1-4对数据编码时导致的各个码长。所述码长计算部分具有一个第一表和第二表,所述第一表包括当使用与公用索引值相关的霍夫曼代码簿1和2对数据进行编码时导致的各码长,所述第二表包括当使用与所述公用索引值相关的霍夫曼代码簿3和4对数据编码时导致的各个码长。
在本发明的一个实施例中,符号信息所需位的数量被预先加到与包括在第二表中的霍夫曼代码簿3和4相关的每一个码长中。
在本发明的一个实施例中,所述第一表包括与i1相关的T1(F1(a、b、c、d))和T2(F1(a、b、c、d))的各个值,第二表包括与i2相关的T3(F2(a、b、c、d))+nonz(a、b、c、d)和T4(f2(a、b、c、d))+nonz(a、b、c、d),其中nonz(w、x、y、z)是-个函数,它给出了在w、x、y、z当中非零值的数量(w、x、y、z);F1(w、x、y、z)是一个如下规定的函数F1(w、x、y、z)=27*(w+1)+9*(x+1)+3*(y+1)+(z+1)(其中,w、x、y、z的绝对值是1或更小);F2(w、x、y、z)是一个如下规定的函数;F2(w、x、y、z)=27*abs(w)+9*abs(x)+3*abs(y)+abs(z)(其中,w、x、y、z中每一个的绝对值是2或更小);abs(x)是一个函数,它给出了x的绝对值;T1(index)到T4(index)中的每一个都是一个函数,它给出了当分别使用霍夫曼代码簿1到4对数据编码时导致的码长;a、b、c和d是表示一组数据的整数;i1和i2是作为a、b、c和d的函数而计算的索引值。
在本发明的一个实施例中,i1=(X^3)*(a+1)+(X^ 2)*(b+1)+X*(c+1)+(d+1),其中X是等于或大于3的正数;i2=(Y^ 3)*abs(a)+(Y^2)*abs(b)+Y*abc(c)+abs(d),其中,Y是等于或大于3的正数;和符号“^”表示取幂。
在本发明的一个实施例中,索引值i1是经过其中的每一个都用X位或更多位表示的a、b、c和d的位连接操作获得的,其中,X是一个等于或大于2的正数。索引值i2是经过其中的每一个都是由Y位或更多位表示的abs(a)、abs(b)、abs(c)和abs(d)的位连接操作获得的,其中,Y是一个等于或大于2的正数。
在本发明的一个实施例中,所述码长计算部分自适应输出当使用在MPEG2-AAC标准中规定的霍夫曼代码簿1到4对数据编码时导致的各码长。所述码长计算部分具有一个包括当使用与公用索引值相关的霍夫曼代码簿1到4编码数据时导致的各码长的数据表。
在本发明的一个实施例中,符号信息所需一定数量的位被预先加到包括在所述表中的与霍夫曼代码簿3和4相关的每一个码长上。
在本发明的一个实施例中,所述表包括与j相关的T1(F1(a、b、c、d))、T2(F1(a、b、c、d))、T3(F2(a、b、c、d))+nonz(a、b、c、d)和T4(F2(a、b、c、d))+nonz(a、b、c、d),其中,nonz(w、x、y、z)是一个给出w、x、y、z当中非零值数量的函数;F1(w、x、y、z)是一个如下规定的函数F1(w、x、y、z)=27*(w+1)+9*(x+1)+3*(y+1)+(z+1)(其中,w、x、y、z中每一个的绝对值是1或更小);F2(w、x、y、z)是一个如下规定的函数;F2(w、x、y、z)+27*abs(w)+9*(x)+3*abs(y)+abs(z)(其中,w、x、y、z中每一个的绝对值是2或更小);abs(x)是一个给出x绝对值的函数;T1(index)到T4(index)中的每一个都是一个函数,它给出当分别使用霍夫曼代码簿1到4对数据编码时所导致的码长;a、b、c和d是表示一组数据的整数;j是作为整数a、b、c和d的函数而计算的一个索引值。
在本发明的一个实施例中,索引值j是经过其中的每一个都是由Y位或更多位表示的a、b、c和d的位连接操作而获得的,其中,Y是等于或大于2的正数。
在本发明的一个实施例中,所述码长计算部分自适应输出当使用在MPEG2-AAC标准规定的霍夫曼代码簿5-10对数据编码时导致的各码长。所述码长计算部分具有包括当使用与公用索引值相关的霍夫曼代码簿5和6编码数据时导致的各码长的第一表、包括当使用与公用索引值相关的霍夫曼代码簿7和8编码数据时导致的各码长的第二表和包括当使用与公用索引值相关的霍夫曼代码簿9和10对数据编码时导致的各码长的第三表。
在本发明的一个实施例中,符号信息所需位的数量已经被预先加到与包括在第二表中的霍夫曼代码簿7和8相关的每个码长中。符号信息所需位的数量已经被预先加到与包括在所述第三表中的霍夫曼代码簿9和10相关的每个代长度中。
在本发明的一个实施例中,所述第一表包括与i3相关的T5(F3(a,b))和T6(F3(a,b))的各值,所述第二表包括与i4相关的T7(F4(a,b))+nonz(a,b)和T8(F4(a,b))+nonz(a,b)的各值;和第三表包括与i5相关的T9(F5(a,b))+nonz(a,b)和T10(F5(a,b))+nonz(a,b),其中,nonz(x,y)是一个给出x和y当中非零值的数量的函数;F3(x,y)是如下规定的一个函数F3(x,y)=9*(x+4)+(y+4)(其中,x和y中每一个的绝对值是4或更小);F4(x,y)是如下规定的一个函数F4(x,y)=8*abs(x)+abs(y)(其中,x和y中的每一个的绝对值是7或更小);F5(x,y是如下规定的一个函数F5(x,y)=13*abs(x)+abs(y)(其中,x和y中的每一个的绝对值是12或更小);abs(x)是给出x绝对值的一个函数;T5(index)到T10(index)中的每一个是给出当分别使用在MPEG2-AAC标准规定的霍夫曼代码簿5到10对数据编码时所导致码长的函数,i3、i4和i5是作为整数a和b的函数所计算的引导值。
在本发明的一个实施例中,i3=X*(a+4)+(b+4),其中,X是等于或大于9的正数;i4=Y*abs(a)+abs(b),其中,Y是等于或大于8的正数;i5=Z*abs(a)+abs(b),其中,Z是等于或大于13的正数。
在本发明的一个实施例中,索引值i3是经过其中每一个都是利用X位或更多位表示的a和b的位连接操作获得的,其中,X是等于或大于4的正数,索引值i4是经过其中的每一个都是利用Y位或更多位表示的a和b的位连接操作获得的,其中,Y是等于或大于4的正数。索引值i5是经过其中的每一个都是利用Z位或更多位表示的a和b的位连接操作获得的,其中,Z是等于或大于5的正数。
在本发明的一个实施例中,所述码长计算部分自适应输出当使用在MPEG2-AAC标准中规定的霍夫曼代码簿5-10编码数据时导致的各码长。所述码长计算部分具有当使用与公用索引值相关的霍夫曼代码簿5到10编码数据时导致的各码长的一个表。
在本发明的一个实施例中,符号信息所需位的数量被预先加到与包括在所述表中的霍夫曼代码簿7到10相关的每个码长中。
在本发明的一个实施例中,所述表包括与k相关的T5(F3(a,b))、T6(F3(a,b))、T7(F4(a,b))+nonz(a,b)、T8(F4(a,b))+nonz(a,b)、T9(F5(a,b))+nonz(a,b)和T10(F5(a,b))+nonz(a,b)的各个值,其中,nonz(x,y)是给出x和y当中非零值数量的一个函数;F3(x,y)是一个如下规定的函数F3(x,y)=9*(x+4)+(y+4)(其中,x和y当中每一个的绝对值是4或更小);F4(x,y)是一个如下规定的函数F4(x,y)=8*abs(x)+abs(y)(其中,x和y中每一个的绝对值是7或更小);F5(x,y)是一个如下规定的函数F5(x,y)=13*abs(x)+abs(y)(其中,x和y当中的每一个是12或更小);abs(x)是给出x绝对值的一个函数;T5(index)到T10(index)中的每一个是给出当分别使用在MPEG2-AAC标准中规定的霍夫曼代码簿5到10编码数据时导致的长度的函数;a和b是表示一组数据的整数;k是作为整数a和b的函数计算的索引值。
在本发明的一个实施例中,索引值是经过其中的每一个都是利用Z位或更多位表示的a和b的位连接操作获得的,其中Z是等于或大于5的正数。
在本发明的一个实施例中,所述码长计算部分自适应输出指出当输入数据值位于能够使用所述霍夫曼代码簿计算码长的可变范围之外时一个霍夫曼代码簿无效的无效信号。当所述控制部分接收与所述霍夫曼代码簿相关的一个无效信号时,该控制部分不能自适应选择一个霍夫曼代码簿。
在本发明的一个实施例中,函数T1(a,b,c,d)的值和函数T2(a,b,c,d)的值被分别存储在就所述索引值i1而言的MSB一侧和LSB-侧上,所以,至少m1位的“0”(m1一个正整数)被插入在函数T1的值和函数T2的值之间。函数T3(F2(a,b,c,d))+nonz(a,b,c,d)的值和函数T4(F2(a,b,c,d))+nonz(a,b,c,d)的值被分别存储在就索引i2而言的MSB-侧和LSB一侧上,所以,至少m1的位“0”被插入在函数T3的值和函数T4的值之间。
在本发明的一个实施例中,函数T1(F1(a,b,c,d))的值、函数T2(F1(a,b,c,d))的值、函数T3(F2(a,b,c,d))+nonz(a,b,c,d)的值和函数T4(F2(a,b,c,d))+nonz(a,b,c,d)的值被按照这个顺序存储在就索引值j而言的从MSB-侧到LSB一侧上,所以,至少m1的位“0”(m1是一个正整数)被插入在T1的值和T2的值之间、T2的值和T3的值之间和T3的值和T4的值之间。
在本发明的一个实施例中,m1的值是经过对以2为底取n1的对数(log2(n1))并四舍五入获得的一个整数值,其中,n1是通过将包括在G组数据当中每个组中的最小数据量除以4获得的一个值。
在本发明的一个实施例中,函数T5(F3(a,b))的值和函数T6(F3(a,b))的值被分别存储在就索引值i3而言的MSB-侧和LSB一侧上,所以,至少m2的位“0”(m2是一个正整数)被插入在函数T5的值和函数T6的值之间。函数T7(F4(a,b))+nonz(a,b)的值和函数T8(F4(a,b))+nonz(a,b)的值被分别存储在就索引值i4的MSB一侧和LSB一侧上,所以,至少m2的位“0”被插入在函数T7的值和函数T8的值之间。函数T9(F5(a,b))+nonz(a,b)的值和函数T10(F5(a,b))+nonz(a,b)的值被分别存储在就索引值i5而言的MSB一侧和LSB一侧上,所以至少m2的位“0”被插入在函数T9的值和函数T10的值之间。
在本发明的一个实施例中,函数T5(F3(a,b))的值、函数T6(F3(a,b))的值、函数T7(F4(a,b))+none(a,b)的值、函数T8(F4(a,b))+nonz(a,b)的值、函数T9(F5(a,b))+nonz(a,b)的值和函数T10(F5(a,b))+nonz(a,b)的值被分别按照这个顺序存储在就索引值k的从MSB一侧到LSB的一侧上,所以,至少m2(m2是一个正整数)的位“0”被插入在T5的值和T6的值之间、T6的值和T7的值之间、T7的值和T8的值之间、T8的值和T9的值之间、和T9的值和T10的值之间。
在本发明的一个实施例中,m2的值是以2为底对n2取对数(log2(n2))并四舍五入获得的一个整数值,其中,n2是将包括在G组数据当中的每个组中的最小数据量除以2获得的一个值。
因此,这里所描述的本发明提供了一种能够从多个霍夫曼代码簿中选择一个最佳霍夫曼代码簿从而使用最佳选择的霍夫曼代码簿对数字数据编码的编码器。所述编码器还能够在减少了时间量的期间内选择霍夫曼代码簿并有效地使用较少的计算量编码所述数字数据。
通过下面结合附图的详细描述,对于本专业技术领域内的普通技术人员来讲,本发明的这些和其它优点将变的更加明显。
图1的框图示出了本发明编码器10的结构;图2示出了存储在在第一码长计数器114中提供的表存储器中的表200;图3示出了存储在在第二码长计数器115中年提供的表存储器中的表400;图4示出了用于从霍夫曼代码簿1-4中选择一个的霍夫曼代码簿选择器108的结构;图5示出了用于计算当使用霍夫曼代码簿1-4时将导致的码长的另外一个第一码长计数器114’的结构;图6示出了用于计算当使用霍夫曼代码簿5-10时将导致的码长的码长计数器130的结构;图7示出了用于计算当使用霍夫曼代码簿5-10时将导致的码长的另一个码长计数器120;图8示出了用于计算与霍夫曼代码簿1-4相关的各码长的表存储器的内容;图9示出了图8所示的公用表1100的结构;图10示出了用于计算与霍夫曼代码簿5-10相关的各码长的表存储器的内容;图11示出了图10所示公用表1300的结构;图12示出了用于计算与霍夫曼代码簿5-10相关的各码长的表存储器的内容;图13示出了图12所示功用表1500的结构;图14示出了用于规定量化频谱数据分组的表450;图15示出了已经被量化和分组成一定数量的SFB的频谱数据的表500;图16示出了第一霍夫曼代码簿104(MPEG2-AAC标准的霍夫曼代码簿3)的内容;图17示出了第二霍夫曼代码簿105(MPEG2-AAC标准的霍夫曼代码簿4)的内容;图18示出了第三霍夫曼代码簿106(MPEG2-AAC标准的霍夫曼代码簿5)的内容;图19示出了第四霍夫曼代码簿107(MPEG2-AAC标准的霍夫曼代码簿6)的内容;和图20示出了在MPEG2-AAC标准的编码方案中使用的频谱霍夫曼代码簿参数的表1000。
下面将参考附图描述本发明的各个实施例。下面的实施例基本上都描述了一种用于根据MPEG2-AAC标准产生编码数据的编码器。当所述MPEG2-AAC标准使用11个霍夫曼代码簿的同时,为简便起见,只使用在MPEG2-AAC标准中规定的4个霍夫曼代码簿(霍夫曼代码簿3-6)。因此,在下述的实施例中,将详细描述使用霍夫曼代码簿3-6对量化频谱数据编码的处理。
(实施例1)图1示出了根据本发明第一实施例编码器10的结构。编码器10包括“G”个存储器100-103、“H”个霍夫曼代码簿104-107、霍夫曼代码簿选择器108、“G”个霍夫曼编码器109-112和代码簿号编码器113(G和H中的每一个都是等于或大于1的整数)。
提供其中的每一个都已经被量化的预定数量的频谱数据元素。所述频谱数据元素被分成数量为“G”的数据组(也被称之为“比例因子频带”或“SFB”)。这些SFB分别被存储在存储器100到103中。存储在存储器100到103中的SFB被分别输入给霍夫曼编码器109到112并输入给霍夫曼代码簿选择器108。
霍夫曼代码簿选择器108从“H”个霍夫曼代码簿104到108中选择一个适用于每个SFB的横断面代码簿。霍夫曼代码簿选择器108将所选择的霍夫曼代码簿的内容分别输出给霍夫曼编码器109到112,并将所选择的霍夫曼代码簿的代码簿号输入给代码簿号编码器113。霍夫曼编码器109到112使用由霍夫曼代码簿选择器108选择的各霍夫曼代码簿对存储在存储器100到103中的SFB进行编码并输出。代码簿号编码器113编码并输出所选择的每个霍夫曼代码簿的代码簿号。
第一存储器100存储“G”个SFB当中的第一SFB(SFB0),类似的,第二存储器101存储第二SFB(SFB1),第三存储器102存储第三SFB(SFB2)等等。最后,第G个存储器存储第G个SFB(SFB(G-1))。根据MPEG2-AAC标准,数据的分组是一种公知技术。如在现有技术中描述的,这可以根据图14所示的表450来进行。
利用根据MPEG2-AAC标准的编码方案,在与霍夫曼编码频谱数据相关的MPEG2-AAC标准中规定了“H”个霍夫曼代码簿104到107。如上所述,在将在下面描述的所述实施例中使用的“H”个霍夫曼代码簿的数量是4。在MPEG2-AAC标准中,第一到第四霍夫曼代码簿104到107被分别规定为霍夫曼代码簿3到6。
所述霍夫曼代码簿选择器108自适应选择最佳用于对存储在“G”个存储器100到103中的每个SFB进行霍夫曼编码的4个霍夫曼编码器104到107中的一个。霍夫曼代码簿选择器108包括第一码长计算器114、第二码长计算器115和控制器116。
第一码长计算器114同时计算使用第一霍夫曼代码簿104(霍夫曼代码簿3)对存储在G个存储器100到103中的一个SFB进行霍夫曼编码操作导致的(代码所述位数)和使用第二霍夫曼代码簿105(霍夫曼代码簿4)对所示SFB进行霍夫曼编码操作导致的码长。类似的,第二码长计算器115同时计算使用第三霍夫曼代码簿106(霍夫曼代码簿5)对存储在G个存储器100到103中的一个SFB进行霍夫曼编码操作导致的码长和使用第四霍夫曼代码簿107(霍夫曼代码簿6)对所述SFB进行霍夫曼编码操作导致的码长。控制器116将存储在G个存储器100到103中的每个SFB输入给两个码长计算器中的一个并在来自两个码长计算器114和115的输出的基础上选择一个最佳用于每个SFB的霍夫曼编码操作的霍夫曼代码簿。
图2示出了表200,该表被存储在第一码长计算器114中的一个表存储器中。表200示出了与在所述表200中被用做地址的列“index”中示出的每个索引值相关的使用第一霍夫曼代码簿104(霍夫曼代码簿3)由输入SFB的霍夫曼编码操作导致的码长或位的数量并示出了使用第二霍夫曼代码簿105(霍夫曼代码簿4)对所述SFB进行霍夫曼编码操作导致的码长或位的数量(在列“length ofHCB4”中)。所述索引值被作为包含在每个输入SFB中的频谱数据元素(值)的函数进行计算。
图3示出了表400,该表被存储在第二码长计算器115中的表存储器中。表400示出了与在被用做表400中的地址的列“index”中示出的每个索引值相关的使用第三霍夫曼代码簿106(霍夫曼代码簿5)对输入SFB进行霍夫曼编码操作导致的码长或位的数量(在列“length of HCB5”中)和使用第四霍夫曼代码簿107(霍夫曼代码簿6)对所述SFB进行霍夫曼编码操作导致的码长或位的数量(在列“length of HCB6”中)。所述索引值被再次作为包含在每个输入SFB中的频谱数据元素(值)进行计算。
第一霍夫曼编码器109(图1)使用由霍夫曼代码簿选择器108最佳选择的霍夫曼代码簿对第一组频谱数据(SFB0)进行霍夫曼编码。类似的,第二霍夫曼编码器110使用最佳选择用于第二组频谱数据(SFB1)的一个霍夫曼代码簿对第二组频谱数据(SFB1)进行霍夫曼编码,等等。最后,第G个霍夫曼编码器112使用最佳选择用于第G组频谱数据(SFB(G-1))的一个霍夫曼代码簿对第G组频谱数据(SFB(G-1))进行霍夫曼编码。
代码簿号编码器113对由所述霍夫曼代码簿选择器108最佳选择用于每个SFB的霍夫曼代码簿的代码簿号进行编码。
下面将描述将输入的频谱数据分组成多个SFB和将所述SFB存储到存储器中的操作。
图14示出了表450,该表规定了将量化频谱数据的1024个元素分组成多个SFB。如图14所示,量化频谱数据的1024个元素被分组成SFB0到SFB48。在图14中,左列“SFB”示出了SFB的号,右列“offset”示出了包含在每个SFB中第一频谱数据元素的数量。注意,为了节省空间的目的,以两列的形式提供了该表。
图14所示的表450被用在取样频率为48kHz的情况下,因此,量化频谱数据的1024个元素被分组成49个SFB(由此G=49)。具体地说,第一组数据(SFB0)包含4个频谱数据元素0-3,第二组数据(SFB1)包含4个频谱数据4-7,第三组数据(SFB2)包含4个频谱数据元素8-11等等。所述49个SFB被分别存储在49个存储器100到103中。更详细地说明见“ISO/IEC138183.8表”。
图15示出了已经被量化并被分组成一定数量的SFB(SFB0-SFB(G-1))的频谱数据的表500。在表500中,左列501“SFB”示出了SFB的号,中心列502“spectrum”示出了所述频谱数据元素的数量,右列503“value”示出了各频谱数据元素的值。在图15中,行550对应于存储在第一存储器100(图1)中的第一组数据(SFB0),行551对应于存储在第二存储器101中的第二组数据(SFB1),行552对应于存储在第三存储器102中的第三组数据(SFB2)。
由此,如图15所示,量化频谱数据被分组成SFB0到SFB(G-1),这些SFB分别使用G个霍夫曼代码簿109到112进行霍夫曼编码。在最佳选择用于所述SFB的4个霍夫曼代码簿104到107中的一个的基础上对每个SFB进行霍夫曼编码。
图16到19示出了分别与MPEG2-AAC标准中规定的霍夫曼代码簿3-6对应的第一到第四霍夫曼代码簿104-107的内容。如在现有技术中所描述的,在图16到19中示出的霍夫曼代码簿3-6中的每一个当中,列300“index”表示将被编码数据的索引值,列301“length”表示与每个索引值相关的编码数据的码长(位数),列302“codeword(十六进制)”表示以十六进制形式表示的编码数据(codeword)。图16-19示出的霍夫曼代码簿3-6中的每一个示出了用于范围从0到80的索引值(列300“index”)中每一个的编码数据长度(列301“length”)和其十六进制的表现形式(列302“codeword”)。
下面将再次参看图1描述具有上述结构的编码器10的操作。
首先,控制器116从第一存储器100接收4个频谱数据元素。控制器116在所述频谱数据最大绝对值(LAV)(“频谱霍夫曼代码簿参数”的一个)的基础上选择第一码长计算器114和第二码长计算器115中的一个并向其输出所接收的频谱数据。如下面将要描述的,根据MPEG2-AAC标准,利用所述输入信号的最大绝对值限制可以被选择用于所述输入信号的霍夫曼代码簿。
图20示出了在所述MPEG2-AAC标准的编码方案中使用的频谱霍夫曼代码簿参数的表1000。表1000包含各种以列表形式出现的霍夫曼代码簿属性f或参数)。在表1000中,最左列1001“Codebook Number,i”表示霍夫曼代码簿的号,第二列1002“unsigned cb[i]”指出所述霍夫曼代码簿是一个无符号代码簿(“1”)还是一个有符号代码簿(“0”),第四列1004“LAV for codebook”表示能够为其选择一个霍夫曼代码簿的输入数据的最大绝对值(LAV)。
参看图15,第一组频谱数据(SFB0)具有4的LAV。因此,可以根据图20所示表1000中的第四列1004“LAV for codebook”确定第三霍夫曼代码簿106(MPEG2-AAC标准的霍夫曼代码簿5)和第四霍夫曼代码簿107(MPEG2-AAC标准的霍夫曼代码簿6)被专用于SFB0。
因此,控制器116将从第一存储器100将接收的一组频谱数据(SFB0)输入给存储了与第三和第四霍夫曼代码簿106和107相关的码长数据的第二码长计算器115。第二码长计算器115如下工作。首先,第二码长计算器115依据下述等式(4)和(5)计算将被用做图3所示表400中的地址的两个索引值“index0”和“indexl”index0=(D0+LAV)*(2*LAV+1)+(D1+LAV)(4)indexl=(D2+LAV)*(2*LAV+1+(D3+LAV)(5)其中,D0、D1、D2和D3分别表示输入数据组(SFB0)的4个频谱数据元素(值)。
一旦计算出索引值“index0”和“index1”,第二码长计算器115就从图3所示表400中获得由使用第三霍夫曼代码簿106)(霍夫曼代码簿5)的SFB0的霍夫曼编码操作和由使用第四霍夫曼代码簿107(霍夫曼代码簿6)的SFB0的编码操作所导致的码长(位数)。
在图3所示的表400中,标记为“index”的左列401表示被用做表400中地址的索引值,标记为“length of HCB5”的中心列402表示由使用霍夫曼代码簿106(霍夫曼代码簿5)的输入SFB的霍夫曼编码操作导致的码长,和标记为“length of HCB6”的右列403表示由使用第四霍夫曼代码簿107(霍夫曼代码簿6)的输入SFB的霍夫曼编码操作导致的码长。
存储在第二码长计算器115中的霍夫曼代码簿5和6中的每一个都是用于霍夫曼编码有符号数据的有符号代码簿。因此,在图3所示的表400中,列402和403(“length of HCB5”和“length of HCB6”)中的每一个都表示与每个SFB的霍夫曼编码操作导致的码长对应的位数。
由此,通过使用图3所示的表400,可以获得与一个索引值相关的由使用霍夫曼代码簿5进行霍夫曼编码操作所导致的码长和由使用霍夫曼代码簿6进行霍夫曼编码操作所导致的码长。
在图15所示的第一组频谱数据(SFB0)中,所述频谱数据元素分别具有下述值D0=4、D1=-2、D2=0和D3=3。由此,LAV=4。因此,index0=74和index1=43。参看图3所示的表400,对于index0=74,由霍夫曼代码簿5导致的码长(“length of HCB5”)12位和当使用霍夫曼代码簿6编码SFB0时导致的码长(“length of HCB6”)是9位。对于index1=43,当使用霍夫曼代码簿5编码SFB0时导致的码长(“lenth of HCB5”)是8位,当使用霍夫曼代码簿6编码SFB0时导致的码长(“lenth of HCB6”)是7位。
由此,第二码长计算器115计算与一个输入数据组(在这个例子中是SFB0)相关的两个索引值“index0”和“index1”,并获得使用霍夫曼代码簿5编码SFB0导致的码长和使用霍夫曼代码簿6编码SFB0导致的码长。然后,第二码长计算器115计算与霍夫曼代码簿5和霍夫曼代码簿6中每一个相关的两个码长(一个用于index0,另一个用于index1)的和。在这个例子中,用于霍夫曼代码簿5的总码长是20(12+8)位,用霍夫曼代码簿6的总码长是16(9+7)位。所计算的用于每个霍夫曼代码簿的总码长(位数)被输出给控制器116。
然后,控制器116在与从第二码长计算器115输出的霍夫曼代码簿5和6相关的总码长的基础上选择霍夫曼代码簿5和6中的一个。由此,在这个例子中,选择将给出用于SFB0的最小码长的霍夫曼代码簿6。
以类似于第一组频谱数据(SFB0)的方式从图15所示存储在第二存储器101中的第二组频谱数据(SFB1)中选择霍夫曼代码簿5和6中的一个。由于对于SFB1所述LAV=4,所以,控制器116再次选择第二码长计算器115用于SFB0,和第二码长计算器115工作类似于上述用于SFBO的工作。而后第二码长计算器115向控制器116输出当使用霍夫曼代码簿5编码SFB1时导致的码长(在这个例子中是18位)和当使用霍夫曼代码簿6编码SFB1时导致的码长(在这个例子中是13位)。由此,控制器116选择将给出用于SFB1的最小码长的霍夫曼代码簿6。
然后,控制器116从第三存储器12接收第三组频谱数据(SFB2),如图15所示。对于第三组频谱数据(SFB2),LAV=1。参看图20所示的表1000的列1004“LAV for codebook”,该表指出可以选择无符号代码簿的霍夫曼代码簿3和4以及有符号的霍夫曼代码簿5和6用于SFB2。因此,控制器116向包含用于霍夫曼代码簿3和4的数据的第一码长计算器114和包含用于霍夫曼代码簿5和6的数据的第二码长计算器115输出所接收的数据组(SFB2)。
第二码长计算器115以与上述类似的方式从图3所示的表4000中获得使用霍夫曼代码簿5和6中的每一个进行霍夫曼编码操作导致的码长。获得码长的处理如上所述并不再进一步描述。所计算的当使用霍夫曼代码簿5编码SFB2时导致的码长是9位和当使用霍夫曼代码簿6编码SFB2时导致的码长是8位。
第一码长计算器114如下工作以计算由使用霍夫曼代码簿3和4中的每一个进行霍夫曼编码操作导致的码长(位数)。首先,第一码长计算器114从控制器116接收包含在存储在第三存储器102中的第三组频谱数据(SFB2)中的4个频谱数据元素。然后,第一码长计算器114根据下述等式计算一个所以值“index0”index0=abs(D0)*(k^3)+abs(D1)*(k^2)+abs(D2)*k+abs(D3)(6)其中,D0、D1、D2和D3分别表示SFB2的4个频谱数据元素(值),“abs(x)”表示x的绝对值,“ ”表示取幂,和k=LAV+1。
一旦计算出值“index0”,第一码长计算器114在所计算的索引值“index0”的基础上从图2所示表200中获得使用第一霍夫曼代码簿104(霍夫曼代码簿3)编码SFB2时导致的码长(位数)和使用第二霍夫曼代码簿105(霍夫曼代码簿4)编码SFB2时导致的码长。
在图2所示的表200中,标记为“index”的左列201表示用做表200中地址的索引值,标记为“lenth of HCB3”的中心列202表示使用第一霍夫曼代码簿103(霍夫曼代码簿3)对输入SFB进行霍夫曼编码操作时导致的码长(位数)和标记为“lenth of HCB4”的右列203表示使用霍夫曼代码簿105(霍夫曼代码簿4)对输入SFB进行霍夫曼编码操作时导致的码长(位数)。由此,通过使用图2所示的表200,可以获得用于一个索引值的使用霍夫曼代码簿3进行霍夫曼编码操作所导致的码长和使用霍夫曼代码簿4进行霍夫曼编码操作时导致的码长。
图2的表200包含与每一个索引值相关的由使用在MPEG2-AC标准中规定的霍夫曼代码簿3和4中的每一个进行霍夫曼编码操作导致的码长(位数)。但是,参看图20的表1000,列1002“unsigned cb[i]”表示用于霍夫曼代码簿3和4的“1”,它指出霍夫曼代码簿3和4都是无符号代码簿。因此,列202“lengthof HCB3”包含使用在MPEG2-AAC标准中规定的霍夫曼代码簿3进行霍夫曼编码操作导致的码长(位数)和包含在输入频谱数据组中的非零值(即需要符号信息位的值)数量的和。所述和被提供给列203“length of HCB4”。
在图15所示的SFB2中,所述频谱数据元素分别具有如下值D0=1、D1=-1、D2=1和D3=0。由此,LAV=2。因此,index0=39。参看图2所示的表2000,对于index0=39,列202“length of HCB3”(由使用霍夫曼代码簿3进行霍夫曼编码操作导致的码长和非零值数量的和)示出了等于9的值,和列203“length ofHCB4”(由使用霍夫曼代码簿4进行编码导致的码长和非零数量的和)示出了等于7的值。
然后,第一码长计算器114向控制器116输出当使用霍夫曼代码簿3编码SFB2时导致的码长(在这个例子中是9位)和当使用霍夫曼代码簿4编码SFB2时导致的码长(在这个例子中是7位)。类似的,第二码长计算器115向控制器116输出当使用霍夫曼代码簿5编码SFB2时导致的码长(在这个例子中是9位)和当使用霍夫曼代码簿6编码SFB2时导致的码长(在这个例子中是8位)。控制器116在来自第一和第二码长计算器114和115的输出的基础上选择所述霍夫曼代码簿中的一个。在这个例子中,控制器116选择将为SFB2给出最小码长的霍夫曼代码簿6。
在获得由对存储在第三存储器102中的第三组频谱数据(SFB2)进行霍夫曼编码操作导致的码长的处理中,控制器116可以并行或串行激活第一码长计算器114和第二码长计算器115。在使用软件构成霍夫曼代码簿选择器108的情况下,码长计算器114和115也可以被串行激活。但是,在使用硬件构成霍夫曼代码簿选择器108的情况下,码长计算器114和115最好被并行激活以便实现高速处理。
类似的,霍夫曼代码簿选择器108选择用于G组频谱数据(SFB)中每一个的最佳霍夫曼代码簿,使用为这些组频谱数据(SFB)选择的霍夫曼代码簿并利用霍夫曼编码器109-112中相应的一个对这些组频谱数据(SBF)中的每一个进行霍夫曼编码。霍夫曼编码操作本身与传统的霍夫曼编码操作类似,是通过从所选择的用于被计算的索引值(例如,“index0”、“index1”)的霍夫曼代码簿的列“codeword”中输出作为编码数据而执行的。
然后,利用代码簿号编码器113对为一组频谱数据(SFB)选择的每个霍夫曼代码簿的代码簿号编码。根据MPEG2-AAC标准,利用4位对被选择用于一组频谱数据(SFB)的每个霍夫曼代码簿的代码簿号进行编码。当相同的霍夫曼代码簿被选择用于两个或更多相邻组频谱数据(SFB)时,利用5位对相邻组频谱数据的号编码。
在图15所示的例子中,霍夫曼代码簿6被选择用于SFB0和SFB1。因此,首先利用4位(0110)对霍夫曼代码簿6的代码簿号(即,6)进行编码,然后,然后,利用5位(00001)对值“1”(指出除了感兴趣的为其选择了霍夫曼代码簿6的SFB(SFB0)以外还存在另一个SFB(SFB1))进行编码。接着选择用于SFB2的霍夫曼代码簿4。因此,利用4位(01000)编码所述霍夫曼代码簿4的代码簿号(即“4”)后面的位串取决于被选择用于后面SFB(SFB3)的霍夫曼代码簿。所选择的霍夫曼代码簿的代码簿号被类似地编码以用于后面的SFB。
如上所述,根据本实施例,可以同时获得由用于不同霍夫曼代码簿的霍夫曼编码操作导致的码长。此外,即使当所选择的霍夫曼代码簿是一个无符号代码簿时,也可以从一个单一的表中获得由使用所选择的霍夫曼代码簿进行霍夫曼编码操作导致的码长和符号信息所需位数的和。由此,可以大大减少霍夫曼编码操作所需的计算量。
(实施例2)下面将描述本发明的实施例2。编码器10的结构和操作以及频谱数据的分组与实施例1所述类似,因此下面将不再赘述。
在实施例1中,控制器116从第一和第二码长计算器114和115中接收输出值,并选择向它输出最小值的一个霍夫曼代码簿。相反,根据实施例2,控制器116不仅从对感兴趣的数据进行霍夫曼编码所导致的码长的角度而且还从所选择的霍夫曼代码簿的代码簿号的编码操作导致码长的角度选择一个霍夫曼代码簿,从而限制了输出数据总的码长。
具体地说,这种霍夫曼代码簿的选择是如下进行的。首先,对于第(g+1)组数据(g是一个1≤g≤G-1的整数)来讲,获得码长Bmin和另一个码长Bg。所述码长Bmin是一个使用霍夫曼代码簿Hmin(即码长最小的一个代码簿)对第(g+1)组数据进行霍夫曼编码操作所导致的码长,和码长Bg是一个使用霍夫曼代码簿Hg(即已经被选择用于第g组数据的霍夫曼代码簿)对第(g+1)组数据进行霍夫曼编码导致的码长。然后,如果Bmin<(Bg-A)(A是一个例如9的预定整数),则选择霍夫曼代码簿Hmin,和如果Bmin≥(Bg-A),则选择霍夫曼代码簿Hg。在这个实施例中,例如使用4位对所选择的霍夫曼代码簿的代码簿号编码,利用5位对被选择了相同霍夫曼代码簿的SDB的号编码。结果是,总长9位被用于所选择的霍夫曼代码簿。由此,9被设置为A的值。
根据MPEG2-AAC标准的编码方案不仅对数据而且也对所选择的霍夫曼代码簿的代码簿号进行霍夫曼编码。因此,通过减少用于表示由于霍夫曼编码操作导致的码长的总位数和编码所选择的霍夫曼代码簿代码簿号所需的总位数可以有效执行所述编码处理。由此,对于每个SFB来来讲,即使是所述霍夫曼代码簿没有使被霍夫曼编码数据的码长最小,选择同样被选择用于一个相邻SFB的霍夫曼代码簿以使其总长最小是有益的。
在根据MPEG2-AAC标准的一个编码方案中,预定数量的位数A被用于编码被选择用于感兴趣SFB的霍夫曼代码簿的代码簿号和指出是否选择同一个霍夫曼代码簿用于一个或多个与感兴趣的SFB相邻的SFB的值。在上述实施例1中,A的值是9(用于编码所述霍夫曼代码簿的代码簿号的4位加上用于编码被选择使用相同霍夫曼代码簿的相邻组数据(SFB)的5位)。因此,当用于第(g+1)组数据的霍夫曼代码簿不同于用于与第(g+1)组数据相邻的第g组数据的霍夫曼代码簿时,需要数量为A的附加位对所述代码簿号进行编码。从这个角度来看,在实施例2中,所述霍夫曼代码簿是在Bmin和(Bg-1)之间比较的基础上选择的。
下面将描述根据实施例2用于选择其中量化和分组频谱数据被存储在图15所示存储器中的霍夫曼代码簿的方法。这里,假设A=9。用于获得由霍夫曼编码操作导致的码长的方法类似于上述实施例1所述,因此下面将不再叙述。
首先,对于第一组频谱数据(SFB0),如第一实施例一样选择从一个码长计算器输出用于该频谱数据(SFB0)的最小码长的霍夫曼代码簿6。对于第二组频谱数据(SFB1),与用于给出最小码长的霍夫曼代码簿的码长对应的位数和与用于被选择用于相邻第一组频谱数据(SFB0)的霍夫曼代码簿的码长对应的位数相比较。在这个例子中,霍夫曼代码簿6给出用于第二组(SFB1)的最小码长和用于相邻第一组(SFB0)的最小码长。因此,霍夫曼代码簿6被选择用于第二组(SFB1)而不在位数方面进行比较。
对于第三组(SFB2),与用于给出最小码长的霍夫曼代码簿的码长对应的位数和与使用被选择用于相邻第二组(SFB1)的霍夫曼代码簿6编码SFB2时导致的码长对应的位数相比较。与由于霍夫曼代码簿4将给出用于SFB2的最小码长而被选择用于第三组(SFB2)的霍夫曼代码簿4相关的码长是7位,用于被选择用于相邻第二组(SFB1)的霍夫曼代码簿6的码长是8位,因此,Bmin=7和Bg=8。由此,(Bg-A)=(8-9),并保持Bmin≥(Bg-A)。因此,控制器116选择被选择用于相邻第二组(SFB1)的霍夫曼代码簿。
由此,在这个例子中,霍夫曼代码簿6被选择用于第一组(SFB0)、第二组(SFB1)和第三组(SFB2)。因此,代码簿号编码器113利用4位(0110)对霍夫曼代码簿6的代码簿号(即6)编码,利用5位(00010)对所述值“2”(它指出相同的霍夫曼代码簿6被选择用于三个相邻的组(SFB))编码。被选择用于三组频谱数据(SFB0-SFB2)的霍夫曼代码簿的代码簿号如上所述地被编码。
在上述的实施例中,以升序、即从最小SFB号到最大SFB号对所述SFB的号执行霍夫曼代码簿的选择。另外,如下所述,也可以以SFB的降序执行霍夫曼代码簿选择。
首先,对于第(g-1)组数据(g是一个2≤g≤G的整数),获得码长Bmin和另一个码长Bg。码长Bmin是一个使用在从第一码长计算器114或第二码长计算器115输出的基础上选择的霍夫曼代码簿Bmin(即码长最小的一个霍夫曼代码簿)对第(g-1)组数据执行霍夫曼编码操作导致的码长,码长Bg是一个使用霍夫曼代码簿Hg(即已经被选择用于第g组数据的霍夫曼代码簿)对第(g-1)组数据执行霍夫曼编码操作导致的码长。然后,如果Bmin<(Bg-A)(A是一个例如9的预定整数),则选择霍夫曼代码簿Hmin,如果Bmin≥(Bg-A),则选择霍夫曼代码簿Hg。
对于第G组数据,控制器116在来自第一码长计算器114的输出和第二码长计算器115的输出的基础上选择所述霍夫曼代码簿中的一个,利用该霍夫曼代码簿,由霍夫曼编码操作导致的码长将最小。
另外,在用于所述SFB的当以升序执行霍夫曼代码簿选择时导致的总码长和在用于同一个SFB的当以降序执行霍夫曼代码簿选择时导致的总码长比较的基础上可以选择用于每个SFB的霍夫曼代码簿。
如上所述,除了实施例所提供的优点以外,本实施例还提供了一个优点,即可以减少编码每个所选择霍夫曼代码簿代码簿号所需的码长,借此,实现了更加有效的霍夫曼编码操作。
在上述的实施例1和2中,第一和第二码长计算器114和115可以自适应地输出一个当输入数据值位于可以使用所述霍夫曼代码簿计算一个码长的可变范围之外时指出所述霍夫曼代码簿无效的无效信号。在这种情况下,当控制器116接收与所述霍夫曼代码簿相关的无效信号时,控制器116不能自适应地选择一个霍夫曼代码簿。
在上述实施例1和2中,为方便起见假设仅从4个霍夫曼代码簿3-6当中选择一个霍夫曼代码簿。但是,应当注意,实际的MPEFG2-AAC标准提供了11种霍夫曼代码簿1-11,在这些霍夫曼代码簿中,可以选择一个霍夫曼代码簿并用于霍夫曼编码操作。
图4示出了用于选择霍夫曼代码簿1-4中一个的霍夫曼代码簿选择器108的结构。所述霍夫曼代码簿选择器108包括控制器116、第一码长计算器114和第二码长计算器115。第一码长计算器114包括具有包括当使用与公用索引值相关的霍夫曼代码簿1和2对数据编码时导致的各码长的第一表(HCB1/HCB2公用表)的ROM114a。第二码长计算器115包括具有包括当使用与公用索引值相关的霍夫曼代码簿3和4编码数据时导致的各码长的第二表的ROM115a。
在由索引值发生器114b产生的索引值的基础上,第一码长计算器114可以从在ROM114a中提供的第一表中获得用于霍夫曼代码簿1和2的各码长。在由索引值发生器115b产生的索引值的基础上,第二码长计算器115可以从在ROM115a中提供的第二表中获得用于霍夫曼代码簿3和4的各码长。
由于所述霍夫曼代码簿3和4是无符号代码簿,所以,符号信息所需的位数被预先加到在ROM115a中提供的第二表中所设置的码长上。
第一码长计算器114还包括一个累加器114c,用于累加来自存储在ROM114a中的HCB1/HCB2公用表的原始(as retrieved)检索表数据(即没有将检索的数据分成较小的段)。下面将描述能够对所述原始检索表数据进行累加的原理。第二码长计算器115还包括一个与累加器114c类似的累加器115c。
索引值发生器114b在下述等式(7)的基础上产生索引值i1i1=(X^3)*(a+1)+(X^2)*(b+1)+X*(c+1)+(d+1)(7)其中,X是一个等于或大于3的正数,a、b、c和d是4个相邻的频谱数据元素。
索引值发生器115b在下述等式(8)的基础上产生索引值i2i2=(Y^3)*abs(a)+(Y^2)abs(b)+Y*abs(c)+abs(d)(8)其中,Y是一个等于或大于3的正数,a、b、c和d是4个相邻的频谱数据元素。
然后,在所产生的索引值i1和i2的基础上,从在ROM 114a和ROM 115a中提供的表中分别获得由使用霍夫曼代码簿1-4中的每一个执行霍夫曼编码操作导致的码长(位数)。
图5示出了用于计算当使用霍夫曼代码簿1-4时导致的码长的另一个第一码长计算器114’。所述第一码长计算器114’包括索引值发生器114b和具有包含使用与一个公用索引值相关的霍夫曼代码簿1-4中的每一个进行霍夫曼编码操作时导致的各码长的一个单一表(“HCB1-HCB4公用表1100”)的ROM114a’。
第一码长计算器114’还包括一个累加器114c’,用于累加来自存储在ROM114a’中的HCB1-HCB4公用表1100的原始检索表数据(即没有将所检索的数据分成较小的段)。累加器114c’可以是例如32位累加器。
索引值发生器114b经过4个相邻频谱数据元素a、b、c和d的位连接操作产生产生一个索引值,所述4个相邻频谱数据元素a、b、c和d中的每一个都是利用Y位或更多位表示的,其中,Y是一个等于或大于2的正数。例如Y=2,在下述等式(9)的基础上产生索引值j
j=((a&3)<<6)|((b&3)<<4)|((c&3)<<2)|(d&3)(9)其中,“&”表示逻辑加,和“<<”表示移位操作。
在所产生的索引值j的基础上,从存储在ROM114a’中的HCB1-HCB4公用表1100中获得使用霍夫曼代码簿1-4中的每一个进行霍夫曼编码操作导致的各个码长。
图6示出了用于计算当使用霍夫曼代码簿5-10时所导致码长的码长计算器130的结构。码长计算器130包括码长计算器117、118和119。码长计算器117、118和119分别包括ROM117a、118a和119a。ROM117a具有包含使用与一个公用索引值相关的霍夫曼代码簿5和6编码数据时导致的各个码长的第一表。ROM118a具有使用与一个公用索引值相关的霍夫曼代码簿7和8编码数据时导致的各个码长的第二表。ROM119a具有包含使用与一个公用索引值相关的霍夫曼代码簿9和10编码数据时导致的各个码长的第三表。在由索引值发生器117b到119b产生的索引值的基础上获得包含在ROM117a-119a中的表中的码长。
如图20所指出的,霍夫曼代码簿7-10是无符号代码簿。因此,符号信息所需的位数被预先加到设置在在ROM118a和119a中提供的表中的码长上。
码长计算器117还包括一个累加器117c,用于累加来自存储在ROM117a中的HCB5/HCB6公用表的原始检索表数据(即没有将所检索的数据分成较小的段)。
索引值发生器117b在下述等式(10)的基础上产生索引值i3i3=(X)*(a+4)+(b+4)(10)其中,X是一个等于或大于9的正数,a和b是两个相邻的频谱数据元素。
索引值发生器118b在下述等式(11)的基础上产生索引值i4i4=(Y)*abs(a)+abs(b)(11)其中,Y是一个等于或大于8的正数,a和b是两个相邻的频谱数据元素。
索引值发生器119b在下述等式(12)的基础上产生索引值i5i5=(Z)*abs(a)+abs(b)(12)其中,Z是一个等于或大于13的正数,a和b是两个频谱数据元素。
在所产生的索引值i3、i4和i5的基础上,从在ROM117a到119a中提供的表中获得当使用霍夫曼代码簿1-4编码数据时导致的各个码长。
图7示出了用于计算当使用霍夫曼代码簿5-10时导致的码长的码长计算器120的结构。码长计算器120包括包含单一表(“HCB5-HCB10公用表1300”)的ROM120a,所述单一表包含使用与一个公用索引值相关的霍夫曼代码簿5-10中的每一个执行霍夫曼编码操作时导致的各个码长。
码长计算器120还包括一个累加器120c,用于累加来自存储在ROM120a中的HCB5-HCB10公用表1300的原始检索表数据(即没有将所检索的数据分成较小的段)。所述累加器120c可以是例如48位累加器。
码长计算器120包括一个索引值发生器120b,用于经过两个相邻频谱数据元素a和b的位连接操作产生索引值k,所述a和b中的每一个都是利用Z位表示的,所述Z是等于或大于5的正数。在Z等于5的情况下,码长计算器120在下述等式(13)的基础上产生索引值kk=((a&31)<<5)|(b&31) (13)在所产生的索引值k的基础上,从在ROM120a中提供的HCB5-HCB10公用表1300中获得使用霍夫曼代码簿5-10编码数据导致的各个码长。
下面将描述在实际码长计算器中提供的实际表存储器。
图8示出了用于计算与霍夫曼代码簿1-4相关的各个码长的表存储器(HCB1-HCB4公用表1100)的内容。霍夫曼代码簿1-4中的每一个都被用于对包括4个相邻频谱数据元素的每组数据(4元组)进行霍夫曼编码。
在图8所示的HCB1-HCB4公用表1100中,左列1101“adrs”表示用于从所述表存储器中检索数据的地址,右列1102“data”表示使用每一个霍夫曼代码簿编码数据时导致的码长数据。经过频谱数据4个相邻元素较低两位的位连接操作获得用于图8所示表存储器的每个地址。
图9示出了图8所示HCB1-HCB4公用表1100的结构。图9示出了用于存储表示当使用霍夫曼代码簿1-4中的每一个编码4元组数据时导致的码长的数据的一种格式。在图8中,用于每个地址的数据是32位数据并具有图9所示的结构。在图9中,包括在最高有效8位中的“HCB1”表示当使用霍夫曼代码簿1对数据进行霍夫曼编码时导致的码长数据。类似的,在随后三个8位段中提供的“HCB2”、“HCB3”和“HCB4”分别表示当使用霍夫曼代码簿2、3和4编码数据时导致的码长。分别对应于霍夫曼代码簿1-4的码长数据“HCB1”到“HCB4”按照这个顺序从MSB一侧到LSB一侧被提供。
“HCB1”到“HCB4”中的每一个都可以利用8位或更少位来表示。因此,在“HCB1”到“HCB4”以串行的8位段被存储在HCB1-HCB4公用表1100中的情况下,一个或更多的“0”位被插入到“HCB1”到“HCB4”中每一个的MSB一侧。这种被插入的“0”位被称之为“裕度位”。后面将描述提供这种“裕度位”的原因。
通过使用图8所示的HCB1-HCB4公用表1100,可以如下获得由图15所示第三组(SFB2)频谱数据(1、-1、1、 0)的霍夫曼编码操作所导致的码长。
在下述等式(13)的基础上获得用于从所述表存储器中检索数据的地址adrs=((1&3)<<6)|((-1&3)<<4)|((1&3)<2)|(0&3)(13)由此,adrs=h74,借此获得与这个地址对应数据“h09070907”。所获得的数据“h09070907”指出与霍夫曼代码簿1-4相关的码长分别是9位(=h09)、7位(=h07)、9位(=h09)和7位(=h07)。这里,“h”表示十六进制。
图10示出了用于计算当使用霍夫曼代码簿5-10对两个4元数据组编码时导致的各个码长的所述表存储器(HCB5-HCB10公用表1300)的内容。霍夫曼代码簿5-10中的每一个被用于对包括两个相邻频谱数据元素(两个4元组)的每个数据组进行霍夫曼编码。
如图8所示,在图10所示的HCB5-HCB10公用表1300中,左列1301“adrs”表示用于从所述表存储器中检索数据的地址,右列1302“data”表示当使用霍夫曼代码簿5-10中的每一个对数据编码时导致的码长。用于图10所示表存储器的每个地址是经过频谱数据两个相邻元素的较低5位的位连接操作获得的。
图11示出了图10所示HCB5-HCB10公用表1300的结构。图11示出了用于存储表示当使用霍夫曼代码簿5-10中的每一个对2个4元数据组编码时导致的码长的数据的一种格式。在图10中,用于每个地址的数据是48位,并具有图11所示的结构。在图11中,包括在最高有效8位中的“HCB5”表示当使用霍夫曼代码簿5对数据进行霍夫曼编码时导致的码长。类似的,在随后5个8位段中提供的“HCB6”、“HCB7”、“HCB8”、“HCB9”和“HCB10”表示当分别使用霍夫曼代码簿6、7、8、9和10对数据进行霍夫曼编码时导致的码长。可以用8位或更少的位表示“HCB5”到“HCB10”中的每一个。因此,在“HCB5”到“HCB10”被存储在HCB5-HCB10公用表1300中的一系列8位段中的情况下,一个或多个“0”位可以被插入到“HCB5”到“HCB10”中每一个的MSB一侧。这种被插入的位被称之为“裕度位”。后面将描述插入这种“裕度位”的理由。
通过使用图10所示的HCB5-HCB10公用表,如图15所示,由第一组(SFB0)频谱数据(4、-2、0、3)的霍夫曼编码操作导致的码长可以如下获得。
对于第一次检索,在上述等式(13)和频谱数据(4、-2)的基础上如下获得用于从所述表存储器中检索数据的地址。
adrs=((4&31)<<5)|(-2&31)由此,adrs=h9e,借此,获得与这个地址对应的数据“h0c090b080b08”。
对于第二次检索,在频谱数据(0,3)的基础上,如下获得用于从所述表存储器中检索数据的地址。
adrs=((0&31)<<5)|(3&31)由此,adrs=h03,借此,获得与这个地址对应的数据“h080708070907”。
所述第一数据“h0c090b080b08”与第二数据(h080708070907)相加,从而获得它们的和“h1410130e140e”。这个和的多个8位段(即“h14”、“h10”、“h13”、“h0e”、“h14”、“h0e”)表示使用霍夫曼代码簿5-10执行霍夫曼编码操作时导致的相应码长。这指出用于霍夫曼代码簿5-10的码长分别是20位(=h14)、16位(=h10)、19位(=h13)、14位(=h0e)、20位(=h14)和14位(=h0e)。利用这种方式,可以获得使用MPEG2-AAC标准的霍夫曼代码簿5-10对数据进行霍夫曼编码时导致的相应码长。
如图9和11所示,使用各霍夫曼代码簿对数据编码时导致的码长被存储在多个8位段中。因此,即使是从图8和10所示表存储器中原始检索的数据没有被交替累加,也不会产生溢出。通过表数据单一检索操作不能获得由一个SFB的霍夫曼编码操作导致的码长,但是,可以通过连续累加从所述表存储器中检索的数据获得所述码长。因此,通过累加原始检索表数据而不是通过将所检索的数据分成分别用于不同霍夫曼代码簿的多个段和仅仅累加用于感兴趣的霍夫曼代码簿的数据段可以减少计算量。从这个角度来看,根据本发明,与各霍夫曼代码簿相关的各个码长被存储在具有被插入在每个8位段中的一个或多个“0”的多个8位段中,所以,即使是累加来自所述表存储器的原始检索表数据(具有原始检索的位长)时也不会发生溢出。
上述描述是结合HCB1-HCB4公用表1100(图9)和HCB5-HCB10公用表1300(图11)做出的。但是,基本相同的原理可以被应用于例如存储在ROM114a中的HCB1/HCB2公用表和存储在ROM115a中的HCB3/HCB4公用表(图4)的其它公用表。
在上述的例子中,为更好理解本发明和简化附图起见,在将码长数据分成多个8位段的同时提供了累加裕度。但是,对于根据MPEG2-AAC标准的编码方案来讲,由于下述原因将所述码长数据分成多个11位段是适当的。
对于根据MPEG2-AAC标准的编码方案来讲,由两个4元组数据的霍夫曼编码操作导致的最大码长是17,由此能够利用5位加以表示。例如,可以看到这种最大码长被用于霍夫曼代码簿9的索引值154(见ISO/IEC13818-7表A.10.频谱霍夫曼代码簿9)。
对于霍夫曼代码簿9的索引值154,使用霍夫曼代码簿9执行霍夫曼编码操作导致的码长是15位。作为符号信息的两位被加到所述15位上。因此,所需的位数是17位,它可以利用5位加以表示。因此,所述码长数据被分成多个11位段(5位+6个裕度位=11位)。
由于下述原因,所述裕度位是6。在根据MPEG2-AAC标准的编码方案中,包括在每个SFB中的数据量可以达到128。这是由于对于短窗口MDCT处理(见ISO/IEC13818-7 Table 3.5-scalefactor bands for SHORT#WINDOW at 32,44.1 and48kHz)来讲,最高频带SFB是16,和8个短窗口能够被分组成一个单一的窗口组,所以,能够被包含在一个单一的SFB中的数据数总共能够由128(=16x8)个数据组成。
当包含在一个SFB中的数据数是128时,执行64(128/2)累加以利用2个四元组霍夫曼代码簿对所述SFB编码。因此,需要6位(6=log2(64))做为裕度位。由此,所述码长数据被分成11位段(用于表示最大位数的5位加上6个裕度位)。
由于上述的原因,将每个码长分成用于宽带AAC编码方案的多个11位段是适当的。但是,通过对用于编码操作的带宽和/或用于短窗口处理的窗口组提供限制,可以减少每个段的位数。
应当理解,为简化编码方案设计起见,所述码长还可以被分成具有多于11位、例如12位的多个段。
图12和13示出了一个例子,在这个例子中,每个码长被分成多个12位的段。图12示出了用于计算与霍夫曼代码簿5-10相关的码长的表存储器(HCB5-HCB10公用表1500)的内容。通过将包含在HCB5-HCB10公用表1300中的码长重新安排成多个12位的段,在图10所示HCB5-HCB10公用表1300的基础上获得HCB5-HCB10公用表1500。一个或更多的“0”位(裕度位)被插入在每个12位段中。图13示出了图12所示HCB5-HCB10公用表1500的结构。
当图12所示HCB5-HCB10公用表1500被存储在图7所示的ROM120a中时,累加器120c可以是72位累加器,所以,它可以累加来自所述HCB5-HCB10公用表1500的原始检索数据。
如上所述,本发明提供了一种用于执行能够同时获得由使用多个霍夫曼代码簿进行霍夫曼编码操作导致码长的霍夫曼编码操作的编码器。但是,即使当所选择的霍夫曼代码簿是一个无符号代码簿时,也可以经过从一个表存储器执行单一检索获得由符号信息所需位数已经被加的霍夫曼编码操作所导致的码长。由此,可以有效地减少执行霍夫曼编码操作所需的计算量。
另外,根据本发明,减少了对霍夫曼代码簿的代码簿号编码所需的码长,借此实现了更加有效的霍夫曼编码操作。
在不脱离本发明范围和精神的前提下,本专业技术领域内的普通技术人员可以做出各种改进并容易地制成。因此,权利要求的范围并不局限于这里的描述,并且所述权利要求被广义地构成。
权利要求
1.一种编码器,包括G个存储部分(G是一个等于或大于1的整数),用于存储G组数据;一个霍夫曼代码簿选择部分,用于选择与存储在各存储部分中的每组数据相关的H(H是等于或大于1的整数)个霍夫曼代码簿中的一个,每个霍夫曼代码簿都具有一个代码簿号;G个霍夫曼编码部分,所述霍夫曼编码部分中的每一个使用由与一组数据相关的所述霍夫曼代码簿选择部分选择的一个霍夫曼代码簿对G组数据中相应的一个进行霍夫曼编码;和一个代码簿号编码部分,用于对由所述霍夫曼代码簿选择部分选择的每个霍夫曼代码簿的代码簿号进行编码,其中,所述霍夫曼代码簿选择部分包括一个用于计算由使用每个霍夫曼代码簿对G组数据中的每一个进行霍夫曼编码操作导致的码长的码长计算部分,和一个用于在由所述码长计算部分计算的所述码长的基础上选择适用于所述组数据的一个霍夫曼代码簿的控制部分;和当所选择的霍夫曼代码簿是一个无符号代码簿时,符号信息所需的位数被预先加到由所述码长计算部分计算的码长上。
2.根据权利要求1所述的编码器,其特征是所述码长计算部分具有一个包括预先为每个霍夫曼代码簿计算的码长的数据表。
3.一种编码器,包括G个存储部分(G是一个等于或大于1的整数),用于存储G组数据;一个霍夫曼代码簿选择部分,用于选择与存储在各存储部分中的每组数据相关的H(H是等于或大于1的整数)个霍夫曼代码簿中的一个,每个霍夫曼代码簿都具有一个代码簿号;G个霍夫曼编码部分,所述霍夫曼编码部分中的每一个使用由与一组数据相关的所述霍夫曼代码簿选择部分选择的一个霍夫曼代码簿对G组数据中相应的一个进行霍夫曼编码;和一个代码簿号编码部分,用于对由所述霍夫曼代码簿选择部分选择的每个霍夫曼代码簿的代码簿号进行编码,其中所述霍夫曼代码簿选择部分包括一个用于计算由使用每个霍夫曼代码簿对G组数据中的每一个进行霍夫曼编码操作导致的码长的码长计算部分,和一个用于在由所述码长计算部分计算的所述码长的基础上选择适用于所述组数据的一个霍夫曼代码簿的控制部分;和所述码长计算部分能够同时获得用于多个霍夫曼代码簿的码长。
4.根据权利要求3所述的编码器,其特征是所述码长计算部分自适应地输出用于多个霍夫曼代码簿的由一组数据的霍夫曼编码操作导致的各个码长;和所述控制部分选择从所述码长计算部分向其输出最小码长的一个霍夫曼代码簿。
5.根据权利要求3所述的编码器,其特征是所述码长计算部分自适应地输出用于多个霍夫曼代码簿的由一组数据的霍夫曼编码操作导致的各个码长;和所述控制部分在从所述码长计算部分输出的霍夫曼代码簿的的码长的基础上并参看所述霍夫曼代码簿的代码簿号选择一个霍夫曼代码簿。
6.根据权利要求5所述的编码器,其特征是所述控制部分通过首先获得码长Bmin和另一个码长Bg选择用于第(g+1)组数据(g是一个1≤g≤G-1的整数)的一个霍夫曼代码簿,所述码长Bmin是一个使用从所述码长计算部分向其输出最小码长的霍夫曼代码簿Hmin对第(g+1)组数据执行霍夫曼编码操作导致的码长,所述码长Bg是一个使用已经被选择用于第g组数据的一个霍夫曼代码簿Hg对第g组数据执行霍夫曼编码操作导致的码长,然后,如果Bmin<(Bg-A)(A是一个预定整数),则选择霍夫曼代码簿Hmin,或如果Bmin≥(Bg-A),则选择霍夫曼代码簿Hg。
7.根据权利要求6所述的编码器,其特征是所述控制部分选择从所述码长计算部分向其输出最小码长的一个霍夫曼代码簿作为用于第一组数据的霍夫曼代码簿。
8.根据权利要求5所述的编码器,其特征是所述控制部分通过首先获得码长Bmin和另一个码长Bg选择一个用于第(g-1)组数据(g是一个2≤g≤G的整数)的一个霍夫曼代码簿,所述码长Bmin是一个使用从所述码长计算部分向其输出最小码长的霍夫曼代码簿Hmin对第(g-1)组数据执行霍夫曼编码操作导致的码长,所述码长Bg是G一个使用已经被选择用于第g组数据的一个霍夫曼代码簿Hg对第g组数据执行霍夫曼编码操作导致的码长,然后,如果Bmin<(Bg-A)(A是一个预定整数),则选择霍夫曼代码簿Hmin,或如果Bmin≥(Bg-A),则选择霍夫曼代码簿Hg。
9.根据权利要求8所述的编码器,其特征是所述控制部分选择从所述码长计算部分向其输出最小码长的一个霍夫曼代码簿作为用于第G组数据的霍夫曼代码簿。
10.根据权利要求6所述的编码器,其特征是当相同的霍夫曼代码簿被选择用于两个或更多相邻组数据时,所述代码簿号编码部分利用位数等于预定整数A的对所述霍夫曼代码簿的代码簿号和相邻组数据的号进行编码。
11.根据权利要求3所述的编码器,其特征是所述霍夫曼代码簿是如在MPEG2-AAC标准中规定的用于对频谱数据进行霍夫曼编码的11个霍夫曼代码簿。
12.根据权利要求11所述的编码器,其特征是所述码长计算部分自适应输出当使用MPEG2-AAC标准中规定的霍夫曼代码簿1-4编码数据时导致的各个码长;和所述码长计算部分具有一个包括当使用与一个公用索引值相关的霍夫曼代码簿1和2编码数据时导致的各个码长的第一表和一个包括当使用与一个公用索引值相关的霍夫曼代码簿3和4编码数据时导致的各个码长的第二表。
13.根据权利要求12所述的编码器,其特征是符号信息所需的位数已经被预先加到与包括在第二表中的霍夫曼代码簿3和4相关的每个码长上。
14.根据权利要求13所述的编码器,其特征是所述第一表包括用于il的T1(F1(a、b、c、d))和T2(F1(a、b、c、d))的各个值,而所述第二表包括用于i2的T3(F2(a、b、c、d))+nonz(a、b、c、d)和T4(F2(a、b、c、d))+nonz(a、b、c、d)的各个值,其中,nonz(w、x、y、z)是给出w、x、y和z中非零值数的函数;F1(w、x、y、z)是如下规定的函数F1(w、x、y、z)=27*(w+1)+9*(x+1)+3*(y+1)+(z+1)(其中,W、x、y、z中每一个的绝对值是1或更小);F2(w、x、y、z)是如下规定的函数F2(w、x、y、z)=27*abs(w)+9*ab(x)+3*ab(y)+abs(z)(其中,w、x、y、z中每一个的绝对值是2或更小);abs(x)是给出x绝对值的一个函数;T1(index)到T4(index)中的每一个是给出当分别用霍夫曼代码簿1到4编码数据时导致的码长的一个函数;a、b、c和d分别是表示一组数据的整数;和i1和i2是作为整数a、b、c、d的函数所计算的索引值。
15.根据权利要求14所述的编码器,其特征是i1=(X^3)*(a+1)+(X^2)*(b+1)+X*(c+1)+(d+1),其中,X是一个等于或大于3的正数;i2=(Y^3)*abs(a)+(Y^2)*abs(b)+Y*abs(c)+abs(d),其中,Y是一个等于或大于3的正数;而符号“^,”表示取幂。
16.根据权利要求14所述的编码器,其特征是经过其中的每一个都用X位或更多位表示的a、b、c和d的位连接操作获得所述索引值i1,其中,X是一个等于或大于2的正数;和经过其中的每一个都用Y位或更多位表示的abs(a)、abs(b)、abs(c)和abs(d)位连接操作获得所述索引值i2,其中,Y是一个等于或大于2的正数。
17.根据权利要求11所述的编码器,其特征是所述码长计算部分自适应输出当使用MPEG2-AAC标准中规定的霍夫曼代码簿1-4编码数据时导致的各个码长;和所述码长计算部分具有一个包括当使用与一个公用索引值相关的霍夫曼代码簿1到4编码数据时导致的各个码长的数据表。
18.根据权利要求17所述的编码器。其特征是符号信息所需的位数已预先加到与包括在所述表中的霍夫曼代码簿3和4相关的每个码长上。
19.根据权利要求18所述的编码器。其特征是所述表包括下述各个值T1(F1(a、b、c、d))、T2(F1(a、b、c、d))、T3(F2(a、b、c、d))+nonz(a、b、c、d)和T4(F2(a、b、c、d))+nonz(a、b、c、d),其中,nonz(w、x、y、z)是给出w、x、y、z当中非零值数的一个函数;F1(w、x、y、z)是一个如下规定的函数F1(w、x、y、z)=27*(w+1)+9*(x+1)+3*(y+1)+(z+1)(其中,w、x、y、z中每一个的绝对值都是1或小于1);F2(w、x、y、z)是一个如下规定的函数F2(w、x、y、z)=27*abs(w)+9*abs(x)+3*abs(y)+abs(z)(其中,w、x、y、z中每一个的绝对值都是2或小于2);abs(x)是一个给出x的绝对值的函数;T1(index)到T4(index)中的每一个是给出当分别用霍夫曼代码簿1到4编码数据时导致的码长的函数;a、b、c和d是表示一组数据的整数;和j是作为整数a、b、c和d的函数所计算的一个索引值。
20.根据权利要求19所述的编码器,其特征是;所述索引值j是通过其中每一个都是由Y位或更多位表示的a、b、c和d的位连接操作获得的,其中,Y是等于或大于2的正数。
21.根据权利要求11所述的编码器,其特征是所述码长计算部分自适应输出使用MPEG2-AAC标准中规定的霍夫曼代码簿5-10编码数据时导致的各个码长;和所述码长计算部分具有一个包括当使用与一个公用索引值相关的霍夫曼代码簿5和6编码数据时导致的各个码长的第一表、一个包括当使用与一个公用索引值相关的霍夫曼代码簿7和8编码数据时导致的各个码长的第二表,和一个当使用与一个公用索引值相关的霍夫曼代码簿9和10编码数据时导致的各个码长的第三表。
22.根据权利要求21所述的编码器,其特征是符号信息所需的位数已预先加到与包括在所述第二表中的霍夫曼代码簿7和8相关的每个码长上;和符号信息所需的位数已预先加到与包括在所述第三表中的霍夫曼代码簿9和10相关的每个码长上。
23.根据权利要求22所述的编码器,其特征是所述第一表包括用于i3的值T5(F3(a,b))和T6(F3(a,b)),所述第二表包括用于i4的值T7(F4(a,b))+nonz(a,b)和T8(F4(a,b))+nonz(a,b),所述第三表包括用于i5的值T9(F5(a,b))+nonz(a,b)和T10(F5(a,b))+nonz(a,b),其中nonz(x,y)是给出x,y当中非零值数的一个函数;F3(x,y)是如下规定的函数F3(x,y)=9*(x+4)+(y+4)(其中,x和y中每一个的绝对值是4或更小);F4(x,y)是如下规定的函数F4(x,y)=8*abs(x)+abs(y)(其中,x和y中每一个的绝对值是7或更小);F5(x,y)是如下规定的函数F5(x,y)=13*abs(x)+abs(y)(其中,x和y中每一个的绝对值是12或更少);abs(x)是给出x绝对值的一个函数;T5(index)到T10(index)中的每一个是给出当使用MPEG2-AAC标准中的霍夫曼代码簿5到10编码数据时导致的码长的一个函数;a和b是表示一组数据的整数;和i3、i4和i5是作为整数a和b的函数所计算的索引值。
24.根据权利要求23所述的编码器,其特征是i3=x*(a+4)+(b+4),其中,x是一个等于或大于9的正数;i4=Y*abs(a)+abs(b),其中,Y是一个等于或大于8的正数;i5=Z*abs(a)+abs(b),其中,Z是一个等于或大于13的正数。
25.根据权利要求24所述的编码器,其特征是经过其中的每一个都是用X位或更多位表示的a和b的位连接操作获得索引值i3,其中,X是等于或大于4的正数;经过其中的每一个都是用Y位或更多位表示的a和b的位连接操作获得索引值i4,其中,Y是等于或大于4的正数;和经过其中的每一个都是用Z位或更多位表示的a和b的位连接操作获得索引值i5,其中Z是等于或大于5的正数。
26.根据权利要求11所述的编码器,其特征是所述码长计算部分自适应输出使用在MPEG2-AAC标准中规定的霍夫曼代码簿5-10编码数据时导致的各个码长;和所述码长计算部分具有一个包括使用与一个公用索引值相关的霍夫曼代码簿5到10编码数据时导致的各个码长的第一表。
27.根据权利要求26所述的编码器。其特征是符号信息所需的位数已预先加到与包括在所述表中的霍夫曼代码簿7到10相关的每个码长上。
28.根据权利要求27所述的编码器,其特征是所述表包括与k相关的值T5(F3(a,b))、T6(F3(a,b))、T7(F4(a,b))+nonz(a,b)、T8(F4(a,b))+nonz(a,b)、T9(F5(a,b))+nonz(a,b)和T10(F5(a,b))+nonz(a,b),其中,nonz(x,y)是一个给出x和y当中非零值数的函数;F3(x,y)是如下规定的一个函数F3(x,y)=9*(x+4)+(y+4)(其中,x和y中每一个的绝对值是4或更小);F4(x,y)是如下规定的-个函数F4(x,y)=8*abs(x)+abs(y)(其中,x和y中每一个的绝对值是7或更小);F5(x,y)是如下规定的一个函数F5(x,y)=13*abd(x)+abs(y)(其中,x和y中每一个的绝对值是12或更小);abs(x)是一个给出x的绝对值的函数;T5(index)到T10(index)中的每一个分别是给出当使用在MPEG2-AAC标准中规定的霍夫曼代码簿5到10编码数数据时导致的码长的函数;a和b是表示一组数据的整数;和k是作为整数a和b的函数所计算的索引值。
29.根据权利要求28所述的编码器,其特征是索引值k是经过其中每一个都是用Z位或更多位表示的a和b的位连接操作获得的,其中Z是一个等于或大于5的正数。
30.根据权利要求3所述的编码器,其特征是;所述码长计算部分自适应输出一个无效信号,当一个输入数据值位于能够使用所述霍夫曼代码簿计算码长的可变范围之外时,该无效信号指出所述霍夫曼代码簿无效;和当控制部分接收一个与所述霍夫曼代码簿相关的无效信号时,所述控制部分自适应地不选择一个霍夫曼代码簿。
31.根据权利要求14所述的编码器,其特征是所述函数T1(F1(a、b、c、d))的值和函数T2(F1(a、b、c、d))的值分别存储在相对于索引值i1的MSB一侧和LSB-侧,并且,在函数T1的值和函数T2的值之间至少插入ml(ml是一个正整数)个位“0”;和所述函数T3(F2(a、b、c、d))+nonz(a、b、c、d)的值和函数T4(F2(a、b、c、d))+nonz(a、b、c、d)的值分别存储在相对于索引值i的MSB一侧和LSB一侧,并且,在T3的值和T4的值之间插入至少ml个位“0”。
32.根据权利要求19所述的编码器,其特征是所述函数T1(F1(a、b、c、d))的值、函数T2(F1(a、b、c、d))的值、函数T3(F2(a、b、c、d))+nonz(a、b、c、d)的值和函数T4(F2(a、b、c、d))+nonz(a、b、c、d))的值依次存储在相对于索引值j的从MSB侧到LSB侧,并且,在T1的值和T2的值之间、在T2的值和T3的值之间和在T3的值和T4的值之间插入至少ml(m1是一个正整数)个位0。
33.根据权利要求31所述的编码器,其特征是所述值ml是一个对以2为底对nl取对数运算(log2(nl))所获得的整数值,其中,nl是通过将包括在G组当中每一组内最大数除以4得到的一个值。
34.根据权利要求23所述的编码器,其特征是所述函数T5(F3(a,b))的值和函数T6(F3(a,b))的值分别存储在相对于索引值i3的MSB一侧和LSB一侧,并且在函数T5的值和函数T6的值之间插入至少m2个位“0”(m2是一个正整数);函数T7(F4(a,b))+nonz(a,b)的值和函数T8(F4(a,b))+nonz(a,b)的值分别存储在相对于索引值i4的MSB-侧和LSB一侧,并且在函数T7的值和函数T8的值之间插入至少m2个位“0”;和函数T9(F5(a,b))+nonz(a,b)的值和函数T10(F5(a,b))+nonz(a,b)的值分别存储在相对于索引值i5的MSB-侧和LSB一侧,并且,在函数T9的值和函数T10的值之间插入至少m2个位“0”。
35.根据权利要求28所述的编码器,其特征是函数T5(F3(a,b))的值、函数T6(F3(a,b))的值、函数T7(F4(a,b))+nonz(a,b)的值、函数T8(F4(a,b))+nonz(a,b)的值、函数T9(F5(a,b))+nonz(a,b)的值和函数T10(F5(a,b))+nonz(a,b)的值依次存储在相对于索引值k的从MSB侧到LSB侧,并且,在T5的值和T6的值之间、在T6的值和T7的值之间、在T7的值和T8的值之间、在T8的值和T9的值之间和在T9的值和T10的值之间插入至少m2个位“0”(m2是一个正整数)。
36.根据权利要求34所述的编码器,其特征是所述m2的值是通过对以2为底的n2进行对数运算(log2(n2))所得到的一个整数值,其中,n2是通过将包括在G组数据当中每一组内的最大数据数除以2得到的一个值。
全文摘要
一种编码器,包括:G个存储部分,用于储存G组数据;一个霍夫曼代码簿选择部分,用于从H个霍夫曼代码簿中选择一个用于每组数据的霍夫曼代码簿。所述霍夫曼代码簿选择部分包括一个用于计算使用每个霍夫曼代码簿对G组数据中的每组数据执行霍夫曼编码操作得到的码长的计算部分。当所选择的霍夫曼代码簿是一个无符号代码簿时,符号信息所需的位数预先加到由所述码长计算部分计算的码长上。
文档编号G10L19/00GK1284791SQ0011921
公开日2001年2月21日 申请日期2000年4月20日 优先权日1999年4月20日
发明者宫阪修二, 则松武志, 津岛峰生, 石川智一, 泽田庆昭 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1