AC3 encoder 在进行MDCT时,使用两种长度的block。
512 samples的block用于输入信号频谱是stationary,或者在时间上变化缓慢。在fs 为48k时,使用512 samples block产生256个transform coefficients,对应频率分辨率为24k/256 =93.75, 时间分辨率为1/93.75=10.7ms
256 samples的block用于输入信号在时间上变化较快,能够产生较小的时间分辨率,可以减小pre-echo的长度。在fs 为48k时,使用256samples block产生256个transform coefficients,对应频率分辨率为24k/128 =187.5, 时间分辨率为1/187.5=5.3ms
在encoder端会分析输入信号的频谱或时间变化特性来选择合适的block 长度。在bitstream中,每个channel包含一个bit的字段blksw[ch]来标识选择哪个block.
当blksw=0时,使用512 sample block,当blksw=1时,使用256 samples block.
AC3 IMDCT:
当N=512时,在decoder使用N/4点complex IFFT做pre-twiddle 和post-twiddle来计算IMDCT.
512 点进行IMDCT计算过程如下:
1)定义MDCT transform coefficients X[k],k=0,1,2....N/2-1
2)pre-IFFT complex multiply
2)进行complex IFFT
3)post-IFFT complex multiply
4) window and de-interleave
5)overlap and add
当前block的first half 和前一个block的second half相加来消除时域混叠(TDAC)
256点进行IMDCT计算过程如下:
1)定义MDCT transform coefficients X[k],k=0,1,2....N/2-1
2)pre-IFFT complex multiply
3)complex IFFT
4)post-IFFT complex multiply
5)window and de-interleave
6) overlap and add