FAAC源码阅读(4)——MPEG的基本原理

MPEG音频标准有下面一些:
1、MPEG-1:
    (1)MPEG-1 layer 1。用于数字小型盒式磁带
    (2)MPEG-1 layer 2。在layer 1的基础上加入了更高的精度,用于数字音频广播、CD、VCD等
    (3)MPEG-1 layer 3。就是大家熟知的mp3,它加入了非线性量化、哈夫曼编码以及其他的先进技术。
2、MPEG-2
    需要关注的是MPEG-2AAC。它采用了与mp3同样的基本编码模式,仅在一些细节上增加了新的编码工具。
3、MPEG-4
4、MPEG-7
5、MPEG-21


MPEG-1 layer 1的编码原理
    因为MPEG-1 layer 1编码是其他编码方法的基础,所以先介绍它,再介绍mp3和AAC标准。
    下面是它的编码框架图:

    

    它采用了子带编码方法。输入音频PCM信号经过子带滤波器组按照频率等间隔分成32个子带,以子带为单位进行计算,使得量化噪声限制在各子带中,同时为了增加频率分辨率和满足后面的心理声学模型的计算,信号还必须通过512点的FFT,完成时域到频域的变换,计算信号掩蔽比,为各子带的比特分配打好基础,比特分配模块根据信号掩蔽比控制各子带的量化参数,使得满足比特率条件下感知失真最小,最后将编码的子带阳电和边信息按照一定的格式打包形成比特流输出。
    为了方便理解,可以从后往前看:编码前的一步是量化,MPEG-1 layer 1采用的是线性量化,要量化就必须有量化比特数,比特数的分配是靠心理声学模型提供的掩蔽比来决定的;掩蔽比是根据比例因子和信号的频谱功率来计算的,比例因子是由时域状态下块数据(即一小段时间内的信号数据)来决定的,信号的频谱功率的计算需要依赖FFT。
    下面按照模块来分析:
    1、子带分析滤波器。采用的是多相滤波器组,他将输入的数字音频信号均匀地分成32个子带,各子带的量化噪声相互独立,都限制在自己的子带内。
    2、组块。如果对子带信号直接量化,那么量化噪声电平由量化步长决定,当输入信号电平低时,噪声就会显现出来,当输入信号电平高时,量化又过于缓慢,这对于提高信噪比没有大的帮助。考虑到人耳的时域掩蔽效应,把每个子带内连续的12个采样值看作一个块,对这一整块进行计算;在每一个块中,由于掩蔽效应的作用,在后面的比例因子的作用下,可以把量化噪声限制到有用信号之下,起到压缩的目的。
    3、确定比例因子。比例因子就是一个乘法器。为了根据掩蔽阈值来对量化噪声整形,每个子带中都引入了比例因子,如果一个给定的子带中的量化噪声超过了心理声学模型所提供的掩蔽阈值,那么该子带的比例因子江北调整以减少量化噪声。它的作用是充分利用量化器的动态范围,通过与比特分配相结合,可以相对降低量化噪声电平。在MPEG-1中,每个子带根据所分配的不同比特数来独立进行编码,根据心理声学的时域掩蔽特性,对每个子带的12个连续采样点进行一次比特分配过程。选出12个样点中绝对值最大的那个,与比例因子表中的值进行比较,大于这个值的一系列值中的最小值定位为比例因子,为后面的线性量化做准备,此外比例因子的索引也需要传送给解码器。
    4、FFT。PCM信号不仅要进入子带分析滤波器组,还需要被送入FFT运算器。这样,既可以通过子带分析滤波器组使信号具有高的时间分辨率,确保在短暂冲击声音信号情况下,编码的声音信号具有足够高的质量,又可以使信号通过FFT运算具有搞的频率分辨率,实现尽可能低的码率,并且掩蔽阈值是从功率密度谱估计推导出来的。对于没帧384(12x32=384)个PCM输入样点,需要俩用心理声学模型计算信号掩蔽比来进行新的比特分配,因此FFT移动长度为384个样点。但是,由于子带分析滤波器具有256个样点的延迟,为了保证用于比特分析的信号掩蔽比和相应子带阳电在时间上相符合,进入FFT的PCM样点必须延迟256个样点,进行FFT分析的帧长为512点,且将经过延迟处理的384个样点放在中间位置,并在左右扩展64(384+64+64=512)个相邻样点构成一个FFT帧。
    5、心理声学模型。有两种模型:模型1用于layer 1和layer 2,模型2用于layer 3。两个模型都有下面几个步骤:
        (1)进行时域到频域的映射。采用512点或者1024点的FFT。
        (2)确定最大声压级。在每个子带内根据比例因子和频谱数据进行计算。
        (3)确定安静阈值。安静阈值也叫绝对阈值,也是人民在安静环境下刚能听到的声音,形成了最低掩蔽边界。
        (4)识别音调和非音调成分。由于信号的音调和非音调成分的掩蔽阈值不同,因此需要分开处理:
            ①标明局部最大
            ②列出有调成分和计算声压级
            ③列出无调成分,计算功率
        (5)掩蔽器抽取。不是所有的有调和无调成分都用于掩蔽阈值的计算,只有在某一个范围内时,掩蔽阈值计算才需要考虑有调或者无调成分,因此所有不满足条件的有调和无调都必须移去。另外在剩下的有调成分中还需要判断任意两个有调成分之间的剧烈是否小于0.5Bark,如果有那么移去这两个有调成分中较小的一个。
        (6)计算掩蔽阈值。对一组样点进行计算。
        (7)计算总掩蔽阈值。第i个频率样点的总掩蔽阈值等于所有有调和无调成分在该样点上单独掩蔽阈值的功率和加上安静阈值功率。
        (8)确定最小掩蔽阈值。
        (9)计算信号掩蔽比(SMR)。子带信号中的声压级和最小掩蔽阈值之间的差异决定了每个子带的SMR值。
    6、比特分配。为了同时满足码率和掩蔽特性的要求,比特分配器应该同时考虑来自子带分析滤波器组的输出样值和来自心理声学模型的信号掩蔽比,来决定分配给各个子带信号的量化比特数,使量化噪声低于掩蔽阈值,以便于在规定的比特率下尽可能满足信息声学要求。分配过程是一个迭代的过程。比特分配原则是一帧的总掩蔽噪声最大,其限制是所用比特不超过一帧许可的比特数。
    7、线性量化编码。各个子带样点先归一化,将其除以比例因子得到X,然后按照下面步骤进行量化:
        (1)计算AX+B,其中A、B值从量化系数表中查询
        (2)取该值最有效的N位,N表示用于该样点的编码比特数
        (3)最高位取反,以避免出现全1的代码


