用于信号的低复杂度组合编码的设备和方法

文档序号:7515792阅读:305来源:国知局
专利名称:用于信号的低复杂度组合编码的设备和方法
技术领域
本发明一般地涉及编码向量,具体上涉及向量的低复杂度组合阶乘脉冲编码。

背景技术
用于对语音、音频、图像、视频和其他信号的向量或者矩阵数量进行编码的方法是公知的。在Peng等的美国专利6,236,960(其通过引用被包含在此)中描述的这样一种方法被称为阶乘脉冲编码(或者FPC)。如下所示,FPC可以使用总共M个比特来编码向量xi 并且,向量xi的所有值是整数值,使得-m≤xi≤m,其中,m是单位幅度脉冲的总数,并且n是向量长度。总共M个比特被用于以最有效的方式来对N个组合进行编码,使得用于描述组合的理论最小数量的如下表达式成立 对于这个方程式,F(n,d)是通过下式给出的在n个位置上的d个非零的向量元素的组合的数量 D(m,d)是通过下式给出的、在给定的总共m个的单位脉冲的情况下的d个非零向量元素的组合的数量 D(m,d)=F(m-1,d-1),(4) 并且,2d表示用于描述d个非零向量元素的极性(符号)所需要的组合的数量。项min(m,n)允许单位幅度脉冲的数量m超过向量长度n的情况。在现有技术中已经充分说明了用于编码和解码这种形式的向量的方法和设备。而且,已经在3GPP2标准C.S0014-B中描述了这种编码方法的实际实现方式,其中,向量长度n=54和单位幅度脉冲的数量m=7,其产生了M=35比特的码字。
虽然n和m的这些值不引起任何过度的复杂性负担,但是更大的值会很快地引起问题,特别是在需要将存储和计算复杂度保持得尽可能低的移动手持装置中。例如,这种编码方法对于一些应用(诸如音频编码)的使用可能要求n=144并且m=28或者更高。在这些情况下,与使用现有技术的方法来产生组合表达式F(n,d)相关联的成本可能对于实际实施而言太高。
为了更详细地考察该成本,我们可以将等式3重写为 直接的实现是存在问题的,因为F(144,28)需要在分子上的197比特的精度和在分母上的98比特的精度,以产生99比特的商。因为在今天的手持装置中使用的大多数数字信号处理器(DSP)通常仅仅支持16比特x16比特的乘法运算,因此,需要使用特殊的多倍精度的乘法/除法程序(routine)。这样的程序需要一系列嵌套的乘法/累加运算,其通常需要k个乘法/累加(MAC)量级的运算,其中,k是在操作数中的16比特分段的数量,

因此,单个197×16比特乘法的执行需要最少13个MAC运算外加移位和存储操作。以类似的方式来计算分母项,以产生98比特的结果。另外,需要197/98比特的除法,其是极其复杂的运算,因此在方程5中的整个阶乘关系式的计算将需要相当多的资源。
为了减小复杂度,重写方程5,以对除法运算进行分配,从而产生下述结果 在这个表达式中,除法运算的动态范围得以减小,但是不幸的是,需要提高商的分辨率,以精确地表示由3、7、9等进行的除法。为了适应这种结构,也需要四舍五入运算来保证整数结果。假定在大数的高精度除法运算的情况下,这种实现方式未充分地处理大值的m和n的复杂度问题,并且还可能由于在精度上的累积误差而产生不正确的结果。
在另一种实现方式中,可以以下面的方式来重新布置方程5 如果从左向右评估这个表达式,则结果将总是产生整数值。虽然这种方法在一定程度上控制精度和动态范围,但是大值的m和n仍然要求大量地使用多倍精度的乘法和除法运算。
最后,为了最小化计算复杂度,有可能预先计算和在查找表中存储所有的阶乘组合。因此,可以简单地在n×m矩阵中存储F(n,m)的所有值,并且使用很少的处理器周期来从存储器中对其进行适当地检索。但是,这种手段的问题是当n和m变大时,相关联的存储要求也变大。引用之前的示例,F(144,28)将需要


这对于大多数移动手持装置的过高的。因此,需要一种用于向量的低复杂度的组合阶乘脉冲编码的方法和设备。


发明内容



图1是编码器的方框图。
图2图解了码字的产生。
图3解码器的方框图。
图4是示出图1和图3的组合函数产生器的操作的流程图。
图5是示出图1的编码器操作的流程图。
图6是示出图3的解码器操作的流程图。
图7是示出图1的组合编码电路的操作的流程图。
图8是示出图3的组合解码电路的操作的流程图。

