具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例中,将长块和短块数字信号,均转化6点的DCT-IV型运算。因此所有运算都可以统一为6点DCT-IV运算,可在此基础上实现运算单元的共用。
首先,将MDCT和IMDCT转化6点的DCT-IV型运算的推导过程如下:
对于IMDCT:
n=0~(N-1)(5)
所以只要得到c(n)在[0,N/2)上的值,就可以得到y(n)在[0,N)上面的值,对于长块,c(n)是18点的DCT-IV运算,对于短块,c(n)则是6点的DCT-IV运算。
对于MDCT:
n=0~(N/2-1)(7)
设:
则:
n=0~(N/2-1),即与公式(6)相同,只要计算出c(n)就能得到y(n)。对于长块,c(n)是18点的DCT-IV运算,对于短块,c(n)则是6点的DCT-IV运算。
由上可知,长块IMDCT和MDCT都可以通过18点的DCT-IV运算得到,短块IMDCT和MDCT都可以通过6点的DCT-IV运算得到。
对于如公式(6)和公式(8)所示的18点的DCT-IV运算,可以通过以下方式转化为3个6点的DCT-IV运算:
n=0~(N/2-1)(9)
设:
所以,计算出6点的A(n)、B(n)和C(n),就能得到18点的c(n)。
设:
θk=(2k+1)π/N (12)
经过整理推导,可以得到公式(13):
n=0~(N/6-1)
n=0~(N/6-1)
n=0~(N/6-1)
(13)
设:amk=fk-g′k-hk,k=0,1...(N/6-1)
k=0,1...(N/6-1)
k=0,1...(N/6-1)(14)
由公式(13)和(14)可以看出A(n)、B(n)和C(n)都是6点的DCT-IV型运算,至此,无论是长块、短块,MDCT还是IMDCT,都可以共用相同的运算单元(6点的DCT-IV运算),加上预处理和后处理实现。
图3示出了本发明实施例提供的编码方法的实现流程,为了便于描述,仅示出了与本实施例相关的部分。
对于外部提供的长块或短块的数字音频信号,首先要进行前处理以把长块或短块转换成离散余弦变换四型DCT-IV运算,然后对处理后的长块或短块数字信号进行MDCT或IMDCT运算,其中上述MDCT或IMDCT运算是在同一个核心运算单元中完成,当运算完毕后,进行后处理输出MDCT或IMDCT运算结果。
图4示出了本发明实施例提供的编码方法的具体实现流程图,该编码方法对所述数字信号进行改良的离散余弦变换MDCT运算,详述如下:
步骤A.提供至少一个音频数字信号,该数字信号是长块或者是短块;
步骤B.对该数字信号进行MDCT运算,包括对长块的MDCT运算或者对短块的MDCT运算,对长块的MDCT运算和对短块的MDCT运算都转换成离散余弦变换四型DCT-IV运算。。
在上述步骤B中,MDCT运算具体包括前处理、运算、后处理三个阶段,各阶段具体执行的操作如下:
B1.对数字信号做前处理,该前处理把长块MDCT运算和短块MDCT运算转换成DCT-IV运算;
B2.把经过前处理的数字信号输入到运算单元中执行DCT-IV运算,当数字信号是短块时,执行一次DCT-IV运算,当数字信号是长块时,执行三次DCT-IV运算;
B3.对DCT-IV运算结果进行后处理,输出MDCT运算结果。
根据长块、短块的不同,前处理阶段的具体操作也不同,例如长块在MDCT前处理后还需进行长块前处理,因此步骤B1具体又包括:
B11.判断数字信号是长块还是短块,当数字信号是短块时,执行步骤B12,当数字信号是长块时,执行步骤B13;
B12.执行短块MDCT前处理,短块MDCT前处理是利用对称性把对短块的MDCT运算转换成6点的DCT-IV运算;执行步骤B15;
B13.执行长块MDCT前处理,长块MDCT前处理是利用对称性把对长块的MDCT运算转换成18点的DCT-IV运算;
本发明实施例中,上述步骤B.12和B.13中的短块MDCT前处理和长块MDCT前处理是根据以下公式进行的:
a(k)=X(k-N/4)-X((3N/4-1)-k),k=N/4~(N/2-1)
a(k)=-X(3N/4+k)-X((3N/4-1)-k),k=0~(N/4-1)
其中,X是长度为N的输入信号,k是运转指数,短块MDCT前处理中,N为12,长块MDCT前处理中,N为36。
B14.对长块MDCT前处理后的数据进行长块前处理,所述长块前处理把18点的DCT-IV运算转换成6点的DCT-IV运算;
上述长块前处理是根据以下公式进行的:
amk=fk-g′k-hk,k=0,1...(N/6-1)
k=0,1...(N/6-1)
k=0,1...(N/6-1)
其中,N为36,amk、bmk、cmk分别为3组6点的适合DCT-IV运算的数字信号,上述公式中的fk、gk、hk、f′k、g′k、φn,k分别定义如下:
fk=a(k)
gk=a(N/6+k)
hk=a(N/3+k),k=0,1...(N/6-1)
f′k=fN/6-1-k
g′k=gN/6-1-k
θk=(2k+1)π/N,
即上文中的公式(11)和(12),其中函数a为前处理后的18点或6点的适合DCT-IV运算的数字信号,即公式(8)的定义。
B15.前处理结束。
后处理阶段具体需执行以下操作:
B31.判断数字信号是长块还是短块,当数字信号是短块时,执行步骤B32;当数字信号是长块时,执行步骤B33;
B32.将短块的DCT-IV运算结果,即MDCT运算结果输出,执行步骤B34;
B33.将长块的三次DCT-IV运算结果进行长块后处理,长决后处理把长块的三次DCT-IV运算结果转换成18点DCT-IV运算结果,即MDCT运算结果输出;
上述长块后处理根据以下公式进行:
n=0~(N/6-1)
c(3n+1)=A(n),n=0~(N/6-1)
n=0~(N/6-1)
其中,N为36,A(n)、B(n)、C(n)分别为定义如下:
n=0~(N/6-1)
n=0~(N/6-1)
n=0~(N/6-1)
即上文中的公式(13),上述公式中的fk、gk、hk、f′k、g′k、φn,k分别定义如下:
fk=a(k)
gk=a(N/6+k)
hk=a(N/3+k),k=0,1...(N/6-1)
f′k=fN/6-1-k
g′k=gN/6-1-k
θk=(2k+1)π/N,
函数a为前处理后的数字信号。
B34.后处理结束。
图5示出了本发明实施例提供的解码方法的具体实现流程图,该解码方法对所述数字信号进行反向改良的离散余弦变换IMDCT运算,详述如下:
步骤A.提供至少一个音频数字信号,该数字信号是长块或者是短块;
步骤B.对该数字信号进行IMDCT运算,包括对长块的IMDCT运算或者对短块的IMDCT运算,对长块的IMDCT运算或对短块的IMDCT运算转换成离散余弦变换四型DCT-IV运算。
在上述步骤B中,IMDCT运算同样包括前处理、运算、后处理三个阶段,各阶段具体执行的操作如下:
B1.对数字信号做前处理,该前处理把长块IMDCT运算和短块IMDCT运算转换成DCT-IV运算;
B2.把经过前处理的数字信号输入到运算单元中执行DCT-IV运算,当数字信号是短块时,执行一次DCT-IV运算,当数字信号是长块时,执行三次DCT-IV运算;
B3.对DCT-IV运算结果进行后处理,输出IMDCT运算结果。
根据长块、短块的不同,前处理阶段的具体操作也不同,因此步骤B1具体又包括:
B11.判断数字信号是长块还是短块,当数字信号是短块时,执行步骤B13,当数字信号是长块时,执行步骤B12;
B12.当数字信号是长块时,执行长块前处理,长块前处理把对长块的IMDCT运算转换成6点的DCT-IV运算;
B13.前处理结束。
上述长块前处理是根据以下公式进行的:
amk=fk-g′k-hk,k=0,1...(N/6-1)
k=0,1...(N/6-1)
k=0,1...(N/6-1)
其中,N为36,amk、bmk、cmk分别为3组6点的适合DCT-IV运算的数字信号,上述公式中的fk、gk、hk、f′k、g′k、φn,k分别定义如下:
fk=a(k)
gk=a(N/6+k)
hk=a(N/3+k),k=0,1...(N/6-1)
f′k=fN/6-1-k
g′k=gN/6-1-k
θk=(2k+1)π/N,
即上文中的公式(11)和(12),其中函数α为前处理后的18点或6点的适合DCT-N运算的数字信号,即公式(8)的定义。
后处理阶段具体需执行以下操作:
B31.判断数字信号是长块还是短块,当数字信号是短块时,执行步骤B32;当数字信号是长块时,执行步骤B33;
B32.将短块的DCT-IV运算结果进行IMDCT后处理,IMDCT后处理把短块的DCT-IV运算结果转换成短块IMDCT运算结果输出,执行步骤B35;
B33.将长块的三次DCT-IV运算结果进行长块后处理,长块后处理把长块的三次DCT-IV运算结果转换成18点DCT-IV运算结果;
B34.对18点DCT-IV运算结果进行IMDCT后处理,IMDCT后处理把18点DCT-IV运算结果转换成长块IMDCT运算结果输出;
B35.后处理结束。
上述长块后处理根据以下公式进行:
n=0~(N/6-1)
c(3n+1)=A(n),n=0~(N/6-1)
n=0~(N/6-1)
其中,N为36,A(n)、B(n)、C(n)分别为定义如下:
n=0~(N/6-1)
n=0~(N/6-1)
n=0~(N/6-1)
即上文中的公式(13),上述公式中的fk、gk、hk、f′k、g′k、φn,k分别定义如下:
fk=a(k)
gk=a(N/6+k)
hk=a(N/3+k),k=0,1...(N/6-1)
f′k=fN/6-1-k
g′k=gN/6-1-k
θk=(2k+1)π/N,
函数a为前处理后的数字信号。
上述述IMDCT后处理是根据以下公式进行的:
进行短块IMDCT后处理时,N为12;进行短块IMDCT后处理时,N为36。y(n)为IMDCT运算的最终输出结果,函数c为18点的DCT-IV的运算结果。
图6示出了本发明实施例提供的编解码方法的具体实现流程图,详述如下:
步骤A.提供至少一个音频数字信号,该数字信号是长块或者是短块;
步骤B.对该数字信号编解码,在编码时对该数字信号进行MDCT运算,在解码时对该数字信号进行IMDCT运算,MDCT运算和IMDCT运算都转换成离散余弦变换四型DCT-IV运算。。
本发明实施例中,MDCT运算和IMDCT运算都转换成DCT-IV运算。
在上述步骤B中的前处理、运算、后处理三个阶段分别具体执行的操作如下:
B1.对数字信号做前处理,该前处理把MDCT运算和IMDCT运算都转换成DCT-IV运算;
B2.把经过前处理的数字信号输入到运算单元中执行DCT-IV运算,当数字信号是短块时,执行一次DCT-IV运算,当数字信号是长块时,执行三次DCT-IV运算;
B3.对DCT-IV运算结果进行后处理,在执行MDCT运算时,后处理把DCT-IV运算结果转换成MDCT运算结果输出;在执行IMDCT运算时,后处理把DCT-IV运算结果转换成IMDCT运算结果输出。
根据长块、短块的不同,前处理阶段的具体操作也不同,因此步骤B1具体又包括:
B11.判断是执行MDCT运算还是IMDCT运算,当执行MDCT运算时,执行步骤B12;当执行IMDCT运算时,执行步骤B16;
B12.判断数字信号是短块还是长块,当数字信号是短块时,执行步骤B13;当数字信号是长块时,执行步骤B14;
B13.执行短块MDCT前处理,短块MDCT前处理利用对称性把对短块的MDCT运算转换成6点的DCT-IV运算,执行步骤B18;
B14.当数字信号是长块时,执行长块MDCT前处理,长块MDCT前处理利用对称性把对长块的MDCT运算转换成18点的DCT-IV运算;
B15.对长块MDCT前处理后的数据进行长块前处理,长块前处理把18点的DCT-IV运算转换成6点的DCT-IV运算,执行步骤B18;
B16.判断数字信号是短块还是长块,当数字信号是短块时,执行步骤B18;当数字信号是长块时,执行步骤B17;
B17.对数字信号进行长块前处理,长块前处理把对数字信号的IMDCT运算转换成6点的DCT-IV运算;
B18.前处理结束。
后处理阶段具体需执行以下操作:
B31.判断是执行MDCT运算还是IMDCT运算,执行MDCT运算时,执行步骤B32;执行IMDCT运算时,执行步骤B34;
B32.判断数字信号是短块还是长块,当数字信号是短块时,将短块DCT-IV运算结果,即短块MDCT运算结果输出,执行步骤B37;当数字信号是长块时,执行步骤B33;
B33.执行长块后处理,长块后处理将长块的三次DCT-IV运算结果转换成18点的DCT-IV运算结果,即长块MDCT运算结果输出,执行步骤B37;
B34.判断数字信号是短块还是长块,当数字信号是短块时,执行步骤B36;当数字信号是长块时,执行步骤B35;
B35.执行长块后处理,所述长块后处理将长块的三次DCT-IV运算结果转换成18点的DCT-IV运算结果;
B36.执行IMDCT后处理,当执行短块IMDCT运算时,所述IMDCT后处理把短块DCT-IV运算结果转换成IMDCT运算结果输出;当执行长块IMDCT运算时,所述IMDCT后处理把所述18点的DCT-IV运算结果转换成IMDCT运算结果输出;
B37.后处理结束。
图7示出了本发明实施例提供的音频编码和/或解码***的结构原理,图8则是将图7所示***以集成电路形式实现的结构图,其中虚线框表示内部的单元结构可集成于一集成电路上。为了便于描述,在图7、图8中仅示出了与本实施例相关的部分。
一并参照图7、图8,输入输出接口3用于和外部逻辑1通信,接收至少一个待处理的音频数字信号,该数字信号是长块或者是短块,主要完成接收控制信号和反馈运算状态的功能;寄存器组2主要为其他各单元提供数据暂存、状态显示、参数配置等功能;运算控制单元4主要控制运算单元6中运算的数据的生成、运算和存储;逻辑控制单元5则主要负责运算流程之间的转换,如开始、中间处理、结束和各状态之间的转换;RAM和ROM 7为存储设备。运算控制单元4、逻辑控制单元5和寄存器组2连接,用于从寄存器组2中存取数据,控制对数据进行运算,在完成相关运算后再把运算结果存储到RAM中。
运算单元6与寄存器组2和运算控制单元4连接,用于在逻辑控制单元5和运算控制单元4的控制下对所述输入输出接口接收到的长块数字信号或短块数字信号进行MDCT和/或IMDCT运算。下文分别对编码、解码、编解码三种情形时***的工作原理进行描述。
1、当上述***单独用于编码时。运算单元6在6运算控制单元4和逻辑控制单元5的控制下,对数字信号做前处理,前处理把长块MDCT运算和短块MDCT运算转换成DCT-IV运算;并对经过前处理过的数字信号执行DCT-IV运算,当数字信号是短块时,执行一次DCT-IV运算,当数字信号是长块时,执行三次DCT-IV运算;运算单元6在运算控制单元4和所述逻辑控制单元5的控制下,对所述DCT-IV运算结果进行后处理,输出MDCT运算结果。
运算控制单元4还用于判断输入输出接口3接收到的数字信号是长块还是短块;当判断数字信号是短块时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行短块MDCT前处理,短块MDCT前处理利用对称性把对短块的MDCT运算转换成6点的DCT-IV运算;当判断所述数字信号是长块时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行长块MDCT前处理,所述长块MDCT前处理利用对称性把对长块的MDCT运算转换成18点的DCT-IV运算;并进一步对所述长块MDCT前处理后的数据进行长块前处理,所述长块前处理把18点的DCT-IV运算转换成6点的DCT-IV运算。
其中,执行短块MDCT前处理和长块MDCT前处理、长块前处理时所依据的公式同上文编码方法中描述的相同,此处不再赘述。
运算控制单元4还用于判断输入输出接口3接收到的数字信号是长块还是短块;当判断所述数字信号是短块时,运算单元6在运算控制单元4和逻辑控制单元5的控制下将所述短块的DCT-IV运算结果,即MDCT运算结果输出;当判断数字信号是长块时,运算单元6在运算控制单元4和逻辑控制单元5的控制下将所述长块的三次DCT-IV运算结果进行长块后处理,所述长块后处理把所述长块的三次DCT-IV运算结果转换成18点DCT-IV运算结果,即MDCT运算结果输出。
其中,长块后处理时所依据的公式同上文编码方法中描述的相同,此处不再赘述。
2、当上述***单独用于编码时。运算单元4在运算控制单元6和逻辑控制单元5的控制下,对数字信号做前处理,所述前处理把长块IMDCT运算或者短块IMDCT运算转换成离散余弦变换四型DCT-IV运算;并对经过前处理的数字信号输入到运算单元中执行DCT-IV运算,当所述数字信号是短块时,执行一次DCT-IV运算,当所述数字信号是长块时,执行三次DCT-IV运算;运算单元4在运算控制单元6和逻辑控制单元5的控制下,对所述DCT-IV运算结果进行后处理,输出IMDCT运算结果。
运算控制单元4还用于判断输入输出接口3接收到的数字信号是长块还是短块;当判断数字信号是短块时,不做前处理;当判断数字信号是长块时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行长块MDCT前处理,所述长块前处理把对长块的IMDCT运算转换成6点的DCT-IV运算。
运算控制单元4还用于判断输入输出接口3接收到的数字信号是长块还是短块;当判断数字信号是短块时,运算单元6在运算控制单元4和逻辑控制单元5的控制下将所述短块的DCT-IV运算结果进行IMDCT后处理,所述IMDCT后处理把短块的DCT-IV运算结果转换成短块IMDCT运算结果输出;当判断所述数字信号是长块时,运算单元6在运算控制单元4和逻辑控制单元5的控制下将所述长块的三次DCT-IV运算结果进行长块后处理,所述长块后处理把所述长块的三次DCT-IV运算结果转换成18点DCT-IV运算结果,并对所述18点DCT-IV运算结果进行IMDCT后处理,所述IMDCT后处理把18点DCT-IV运算结果转换成长块IMDCT运算结果输出。
其中,执行长块前处理、长块后处理、IMDCT后处理时所依据的公式同上文解码方法中描述的相同,此处不再赘述。
3、当上述***用于编解码时。运算单元6在运算控制单元4和逻辑控制单元5的控制下,将MDCT运算和IMDCT运算都转换成离散余弦变换四型DCT-IV运算。
在运算控制单元4和逻辑控制单元5的控制下,运算单元6对数字信号做前处理,所述前处理把MDCT运算和IMDCT运算都转换成离散余弦变换四型DCT-IV运算;运算单元6对前处理后的数字信号执行DCT-IV运算,当所述数字信号是短块时,执行一次DCT-IV运算,当所述数字信号是长块时,执行三次DCT-IV运算;运算单元6再对所述DCT-IV运算的结果进行后处理,在执行MDCT运算时,所述后处理把DCT-IV运算结果转换成MDCT运算结果输出;在执行IMDCT运算时,所述后处理把DCT-IV运算结果转换成IMDCT运算结果输出。
运算控制单元4还用于判断当前需执行MDCT运算还是IMDCT运算,同时判断输入输出接口3接收到的数字信号是长块还是短块;当运算控制单元4判断为当前需执行短块MDCT运算时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行短块MDCT前处理,所述短块MDCT前处理利用对称性把对短块的MDCT运算转换成6点的DCT-IV运算;当运算控制单元4判断为当前需执行长块MDCT运算时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行长块MDCT前处理,所述长块MDCT前处理利用对称性把对长块的MDCT运算转换成18点的DCT-IV运算;并对所述长块MDCT前处理后的数据进行长块前处理,所述长块前处理把18点的DCT-IV运算转换成6点的DCT-IV运算;当运算控制单元4判断为当前需执行长块IMDCT运算时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行进行长块IMDCT前处理,所述长块前处理把对所述数字信号的IMDCT运算转换成6点的DCT-IV运算。
运算控制单元4还用于判断当前执行的是MDCT运算还是IMDCT运算,同时判断输入输出接口3接收到的数字信号是长块还是短块;当运算控制单元4判断为当前执行的是短块MDCT运算时,运算单元6在运算控制单元4和逻辑控制单元5的控制下将短块DCT-IV运算结果,即短块MDCT运算结果输出;当运算控制单元4判断为当前执行的是长块MDCT运算时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行长块后处理,所述长块后处理将长块的三次DCT-IV运算结果转换成18点的DCT-IV运算结果,即长块MDCT运算结果输出;当运算控制单元4判断为当前执行的是长块IMDCT运算时,运算单元6在运算控制单元4和逻辑控制单元5的控制下执行长块后处理,所述长块后处理将长块的三次DCT-IV运算结果转换成18点的DCT-IV运算结果;并执行IMDCT后处理,所述IMDCT后处理把所述18点的DCT-IV运算结果转换成IMDCT运算结果输出;当运算控制单元4判断为当前执行的是短块IMDCT运算时,运算单元6在运算控制单元4和逻辑控制单元5的控制下把短块DCT-IV运算结果转换成IMDCT运算结果输出。
图9为运算控制单元4的结构原理图,运算控制单元4主要由主控制状态机44和运算单元控制信号生成子单元46完成运算控制工作,其中主控制状态机44与图4中的逻辑控制单元5连接,还与长短块判断子单元41、编解码判断子单元42(单独用于编码、单独用于解码时,此子单元不需要)、计数器45连接,用于判断计算的类型并控制计算的状态转换。运算单元控制信号生成子单元46与图4中的运算单元6连接,还与主控制状态机44、计数器45连接,用于生成运算控制信号。辅助控制信号生成子单元47生成一些辅助的控制信号,如长短块标志和编解码标志等;长短块判断子单元41用于判断输入的数字信号是长块数字信号还是短块数字信号;编解码判断子单元42用于判断输入的数字信号是编码数字信号还是解码数字信号;系数生成子单元43与运算单元控制信号生成子单元47连接,用于生成运算过程中固定系数的存取信号。计数器45负责计数。运算单元控制信号生成子单元46生成的信号主要包括加/减控制信号、乘/乘加控制信号、运算单元寄存器组控制信号、RAM(random accessmemory,随机存取存储器)读写控制信号等。
运算控制单元4的主要功能为从RAM、ROM 7中存取数据,在运算控制信号的作用下,把数据送入寄存器组2,并进入运算单元6进行运算,完成相关运算后再把结果存储到存储器7中的RAM中。
图10为逻辑控制单元5的结构图,按照硬件的实现流程划分,逻辑控制单元5分为6部分,即MDCT前处理逻辑控制电路51(单独用于解码时不需要)、长块前处理逻辑控制电路52、复用电路逻辑控制电路53、长块后处理逻辑控制电路54、IMDCT后处理逻辑控制电路55(单独用于编码时不需要),以及各部分之间状态转化逻辑56。51、52、53、54和55统一连接到运算控制单元4和输入输出接口3,56也连接至运算控制单元4,控制相应的运算过程的存取器存取操作,运算控制以及和输入输出接口通讯。
其中,MDCT前处理控制电路51用于和运算控制单元4共同控制运算单元6对输入的编码数字信号进行MDCT前处理。长块前处理控制电路52用于和运算控制单元4共同控制运算单元6对输入的长块数字信号进行长块前处理。复用运算单元控制电路53用于控制对运算单元6的复用的逻辑控制,无论长块、短块,MDCT还是IMDCT运算,其大部分的运算都在此部分完成,再加上一些前处理(51、52)和后处理(54、55),就能完成所需的运算。长块后处理控制电路54用于和运算控制单元4共同控制运算单元6对运算后的长块数字信号进行长块后处理。IMDCT后处理控制电路55用于和运算控制单元4共同控制运算单元6对解码运算结果进行IMDCT后处理。状态转化逻辑56用于控制运算过程中各个不同运算阶段之间的状态转换,如运算的开始、中间处理、结束和各状态之间的转换。
图11为运算单元6的结构图,运算单元6主要完成整个运算过程中的加减法以及乘法运算。包括RAM 601,用于存储输入的待编解码运算的数字信号和中间运算结果;ROM 602,用于存储运算系数;第一寄存器603,其输入端与所述RAM连接;第二寄存器604,其输入端与ROM602连接;乘法器605,其两个输入端分别与第一寄存器603的输出端和第二寄存器604的输出端连接;第三寄存器606,其输入端与乘法器605的输出端连接;第一选择器607,其第一数据输入端与第一寄存器603的输出端连接;第二选择器608,其第一数据输入端与第一寄存器603的输出端连接,第二数据输入端与第三寄存器606的输出端连接;加/减法器609,其两个输入端分别与第一选择器607的输出端和第二选择器608的输出端连接;第四寄存器610,其输入端与加/减法器609的输出端连接,其输出端与第一选择器607的第二数据输入端连接;地址控制单元611,其与RAM 601和ROM 602连接,用于生成存取数据的地址;寄存器选择单元612,其与第一寄存器603、第二寄存器604、第三寄存器606、第四寄存器610以及寄存器组2连接,用于选择参与运算的寄存器;乘法器控制单元613,其与乘法器605连接,用于控制乘法器605的运算;选择器控制单元614,其与第一选择器607和第二选择器608连接,用于从第一选择器607和第二选择器608的两个输入的数据中选择合适的数据输出;加/减法器控制单元615,其与加/减法器610连接,用于控制加/减法器610的运算。
图11中所示运算单元的工作原理描述如下:输入的数字信号在进行MDCT或IMDCT之前,将被存放在RAM 601中。在整个运算过程中,RAM 601也将被用于存储中间结果。硬件电路中需要用到的系数都将被存放在系数ROM 602中。乘法器605主要完成运算过程中的乘法运算:从RAM 601中读出的数据将暂存在第一寄存器603中,从ROM 602读出的系数将暂存在寄存器第二604中,然后寄存器第一603与第二寄存器604的值将被送入乘法器605进行乘法运算,乘法运算的结果将暂存在第三寄存器606中。第四寄存器610与第一寄存器603的输出分别为第一选择器607的两个输入,第三寄存器606与第一寄存器603的输出分别为第二选择器608的两个输入,其中,第一寄存器603的输出为RAM 601中存储的数据,第三寄存器606的输出为乘法器605的运算结果,第四寄存器610的输出为加/减法器609的运算结果。这样,加/减法器609就能完成以下几种情况的加减法混合运算:1,RAM 601中数据的加法或减法运算,从RAM 601出来的2个数据经过第一寄存器603分别进入第一选择器607与第二选择器608,然后进入加/减法器609完成加/减法运算;2,乘累加运算,第一次乘法运算的结果将通过第二选择器608进入加/减法器609,然后暂存在第四寄存器610中,以便为第一选择器607提供输入数据。第二次的乘法结果将通过第二选择器608进入加/减法器609的B端,暂存在第四寄存器610中的结果将进入加/减法器609的A端,两者运算的结果将暂存在第四寄存器610中,以便为第一选择器607提供输入数据。乘累加的过程将一直按上面的方法循环,直至乘累加结束。图6中的MDCT前处理控制电路51、长块前处理控制电路52、复用运算单元控制电路53、长块后处理控制电路54和IMDCT后处理控制电路5的运算操作,都可以分解为存储器寻址,寄存器寻址,加减法和乘法运算。以运算单元复用6点的DCT-IV运算为例,见下式:
n=0~5
首先从RAM中读取a(k),k=0~5到寄存器组,再从Rom中读取系数
n=0~5,k=0~5到寄存器组,然后通过择器选择乘法器的输入,乘法器的一个输入从存储a(k)的寄存器得到,另一个输入从存储
的寄存器得到,然后再乘法器中完成a(k)与
的乘法,最后同样的选择加、减法器的输入,在加、减法器中完成乘法结果的累加,一直到所有运算完成,存储运算结果到RAM中。
图12为逻辑控制单元中的MDCT前处理控制电路51的工作示意图,其中,X0-X35表示输入信号,a0——a17表示经过MDCT前处理控制电路51以及运算单元6之后的输出结果。以第一点为例,首先从RAM 601中取出第28个输入数据和第25个输入数据,分别送到选择器607和选择器608,然后进入加/减法器609的A、B端完成加/减法运算,最后将运算结果存放在RAM 601中。运算结束后也会执行长短块判断步骤S804,以决定下一步的运算。
图13、14和15是长块前处理步骤S805的示意图,A(n)、B(n)和C(n)的输入数据amk、bmk和cmk的前处理不同,需要分别处理。amk的计算如图13所示,bmk的计算如图14所示,cmk的计算如图15所示。长块前处理步骤需要对输入数据进行加减法和乘法/乘累加运算,且需要在ROM存储相应的乘法系数。处理时先从RAM中读取a(k),k=0~17到寄存器组中,然后把这些数据和从ROM得到的相应的系数进行乘法/乘累加和加减运算,最后把得到的结果amk,k=0,1...5、bmk,k=0,1...5和cmkk=0,1...5存回RAM中去。此部分包含寄存器的操作、产生RAM和ROM的读写逻辑、产生加减法器和乘法器的输入选择控制和输出控制逻辑。
运算单元6的硬件实现流程图如图16所示:
步骤S1601:流程开始;
步骤S1602:生成输入数据的地址;
步骤S1603:把输入数据装载进寄存器组;
步骤S1604:根据控制逻辑进行相应的乘法、加减法运算;
步骤S1605:把中间结果也存入寄存器组;
步骤S1606:判断计算是否结束,短块只需要进入复用核心运算单元计算一次,而长块则需要循环计算3次;
步骤S1607:输出结果到RAM;
步骤S1608:核心运算结束。
长块后处理运算如图17所示,3组6点的DCT-IV的运算结果被转化为18点的DCT-IV的运算结果,即公式(10)所述的运算,运算比较简单,只需要简单的加减法运算并重新生成存储地址即可。
IMDCT后处理的操作可用图18A和图18B进行说明:即如果需要进行IMDCT后处理,可将经过复用核心运算单元电路步骤或者长块后处理步骤后,保存在RAM中的值等分成2部分,分别用图18A示出的A、B表示,进行IMDCT后处理后,输出数据在数量上为输出前的2倍,其顺序为B,-B,-A,-A,如图18B所示。
本发明实施例中,通过将长块MDCT、短块MDCT、长块IMDCT、短块IMDCT均转换为6点的DCT-IV型运算,从而可以实现MDCT与IMDCT、长块与短块都可以共用主要运算单元,且该单元的结构简单,电路可以高度复用,节省了电路面积,长块时乘法运算量仅为114个,短块乘法量仅为36个,减小了运算量,降低了功耗。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。