AAC的编码原理
先看他的编码框架,可以看基本流程和MPEG-1 layer是相似的,但是在其基础上增加很多新的编码工具,例如增益控制、瞬时噪声整形TNS、声强/耦合、预测、M/S编码、无噪声编码等

AAC编码的基本原理:
    先对输入的PCM信号分段,划分为每帧每声道1024个样本,再同前一帧的1024个样本组合得到2048个样本,

加窗后的2048个样本通过改进的离散余弦变换(MDCT),输出1024个频谱分量。再将这些频谱分量依据不同的采样率和变换块类型划分成数个不同带宽的比例因子频带,

比例因子频带的划分尽可能地拟合人耳的临界频带。
    心理声学模型与MDCT并行工作,工作内容和MPEG-1 layer 1中的类似;在前回声抑制方面,除了利用信号自适应的长短块切换和心理声学模型进行前回声控制外,

AAC还使用了一种新的瞬时噪声整形技术(TNS),它主要利用了时域和频域信号的对偶性。
    下面按照模块来分析它们的功能:
    1、心理声学模型(即听觉系统感知模型)
        AAC采用的是模型2,在模型1中,并非所有的谱线都用于掩蔽阈值的计算,

但是在模型2中,所有的的谱线都参与了掩蔽阈值的计算过程,因此计算出来的掩蔽阈值更加准确。

心理声学模型在编码的时候,支队人耳可以听到的部分进行编码和传输,对人耳听不到的部分不编码。

心理声学模型主要利用了下面的声学原理:最小掩蔽阈值、临界子带频率分析、频域掩蔽、时域掩蔽和感知熵。

心理声学原理把整个信号频带按照人耳的听觉特性划分出临界子带,然后计算出各临界子带的信噪比,

并计算出各临界子带的最小掩蔽阈值和感知熵,从而计算出掩蔽比,根据掩蔽比对,每个频带进行比特分配

,掩蔽比的值大就分配多一点比特数,反之则少。
    2、增益控制(Gain control)
        增益控制模块用在可分级采样频率框架中,他的主要作用是对输入信号进行增益控制,

将信号做某个程度的衰减,降低其峰值大小,以减少前回声的发生。它由多相正交滤波器PQF、

增益检测器和增益修正器组成。PQF把输入信号分离到4个相等带宽的频带中,除了最低频带不做增益控制外,

其余频带利用增益检测或增益修改使能量控制或衰减,因为它能将声音信号做某种程度上的控制与衰减,使原来信号的能力范围变小

。在MDCT之前,可以将信号看作较平稳的信号,可以降低前回声发生的机会。增益检测器将产生增益控制数据,

包括需要进行调节的频段数、需要调节长短的数量、表示每段中增益调节位置和级别的索引;增益修正器对每个PQF频段的信号加窗,

利用增益控制函数对这些信号进行增益控制。也就是说,在经过上述增益控制后,必须将其衰减变化得能力转换成增益控制参数,

最后再将此参数传至解码器端。完成增益控制后,对应每个PQF子带的MDCT进行计算,

