浏览 3881 次
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-26
最后修改:2010-09-04
解码一帧Layer3第6步:消混叠处理 -- class Layer3的antialias方法
消混叠(antialias)处理就是消除伪信号。相邻两个子带间互相干扰造成失真,为了减小这种影响,在信号送入IMDCT之前作消混叠处理。消混叠通过对子带作8点的蝶形变换实现。原理如下图: 图1 图2 经过逆量化后得到频域信号,一个粒度组内一个声道内共576个频谱值,将576个频谱值被分为18个子带,每个子带32条频率线。8点的的蝶形变换在相邻的两个子带之间进行。图中cai、csi就是源码中的cs[i]和cs[i]。cs[i]和ca[i]我们在构造函数中已经初始化过了。 【提示】以下代码是Layer3.java的一部分,应遵守《(一)用JAVA编写MP3解码器——前言》中的许可协议。 class Layer3的antialias方法源码: //6. //>>>>ANTIALIAS============================================================ private static float[] ca, cs; private void antialias(final int ch, final int gr) { GRInfo gr_info = (objSI.ch[ch].gr[gr]); int sb, ss, sblim = 0; float bu, bd; if (gr_info.block_type == 2) { if (gr_info.mixed_block_flag == 0) return; sblim = 1; } else sblim = (rzero_index[ch] - 1) / 18; //sblim=(17+nozero_index[ch])/18-1 for (sb = 0; sb < sblim; sb++) for (ss = 0; ss < 8; ss++) { bu = xr[ch][sb][17 - ss]; bd = xr[ch][sb + 1][ss]; xr[ch][sb][17 - ss] = bu * cs[ss] - bd * ca[ss]; xr[ch][sb + 1][ss] = bd * cs[ss] + bu * ca[ss]; } } //<<<<ANTIALIAS============================================================
下一篇:(十三)用JAVA编写MP3解码器——IMDCT快速算法
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |