摘 要:通过对心理声学模型的简化,并在子带滤波器和量化编码模块采用快速算法,大大降低了运算量,在一片100MIPS的定点DSP上实现了实时压缩。
关键词:音频编码 掩蔽阈值 心理声学模型 分析子带滤波器
MP3是MPEG-1国际标准中音频压缩层3的简称,单声道比特率一般取64kbps,在采样率44.1kHz的情况下,其压缩比可达12倍以上,被广泛应用于互联网等许多场合。由于解码比编码过程简单很多,MP3播放机或随身听已随处可见,但MP3编码在单片定点DSP上实现,并要保证音质,则鲜有耳闻。考虑到心理声学模型在整个MP3音频编码算法中所占比例巨大,笔者从简化该模型人手,采用快速算法减少子带编码的运算量和数据量,尽可能减少量化编码的迭代循环次数,从而在一片美国德州仪器公司的TMS320C549芯片上实现了MP3的实时压缩,用标准解码软件回放,主观评定,对于通常的音频能达到接近CD的音质
1 MP3编码算法及原理
图1是MP3编码器的系统方框图。每声道以1152个采样值为一帧进行处理。首先,分析子带滤波采用正交镜像滤波器组,将20kHz左右带宽的信号划分成相等带宽的32个子带。然后对子带样值作MDCT以补偿子带滤波的不足,主要是为提高频率分辨率、消除由子带滤波引起的带间混迭。
同时采样值通过心理声学模型计算出各频带的掩蔽阈值。
失真控制循环和非归一化量化控制循环是量化编码循环过程,它通过量化减少各MDCT系数的精度,使编码比特数得以降低。不同系数采用不同的量化阶,人耳敏感的频率量化精度高,不敏感的频率量化精度低,量化误差则不会被人耳察觉。选择量化阶的依据就是心理声学模型计算出的掩蔽阈值。
最后将量化阶等信息以及霍夫曼码打包成比特流,解码用。
那么为什么掩蔽阈值能反映人耳的听觉特点呢?
人耳的听觉特性涉及生理声学和心理声学方面的问题。例如人耳对不同频率的声音感觉不同就是生理方面的问题,其中对2kHz-4kHz的声音最敏感,且低频较高频敏感。敏感程度具体体现为静态掩蔽阈值,如图2虚线所示,表示在安静的情况下,各种频率的声音刚好被听到的音量。与人的心理知觉有关的有掩蔽效应等。掩蔽效应指一个声音的听觉感受受到另一个声音影响的现象,分为时间掩蔽(前向、后向掩蔽)和频率掩蔽(同时掩蔽)。例如,当一个较强的声音停止后,要过一会儿才能听到另一个较弱的声音,这就是时间掩蔽效应。频率掩蔽是指一个声音对与其同时存在的临近频率的声音产生的影响,如图2实线所示。其中标志1的实线表示:当1kHz的掩蔽声音为60dB时,不同频率的声音刚好被听到的分贝值,可见越临近频率被掩蔽得越厉害,且低频更易掩蔽高频。
因此心理声学模型就先用FFT分析信号中包含的频率分量,将每个频率处受到其他所有频率分量掩蔽的值加起来,连线得到的曲线就是掩蔽阈值,是频率的函数。当某频率分量的能量处在曲线下方时,不能被人耳感觉到,则该频率分量可用零比特编码;另一方面,选择量化阶时若能保证量化噪声低于掩蔽曲线,也不被人耳察觉,所以掩蔽阈值越大的频率分量量化阶可以越大。因此用掩蔽阈值作为量化编码的依据,就能够保证压缩后的声音质量。由于声音信号随时间改变,因此每帧信号都要计算两次心理声学模型,其中要用到大量的实验测试数据,运算量之大是可想而知的。
2算法的简化和优化
2.1分析子带滤波器的快速算法
分析子带滤波器的输入是32个采样值,输出是32个频率等间隔的子带样值。它首先将32个采样值放人一个长度512的先进先出(FIFO)缓存;对该缓存加窗;然后512个缓存中每8个值累加,转换成64个中间值;最后通过(1)式将64个中间值变换成32个采样值:
寻找快速算法的关键就是这最后一步。将系数设为数组:
可以发现该数组具有如下的对称性:
所以合并系数相等或相反的项,(1)式变成:
可见用(5)式代替(1)式可以减少一半的乘法运算。又发现(5)式和标准的IDCT非常相似,可以将Lee提出的快速IDCT算法稍加改动推导(5)式的快速算法。所以又将32点变换分解成以下的两个16点变换:
直接计算(1)式需要64×32次乘法和63×32次加法,采用快速算法需16×16×2+16×2次乘法和15×16×2+16×2+31+15次加法,运算量为原来的1/4,而且数据表格所占用的存储空间也减少为原来的1/8左右。
2.2心理声学模型的简化
根据试验观察发现每帧的掩蔽阈值曲线大致相同,所以考虑采用静态声学心理模型,具体做法是:首先对某一具有代表性的音频帧,根据心理声学模型计算出掩蔽阈值曲线,在压缩其它音频源时,不再计算每帧的心理声学模型,而是认为每帧信号与上述被分析过的代表帧具有相同的掩蔽特性。这样,虽然不是很准确,但通常情况下,误差不会太大,不易被人耳察觉,省去心理声学模型所需的巨大运算量和存储空间。实践证明编码效果令人满意,而且对于要求不是很高的应用场合,可以认为掩蔽阈值是频率的常数函数,每个频带采用相同的量化阶,也听不出声音质量的明显下降。
2.3量化编码迭代循环的简化
量化编码迭代是两重循环过程,图3是外迭代循环流图,迭代的目的是在可用比特数的限制之内,以各频带的掩蔽值为依据,确定全局增益(体现了全局量化阶)和各频带的缩放因子(体现了局部量化阶)。内循环逐步增加量化器步长,即全局增益,直到MDCT系数量化后可被可用比特进行霍夫曼编码,即通过增加全局量化阶以降低编码比特数;外循环依据掩蔽阈值检测各缩放因子带的失真,若超过允许失真,则扩大该带的MDCT系数,即增大该带的缩放因子,以降低局部失真;最后一次迭代的结果作为最终的霍夫曼码。每一次循环都要用当前的量化阶量化并霍夫曼编码一次,运算量相当大。从外循环可以看出掩蔽阈值最终决定缩放因子,为了能省去外迭代循环,将代表帧的缩放因子作成表格,供每帧采用。
,基于定点DSP的MP3音频编码算法研究及实现