具体实施例方式 为了解决上述的需要,在此提供了一种用于向量的低复杂度组合编码的方法和设备。在编码器的操作期间,接收信号向量(x)。将根据要编码的信号向量来产生第一多倍精度操作数(Ψ′k)。尾数操作数和指数操作数被产生。尾数操作数和指数操作数都表示基于要编码的信号向量的第二多倍精度的操作数。根据指数操作数来选择要修改的Ψ′k的一部分。根据尾数操作数修改Ψ′k的该部分,以产生修改的多倍精度的操作数(Ψ′k+1)。最后,产生多倍精度的码字来在对应的解码器中使用。
本发明涵盖一种用于操作编码器的方法,所述编码器将向量(x)编码成码字(C)。所述方法包括步骤接收要编码的向量x;根据x来产生第一多倍精度的操作数(Ψ′k);并且,产生尾数操作数(M)和指数操作数(h)。所述尾数操作数和指数操作数表示基于要编码的信号向量的第二多倍精度的操作数(F′(pk,k))。然后,根据所述指数操作数来选择要修改的Ψ′k的一部分,并且根据尾数操作数和位置指示符来修改Ψ′k的所述部分来产生修改的多倍精度的操作数(Ψ′k+1)。最后,根据Ψ′k+1来产生码字(C)。
本发明另外涵盖一种编码器,其包括组合编码电路,所述组合编码电路用于执行以下步骤接收要编码的向量x;根据x来产生第一多倍精度的操作数(Ψ′k);并且,产生尾数操作数(M)和指数操作数(h)。所述尾数操作数和指数操作数表示基于要编码的信号向量的第二多倍精度的操作数(F′(pk,k))。然后,根据所述指数操作数来选择要修改的Ψ′k的一部分,并且根据尾数操作数和位置指示符来修改Ψ′k的所述部分来产生修改的多倍精度的操作数(Ψ′k+1)。最后,根据Ψ′k+1来产生码字(C)。
本发明另外涵盖一种操作解码器的方法,所述解码器根据码字(C)产生向量(x)。所述方法包括以下步骤接收所述码字(Cπ);根据Cπ来产生第一多倍精度的操作数(Ψ′k+1);并且,产生尾数操作数(M)和指数操作数(h)。所述尾数操作数和指数操作数表示基于所述码字的第二多倍精度的操作数(F′(pk,k))。根据所述指数操作数来选择要修改的Ψ′k+1的一部分,并且根据尾数操作数和位置指示符来修改Ψ′k+1的所述部分,从而产生修改的多倍精度的操作数(Ψ′k)。向量x的第(k-1)个非零的元素的位置pk-1被解码,并且根据位置pk-1来产生向量(x)。
本发明另外涵盖一种解码器,其包括组合编码电路,所述组合编码电路用于执行以下步骤接收所述码字(Cπ);根据Cπ来产生第一多倍精度的操作数(Ψ′k+1);并且,产生尾数操作数(M)和指数操作数(h)。所述尾数操作数和指数操作数表示基于所述码字的第二多倍精度的操作数(F′(pk,k))。根据所述指数操作数来选择要修改的Ψ′k+1的一部分,并且根据尾数操作数和位置指示符来修改Ψ′k+1的所述部分,从而产生修改的多倍精度的操作数(Ψ′k)。向量x的第(k-1)个非零的元素的位置pk-1被解码,并且根据位置pk-1来产生向量(x)。
现在转到附图,其中,相似的附图标号表示相似的部件。图1是编码器100的方框图。编码器100包括向量产生器102、组合编码电路(编码器)106、组合函数产生器108和其他编码电路104。在操作期间,向量产生器102接收要编码的输入信号。如在本领域中已知,所述输入信号可以包括诸如语音、音频、图像、视频和其他信号的信号。
向量产生器102接收输入信号,并且建立向量xi。向量产生器102可以包括任何数量的编码范例,其中包括但是不限于由Peng等描述的码激励线性预测(CELP)语音编码;用于音频、图像和视频的变换域编码,其中包括基于离散傅立叶变换(DFT)、离散余弦变换(DCT)和基于修改的离散余弦变换(MDCT)的方法;基于小波的变换编码;直接时域脉冲代码调制(PCM);差分PCM;自适应差分PCM(ADPCM);或者,在本领域中公知的子带编码技术族中的任何一个。实际上,可以根据本发明有益地处理如上所述形式的任何信号向量。
组合编码电路106接收向量xi,并且使用阶乘脉冲编码来产生码字C。如上所述,假设

阶乘脉冲编码可以使用总共M个比特来编码向量xi,并且向量xi的所有值是整数值,使得-m≤xi≤m,其中m是单位幅度脉冲的总数,并且n是向量长度。如上所述,大值的n和m会迅速地引起问题,特别是在需要将存储和计算复杂度保持得尽可能低的移动手持装置中。
为了处理这个问题,组合函数产生器108使用低复杂度技术来用于产生F′(n,d)。然后,组合编码电路106使用F′(n,d)来产生码字C。电路108使用阶乘组合F′(n,d)的相对低的分辨率的近似(精度的比特),其提供了仅足够允许产生有效码字的精度。即,只要保持特定的属性,则函数F(n,d)的适当近似足以保证所产生的码字可被唯一地解码。为了描述F′(n,d)的产生,我们首先推导出作为F(n,d)的适当近似的函数F′(n,d)。所述第一步骤是以任意底数a对方程5取对数,并且对重新布置的项以a为底数取反对数 其中,函数expa(k)=ak。接着,定义函数P(i)、Q(d)和R(k),并且代入方程8,以便 其中P(i)=loga(i),