器窗口长度是初始MDCT的1/4.解码器端也有增益控制模块,通过忽略PQF的高子带信号获得低采样率输出信号。
    3、滤波器组
        滤波器组的首要任务是把声音取样划分为段,利用时域滤波器改变这些分段的数据,使分段之间的转换更平滑

。它把输入信号从时域变换到频域,这个模块采用了改进离散余弦变换MDCT(MDCT在理论上可以完全消除混叠)。

AAC根据稳态的复杂声音信号与瞬时信号之间的不同,动态地区分出长窗(2048个取样)与短窗(256个取样)。

长窗的频率分辨率高,编码效率高,但是长窗使时域分辨率下降,产生严重的前回声。

前回声的产生原因是由于存在冲击信号或者类似的时域时间。使用短窗可以有效的抑制前回声。所有的块相互重叠50%。
    4、瞬时噪声整形(TNS)
        瞬时噪声整形是在一个滤波器里,对量化噪声强化控制,使信号处于稳态与瞬态之间的适当位置。

TNS可以使较多信号描述非瞬态的部分,将量化噪声移至瞬态信号,由于瞬态信号出现的时间极短,

加上掩蔽效应使噪声听不见,这样做可以减小稳态信号的量化噪声。TNS可以用于整个音频范围,

也可以用于某一段音频范围。
    5、量化立体声编码(即声强/耦合模块)
        联合立体声编码是一种空间编码技术,其目的是去掉控件的冗余信息。

AAC包含了两种空间编码技术:M/S编码(Middle/Side Encoding)和声强/耦合(Intensity/Coupling)。

M/S编码使用矩阵运算,因此把M/S编码称为矩阵立体声编码。由于左右声带具有相关性,

M/S编码不传送左右声道信号,而是使用标准化的“和”信号与“差”信号,前者用于中央M(Middle)声道,

后者用于边S(Side)声道,来代替原来的左、右声道,因此M/S编码也叫做“和/差编码”。编码时,

不是每个频带都需要M/S编码,只是左右声道相关性较强的子带采用M/S编码。

声强/耦合编码探讨的基本问题是声道间的不相关性。人耳听觉系统在听4kHz以上的信号时,

双儿的定位对于左右声道的强度差比较敏感,而对相位差不敏感,声强/耦合利用这一原理,

在某个频带以上的各个子带使用左声道代表两个声道的联合强度,右声道的谱线为0,

不再参与量化和编码,做法是:将左右声道之频谱值相加,再乘上一个调整因子,最后将新的频谱系数送出。
    6、预测
        在信号较平稳的情况下,利用时域预测可进一步减小信号的冗余度,

在AAC编码器中预测是利用前面两帧的频谱来预测当前帧的频谱,再求预测的残差,然后对残差进行编码。

具体做法:
        (1)使用前两帧的重建频谱信号预测当前帧的频谱
        (2)将当前频谱与预测频谱相减得到残差信号
        (3)对残差信号量化
        (4)对残差信号反量化,利用预测残差和预测值重建当前频谱信号
        (5)更新预测器
    7、量化
        上述几个模块都可以达到数据压缩的目的,但是主要压缩的工作是在量化与编码阶段完成的,

心理声学模型和量化模块是编码器中最重要的两个模块。AAC根据心理声学模型得到所需的量化频谱数据。

在量化的过程中,必须决定最终量化噪声电平大小与位置。此外,所用的比特总理必须在指定的数据率里。

为了提高编码增益,凡是频谱系数为0的均不在传输之列。量化模块使用了非均匀量化器。
    8、无噪声编码
        无噪声动态范围压缩应用在哈夫曼编码之前。在量化系数矩阵前可以放置正负1作为基值偏差,标志频率位置,

仅应用于有足够的存储空间。此编码最多有4种系数输入。处理完成之后就进行哈夫曼编码。


MPEG-4 AAC

    编码框架图

    
    与MPEG-2 AAC相比,MPEG-4 AAC多了LTP和PNS两个功能模块,具体功能如下:
    1、LTP。
        用来减少连续两个帧之间的信号冗余,对于处理低码率的语音非常有效,LTP利用本帧信号与前一帧信号之间的时间冗余,
前一帧信号的频域参数经过反响TNS滤波器变换到时域,并与当前信号相比得到最精确的预测系数,以推导出预测信号,
然后预测信号的当前信号的频域参数经过TNS滤波器,取两种的差值得到残差信号。可以使用一个频率选择开关对每一频带
确定采用原始信号还是残差信号,LTP是一个前向自适应预测器。
    2、PNS。
        感知噪声替换,其作用是降低比特率,在AAC已有的比特率上进一步最佳化,使在量化时完全放弃量化噪声类型的频率访问成为可能。
在这个范围中,用在解码器中产生一个功率相同的噪声信号代替。当编码器反响类似噪声的信号时,并不对其进量化,而是做个标记就
忽略过去,解码时再还原出来,这样提高了效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值