一种MP3编码量化中的内循环方法及MP3编码器转让专利

申请号 : CN200910088069.3

文献号 : CN101593521B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 林中松

申请人 : 无锡中星微电子有限公司

摘要 :

MP3编码量化中的内循环方法及MP3编码器;方法包括:将同一声道中的前若干个颗粒第一次内循环时的最小量化步长分别乘以预定系数后相加,得到当前颗粒预计的第一次内循环时的最小量化步长QS_minp;所述系数的总和为1;使用QS_minP作为量化步长对当前的频谱xr进行量化,得到的编码长度为CL;反复根据CL与CL_limit的大小关系相应调节QS_minP的大小、并采用调节后的QS_minP得到CL,直到CL等于CL_limit、或在小于CL_limit的情况下尽可能接近CL_limit时,得到当前颗粒的QS_min为QS_minP。本发明能快速找到第一次内循环时的最小量化步长,提高效率。

权利要求 :

1.一种MP3编码量化中的内循环方法,包括:

A、将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加,得到当前颗粒预计的第一次内循环时的最小量化步长QS_minp;所述系数的总和为1;

B、使用QS_minP作为量化步长对当前的频谱xr进行量化,得到的编码长度为CL;反复根据CL与CL_limit的大小关系相应调节QS_minP的大小、并采用调节后的QS_minP得到CL,直到CL等于CL_limit、或在小于CL_limit的情况下尽可能接近CL_limit时,得到当前颗粒的QS_min为QS_minP;其中,CL_limit是由外部控制决定的最大编码长度;

其中,根据CL与CL_limit的大小关系相应调节QS_minP的大小是指:当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP。

2.如权利要求1所述的内循环方法,其特征在于,将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加是指:将同一声道中的前一个颗粒的QS_min乘以2,同一声道中当前颗粒之前第二个颗粒的QS_min乘以-1,然后相加。

3.如权利要求1或2所述的内循环方法,其特征在于,当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP具体包括:得到CL和CL_limit的差为ΔD=CL-CL_limit;当ΔD>0时,增大QS_minP,当ΔD<0时,减小QS_minP;增大和减小QS_minP的幅度与ΔD的绝对值成正比。

4.如权利要求1或2所述的内循环方法,其特征在于,步骤B具体包括:

31、设置top和ΔS为0,bot为最大量化补偿;得到频谱xr的绝对值最大值xrabsmax;

32、使用top作为量化步长对xrabsmax进行量化,得到量化值q-max,如果q-max在标准Huffman表允许的最大值内,则进行步骤33;否则将top增加1,返回步骤32;

33、设置up为bot加1,dn为top减1,step为QS_minP,如果step小于top,则令step等于top;

34、使用step作为量化步长对xr进行量化,得到的编码长度为CL,得到CL减去CL_limit的差ΔD;

35、当ΔD等于0时进行步骤37;

当ΔD大于0时,设置ΔS为大于或等于1的值,设置dn等于step,进行步骤36;

当ΔD小于0时,如果ΔS大于或等于1、或是step等于top、或是step-dn<=1则跳至步骤37;否则设置ΔS为小于或等于-1的值,设置up等于step,进行步骤36;

36、改变step,使step增加ΔS;

如果改变后的step小于或等于dn,则step等于dn加1,返回步骤34;

如果改变后的step大于或等于up,则令step等于up减1,如果得到的step等于或小于dn,则令step等于up后返回步骤34,如果得到的step大于dn则直接返回步骤34;

如果改变后的step小于up且大于dn,则直接返回步骤34;

37、得到当前颗粒的QS_min为step,结束。

5.如权利要求4所述的内循环方法,其特征在于,步骤35中:

当ΔD小于0时,ΔS为ΔD除以C后减去1的差;当ΔD大于0时,ΔS为ΔD除以C后加上1的和;C为一在16到1024之间的常数。

6.一种MP3编码量化中的内循环装置,其特征在于,包括:

量化单元,用于当接收到QS_minP时,以QS_minP作为量化步长对当前的频谱xr进行量化,得到的编码长度为CL;

预估单元,用于将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加,得到当前颗粒预计的第一次内循环时的最小量化步长QS_minp,并发送给所述量化单元;所述系数的总和为1;

调节单元,用于根据所述CL与CL_limit的大小关系相应调节QS_minP的大小,并将调节后的QS_minP发送给所述量化单元;当CL等于CL_limit、或在小于CL_limit的情况下尽可能接近CL_limit时,输出当前颗粒的QS_min为QS_minP;其中,根据CL与CL_limit的大小关系相应调节QS_minP的大小是指:当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP;其中,CL_limit是由外部控制决定的最大编码长度。

7.如权利要求6所述的内循环装置,其特征在于:

所述预估单元将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加是指将同一声道中的前一个颗粒的QS_min乘以2,同一声道中当前颗粒之前第二个颗粒的QS_min乘以-1,然后相加得到所述QS_minp。

8.如权利要求6或7所述的内循环装置,其特征在于,所述调节单元当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP具体是指:所述调节单元得到CL和CL_limit的差为ΔD=CL-CL_limit;当ΔD>0时,增大QS_minP,当ΔD<0时,减小QS_minP;增大和减小QS_minP的幅度与ΔD的绝对值成正比。

9.如权利要求6或7所述的内循环装置,其特征在于,调节单元具体包括:修正模块;

初始化模块,用于设置top和ΔS为0,bot为最大量化补偿;得到频谱xr的绝对值最大值xrabsmax;使用top作为量化步长对xrabsmax进行量化,得到量化值q-max;如果q-max不在标准Huffman表允许的最大值内,则将top增加1再次量化;否则设置up为bot加1,dn为top减1,step为QS_minP,如果step小于top,则令step等于top,并将step作为QS_minP发送给所述量化单元;

输出模块,用于将step作为当前颗粒的QS_min输出;

调节模块,用于将量化单元得到的CL减去CL_limit得到ΔD;当ΔD等于0时指示所述输出模块输出;当ΔD小于0时,如果ΔS大于或等于1、或是step等于top、或是step-dn<=1则指示所述输出模块输出,否则设置ΔS为小于或等于-1的值,设置up等于step,指示所述修正模块工作;当ΔD大于0时,设置ΔS为大于或等于1的值,设置dn等于step,指示所述修正模块工作;

所述修正模块用于改变step,使step增加ΔS;如果改变后的step小于up且大于dn,则直接将step作为QS_minP发送给所述量化单元;如果改变后的step小于或等于dn,则step等于dn加1,将step作为QS_minP发送给所述量化单元;如果改变后的step大于或等于up,则令step等于up减1,如果得到的step等于或小于dn,则令step等于up后将step作为QS_minP发送给所述量化单元,大于dn则直接将step作为QS_minP发送给所述量化单元。

10.如权利要求9所述的内循环装置,其特征在于:

所述修正模块当ΔD小于0时,令ΔS为ΔD除以C后减去1的差;当ΔD大于0时,令ΔS为ΔD除以C后加上1的和;C为一在16到1024之间的常数。

说明书 :

一种MP3编码量化中的内循环方法及MP3编码器

技术领域

[0001] 本发明涉及音频编码领域,尤其涉及一种MP3编码量化中的内循环方法及MP3编码器。

背景技术

[0002] 在MP3编码的量化过程中,其内循环需要寻找一个使编码的长度小于规定长度的最小量化步长。MP3编码参考标准的内循环步骤如图1所示,内循环通过不断增加量化步长QS来使编码长度CL小于或等于由外部控制决定的最大编码长度CL_Limit。量化步长的范围为0-QS_MAX(最大量化步长)之间的整数。一般的情况下,量化步长越小,码长CL就越大,量化噪声越小;反之,当量化步长增大时,码长CL会减小,但是量化噪声增大。
[0003] 内循环的目的是寻找一个最小的量化步长QS_min,在使用QS_min进行量化后,编码得到的码长CL_max小于CL_Limit,并且保存量化结果。内循环每循环一次,如果量化得到的编码长度大于CL_Limit,则量化步长QS增加1,否则就保存量化结果退回到外循环。在外循环再次进入内循环时,使用的步长初始值为上一次内循环最后得到的步长QS_min。而当外循环第一次进入内循环时,量化步长的初始值可以设为0,当然这时内循环要循环QS_min次才能得到符合要求的量化步长QS_min。
[0004] 在ISO 11172-3ANNEX_C推荐的方法中,第一次进入内循环时,量化步长QS的初始值quantanf的计算方法为
[0005] quantanf=system_const*loge(sfm) 等式1
[0006] 等式1中sfm是一种频谱平滑度测度,其计算公式可见于ISO 11172-3ANNEX-C。sfm的计算过程中使用了函数log(x)和pow(e,x),使其的定点化变得困难。另外sysstem_const时ISO 11172-3ANNEX_C标准留给具体得编码器指定的常数。System_const的选择最好能够使得量化步长quantanf得到的编码长度CL比CL_Limit稍大。在内循环中使用得量化步长QS=quantanf+qquant。qquant是量化步长QS相对初始化量化步长quantanf增长的值,每次内循环通过qquant=qquant+1来增加量化步长。可见只要选择适当的初始量化步长quantanf,在内循环中就可以减少循环次数来得到QS_min。
[0007] 但是在ISO 11172-3ANNEX_C推荐的方法中,计算quantanf中用到的常数system_const的选择非常困难:如果选择的过大,quantanf大于QS_min,得到的编码长度CL可能小于CL_limit,这样不能保证每次编码都在规定的范围内使用最大的码长;如果system_const选择得过小,则可能quantanf距离QS_min很远,这样在编码器第一次进入内循环时要循环的次数很多才能得到QS_min,导致计算量的浪费。另外,测度sfm的计算不利于定点实现。所以在很多MP3编码器中第一次内循环都使用binsearch的方法来得QS_min.[0008] 在下文中,QS_min专指第一次进入内循环时求得的最小量化步长。
[0009] binSearch算法并不采用逐步累加的方式来得到QS_min;其计算量从理论上来讲最多只需循环8次就可以在0-255的范围内找出QS_min;其步骤如下:
[0010] 1、初始化:top(最小量化步长)=0,bot(最大量化步长)=QS_MAX,找出频谱xr的绝对值最大值xrabsmax。
[0011] 2、使用top作为量化步长,对xrabsmax进行量化,得到量化值q-max,如果q-max在标准Huffman表允许的最大值内,则跳至步骤3;否则top=top+1,返回步骤2。
[0012] 3、step=(top+bot+1)/2,使用step作为量化步长,对xr进行量化,并且执行内循环的步骤(参考标准ISO 11172-3ANNEX C中的内循环步骤),得到的编码长度为CL。
[0013] 4、如果CL<=CL_limit,且step等于bot,则QS_min=step,结束。
[0014] 5、如果CL<=CL_limit,且step等于top,则QS_min=step,结束。
[0015] 6、如果CL<CL_limit,则令bot=step,跳至步骤3;如果CL>=CL_limit且step既不等于bot也不等于top,则令top=step,返回步骤3。

发明内容