和R(k)=expa(k)=ak。
但是,根据本发明的优选实施例,要使得所产生的码字可被唯一地解码不需要F(n,d)和F′(n,d)相等。仅仅需要两个条件就足以使其成立 F′(n,d)≥F(n,d), (10) 以及 F′(n,d)≥F′(n-1,d)+F′(n-1,d-1).(11) 对于第一条件,所述限制仅仅表示,如果F′(n,d)<F(n,d),则将存在重叠的代码空间,并且随后,将有可能存在多于一个的能够产生特定码字输入;因此,所述码字不能被唯一地解码。第二条件规定,对于给定的n、d的“误差”将大于或者等于与由Peng等在美国专利6,236,960中描述的递归关系的前一个元素相关联的误差项的和。可知,F(n,d)=F(n-1,d)+F(n-1,d-1),其仅仅在如果组合表达式精确地等于

的情况下成立。但是,虽然在方程11中的不等式是充分的,但是其可以不必对于n和d的所有值都成立。对于这样的值,F(n,d)可以满足从Peng等的方程31推导出的另一个不等式,并且其通过下式被给出 在这种情况下,方程11需要满足对于特定的(m,k),(m≤n),(k≤d)的严格不等式,即 F(n,k)>F(m-1,k)+F(m-1,k-1),n≤n,k≤d.(13) 向回参见方程9,我们现在希望通过利用原始函数的低复杂度的近似来建立函数P′(i)、Q′(d)和R′(k),从而产生F′(n,d),使得 并且,其中,满足在方程10和11中给出的条件。考虑P(i),我们可以希望对所述函数进行近似,以便P′(i)≥loga(i),i∈[1,2...,n]。如果我们选择a=2,并且然后将P′(i)限制到32比特的精度,则所产生的运算容易被实现在手持的移动装置上,因为大多数DSP支持单循环32比特加法。因此,我们定义
其中,l(i)是可以作为i的函数来改变的移位因子。在所述优选实施例中,l(i)=l=21,但是许多其他组的值是可能的。对于这个示例,2l因子等价于向左移位l比特,据此,向下取整函数

在四舍五入到下一个最高整数的同时去除分数位,最后,所述2-l的因子将结果向右移位l比特。使用这种方法,对于所有的i≥1而言,函数P′(i)≥log2(i),还仅仅使用32比特来提供了足够的动态范围和精度,因为在log2域中的正整数分辨率的9个比特可以表示512比特的数。为了避免实时地计算这些值的复杂度,可以对于F(144,28)示例,仅仅使用存储器的144×4字节来对其进行预先计算和将其存储在表中。使用用于近似Q(d)的类似方法,我们得到
其中,因为要从总数中减数,因此使用向下取整函数

这保证了

使得Q′(d)的影响将保证F′(n,d)≥F(n,d)。虽然l(j)可以根据m和n的配置来取许多值,但是所述优选实施例使用l(j)=l=14的值来作为可变的移位因子。像P′(i)那样,对于F(144,28)示例,可以仅仅使用存储器的28×4字节来预先计算Q′(d)和将其存储在表中。为了定义R′(k),我们需要首先将k定义为 使用如上定义的P′(i)和Q′(d),k优选是32比特的数,其中有8比特的无符号的整数分量ki和24比特的分数分量kf。使用其,我们可以通过使得k=ki+kf,然后取以2为底的反对数以得出

从而推导出R′(k)≥exp2(k)=2k。然后,我们可以使用泰勒级数展开来估计分数分量是否达到期望的精度,以

来表示,使用向上取整函数来得对所述结果四舍五入,然后将所述结果适当地移位以形成多倍精度的结果(其仅仅具有l个有效比特),以便
其中,

是被应用到泰勒级数展开结果的整数移位因子。在此,l是移位因子,其以与方程15和16类似的方式用于保证R′(k)≥2k。但是,因为对于有效的实时操作,实际上不能预先计算R′(k),因此必须小心地指定在编码器和解码器两者中都需要的精确的操作,以保证重建的信号向量精确地匹配输入信号向量。注意,可以通过左移

来获得R′(k),其中,左移

