[原创]桓泽学音频编解码(5):MP3 和 AAC 中IMDCT算法的原理,优化设计与参考代码中实现

[原创]桓泽学音频编解码(1):MPEG1 MP3 系统算法分析
[原创]桓泽学音频编解码(2):AC3/Dolby Digital 系统算法分析
[原创]桓泽学音频编解码(3):AAC 系统算法分析
[原创]桓泽学音频编解码(4):MP3 和 AAC 中反量化原理,优化设计与参考代码中实现

MDCT

         MDCT(Modified Discrete Cosine Transform)被广泛应用于mp3,aac,ac-3,ogg,avs audio等音频压缩标准之中。但他们在每个标准中的

 

MDCT的公式

X_k = \sum_{n=0}^{2N-1} x_n \cos \left[\frac{\pi}{N} \left(n+\frac{1}{2}+\frac{N}{2}\right) \left(k+\frac{1}{2}\right) \right]

IMDCT的公式

y_n = \frac{1}{N} \sum_{k=0}^{N-1} X_k \cos \left[\frac{\pi}{N} \left(n+\frac{1}{2}+\frac{N}{2}\right) \left(k+\frac{1}{2}\right) \right]

 

在mp3 decoder中n = 12或36

在AAC decoder中 n = 256或2048

在AC-3 decoder中 n=256或512

 

输入: n个数据.

输出:n/2个数据(50%交叠)

 

直接实现:

C算法[1]

for(p= 0;p<N;p++)

{

      sum = 0.0;

      for(m=0;m<N/2;m++)

             sum += in[i+3*m] * cos( PI/(2*N)*(2*p+1+N/2)*(2*m+1) );

      tmp[p] = sum * win[block_type][p] ;

}

直接计算的运算量是

N2/2次乘法和N(N-1)/2次加法

快速算法

         目前的快速算法有三类

1.  基于FFT

2.   基于DCT II

3.   收敛的快速MDCT算法

表1 直接计算和快速算法的运算量比较

 

长度N

实数乘法

实数加法

直接计算

快速算法

比值

直接计算

快速算法

比值

128

8192

896

9.1

8192

832

9.8

256

32768

2048

16

32640

1920

17

512

131072

4608

28.4

130816

4352

30.1

1024

524288

10240

51.2

523776

9728

53.8

2048

2097152

22528

93

2096128

21504

97.5

基于FFT的快速算法[3]

[2]

[4]

Step 1: Input combination

 

Step 2: GDFT

 

Step 2.1: Pre-processing:

 

Step 2.2: FFT:

 

Step 2.3: Post-processing:

 

 

Step 3: Windowing and de-interleaving:

 

Step 4: Overlap and Add

 

[4]Anup K.C and Ajay Kumar Bangla,”A NEW EFFICIENT IMPLEMENTATION OF TDAC SYNTHESIS FILTERBANK BASED ON RADIX-2 FFT”

 

 

[1] mp3 iso参考软件

[2] A VLSI IMPLEMENTATION OF MPEG-2 AAC DECODER SYSTEM

[3] P. Duhamel, Y. Mahieux, and J. P. Petit, “A fast algorithm for the implementation of filter banks based on ‘time domain aliasing cancellation’” Proc. ICASSP, May 1991, pp.2209-2212.

 

 

 

 

 

 

 

posted @ 2012-05-05 07:43  杭州桓泽  阅读(2890)  评论(1编辑  收藏  举报