[0016] 本发明要解决的技术问题是提供一种MP3编码量化中的内循环方法及MP3编码器,能够在量化过程中快速找到第一次内循环时的最小量化步长,提高量化效率。
[0017] 为了解决上述问题,本发明提供了一种MP3编码量化中的内循环方法,包括:
[0018] A、将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加,得到当前颗粒预计的第一次内循环时的最小量化步长QS_minp;所述系数的总和为1;
[0019] B、使用QS_minP作为量化步长对当前的频谱xr进行量化,得到的编码长度为CL;反复根据CL与CL_limit的大小关系相应调节QS_minP的大小、并采用调节后的QS_minP得到CL,直到CL等于CL_limit、或在小于CL_limit的情况下尽可能接近CL_limit时,得到当前颗粒的QS_min为QS_minP;
[0020] 其中,根据CL与CL_limit的大小关系相应调节QS_minP的大小是指:当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP。
[0021] 进一步地,将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加是指:
[0022] 将同一声道中的前一个颗粒的QS_min乘以2,同一声道中当前颗粒之前第二个颗粒的QS_min乘以-1,然后相加。
[0023] 进一步地,当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP具体包括:
[0024] 得到CL和CL_limit的差为ΔD=CL-CL_limit;当ΔD>0时,增大QS_minP,当ΔD<0时,减小QS_minP;增大和减小QS_minP的幅度与ΔD的绝对值成正比。
[0025] 进一步地,步骤B具体包括:
[0026] 31、设置top和ΔS为0,bot为最大量化补偿;得到频谱xr的绝对值最大值xrabsmax;
[0027] 32、使用top作为量化步长对xrabsmax进行量化,得到量化值q-max,如果q-max在标准Huffman表允许的最大值内,则进行步骤33;否则将top增加1,返回步骤32;
[0028] 33、设置up为bot加1,dn为top减1,step为QS_minP,如果step小于top,则令step等于top;
[0029] 34、使用step作为量化步长对xr进行量化,得到的编码长度为CL,得到CL减去CL_limit的差ΔD;
[0030] 35、当ΔD等于0时进行步骤37;
[0031] 当ΔD大于0时,设置ΔS为大于或等于1的值,设置dn等于step,进行步骤36;
[0032] 当ΔD小于0时,如果ΔS大于或等于1、或是step等于top、或是step-dn<=1则跳至步骤37;否则设置ΔS为小于或等于-1的值,设置up等于step,进行步骤36;
[0033] 36、改变step,使step增加ΔS;
[0034] 如果改变后的step小于或等于dn,则step等于dn加1,返回步骤34;
[0035] 如果改变后的step大于或等于up,则令step等于up减1,如果得到的step等于或小于dn,则令step等于up后返回步骤34,如果得到的step大于dn则直接返回步骤34;
[0036] 如果改变后的step小于up且大于dn,则直接返回步骤34;
[0037] 37、得到当前颗粒的QS_min为step,结束。
[0038] 进一步地,步骤35中:
[0039] 当ΔD小于0时,ΔS为ΔD除以C后减去1的差;当ΔD大于0时,ΔS为ΔD除以C后加上1的和;C为一在16到1024之间的常数。
[0040] 本发明还提供了一种MP3编码量化中的内循环装置,包括:
[0041] 量化单元,用于当接收到QS_minP时,以QS_minP作为量化步长对当前的频谱xr进行量化,得到的编码长度为CL;
[0042] 预估单元,用于将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加,得到当前颗粒预计的第一次内循环时的最小量化步长QS_minp,并发送给所述量化单元;所述系数的总和为1;
[0043] 调节单元,用于根据所述CL与CL_limit的大小关系相应调节QS_minP的大小,并将调节后的QS_minP发送给所述量化单元;当CL等于CL_limit、或在小于CL_limit的情况下尽可能接近CL_limit时,输出当前颗粒的QS_min为QS_minP;其中,根据CL与CL_limit的大小关系相应调节QS_minP的大小是指:当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP。
[0044] 进一步地,所述预估单元将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加是指将同一声道中的前一个颗粒的QS_min乘以2,同一声道中当前颗粒之前第二个颗粒的QS_min乘以-1,然后相加得到所述QS_minP。
[0045] 进一步地,所述预估单元当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP具体是指:
[0046] 所述预估单元得到CL和CL_limit的差为ΔD=CL-CL_limit;当ΔD>0时,增大QS_minP,当ΔD<0时,减小QS_minP;增大和减小QS_minP的幅度与ΔD的绝对值成正比。
[0047] 进一步地,调节单元具体包括:修正模块;
[0048] 初始化模块,用于设置top和ΔS为0,bot为最大量化补偿;得到频谱xr的绝对值最大值xrabsmax;使用top作为量化步长对xrabsmax进行量化,得到量化值q-max;如果q-max不在标准Huffman表允许的最大值内,则将top增加1再次量化;否则设置up为bot加1,dn为top减1,step为QS_minP,如果step小于top,则令step等于top,并将step作为QS_minP发送给所述量化单元;
[0049] 输出模块,用于将step作为当前Granule的QS_min输出;
[0050] 调节模块,用于将量化单元得到的CL减去CL_limit得到ΔD;当ΔD等于0时指示所述输出单元输出;当ΔD小于0时,如果ΔS大于或等于1、或是step等于top、或是step-dn<=1则指示所述输出单元输出,否则设置ΔS为小于或等于-1的值,设置up等于step,指示所述修正模块工作;当ΔD大于0时,设置ΔS为大于或等于1的值,设置dn等于step,指示所述修正模块工作;
[0051] 所述修正模块用于改变step,使step增加ΔS;如果改变后的step小于up且大于dn,则直接将step作为QS_minP发送给所述量化单元;如果改变后的step小于或等于dn,则step等于dn加1,将step作为QS_minP发送给所述量化单元;如果改变后的step大于或等于up,则令step等于up减1,如果得到的step等于或小于dn,则令step等于up后将step作为QS_minP发送给所述量化单元,大于dn则直接将step作为QS_minP发送给所述量化单元。
[0052] 进一步地,所述修正模块当ΔD小于0时,令ΔS为ΔD除以C后减去1的差;当ΔD大于0时,令ΔS为ΔD除以C后加上1的和;C为一在16到1024之间的常数。
[0053] 本发明在MP3编码量化的内循环步骤中,通过预测方法来减少确定量化步长所需的运算量,提高了量化效率;本发明的优化方案根据编码长度和规定的最大编码长度的差来实时调节步长,使得该过程的计算量大大减小,可以进一步提高量化效率。

