背景技术
目前,对音频数据进行传输或存储时,为了减少传输或存储的音频数据所占的容量,需要对音频数据进行编解码,达到压缩音频数据的效果。其中,改良的离散余弦变化(MDCT,Modified Discrete Cosine Transform)就是一种对音频数据进行编码的硬件实现方式,反向改良的离散余弦变化(IMDCT,Inverse Modified Discrete Cosine Transform)就是一种对音频数据进行解码的硬件实现方式。
MDCT就是利用离散余弦变化(DCT,Discrete Cosine Transform)的能量聚集性,将音频数据能量聚集到少数变化系数上,从而提高压缩音频数据的效果。但是,DCT本身的实现是需要额外运算和时间的,因此,有效地硬件系统实现必然要求降低变化实现的复杂度,即寻求速度快、功耗低及面积小的硬件系统实现方法。从运算量来看,硬件运算量较小时,硬件速度必然快,功耗势必下降,而硬件芯片的面积,随着硬件复用程度的增加而变小。
对于现有的一套通用的音频数据编解码方法,其中,涉及到DCT的模块主要是编码中用到的MDCT模块和解码中用到的IMDCT模块。MDCT的表达式如公式(1)所示:
公式(1)
IMDCT的表达式如公式(2)所示:
公式(2)
其中,X(k)表示运算点数为K的输入音频数据,N为输入音频数据的长度,y(n)表示经过编码后得到的音频数据。
当采用的DCT进行音频数据编解码的音频数据为长块时,N为36,当为短块时,N为12。
图1为现有技术采用MDCT对音频数据进行编码的方法流程图,其具体步骤为:
步骤101、提供音频数据,其长度为N;
步骤102、根据音频数据计算得到中间信号,主要的原理是利用了Φn,k的三角函数对称性,在其硬件电路中,计算公式为公式(3):
公式(3)
其中,X是长度为N的音频数据,XX是中间计算信号;k是运转指数;
步骤103、根据中间信号计算MDCT,采用的计算公式为公式(4):
公式(4)
其中,当本步骤采用硬件实现时,将耗用N2/4个乘法,当N为36时,其乘法运算量将为324;
步骤104、输出通过MDCT后得到的经过编码的音频数据。
图1这种硬件实现对音频数据的编码直接采用了乘累加的方法,优点在于结构比较简单,即直接设置乘累加模块就可以实现,但其缺点是乘法运算量很大。ISO MPEC提供的原始算法的乘法运算量为648(N为36,采用公式(1))计算,采用图1的方法可以使运算量减少到324,但MDCT的运算量依然巨大,最终导致硬件化后硬件系统功耗很高,硬件模块的性能不佳。另外,依据图1构造的硬件模块只能实现MDCT,而不能实现IMDCT,如果需要在芯片上实现IMDCT,还需要额外增加一套硬件模块,这样就增加了硬件系统的电路面积,提高了硬件系统设计的难度和成本。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
图2为本发明提供的音频数据的编解码系统示意图,该系统包括:主控制器、信号控制装置及信号处理装置,其中,
主控制器,用于驱动信号控制装置生成所述控制信号;
信号控制装置,用于在主控制器的驱动下,生成运算控制信号给信号处理装置;
信号处理装置,用于根据从信号控制装置接收的运算控制信号,对存储器中的输入音频数据进行MDCT前处理后再进行复用计算输出结果;或者对存储器中的输入音频数据进行复用计算后再进行IMDCT后处理输出结果。
在该系统中,还可以包括寄存装置,用于为信号控制装置提供输入音频数据的状态信息,输入音频数据的状态信息至少包括要进行IMDCT还是MDCT的信息,及块类型;信号控制装置,还用于根据寄存器提供的输入音频数据状态信息,生成运算控制信号。
当然,主控制器也对寄存装置进行驱动。
在本实施例中,输入的音频数据可以存储在外部存储器中,比如随机存储器(RAM,random access memory)中,输出的经过IMDCT或MDCT后的音频数据也可以存储在RAM中。
在本实施例中,信号控制装置在逻辑上分,可以分为MDCT前处理逻辑控制电路、复用计算逻辑控制电路及IMDCT后处理逻辑控制电路。其中,当输入的音频数据需要进行MDCT时,则需要采用MDCT前处理逻辑电路生成进行MDCT前处理的运算控制信号,使信号处理装置对输入音频数据进行MDCT前处理,然后再由复用计算逻辑控制电路生成复用运算控制信号,使信号处理装置对经过MDCT前处理的输入音频数据进行复用计算输出;当输入的音频数据需要进行IMDCT时,由复用计算逻辑控制电路生成复用运算控制信号,使信号处理装置对输入音频数据进行复用计算后,再由IMDCT后处理逻辑控制电路生成进行IMDCT后处理的运算控制信号,使信号处理装置对经过复用计算的输入音频数据进行IMDCT后处理并输出。
无论信号控制装置采用哪一种逻辑控制电路,在生成运算控制信号时,实际上就是生成包括加/减控制信号、乘/乘加控制信号、信号处理装置寄存器控制信号及音频数据的读写信号的至少一种或多种组合。
图3为本发明提供的信号控制装置的结构示意图,包括:主控制状态转换单元、状态判断单元、系数产生模块、控制信号产生单元、系数产生模块及计数单元,其中,
计数单元,用于向主控制状态转换单元发送计数信号,并对输入音频数据的IMDCT/MDCT过程进行计时;
主控制状态转换单元,用于接收状态判断单元发送的判断结果,并根据判断结果控制控制信号产生单元产生运算控制信号;
状态判断单元,用于根据寄存装置存储的输入音频数据状态信息进行输入音频数据的状态判断,并将得到判断结果发送给主控制状态转换单元;
控制信号产生单元,用于在主控制状态转换单元的驱动下,生成运算控制信号发送给信号处理装置,以及驱动系数产生单元产生系数,并发送给所述信号处理装置;
系数产生单元,用于在所述控制信号产生单元的驱动下产生系数,并发送给所述信号处理装置。
在该实施例中,信号处理装置根据接收到的运算控制信号及系数产生单元产生系数对输入的音频数据进行IMDCT或MDCT。
在该实施例中,状态判断单元包括长短块判断子单元、颗粒和子带判断子单元以及通道判断子单元,其中,
长短块判断子单元,用于根据寄存装置存储的输入音频数据状态信息判断输入的音频数据的长短块类型;
颗粒和子带判断子单元,用于根据寄存装置存储的输入音频数据状态信息判断输入的音频数据所在的颗粒或子带,在本发明中,将一帧输入音频数据分为2个颗粒,每个颗粒分成2个通道,每个通道下有若干个子带,每个子带中按照输入音频数据的长短块类型分为18运算点数或3组6点运算点数的输入音频数据;
通道判断子单元,用于根据寄存装置存储的输入音频数据状态信息判断输入的每一帧音频数据所在的通道。
图4为本发明提供的一种音频数据的编解码方法流程图,其具体步骤为:
步骤401、接收输入的音频数据;
步骤402、判断所接收的音频数据需要进行IMDCT还是进行MDCT,如果是MDCT,则执行步骤403;如果要进行IMDCT,则执行步骤404;
在本步骤中,寄存装置对应输入的音频数据存储其状态信息,该状态信息表明要进行IMDCT还是进行MDCT;
步骤403、对该音频数据进行MDCT前处理,对经过MDCT前处理的该音频数据进行复用计算后输出;
步骤404、对该音频数据进行复用计算后,再进行IMDCT后处理后输出。
对于输入的音频数据来说,其有长短块类型之分,所以在进行复用计算时,采用的公式并不相同,所以需要对音频输入数据的长短块类型进行判断,如图5所示,图5为本发明提供的一种音频数据的编解码方法实施例流程图,其具体步骤为:
步骤501、对接收的输入音频数据进行编解码类型判断,如果进行MDCT,则执行步骤502;如果进行IMDCT,则执行步骤503;
步骤502、对输入音频数据进行MDCT前处理,执行步骤503;
步骤503、信号控制装置中的复用计算逻辑控制电路对步骤501接收的输入音频数据或步骤502中进行MDCT前处理后的输入音频数据开始进行复用计算;
在本步骤中,将进行复用计算处理的输入音频数据统称为该音频数据;
步骤504、对该音频数据计算一组DCT;
在本步骤中,该音频数据可以分为2组运算点数为9的音频数据(在块类型为长块时),也可以分为3组点数为6的音频数据(在块类型为短块时),计算一组DCT就是计算一组运算点数为9的音频数据或一组运算点数为3的音频数据;
步骤505、判断该音频数据的块类型,如果是长块,转入步骤506,如果是短块,转入步骤509;
步骤506、对该音频数据计算第二组DCT;
在该步骤中,计算第二组DCT就是计算第二组运算点数为9的音频数据;
步骤507、是否对该音频数据进行了两组DCT计算,如果是,执行步骤508;如果否,转入步骤504执行;
步骤508、对DCT计算得到的结果进行运算点数为18的所述音频数据的DCT计算,得到结果后,转入步骤510;
步骤509、是否对该音频数据进行了两组DCT计算,如果是,执行步骤508;如果否,转入步骤504执行;
步骤510、对接收的输入音频数据进行块类型判断,如果是长块,执行步骤512;如果是短块,执行步骤511;
步骤511、是否对该音频数据进行了三组DCT计算,如果否,执行步骤504;如果是,则执行步骤512;
步骤512~514、判断输入的音频数据编解码类型,如果是MDCT,则将步骤508得到的结果直接直接输出;如果是IMDCT,则将步骤508得到的结果进行IMDCT后处理后输出。
从上述可以得知,信号处理装置根据信号控制装置发送的运算控制信号和系数产生模块产生系数进行运算。图6为本发明提供的信号处理装置的结构示意图,信号处理装置实际上是由随机存储器、存储器、寄存器、乘法器以及加/减法器组成并进行运算,如图6所示,信号处理装置具体包括:
RAM020、RAM021、寄存器022、寄存器023、乘法器024、寄存器025、选择器027、选择器026、加/减法器028及寄存器029,用于通过加减法以及乘法运算完成输入音频数据的IMDCT或MDCT。
输入音频数据在进行MDCT或IMDCT之前,将被存放在RAM020中,RAM020在整个IMDCT或MDCT过程中,RAM020也用于存储中间结果。系数产生单元产生的系数存储在RAM021中。乘法器024主要在整个IMDCT或MDCT过程中完成乘法运算:从RAM020中读出的音频数据暂存在寄存器022中,从RAM021中读出的系数暂存在寄存器023中,然后寄存器022中暂存的音频数据和寄存器023暂存的系数被发送到乘法器024中进行乘法运算,再将乘法运算结果暂存在寄存器025中。加/减法器028有2个输入端A、B,其中,A端与选择器026相连,B端与选择器027相连。寄存器029与寄存器022的输出分别为选择器026的两个输入,寄存器025与寄存器022的输出分别为选择器027的两个输入,寄存器029的输出为加/减法器028的运算结果。这样,加/减法器028就能完成以下几种情况的加减法混合运算:1、RAM 020存储的音频数据的加法或减法运算,RAM 020中的音频数据经过寄存器022分别进入选择器026与选择器027,然后进入加/减法器028完成加/减法运算;2、乘累加运算,第一次乘法器024的乘法运算结果将通过选择器027进入加/减法器028,然后暂存在寄存器029中,以便为选择器026提供输入数据;第二次乘法器024的乘法运算结果将通过选择器027进入加/减法器028的B端,暂存在寄存器029中的乘法运算结果将通过选择器026进入加/减法器028,第一次乘法运算结果和第二次乘法运算结果进行加/减运算后,得到的结果将暂存在寄存器029中,以便为选择器026提供输入数据,乘累加的过程将一直循环,直至乘累加结束。
以下具体说明本发明是怎样对输入的音频数据进行MDCT或IMDCT的。
信号控制装置中的状态判断单元判断输入的音频数据是要进行MDCT还是进行IMDCT,如果需要进行MDCT,则在寄存装置中的寄存器F中对应该音频数据存储表示要进行MDCT的标识,如0;如果需要进行IMDCT,则在寄存器F中对应该音频数据存储表示要进行IMDCT的标识,如1。寄存器F是寄存装置中的用于存储输入的音频数据是要进行MDCT还是进行IMDCT信息的寄存器,其中存储的要进行MDCT或进行IMDCT的标识在后续对该音频数据的处理过程中还会用到。
根据寄存器F对应该音频数据存储的标识判断是否要对该音频数据进行MDCT前处理。由于进行MDCT和进行IMDCT的音频数据的结构形式不一样,所以为了能够对该音频数据进行复用计算,需要对要进行MDCT的音频数据进行MDCT前处理,处理后的结构形式和要进行IMDCT的音频数据的结构形式相同。如果寄存器F对应该音频数据存储的标识为1,则不需要进行MDCT前处理,如果为0,则要进行MDCT前处理。这时,由信号控制装置的MDCT前处理逻辑控制电路控制信号处理装置完成。具体地,MDCT前处理逻辑控制电路控制运算处理模块将该音频数据按照式(5)进行加减法运算。
其中,k表示运算点数,对于该音频数据进行MDCT时,一共有36个输入点,经过MDCT前处理后就成为了18个运算点数的所述音频数据。
图7为对音频数据进行MDCT的工作示意图,其中,a0~a35表示输入的音频数据,X0~X17表示经过MDCT前处理之后的输出结果。以运算点数k为1为例,首先信号处理装置从RAM 020中取出第28个输入的第28个音频数据和第25个音频数据,分别通过寄存器022送到选择器026和选择器027中,然后进入加/减法器028的A、B端完成加/减法运算后暂存在寄存器029中,最后将运算结果存储在RAM 020中。其他的运算点数按照公式(5)采用上述方式进行计算即可。
对该音频数据进行MDCT前处理后,就可以由信号控制装置的复用计算逻辑控制电路进行复用计算,该音频数据进行MDCT前处理后或者要进行的IMDCT的音频数据的结构一样,都是具有18个运算点的音频数据,因此,对这两种音频数据的复用计算也相同,这样,就实现了对音频数据的MDCT与IMDCT功能的可复用,从而减小了音频数据编解码系统的硬件电路面积,降低了电路功耗。
复用计算的具体过程以下进行详细说明。
由信号控制装置中的状态判断单元判断进行了MDCT前处理后的该音频数据或要进行IMDCT的该音频数据的块类型,如果是长块,则在寄存装置中的寄存器W中对应该音频数据存储表示为长块的标识,如1;如果为短块,则寄存器W中对应该音频数据存储表示为短块的标识,如0;寄存器W是寄存装置中的用于对应音频数据存储该音频数据的块类型的寄存器,其中对应该音频数据存储的块类型在后续对该音频数据的处理过程中还会用到。
如果音频数据的块类型为长块,则对音频数据进行长块数据重构,重构采用信号处理装置中的加/减法器028进行加减运算,将18个点运算的音频数据重构为两组9个点运算的音频数据,将这两组9个点运算的音频数据存储在信号处理装置中的RAM020中,在对音频数据进行长块数据重构过程中,需要满足如下公式:
X(k)=X(k)+X(k-1);k=1~N/2-1 (6)
P(k)=X(2k);k=0~N/4-1 (7)
Q(k)=X(2k+1)+X(2k-1);Q(0)=X(1);k=1~N/4-1 (8)
其中,当该音频数据的块类型为长块时,N为36,X(k)为输入的18个点运算,P(k)、Q(k)为重构后得到的2组9点运算的音频数据。在采用硬件实现时,公式(6)、公式(7)和公式(8)只涉及到加法运算,采用加/减法器028就可以实现。
以(6)式中的一个点运算为例,其主要操作如下:将存放在RAM 020中的18个运算点的音频数据中的一个运算点读取出来,存放进寄存器022,再通过选择器026到达加/减法器028的A端口;然后从RAM 020中读取小于并临近该运算点的另一个运算点读取出来,存放进寄存器022,然后通过选择器027到达加/减法器028的B端口,完成加法运算后经过寄存器029保存至RAM 020,(7)式实现只需从RAM 020中获取对应的运算点即可;(8)式的实现与(6)式的实现相同;在这个运算过程中,得到的结果为(7)式得到的P(k),另一组为(8)式得到的Q(k)。每组9点运算的音频数据将分为5点运算和4点运算,以其中一组为例,5点运算、4点运算及9点运算的表达式分别为:
其中,P(k)为(7)式得到的结果,pg(n)为5点运算结果,ph(n)为4点运算结果,p(n)为9点运算结果。为了方便硬件实现,(9)式与(10)式的硬件实现采用乘累加的方式得到。
以(9)式中的一个运算点为例,其主要操作如下:将存放在RAM 020中的一个运算点读取出来,存放进寄存器022,将存放在系数RAM 021中的对应系数读取出来,存放进寄存器023。寄存器022与寄存器023中的值进入乘法器024之后的结果存放在寄存器025中,然后通过选择器027到达加/减法器028的B端,最后通过寄存器029、选择器026反馈到加/减法器028的A端口。另一方面,第二个运算点与系数将从RAM 020与系数RAM 021中取出到寄存器022与寄存器023,然后进入乘法器024,乘积的结果将通过选择器027到达加/减法器028的B端口,与在A端口的数据完成加减法运算。然后重复上面的过程,直到运算结束。当完成运算后,运算结果将保存回RAM020。得到的5点DCT与4点的运算结果后,9点运算结果必须满足如下关系:
其式(12)的示意图如图8所示。
按照(12)式分别对两组9点运算的音频数据进行DCT计算后,得到2组运算点数为9的音频数据的DCT结果。再根据2组运算点数为9的音频数据的DCT结果,进行运算点数为18的音频数据的DCT计算,得到运算点数为18的音频数据的DCT结果。如果音频数据要进行MDCT,则这就是最后的结果;如果音频数据要进行IMDCT,则还需要进行IMDCT后处理过程后才得到最后的结果。根据2组运算点数为9的音频数据的DCT结果,进行运算点数为18的音频数据的DCT计算过程为:在RAM 020中读取2组9点运算的各一个结果,通过加/减法器028作加/减法运算,运算结果通过寄存器022送到乘法器024的一端,同时将对应系数从RAM 021读取出来,通过寄存器023送到乘法器024的另一端。经过乘法器024后的结果保存回RAM 020。进行运算点数为18的音频数据的DCT计算满足如下关系:
其中p(n)、q(n)分别为2组9点运算结果。最终输出结果为g(0)到g(17)共18个运算点数,如图9所示,图9为本发明根据2组运算点数为9的音频数据的DCT结果,进行运算点数为18的音频数据的DCT计算的实现示意图。
如果该音频数据的块类型为短块,则将得到的运算点数为18的所述音频数据分为3组,每组6个运算点数,对每组6个运算点数的音频数据进行短块数据重构,通过重构6个运算点的音频数据,得到每组3个点的2组该音频数据,这2组音频数据作为复用计算的输入,被存放在RAM020中,在进行短块数据的重构过程中,满足:
X1(k)=X(3C+k)+X(3C+k-1);k=1~N/2-1 (14)
P(k)=X1(2k);k=0~N/4-1 (15)
Q(k)=X1(2k+1)+X1(2k-1);Q(0)=X1(1);k=1~N/4-1 (16)
其中,当该音频数据的块类型为短块时,N=12,C为循环计算的次数,X(k)为输入的6个点音频数据,P(k)、Q(k)为重构后得到的2组3点运算。在硬件实现时,上面3式均只涉及到加法运算。
以(14)式中的一个运算点为例,其主要操作为:将存放在RAM 020中的运算点读取出来,存放进寄存器022,再通过选择器026到达加/减法器028的A端口;然后从RAM 020中读取另一个相应的运算点,存放进寄存器023,然后通过选择器027到达加/减法器028的B端口,完成加法运算后经过寄存器029保存至RAM 020。(15)式实现只需从RAM 020中获取对应的运算点即可;(16)式的实现与(14)式的实现相同。
在进行该音频数据的短块数据重构后,对每组3个运算点的音频数据进行DCT计算,分别得到2组3点的DCT结果,表达式为:
p(0)=P(0)+P(1)*0.866025+P(2)*0.5;
p(1)=P(0)-P(2);
p(2)=P(0)-P(1)*0.866025+P(2)*0.5; (17)
q(0)=Q(0)+Q(1)*0.866025+Q(2)*0.5;
q(1)=Q(0)-Q(2);
q(2)=Q(0)-Q(1)*0.866025+Q(2)*0.5; (18)
其中,P(k)为(15)式得到的结果,Q(k)为(16)式得到的结果,p(0)、p(1)、p(2)与q(0)、q(1)、q(2)分别为2组3点DCT的运算结果。为了方便硬件实现,(17)式与(18)式的硬件实现采用乘累加的方式得到。
根据(17)式得到的3个运算点的音频数据DCT结果和(18)式得到的3个运算点的音频数据DCT结果进行DCT计算,得到6个运算点的音频数据DCT结构,信号处理装置的主要操作过程为:在RAM 020中读取2组3点DCT的各一个DCT结果,通过加/减法器028作加/减法运算,结果通过寄存器022送到乘法器024的一端,同时将相应系数从系数RAM 021读取出来,通过寄存器023送到乘法器024的另一端。经过乘法器024后的结果保存回RAM020。根据(17)式得到的3个运算点的音频数据DCT结果和(18)式得到的3个运算点的音频数据DCT结果进行DCT计算满足如下关系:
其中p(n)、q(n)分别为2组3点DCT的结果。最终输出结果为g(0)到g(5)共6个运算点数的音频数据的DCT值。
由于在进行MDCT前处理或要进行IMDCT的音频数据一般为18个运算点的音频数据,按照短块的复用计算处理,根据ISO11172-3的规定,需要循环3次,才能将分为3组的6个运算点数的音频数据处理完,将循环了3次得到的3组g(0)到g(5)作为短块的复用计算结果输出。
对经过MDCT前处理的音频数据或要进行IMDCT处理的音频数据进行了复用处理后,对于经过MDCT前处理的音频数据来说,就可以直接输出了,对于要进行IMDCT处理的音频数据来说,还需要进行IMDCT后处理后才能得到最终结果,以下详细介绍如何对要进行IMDCT处理的音频数据再进行复用计算后,再进行IMDCT后处理过程。
信号控制装置中的状态判断单元根据寄存器F中对应音频数据存储的标识判断是否需要进行IMDCT后处理:音频数据经过复用计算,保存在RAM 020中的值有18个运算点数的音频数据的DCT结果,如果寄存器F存储对应音频数据的标识为“0”,则表示RAM 020中的18个运算点数的音频数据的DCT结果为音频数据的MDCT输出结果;如果寄存器F的值为“1”,则保存在RAM 020中的值有18个运算点数的音频数据的DCT结果还需要进行IMDCT后处理,才能得到音频数据IMDCT的最后输出结果,其关系式如下:
其中,g(n)为复用计算结果;X(n)为音频数据IMDCT的最后输出结果。IMDCT后处理的操作可用图10进行说明:将复用计算结果保存在RAM 020中且等分成2部分,分别用A、B表示,进行IMDCT后处理后,输出的音频数据在数量上为输出前音频数据的2倍,其顺序为B,-B,-A,-A。
本发明在实现音频数据的MDCT或IMDCT过程中,MDCT前处理或IMDCT后处理简单,均为加法运算;复用计算共用主要的信号处理装置,且该单元的结构简单,长块时乘法运算量仅为99个;对于短块,采用了与长块类似的处理算法乘法量仅为39个,减小了运算量,从而降低了音频数据编解码系统的功耗。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。