可以由l比特来精确地表示。
在上述的讨论中,已经选择了函数P′(i)、Q′(d)和R′(k),使得每个独立的函数估计保证了F′(n,d)≥F(n,d)的结果。但是,仅仅需要整个效果满足这个条件就可以了。例如,P′(i)和Q′(d)可以如上所述,但是R′(k)可以是更传统的R′(d)≈2k函数,所述函数可以删截或者四舍五入最低有效位,使得对于k的某些值而言可以使R′(k)小于2k。只要这个效果相对于P′(i)和Q′(d)的影响较小,则其是可接受的,因此在方程10和11中的属性仍然成立。
而且,可以使用任何函数P′(i)、Q′(d)和R′(k),而不损失一般性,只要方程10和11的属性被满足。但是,必须小心,如果使用太低的精度,则可以出现在比特率的增大。也应当注意,在比特率和复杂度上存在固有的折衷,并且对于大值的m、n,对于在复杂度的极大降低而言,1或者2比特的增加可以被认为是合理的折衷。
现在说明在组合编码电路106中的用于位置和幅度的部分码字C的公式化。设π={p1,p2,...,pv}是非零脉冲位置(以升序),并且设μ={m1,m2,....,mv}是在向量x中的相应位置的幅度。通过下式来给出用于脉冲位置的代码 并且通过下式来给出用于脉冲幅度的代码 因此,这些码字的公式化需要增加v和v-1个多倍精度的数。在解码器中需要类似的相减运算。这些运算也当n和m大时增加了FPC方法的复杂度。考虑用于多层嵌入编码系统的音频信号的编码/解码。这种技术用于编码在所述多层系统的三层中的残余误差信号的变换。设20毫秒的块的大小是n=280,并且对于所有的层相同。用于编码的脉冲的数量依赖于每层的比特率。如果每层是8kbps、16kbps或32kbps,则它们分别需要160比特、320比特和640比特来用于20ms块的编码。使用FPC技术,对于每层160比特、320比特和640比特,可以分别使用28、74和230脉冲来编码长度280的块。在数字信号处理器上执行在方程(19)和(20)中的多倍精度的运算,所述数字信号处理器通常以16比特字来进行运算。因此,为了形成160比特的码字,需要在10个字上执行加法运算;并且对于640比特码字,需要在40个字上执行加法运算。每个加法运算需要4个单元(进位的产生、移动到阵列、带进位的加法)。因此,在多层系统的p层中的k比特码字的编码/解码需要

个运算/秒。对于n、m和p的多个值,在表1中示出了多倍精度加法/减法运算的复杂度。在这个表中,WMOPS表示加权的每秒百万次运算。
表1在使用现有技术方法的FPC编码/解码中的加法/减法的复杂度 从表1中,我们注意到,当比特率加倍时,多倍精度加法的复杂度增加6倍。
如上所述,将组合函数替换为近似函数F′(n,r),其被给出为 其中
并且R′(k)是函数R′(k)≈2k的近似,其被给出为
其中,k=ki+kf被分解成k的整数和分数分量,并且,

