(十二)用JAVA编写MP3解码器——消混叠处理

解码一帧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============================================================


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值