FAAC源码阅读(1)——AAC和音频编码的介绍

介绍
     AAC也叫高级音频编码,是基于MPEG-2的音频编码技术;MPEG-4出现后,AAC添加了一些新特性,重新集成到MPEG-4中

AAC的编码流程
1、滤波器组(Filter bank)
     主要完成信号的时域到频域的转换,从而得到频域的频谱系数
2、时域噪音修整(TNS)
     通过在频域上的预测,来修整时域上的量化噪音的分布。在一些特殊的语音和剧烈变换信号的量化上,TNS技术对音质的提高有很大贡献
3、预测
     对音频信号进行预测可以减少冗余信息
4、量化
     AAC的量化过程是使用两个巢状循环进行反复运算。通过对量化分享的良好控制,比特率能够有效降低
5、比特流格式(Bit—stream format)
     在AAC中,信息的传输要经过熵编码,AAC有一个弹性的比特流结构。
6、长时期预测(LTP)
     这是在MPEG-4中新增的,用来减少连续两个编码音频框之间的信号冗余
7、知觉噪音代替(PNS)

     这是在MPEG-4中新增的,当编码器发现类似噪音的信号时,不对其进行量化,而是忽略掉,当解码的时候在还原出来,这样提高了效率


音频中存在的冗余:
1、时域冗余。时域分布的非均匀性、样值间的相关性、信号周期之间的相关性、长时自相关性和静音。
2、频域冗余。长时功率谱密度的非均匀性和语音特有的短时功率谱密度。
3、听觉冗余。人耳的掩蔽效应、人耳对不同频段的声音的敏感程度不同、人耳对语音信号的相位变化不敏感。


感知音频编码器原理
    感知音频编码器利用心理声学模型,在采样率不变的情况下,根据信号的情况有选择的减小量化比特数,即人耳敏感的部分多分配量化比特数,使它的信号质量较好,失真较少,而对不敏感的部分少分配量化比特数,并通过掩蔽效应相应较小量化噪声的影响,这样可以在听觉质量不变的情况下,尽可能降低数据的传输速率。它利用心理声学模型,将人耳不能感知的声音成分去掉,只保留人耳感知的声音成分;另一方面,也不一味追求最小的量化噪声,只要量化噪声不被人耳感知即可。

频域编码器原理
    在介绍频域编码器之前先介绍时域编码器。时域编码方法是利用声音信号在时间域内幅度变换经PCM后形成的样本值,对不同的样本值实现二进制码代替,形成数码流。它结合声音幅度出现概率来表示选取量化比特数进行编码,在满足一定的量化噪声下压缩数据,还可以采取预测的方法来表示音频信号的全带宽,导致量化误差的频谱覆盖整个音频带宽。尽管时域编码可以压缩数据,但是压缩率太低。
    频域编码就是将时域中的声音信号进行频率变换,结合声音的相关性以及人的感知,选取量化比特数进行编码,它是基于人耳的心理声学模型特性对量化噪声进行处理的。根据任何周期信号都可以表示为振幅随时间的变化关系,也可以用振幅与相位的频率系数集来描述,我们使用傅立叶变换来建立时域和频域的对应关系,分析一系列的时间去取样值,就可以得到这段时间的频率成分。它包含下面两个部分:
    1、采用滤波和FFT变换,可在频域内将其能量较小的分量忽略,从而实现降低比特率
    2、利用人耳听觉的掩蔽效应,在满足一定量化噪声的前提下压缩数据。

数字音频编码
    数字音频编码以感知音频编码原理为基础,采用了两种频率编码器:子带编码器和变换编码器。
    1、子带编码器,采用若干子带,处理时间上相邻的取样值;
    2、变换编码器。处理频率上相邻的取样值。
    数字音频信号(即PCM信号)是基于时间取样的,在编码端,它通过分析滤波器组分成许多频带子带,通过分析每个子带取样的能量,依据心理声学模型来编码,而在变换编码中,输入实际的取样再变换到频域,根据心理声学模型对变换系数进行量化和编码,得到比较高的频率分辨率,然后组帧形成低比特速率的比特流输出。