是k的分数分量的低分辨率泰勒级数展开。根据以上预定义的函数Q′(r)和R′(k),首先获得P′(i),从而对于n和d的所有值满足唯一可解码的不等式 F′(n,d)>F′(n-1,d)+F′(n-1,d-1)(24) 返回到方程(19)和(20,将近似函数F′替代实际函数F得到 如果k>lR,在方程(23)中获得的二进制表示F′(n,r)具有ki-lR个终止零。通过左移(h=ki-lR次移位)lR比特数而获得F′(n,r)来作为多倍精度数。因为F′(pk,k)的尾部的h个比特是0,则在方程(25)中当我们将F′(pk,k)与存在部分和相加时,码字的那些尾部的h比特将不受到影响。为了有效地使用这个属性,以伪浮动点格式来计算F′(pk,k),即,函数R′(k)输出lR比特的尾数(M)和对应的非负的指数(h)。所述lR比特的尾数(M)被定义为
并且指数h被定义为 h=min(0,ki-lR).(28) 现在,在方程(25)和(26)中的求和可以容易地使用下述事实当将F′(pk,k)与部分和相加时,不影响

个字。
上述方法确实降低了一定的复杂度。但是,在所述运算期间产生的进位仍然需要被传播,直到码字的尾部。随后,我们将示出,如果F′(k,r)满足特定的属性,则进位需要被传播到整个码字的小得多的部分。
首先,我们将探讨的是,如果要对准确的组合函数F(pk,k)进行相加(像在方程(19)中那样)并且以k的升序来计算和,则进位将被传播到一个额外的字 Cπ=(((F(p1,1)+F(p2,2))+F(p3,3))+…)+F(pv,v),(29) 即,通过下式来给出被加上F(pk,k)的部分和Ψk 可以显示,多倍精度操作数Ψk小于F(pk,k-1)。Ψk对F(pk,k)的最大比率小于k/(pk-k+1)。当k=pk+1时,上述比率是无限大,其中,k=pk+1也是k的最大可能值。因为F(pk,pk+1)=0,进位不必在这种特定情况下被传播。对于k的其他值,这个比率不大于n和m的较小者。因此 Ψk+F(pk,k)<(min(m,n)+1)F(pk,k),k≤pk(31) 因为min(m,n)小于32768,因此,上述的求和将不会把进位传播超过一个额外的字。这表明,如果我们在有序求和(29)中使用精确的组合函数,则我们获得把进位仅仅传播到一个额外的字的益处,但是精确的组合函数没有尾部零的优点,因此在F(pk,k)的长度上执行加法。
很清楚,我们希望设计近似函数F′(pk,k),使得除了具有唯一的可解码性和尾部的零之外,在方程(29)中的F′(pk,k)的有序求和不要求进位传播。可以显示,通过下式来给出被加上F′(pk,k)的部分和(第一多倍精度码字) 其小于F′(pk,k-1)。
F′(pk,k-1)<32768·F′(pk,k),(33) 因此,当向Ψ′k加上F′(pk,k),产生Ψ′k+1(修改的多倍精度码字)时,不等式足以满足进位仅需要被传播到一个额外的字。
Ψ′k+1=Ψ′k+F′(pk,k),(34) 已经从经验上,对于由方程(21)、(22)和(23)定义的F′(n,r)确定了这一点。除了唯一可解码的不等式之外,我们还需要满足部分和不等式,即, Ψ′k<32768·F′(pk,k).(35) 可见,如果所述唯一可解码的不等式对于n<pk成立,则 Ψ′k<F′(pk-1,k-1)+F′(pk-1,k-2).(36) 因此,足以产生P′(i),所述P′(i)满足 32768·F′(pk,k)>F′(pk-1,k-1)+F′(pk-1,k-2)(37) 现在,近似组合函数F′满足 1.唯一可解码的不等式 2.尾部为零的属性 3.部分和不等式 因此,这些函数可以用于通过仅仅修改完整的多倍精度码字的很小的子集(仅仅在10、20或者30个字中的3个字)来构造阶乘包装码字。所述小子集被表示为由整数wl和wu定义的位置指示符,所述wl和wu用于识别在多倍精度码字中的要修改的字。所述位置指示符被计算如下
其中。16是字长度,并且将lR=16选择为尾数的长度。根据尾数M来修改多倍精度码字(Cπ)的字wl至wu。注意,所述多倍精度码字 Cπ=Ψ′v+1 (39) 解码器包含从Ψ′k+1=Ψ′k+F′(pk,k)减去F′(pk,k)。使用与我们用于求和类似的变元,可知,如果函数F′满足所述三个上面定义的属性,则在解码期间,也仅仅需要对完整码字的很小的子集进行修改。在所述解码器中,pk-1被获得为 pk-1=max(p)s.t.F′(p,k-1)≤Ψ′k(40) 在表1中示出了使用现有技术方法来编码/解码位置和幅度的复杂度(所示的复杂度仅仅用于加法和减法部分。所述复杂度不包括产生F′的复杂度)。使用所提出的方法来在多层嵌入系统的3层中进行编码/解码,结果是大大地降低了在多倍精度加法/减法复杂度。在表2中示出了当我们使用本发明时的对应的复杂度数量。注意,当在编码中使用更多的脉冲(更长的码字大小)时,所述复杂度改善更大。
表2在使用当前发明的FPC编码/解码中的加法/减法的复杂度 非零位置的数量的编码 lR比特尾数和指数的表示格式还在非零位置的数量的编码上具有优点。通过下式来给出非零位置v的数量的编码 可以容易地看出,两个近似函数的乘法在尾数和指数格式中比在多倍精度格式中容易得多。然而,其的主要优点是,当我们要使用lR比特尾数和指数的表示来降低复杂度时,可以仅仅使用两个字来预先存储F′(n,k)和F′(m-1,k-1)中的每个(它们的lR比特尾数的乘积和它们的指数的和也可以被预先存储)。这使得能够快速的编码v,而没有任何较大的ROM的需求。
在编码器100的运行期间,组合编码电路106将接收要编码的信号向量(x)。将根据要编码的信号向量来产生第一多倍精度操作数(Ψ′k)。具体地,

其中,pi是向量x的非零元素的位置。尾数操作数(

)和指数操作(h=min(0,ki-lR))被产生。尾数操作数和指数操作数两者都表示第二多倍精度操作数(F′(pk,k)),其基于要编码的信号向量。然后,电路106根据指数操作数来选择要修改的Ψ′k的一部分。如上所述,所述部分被表示为由整数wl和wu定义的位置指示符,所述整数wl和wu识别在多倍精度码字中要修改的字。如方程(38)中所示,计算位置指示符。然后根据尾数操作数和位置指示符来修改Ψ′k的一部分,以产生像在方程(34)中那样的修改的多倍精度操作数(Ψ′k+1),并且根据如方程(39)中所示的修改的多倍精度操作数,来产生在对应的解码器中使用的多倍精度码字。
图2图解了经由上述技术来产生码字的一个示例。如上所述,

如图2中所示,当从Ψ′k向Ψ′k+1变化时,仅仅修改多倍精度码字的字3、4和5。被选择来修改的特定字是来自多倍精度码字Cπ的wl到wu字,并且wl到wu基于指数h=50,使得

通过与左移的尾数M的h-16×wl个最低有效比特相加来修改Ψ′k的wl字。通过与尾数M的后续16比特相加来修改wl+1到wu-1个字。这些加法中的每个都涉及带进位的加法,并且为下一个级产生了进位。通过仅仅加上来自前一个加法的进位来对wu字进行修改。注意,因为lR=16,所以wu=wl+2。在解码器的情况下,执行减法而不是加法。
图3是解码器300的方框图。如图所示,解码器300包括组合解码电路306、信号重建电路310、其他解码电路304和组合函数产生器108。在操作期间,通过组合解码电路306来接收组合码字。组合解码电路306向组合函数产生器提供n将d,并且接收作为响应的F′(n,d)。解码电路306然后根据F′(n,d)来产生向量xi。电路306以与电路106类似的方式来工作,除了用减法来替换拉加法运算。换句话说,Ψ′k=Ψ′k+1-F′(pk,k)。向量xi被传送到信号重建电路310,其中,根据xi和来自其他解码电路304的其他参数来建立输出信号(例如语音、音频、图像、视频或者其他信号)。具体地,所述其他参数可以包括与在特定实施例中使用的信号编码范例相关联的任何数量的信号重建参数。其可以包括但是不限于信号调节和能量参数,以及频谱整形和/或合成滤波器参数。通常,这些参数用于调节重建信号向量xi的能量和/或频谱形状,以再现最后的输出信号。
图4是示出了图1和图3的组合函数产生器的操作的流程图。具体地,图4的逻辑流示出了组合函数产生器108用于产生F′(n,d)所需要的那些步骤。逻辑流在步骤402开始,其中,接收输入n和d。在步骤403,将累加器A设置为0。在步骤404,计数器i被设置为等于n-d+1。在步骤406,向累加器A加上对数近似P′(i)。在步骤410,计数器i递增1。以循环重复步骤406和410,直到计数器i大于n。在步骤S412,对i>n进行检查,并且当i变得大于n时,终止该循环。在这个阶段,累加器包含组合函数F(n,d)的分子的对数近似。在步骤416,从累加器减去组合函数Q′(d)的分母的对数近似,以获得所述组合函数的对数近似。在步骤418,获取累加器的指数近似R′(A)来产生组合函数的近似B。在步骤414,B被输出为F′(n,d)。
图5是图1的编码器的操作的流程图。逻辑流在步骤501开始,其中,向量产生器102接收输入信号。如上所述,所述输入信号可以包括语音、音频、图像、视频或者其他信号。在步骤503,向量xi被产生和输入到组合编码电路106中,其中,m和d被确定和传送到组合函数产生器108。如上所述,m是单位幅度脉冲的总数(或者xi的整数值分量的绝对值的和),并且d是xi的非零向量元素的数量。在步骤505,通过组合函数产生器108来产生F′(n,d),并且其被传送到组合编码电路106,其中,对向量xi进行编码以产生组合码字C(步骤507)。如上所述,通过将在F(n,d)中的P(i)、Q(d)和R(k)替换为原始函数的低复杂度的近似,以便满足在方程10和11中给出的条件,从而产生F′(n,d)。
图6是示出图3的解码器的操作的流程图。逻辑流在步骤601开始,其中,通过组合解码器306接收组合码字。在步骤603,n和d被从组合解码器306传送到组合函数产生器108,并且F′(n,d)被返回到解码器306(步骤605)。解码器306根据F′(n,d)来解码所述码字(步骤607),以产生向量xi,并且xi被传送到信号重建电路310,其中,产生输出信号(步骤609)。
图7是示出组合编码电路106的操作的流程图。所述逻辑流在步骤701开始,其中,接收信号向量(x)。根据要编码的信号向量来产生第一多倍精度操作数(Ψ′k)(步骤703)。具体地,

其中,pi是向量x的非零元素的位置。尾数操作数(

)和指数操作数(h=min(0,ki-lR))被产生(步骤705)。尾数操作数和指数操作数表示基于要编码的信号向量的第二多倍精度操作数(F′(pk,k))。然后,电路106根据指数操作数来选择要修改的Ψ′k的一部分(步骤707)。如上所述,所述部分被由整数wl和wu定义的位置指示符表示,整数wl和wu识别在要修改的在多倍精度码字中的字。如在方程(38)中所示,计算位置指示符。在步骤709,根据尾数操作数和位置指示符来修改Ψ′k的一部分,以像在方程(34)中那样来产生修改的多倍精度操作数(Ψ′k+1),并且在步骤711,根据如在方程(39)中所示的修改的多倍精度码字来产生在对应的解码器中使用的多倍精度码字。
图8是示出组合解码电路306的操作的流程图。所述逻辑流在步骤801开始,其中,接收码字(Cπ)。将根据所接收的码字来产生第一多倍精度操作数(Ψ′k+1)(步骤803)。具体地,

其中,pi是被编码的向量x的非零元素的被解码位置。尾数操作数(

)和指数操作数(h=min(0,ki-lR))被产生(步骤805)。所述尾数操作数和指数操作数都表示基于码字的第二多倍精度操作数(F′(pk,k))。然后,电路306根据指数操作数来选择要修改的Ψ′k+1的一部分(步骤807)。如上所述,所述部分被表示为由整数wl和wu限定的位置指示符,整数wl和wu识别要修改的在多倍精度码字中的字。如方程(38)中所示计算位置指示符。在步骤809,根据尾数操作数和位置指示符来修改Ψ′k+1的一部分,使得所产生的修改的多倍精度操作数(Ψ′k)为Ψ′k=Ψ′k+1-F′(pk,k),并且在步骤811,如在方程(40)中,根据修改的多倍精度码字来解码向量x的第(k-1)非零元素的位置pk-1。在步骤813,根据解码的位置pk-1来产生解码的向量x。
表1示出了与现有技术相比较的、与本发明相关联的复杂度的降低。对于m和n的不同值,给出了比特M的相关数量和每个帧调用F(n,m)的函数的平均数量。对于这些示例,帧长度间隔是20ms,其对应于每秒50个帧的速率。用于复杂度比较的测量单位是加权的每秒百万计运算或者WMOPS。如其将在受限精度的给定点DSP上执行一样,将使用计算机模拟来产生对复杂度的估计。对于这些示例,当适当时使用多倍精度库,并且每个原始指令被分配适当的加权。例如,乘法和加法被提供一个运算的加权,而原始的除法和超越(transcendental)运算(例如2x)被提供25个运算的加权。从所述表中,容易看出,使用F′(n,d)相对于现有技术提供了较大复杂度的降低,并且随着n和m增大,在复杂度的减低成比例地增加。对于F(144,60)的情况,所显示这种复杂度的降低高达两个数量级的程度,并且当n和m进一步增大,其将继续增长。这主要是因为在现有技术中执行精确的组合表达所需要的操作数的精度的增长。这些运算证明会导致过量的复杂度负担,并且,实际上消除了将阶乘脉冲编码用作可用于对大值的m和n的向量进行编码的方法。通过仅仅要求与少量的存储器存储结合的单周期低精度操作,来产生对这种类型的编码所需要的复杂组合表达的估计,使得本发明解决以上问题。
表3F(n,m)对F′(n,m)的复杂度比较
下面的文本和方程实现了上述技术,从而编码和解码为用于增强的可变速率编码解码器的第三代合作伙伴项目2(3GPP2)C.P0014-C规格,用于宽带扩频数字系统的语音服务选项3、68和70。
4.13.5MDCT残余线状谱量化 被称为残余线状谱的MDCT系数被以与4.11.8.3的FCB阶乘代码本类似的方式被量化。基本地,在长度n向量v具有属性

并且所有的元素vi是整数值的情况下,可以实现N=nFPCm个可能组合的阶乘编码。即,v的整数元素的绝对值的和等于m。对于这种情况,我们希望编码Xk的能量定标的版本,以便 其中,γm是全局比例因子,并且范围0-143对应于频率范围0-3600Hz。对于这种情况,m可以是用于NB的28或者用于WB的23个输入。根据下面的伪代码来迭代地确定(对于非零的||Xk||2)用于实现上述目的的γm的值 /*初始化(Initialization)*/ emin=-100,emax=20 e=max{emin,-10log10(||Xk||2)/1.2} s=+1,Δe=8 /*主循环(main loop)*/ do{ γm=10e/20 if(m′==m)then break else if(m′>m and s==+1) then s=-1,Δe=Δe/2 else if(m′<m and s==-1) then s=+1,Δe=Δe/2 end e=e+s·Δe }while e ≤emax andΔe≥Δmin 然后将量化的残余线状谱Xcc计算为 如果在少见的情况下m和m′的值不同,则应当通过向量化的残余线状谱Xcc加上或者减去单位值来修改线状谱。这保证了可以使用阶乘编码方法来可靠地对所产生的线状谱进行编码。用于表示线状谱Xcc的输出指数被指定为RLSIDX。这个指数包括用于144FPC28情况的131比特和用于144FPC23情况的114比特。
为了处理与编码和解码向量Xcc相关联的复杂度问题,应当使用低分辨率组合近似函数F′(n,r)来替代标准的组合关系F(n,r)=nCr=n!/r!(n-r)!。具体上,编码器和解码器使用具有属性F′(n,r)≥F(n,r)和F′(n,r)≥F′(n-1,r)+F′(n-1,r-1)的组合函数产生器F′(n,r),所述属性足以唯一地编码/解码向量Xcc。所述函数F′(n,r)被给定为 其中,P′(i)和Q′(r)是32比特的查找表,其被给出为
并且
并且,其中,R′(k)是函数R′(k)≈2k的多倍精度整数近似,其被给出为
其中,k=ki+kf被分解为k的整数和分数分量,并且

是k的分数分量的泰勒级数展开。通过将多倍精度乘法和除法运算替换为32比特的加法和2k的低复杂度泰勒级数近似,之后进行多倍精度的移位运算,这些运算大大地降低了在计算组合表达式中所需要的复杂度。编码/解码运算的所有其他分量与在4.11.8.3中的类似。
虽然已经参考特定实施例具体示出和描述了本发明,但是本领域内的技术人员应该理解,在不偏离本发明的精神和范围的情况下,可以对本发明进行在形式和细节上的各种改变。本发明旨在将该种改变包括在下面的权利要求的范围中。
权利要求
1.一种用于操作编码器的方法,所述编码器从输入向量(x)产生码字(C),所述方法包括步骤
接收要编码的所述输入向量;
根据所述输入向量来产生第一多倍精度操作数(Ψ′k);
产生尾数操作数(M)和指数操作数(h),其中,所述尾数操作数和所述指数操作数表示基于要编码的信号向量的第二多倍精度操作数(F′(pk,k));
根据所述指数操作数来选择要修改的所述第一多倍精度操作数的一部分;
根据所述尾数操作数来修改所述第一多倍精度操作数的所述部分,以产生修改的多倍精度操作数(Ψ′k+1);并且
根据所述修改的多倍精度操作数来产生所述码字(C)。
2.根据权利要求1所述的方法,其中,Ψ′k基于一组尾数和指数操作数,所述一组尾数和指数操作数表示F′(pi,i);1≤i<k,其中,pi是所述输入向量x的非零元素的位置。
3.根据权利要求1所述的方法,其中,
4.根据权利要求1所述的方法,其中,h是函数ki。
5.根据权利要求1所述的方法,其中,通过由整数wl和wu定义的位置指示符来表示要修改的所述第一多倍精度操作数Ψ′k的所述部分。
6.根据权利要求5所述的方法,其中
其中,16是字长度,并且lR是尾数的长度。
7.一种编码器(100),包括
组合编码电路(106),用于执行步骤
接收要编码的向量x;
根据x来产生第一多倍精度操作数(Ψ′k);
产生尾数操作数(M)和指数操作数(h),其中,所述尾数操作数和所述指数操作数表示基于要编码的信号向量的第二多倍精度操作数(F′(pk,k));
根据所述指数操作数来选择要修改的Ψ′k的一部分;
根据所述尾数操作数和位置指示符来修改Ψ′k的所述部分,以产生修改的多倍精度操作数(Ψ′k+1);并且
根据Ψ′k+1来产生码字(C)。
8.一种用于操作解码器的方法,所述解码器从码字(C)产生向量(x),所述方法包括步骤
接收码字(Cπ);
根据Cπ来产生第一多倍精度操作数(Ψ′k+1);
产生尾数操作数(M)和指数操作数(h),其中,所述尾数操作数和所述指数操作数表示第二多倍精度操作数(F′(pk,k));
根据所述指数操作数来选择要修改的Ψ′k+1的一部分;
根据所述尾数操作数和位置指示符来修改Ψ′k+1的所述部分,以产生修改的多倍精度操作数(Ψ′k);
解码向量x的第(k-1)个非零元素的位置pk-1;并且
根据所述位置pk-1来产生向量(x)。
9.一种解码器(300),包括
组合编码电路(306),用于执行步骤
接收码字(Cπ);
根据Cπ来产生第一多倍精度操作数(Ψ′k+1);
产生尾数操作数(M)和指数操作数(h),其中,所述尾数操作数和所述指数操作数表示基于要编码的信号向量的第二多倍精度操作数(F′(pk,k));
根据所述指数操作数来选择要修改的Ψ′k+1的一部分;
根据所述尾数操作数和位置指示符来修改Ψ′k+1的所述部分,以产生修改的多倍精度操作数(Ψ′k);
解码向量x的第(k-1)个非零元素的位置pk-1;并且
根据所述位置pk-1来产生向量(x)。
全文摘要
在编码器的运行期间,接收信号向量(x)。根据要编码的信号向量来产生第一多倍精度操作数(Ψ′k)。产生尾数操作数和指数操作数。尾数操作数和指数操作数表示基于要编码的信号向量的第二多倍精度操作数。根据指数操作数来选择要修改的Ψ′k的一部分。根据尾数操作数来修改Ψ′k的该部分,以产生修改的多倍精度操作数(Ψ′k+1)。最后,产生在对应的解码器中使用的多倍精度码字。
文档编号H03M7/30GK101821953SQ200880111272
公开日2010年9月1日 申请日期2008年9月23日 优先权日2007年10月11日
发明者乌达·米塔尔, 詹姆斯·P·阿什利 申请人:摩托罗拉公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1