附图说明

[0054] 图1是现有技术中内循环的流程示意图;
[0055] 图2是本发明实施例一中的流程示意图。

具体实施方式

[0056] 下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
[0057] 本发明的提出基于以下思路:在研究了音频信号、频谱能量及量化步长之间的关系后,发现音频信号往往在频谱能量和特征上前后相关,因此可以根据前面的信号特征来预测后来的音频信号;而第一次进入内循环时的最小量化步长QS_min的大小和频谱能量的大小也密切相关:当频谱能量大时,往往QS_min也大,当频谱能量小时,往往QS_min也小。所以预测方法也可以使用在量化步长的估算中。
[0058] 实施例一,一种MP3编码量化中的内循环方法,包括:
[0059] A、根据在同一个声道中以前得到的QS_min值来预测当前的QS_min值。由于MP3编码量化是以Granule(颗粒)为单位(一个Granule包含576个样本Sample值),当前Granule可以参考前一个或者更多Granule的QS_min值来估计当前Granule的QS_min值。
[0060] 将同一声道中的前若干个Granule的QS_min分别乘以预定系数后相加,得到预计的当前Granule的QS_min;所述系数的总和为1。
[0061] 下文中,QS_min-i表示同一声道中当前颗粒之前第i个Granule的QS_min值,QS_minP表示对当前Granule的QS_min的预测值。
[0062] 比如QS_minP=(QS_min-1+QS_min-2)/2,QS_min-1和QS_min-2的系数均为1/2,总和为1。再比如QS_minP=(3QS_min-1+2QS_min-2+QS_min-3)/6,QS_min-1、QS_min-2和QS_min-3的系数分别为1/2、1/3和1/6,总和也为1。可以根据实际情况或实验来确定使用同一声道中前几个Granule的QS_min,以及各QS_min的系数。
[0063] 本实施例中,可以但不限于使用下式来估计当前Granule的QS_min值:
[0064] QS_minP=2×QS_min-1-QS_min-2 等式2
[0065] B、使用QS_minP作为量化步长对当前的频谱xr进行量化,得到的编码长度为CL;反复根据CL与CL_limit的大小关系相应调节QS_minP的大小、并采用调节后的QS_minP得到CL,直到CL等于CL_limit、或在小于CL_limit的情况下尽可能接近CL_limit时,得到当前颗粒的QS_min为QS_minP。根据CL与CL_limit的大小关系相应调节QS_minP的大小可以是指:当CL>CL_limit时,增大QS_minP;当CL<CL_limit时,减小QS_minP。
[0066] 所述的“尽可能接近”的情况是指:只要再减小QS_minP,所得到的CL就会大于CL_limit的情况。
[0067] 本实施例中,步骤B中根据CL与CL_limit的大小关系调节QS_minP的大小也可以是指:先得到CL和CL_limit的差为ΔD=CL-CL_limit;根据ΔD来对QS_minP进行调整以逼近最终的QS_min值:当ΔD>0时,增大QS_minP,当ΔD<0时,减小QS_minP。增大和减小的幅度可以与ΔD的绝对值成正比。
[0068] 本实施例的一种实施方式中,步骤B如图2所示,具体可以包括:
[0069] B1、初始化:top(最小量化步长)=0,bot(最大量化步长)=QS_MAX。ΔS=0(ΔS表示量化步长的改变值)。找出频谱xr的绝对值最大值xrabsmax。
[0070] B2、使用top作为量化步长对xrabsmax进行量化,得到量化值q-max,如果q-max在标准Huffman表允许的最大值内,则进行步骤B3;否则top=top+1,返回步骤B2。
[0071] B3、设置变量up=bot+1(表示已知的使CL小于CL_limit的最大步长),dn=top-1(表示已知的使CL大于CL_limit的最小步长),step=QS_minP,如果step<top,step=top。
[0072] 实际应用中,步骤A和B不需要依次进行,步骤A可以在步骤B4前的任一步进行。
[0073] B4、使用step作为量化步长对xr进行量化,并且执行内循环,得到的编码长度为CL,ΔD=CL-CL_limit。
[0074] B5、如果ΔD=0,则跳至步骤B10,否则进行步骤B6。
[0075] B6、如果ΔD<0则进行步骤B7,否则设置ΔS>=1,且设置dn=step,然后跳至步骤B9。
[0076] B7、如果ΔS大于或等于1,则跳至步骤B10;ΔS≥1意味着前一次时ΔD>0,本次是step加上ΔS后计算ΔD,该ΔD<0,因此得到的CL是在小于CL_limit的情况下尽可能接近CL_limit,所以可以认为此时的step就是当前Granule的QS_min了;
[0077] 如果step等于top(表明了量化步长为最小允许的步长,且编码长度CL小于规定的最大码长CL_limit),则跳至步骤B10;因为此时step已经减小到下限了,不能再减小step以提高CL,所以得到的CL是在小于CL_limit的情况下尽可能接近CL_limit,可以认为top就是当前Granule的QS_min了;
[0078] 如果step-dn<=1,则跳至步骤B10;
[0079] 如果没有跳至步骤B10,则进行步骤B8。
[0080] 图2中是依次判断是否ΔS大于或等于1、是否step等于top、是否step-dn<=1,而实际应用时这三次判断步骤的先后可以任意调整,或并行。
[0081] B8、设置ΔS≤-1,且设置up=step,进行步骤B9。
[0082] B9、改变量化步长step=step+ΔS;
[0083] 如果改变后的step小于或等于dn,则step=dn+1,返回步骤B4;
[0084] 如果改变后的step大于或等于up,则令step=up-1,如果得到的step等于dn,则令step=up后返回步骤B4,如果得到的step大于dn则直接返回步骤B4;
[0085] 如果改变后的step小于up且大于dn,则直接返回步骤B4。
[0086] B10、得到当前Granule的QS_min为step,结束。
[0087] 为了接下来计算同一声道的下一个Granule的QS_min,此时还可以令QS_min-2=QS_min-1,QS_min-1=QS_min。
[0088] 本实施例的其它实施方式可以用别的步骤来调节QS_minP。
[0089] 实际应用中,可以不按照从B5到B8的顺序依次进行;比如可以先比较ΔD和0的大小,当ΔD=0时进行步骤B10;当ΔD大于0时,设置ΔS>=1,设置dn=step,进行步骤B9;当ΔD小于0时,如果ΔS小于1并且step大于top,则设置ΔS<=-1,设置up=step,进行步骤B9,否则进行步骤B10。
[0090] 另外,实际应用中也可以采用其它以QS_minp为基础值,逐步逼近的方法来实现步骤B,不限于上述具体步骤。比如采用binSearch算法,但第一次的step采用QS_minp。再比如可以不引入ΔD,直接用CL和CL_limit之间的大小关系判断所要进行的步骤。
[0091] 本实施例中,所述ΔS可以为:
[0092] 等式3
[0093] 本实施例中,所述ΔS也可以为:
[0094] 等式4
[0095] 此时是根据ΔD的大小相应改变ΔS的大小,计算步骤将进一步缩减。
[0096] 在等式4中,所述C是根据经验或实验得出的常数,一般来说C在16到1024之间。C的最佳选择应该使循环次数最小,往往和编码所要达到的比特率相关。比如在MP3编码比特率为192Kbits/s时,选择C=128能够把循环次数减到很少。
[0097] 实施例二、一种MP3编码量化中的内循环装置,包括:
[0098] 量化单元,用于当接收到QS_minP时,以QS_minP作为量化步长对当前的频谱xr进行量化,得到的编码长度为CL;
[0099] 预估单元,用于将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加,得到当前颗粒预计的第一次内循环时的最小量化步长QS_minp,并发送给所述量化单元;所述系数的总和为1;
[0100] 调节单元,用于根据所述CL与CL_limit的大小关系相应调节QS_minP的大小,并将调节后的QS_minP发送给所述量化单元;当CL等于CL_limit、或在小于CL_limit的情况下尽可能接近CL_limit时,输出当前颗粒的QS_min为QS_minP;其中,根据CL与CL_limit的大小关系相应调节QS_minP的大小是指:当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP。
[0101] 本实施例中,所述预估单元将同一声道中的前若干个颗粒的第一次内循环时的最小量化步长QS_min分别乘以预定系数后相加是指将同一声道中的前一个颗粒的QS_min乘以2,同一声道中当前颗粒之前第二个颗粒的QS_min乘以-1,然后相加得到所述QS_minp。
[0102] 本实施例中,所述预估单元当CL>CL_limit时增大QS_minP,当CL<CL_limit时减小QS_minP具体是指:
[0103] 所述预估单元得到CL和CL_limit的差为ΔD=CL-CL_limit;当ΔD>0时,增大QS_minP,当ΔD<0时,减小QS_minP;增大和减小QS_minP的幅度与ΔD的绝对值成正比。
[0104] 本实施例的一种实施方式中,调节单元具体包括:修正模块;
[0105] 初始化模块,用于设置top和ΔS为0,bot为最大量化补偿;得到频谱xr的绝对值最大值xrabsmax;使用top作为量化步长对xrabsmax进行量化,得到量化值q-max;如果q-max不在标准Huffman表允许的最大值内,则将top增加1再次量化;否则设置up为bot加1,dn为top减1,step为QS_minP,如果step小于top,则令step等于top,并将step作为QS_minP发送给所述量化单元;
[0106] 输出模块,用于将step作为当前Granule的QS_min输出;
[0107] 调节模块,用于将量化单元得到的CL减去CL_limit得到ΔD;当ΔD等于0时指示所述输出单元输出;当ΔD小于0时,如果ΔS大于或等于1、或是step等于top、或是step-dn<=1则指示所述输出单元输出,否则设置ΔS为小于或等于-1的值,设置up等于step,指示所述修正模块工作;当ΔD大于0时,设置ΔS为大于或等于1的值,设置dn等于step,指示所述修正模块工作;
[0108] 所述修正模块用于改变step,使step增加ΔS;如果改变后的step小于up且大于dn,则直接将step作为QS_minP发送给所述量化单元;如果改变后的step小于或等于dn,则step等于dn加1,将step作为QS_minP发送给所述量化单元;如果改变后的step大于或等于up,则令step等于up减1,如果得到的step等于或小于dn,则令step等于up后将step作为QS_minP发送给所述量化单元,大于dn则直接将step作为QS_minP发送给所述量化单元。
[0109] 该实施方式中,所述修正模块可以当ΔD小于0时,令ΔS为ΔD除以C后减去1的差;当ΔD大于0时,令ΔS为ΔD除以C后加上1的和;C为一在16到1024之间的常数;也可以当ΔD小于0时,令ΔS为-1;当ΔD大于0时,令ΔS为1。
[0110] 其它实现细节可以同实施例一中所述。
[0111] 当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。