子带编码器
    它的基本原理是用一组带通滤波器将输入信号分成若干个子带,再将这些带通信号经过频谱搬移到低频,形成一组基带信号,对他们分别采样,进行模/数变换。想要使传输速率最小,每个子带的采样频率应该是其带宽的两倍。采样后的信号经过量化,并用PCM等各种形式编码后,将各子带的编码数据合并成码流发送到信道上。注意子带的宽度可以是等宽的,也可以是不等宽的。
    音频信号虽然是一个非平稳的随机过程,但是由于发音的惯性,在短时间内可以认为它是一个平稳的信号。子带编码就是将一个短周期内的连续十几取样信号送入数字滤波器组中,滤波器组将信号分成多个子带(最多是32个),对每个子带分配不同的比特数进行独立编码(可以用心理声学模型来确定比特数)。
    子带编码器首先利用数字滤波器组将短时的音频信号分成32个子带,通过分析每个子带的能量来判断该子带是否包含可听信息,计算每个子带的平均电平值,用来计算当前子带以及相邻子带的掩蔽阈值,最后根据最小可听阈值推导出各个子带的最后掩蔽比。计算每个子带的峰值功率并与掩蔽阈值进行比较,如果子带不包含可听信息,或者子带中被其他强度大的声音掩蔽的声音信号,或者该子带被另一个子带完全掩蔽,那么就不会对这些子带进行编码。最后,必须给每个子带分配足够的位数来保证量化的噪声处于掩蔽阈值以下。在每一个子带的量化噪声低于掩蔽阈值的条件下,由信号掩蔽比(SMR,即信号最大值与掩蔽阈值之间的差值)决定分配给子带的比特位数。
    使用子带编码具有下面的优点:
    1、对信号进行分带可以去除信号之间的相关性。从而可以独立的进行量化编码
    2、由于音频和语音信号的频谱为非平坦的,通过对语音的不同子带分配不同的比特数,就可以控制各个子带相应的量化电平和量化误差,从而使编码速率与信号的信源统计分布实现更精准的匹配。对低频段使用较多的比特数来表示样值,而对高频段使用较少的比特数来表示。
    3、子带编码中各个子带内的量化噪声相互独立,从而避免了输入电平较低的子带信号被其他子带的量化噪声所淹没


变换编码
    变换编码技术与子带编码技术的不同之处在于,变换编码对一段音频数据进行“线性”的变换,对所获得的变换域参数进行量化、传输,而不是把信号分解为几个子频段。
变换编码对频域系数编码,时域取样变换到频域产生频谱系数,对频谱系数进行量化,来实现对音频数据的有效压缩。再变换编码中,时域窗口长度的选择需要考虑两个因素:一个是时间分辨率;另一个是频域分辨率。块的长度越长,频率的分辨率越高,但是损失了时间分辨率。为了解决时间分辨率低的问题,变换编码采用将时间上连续的数据块重叠50%来增加时间分辨率。
    自适应变换编码是对每个独立子带进行量化,但是子带内的系数都被量化到相同的位数。信号经过离散余弦便函变换到频率域,利用频谱系数计算每个临界频段的信号能量,以决定每个临界频段的掩蔽阈值,采用自适应量化和合成分析法进行编码,计算对信号所需要的比特数,如果位数超过了允许分配给这块数据的比特数,就取大一点的量化台阶,重新计算所需的比特数;如果在重建信号中外循环计算可能出现量化误差,而且如果误差超过了掩蔽模型所允许的范围,就适当减小这个子带的量化台阶。

因为子带编码的时间分辨率很好,但是频率分辨率不足;而变换编码的频率分辨率很好,但是时间分辨率很差,因此实际的编码将两者联合使用!


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值