0 导言
MP3(MPEG Audio Layer 3)是一种以高保真为条件完结的高效紧缩技能。MP3音频编码器杂乱,紧缩率很高,但其音色和音质还能够坚持根本完好,因而该音频格式文件在核算机、网络和各种电子设备上都得到了广泛运用。
因为MP3音频解码相对比较杂乱,为了到达在操控本钱的范围内完结快速解码的要求,提出了在SoC上经过添加矩阵乘法器运转快速的两个16点DCT算法,进一步进步MP3解码速度的可行性计划。
1 MP3解码流程剖析
MP3解码的流程如图1所示,解码的首要进程包含同步处理、解帧头、解边带信息、解份额因子、Huffman解码、逆量化、频率线重排序、立体声处理、混叠重建、改善离散余弦逆改换(IMDCT)、频率倒置处理、子代归纳滤波,最终输出原始的PCM数据。
在这些进程中因为IMDCT和子带归纳滤波的算法比较杂乱,占用硬件资源较多,处理时刻长,因而功耗所占份额相应较高。表1是在DSP渠道上成功移植后,对代码进行耗时剖析的成果。
依据表1可知,子带归纳滤波占了整个解码时刻的60 %以上,是决议解码速度的最要害模块;其次是长块IMDCT运算,占了整个解码时刻的10%以上。若选用MPEG-1主张的算法流程,数值核算首要会集在子带归纳滤波上。以两声道48 kHz采样率为例,乘法运算量为(48 000/32)×(64×32+512)×2=7 680 000次/s。因而,子带归纳滤波是MP3解码器的优化要点,削减子带归纳滤波的核算量和核算时刻是MP3解码器完结的中心。
2 子带归纳滤波剖析
子带归纳滤波是MP3解码的最终一部分,也是解码进程中最为耗时的要害进程。它担任从IMDCT的输出值中把PCM值复原出来,能够分红5个进程。首先是Matrixing(矩阵)运算,即,2,…,63。由公式可知,它从32个子带Sk的每个子带中取出一个值组成32个值送入一个矩阵中进行运算,然后把输出Vi的64个成果放入一个1 024的先入先出(FIFO)缓存中,再从1 024值中取出一半,组成一个512矢量Ui,并对这512矢量进行加窗运算,即Wi=UiDi,i=1,2,…,511,加窗系数Di由MP3官方协议 AnnexB Table3-B.3供给。最终将加窗成果Wi进行叠加生成32个时域PCM输出。
1次矩阵运算乘法和加法运算进程别离为1 024次和992次,完结1个声道的解码需求18次矩阵运算。矩阵运算是子带归纳滤波的要害进程。实践上,Konstantinos Konstantinides提出的办法,只需求做一些改变就能够经过32点DCT改换成矩阵运算。
2.1 32点快速DCT算法剖析
快速DCT改换算法首要根据系数矩阵割裂办法,添加输入的预处理,使得乘法和加法核算量折半。32点的DCT改换到矩阵运算如图2所示。其间V(1×64)表明矩阵的输出,A,B都是长度为1×16的矢量,(A,B)表明32点DCT的输出。
因为32点的DCT能够分化成2个16点的DCT改换,顺次类推能够分化成8点的DCT改换,考虑到定点数字信号处理中的有限字长效应,实践只需分化1 次,将32点DCT化成2个16点的DCT。简化子带滤波流程以及运用快速DCT改换后,子带归纳滤波部分的运算量能够削减约60 %。
由32点DCT分化为2个16点DCT进程推导如下:
2.2 根据矩阵乘法器的快速DCT算法优化
3×3矩阵乘法器由触发器和乘累加器组成,是高性能DSP处理器的重要部件,也是实时处理的中心,其速度直接影响DSP处理器的速度。矩阵乘法器的完结有许多种,根本上都根据并行核算准则。因为每列成果与其他列不相关,因而能够经过添加乘法器多列一起核算,经过n次乘累加就能够得到最终成果。图3给出矩阵乘法器的结构。
显着,这种结构的核算速度很快,可是运用乘法器会因矩阵维数n的添加而快速添加,运用的触发器也许多。在许多场合下,只需满意处理速度的要求,彻底没有必要糟蹋这么多硬件资源,而是只需1个乘累加单元流水作业,分步核算每1列成果既可。在做乘累加核算1个元素时分,预备下一组参加运算的数据,如此循环,相同能够取得较高的处理速度。
在该规划中,因为B矩阵是1×n的一维向量输入数据,A矩阵为DCT系数矩阵,A矩阵中的元素为n个系数的线性组合,因而整个矩阵乘法器需求2组n个触发器别离寄存输入数据和n个系数,1个乘累加单元。输入数据X[0:n],从X[O]到X[n]循环n次进入乘法器,运用挑选信号Assi-gn[0:n] 挑选系数C[0:n],别的系数符号由Sign信号软件操控,根本结构如图4所示。
因为DCT核算本质上便是n×n矩阵乘法运算,而n×n矩阵乘法器是在通用乘法器的基础上添加2组别离寄存系数矩阵的系数C(n)和输入X(n)的n个寄存器,使之完结长度为n的乘累加功用,一起还需保存前次乘法成果。其间,DCT中的系数是一组n维基的n种线性组合。只需1次输入n个系数,运用软件进行挑选和符号操控就可完结这些不同系数组合,无需重复往寄存器中置数,大大进步了取数/置数的功率,节省了整个DCT的运算时刻。
因而在核算32点的DCT,可将32点DCT分化为2个16点的DCT核算,核算量也削减1倍。能够运用2组16×16的矩阵乘法器并行核算,使得核算时刻大幅削减。表2是经过添加矩阵乘法器优化处理后,子带归纳滤波运用不同完结方法所需求的时刻。
成果表明,第2.1节中运用快速32点DCT算法改善子带归纳滤波核算是有用的,直接削减59%的核算时刻。在选用并行2个16×16矩阵乘法器加速快速 32点DCT的核算,能够取得显着的作用:使得核算时刻比原算法削减了约91.4%,并且硬件上只添加1个乘法器和30个数据锁存器,以及部分操控电路。运用软硬件协同操作就能够取得子带归纳滤波核算速度上的大幅度上升。
3 结语
该规划面向SoC完结了使用添加矩阵乘法器就可加速根据32点快速DCT算法的MP3解码中子带归纳滤波的处理速度,大大缓解了体系的颈瓶,使得选用体系主频比较低(fs≤100 MHz)的SoC渠道进行MP3的解码成为可能。