数据压缩试验六:MPEG 音频编码

MPEG 音频编码实验

MPEG-1 Audio LayerII 编码原理

基本流程框图

数据压缩试验六:MPEG 音频编码

多相滤波器组

作用:将 PCM 码流输入样本变换到 32 个子带的频域信号

工作框图如下:
数据压缩试验六:MPEG 音频编码

  1. 首先对窗口中的 512 个样本 X[i]X[i] 进行计算:Z[i]=C[i]X[i]Z[i]=C[i]・X[i],其中 C[i]C[i] 为标准中规定的分析窗口的 512 个系数,i = 1 … 512
  2. 将样本分为 64 个分组,并计算 64 个 YkY_k 的值:Y[k]=j=07Z[k+64j]Y[k] = \sum\limits_{j=0}^{7}Z[k+64j]
  3. 计算 32 个子带样本:S[i]=k=063j=07Y[k]M[i][k]S[i] = \sum\limits_{k=0}^{63}\sum\limits_{j=0}^{7}Y[k]・M[i][k]

其中分析矩阵 M[i][k]=cos((2i+1)(k16)π64)M[i][k] = cos(\frac{(2i+1)(k-16)\pi}{64})
共需要进行 512+32×64=2560512+ 32\times64=2560 次乘法
每个子带的带宽为 π32T\frac{\pi}{32T},中心为 π64T\frac{\pi}{64T} 的奇数倍

· 上面提到的多项滤波器组的计算公式 S[i]S[i] 可以由卷积公式代替:St[i]=n=0511X[nt]hi[n]S_t[i] = \sum\limits_{n=0}^{511}X[n-t]h_i[n]
· 其中 hi[n]=h[n]×cos((2i+1)(n16)π64)h_i[n]=h[n]\times cos(\frac{(2i+1)(n-16)\pi}{64})
· 当 n64\frac{n}{64} 的整数部分为奇数时,令 h[n]=C[n]h[n] = -C[n] ,反之则有 h[n]=C[n]h[n] = C[n]
· 每个子带有自己的带通滤波器脉冲响应,虽然直观但效率不高(16384 次乘法和 16352 次加法)

缺点:

  1. 等带宽的滤波器组与人类听觉系统的临界频带不对应,即在低频区域单个子带会覆盖多个临界频带,而在高频区域则会有多个自带对应一个临界频带
    数据压缩试验六:MPEG 音频编码
  2. 滤波器组与其逆过程不是无失真的,尽管滤波器组引入的误差很小且听不到
  3. 子带间频率有混叠:滤波后的相邻子带有频率混叠现象,一个子带中的信号可以影响相邻子带的输出
    数据压缩试验六:MPEG 音频编码

MPEG-I 心理声学模型

基本内容

➢ 听觉系统中存在一个听觉阈值电平,低于这个电平的声音信号就听不到

听觉阈值的大小随声音频率的改变而改变。
一个人是否听到声音取决于声音的频率,以及声音的幅度是否高于这种频率下的听觉阈

➢ 听觉掩蔽特性,即听觉阈值电平是自适应的,会随听到的不同频率声音而发生变化

➢ 通过子带分析滤波器组使信号具有高的时间分辨率, 确保在短暂冲击信号情况下,编码的声音信号具有足够高的质量。又可以通过FFT运算使信号具有高的频率分辨率, 因为掩蔽阈值是从功率谱密度推出来的。

➢ 在低频子带中,为了保护音调和共振峰的结构,就要求用较小的量化阶、较多的量化级数,即分配较多的位数来表示样本值。而话音中的摩擦音和类似噪声的声音,通常出现在高频子带中,对它分配较少的位数

因而心理声学模型的作用即计算信号中听觉不可感知的部分

MPEG-I 标准定义了定义了两个模型

  1. 心理声学模型 1
    · 计算复杂度低
    · 对假设用户听不到的部分压缩太严重
  2. 心理声学模型 2
    · 提供了适合 Layer III 编码的更多特征

但实际实现的模型复杂度取决于所需要的压缩因子:如大的压缩因子不重要,则可以完全不用心理声学模型,此时按位分配算法不使用 SMR(即 Signal Mask Ratio),而是使用 SNR

计算过程

  1. 将样本变换到频域:32 个等分的自带信号并不能精确地反映人耳的听觉特性,于是引入了 FFT 补偿频率分辨率不足的问题

    • 采用 Hann 加权和 DFT
      hann 加权减少频域中的边界效应
      此变换不同于多相滤波器组,因为模型需要更精细的频率分辨率,而且计算掩蔽阈值也需要每个频率的幅值
    • 模型 I:采用 512 (Layer I) 或 1024 (Layers II and III) 样本窗口
      Layer I:每帧384个样本点,512个样本点足够覆盖
      Layer II 和Layer III:每帧1152个样本点,每帧两次计算,模型 I 选择两个信号掩蔽比(SMR)中较小的一个
  2. 确定声压级别

    • 子带 n 中的声压级 Lsb=MAX[X(k),20×log10(scfmax(n)×32768)10]dBL_{sb} = MAX[X(k),20\times log_{10}(scf_{max}(n)\times 32768)-10]dB
    • X(k)X(k) 是在子带 n 中的频谱线声压级别,scfmaxscf_{max} 是在一帧中子带 n 的三个缩放因子中最大的一个
  3. 考虑安静时阈值,即绝对阈值
    在标准中有根据输入PCM信号的采样率编制的“频率、临界频带率和绝对阈值”表。此表为多位科学家经多次心理声学实验所得。

  4. 将音频信号分解成“乐音(tones)”和非乐音/噪声“部分:因为两种信号的掩蔽能力不同

    • 同一临界频带内造神如果掩蔽乐音与乐音掩蔽噪声的情况如下
      数据压缩试验六:MPEG 音频编码
    • 模型 I:根据音频频谱的局部功率最大值确定乐音成分
      • 局部峰值为乐音
      • 将本临界频带内的剩余频谱合在一起,组成一个代表噪声频率(无调成份)
      • 区分有调(乐音)跟无调(非乐音)的方法
        • 标明局部最大。如果 x(k)x(k)比相邻的两个谱线都大,则 x(k)x(k) 为局部最大值
        • 列出有调成份,计算声压级。如果x(k)x(k+j)7dBx(k)-x(k+j)≥7dB,则 x(k)x(k) 列为有调成份。jj 随谱线的位置不同而不同
        • 列出无调成分,计算功率。在每个临界频带内将所有余留谱线的功率加起来形成临界频带内无调成分的声压级。并列出以下参数:最接近临界频带几何平均值的谱线标记 k,声压级以及无调指示
  5. 音调和非音调掩蔽成分的消除
    利用标准中给出的绝对阈值消除被掩蔽成分;考虑在每个临界频带内,小于 0.5Bark 的距离中只保留最高功率的成分

  6. 单个掩蔽阈值的计算
    音调成分和非音调成分单个掩蔽阈值根据标准中给出的算法求得

  7. 全局掩蔽阈值的计算:某一频率点 i 的总掩蔽阈值可以通过该点的绝对掩蔽阈值与单独掩蔽阈值相加来获得LTg(i)=10lg(10LTq(i)10+j=1m10LTtm(z(j),z(i))10+j=1m10LTnm(z(j),z(i))10)LTg(i) = 10lg(10^{\frac{LTq(i)}{10}}+\sum\limits_{j=1}^{m}10^{\frac{LTtm(z(j),z(i))}{10}}+\sum\limits_{j=1}^{m}10^{\frac{LTnm(z(j),z(i))}{10}})

    • LTq(I)LTq(I) 是频率点 I 的绝对掩蔽阈值
    • LTtm(z(j),z(i))LTtm(z(j),z(i)) 是第 j 个音调掩蔽成分对频率点 i 的掩蔽阈值,对频率点 i 有掩蔽效应的音调掩蔽成分共 m 个
    • LTnm(z(j),z(i))LTnm(z(j),z(i)) 是第 j 个非音调掩蔽成分对频率点 i 的掩蔽阈值,对频率点 i 有掩蔽效应的非音调掩蔽成分共 m 个
    • 还要考虑别的临界频带的影响:一个掩蔽信号会对其它频带上的信号产生掩蔽效应,这种掩蔽效应称为掩蔽扩散。计算方法如下,其中 x 的单位为 BarkSFdB(x)=15.81+7.5(x+0.474)17.51+(x+0.474)2dBSF_{dB}(x) = 15.81 +7.5(x+0.474)-17.5\sqrt {1+(x+0.474)^2}dB
  8. 每个子带的掩蔽阈值

    • 选择出本子带中最小的阈值作为子带阈值
    • 对高频不正确:高频区的临界频带很宽,可能跨越多个子带,从而导致模型 I 将临界带宽内所有的非音调部分集中为一个代表频率,当一个子带在很宽的频带内却远离代表频率时,无法得到准确的非音调掩蔽值。
    • 计算量低。
  9. 计算每个子带信号掩蔽比(Signal Mask Ratio,SMR)SMR=SMR = \frac{信号能量}{掩蔽阈值}

Layer I 编码 - 码率分配

数据压缩试验六:MPEG 音频编码

作用

根据心理声学模型的结果为每个子带信号分配比特数

在调整到固定码率之前

要先确定可用于样值编码的有效比特数,这个数值取决于比例因子、比例因子选择信息、比特分配信息以及辅助数据所需比特数

比特分配的过程
  1. 对每个子带计算掩蔽-噪声比 MNR = SNR - SMR
  2. 算法实现:循环,直到没有比特可用
    • 计算 NMR(Noise Mask Ratio,表示波形误差与感知测量之间的误差),其中 SNR 由 MPEG-I 标准给定,为量化水平的函数
    • 对最高 NMR 的子带分配比特,是获益最大的子带的量化级别增加一级
    • 重新计算分配了更多比特子带的 NMR
    • 最终实现整帧和每个子带的总噪声-掩蔽比最小
      数据压缩试验六:MPEG 音频编码
装帧:产生 MPEG-I 兼容的比特流

数据压缩试验六:MPEG 音频编码
其帧头格式 Header 如下:
数据压缩试验六:MPEG 音频编码

Layer II 编码

与 Layer I 类似,但对 Layer I 有增强

  1. 帧结构
    • 3组/帧 × 12 个样本/子带 × 32 个子带/帧 = 1152 个样本/帧
    • 每个样本的 overhead 更少
  2. 缩放因子(比例因子)一般从低频子带到高频子带出现连续下降,每个子带的 3 个组尽可能共用缩放因子
    • Layer I:1 个 / 12 个样本
    • Layer II:1 个/(24/36) 个样本
    • 1/2/3个缩放因子和缩放因子选择信息(scale factor selection information, SCFSI) 一起传送(每子带2比特)
      • 如果缩放因子和下一个只有很小的差别,就只传送大的一个,这种情况对于稳态信号经常出现
      • 如果要给瞬态信号编码,则要在瞬态的前、后沿传送两个或所有三个比例因子
  3. 量化
    • Layer I:每个子带从相同的量化集合中选择,每个子带取共 14 个量化器中的一个
    • Layer II:根据采样和码率量化,不同子带可以从不同的量化器集合中选择,某些(高频)子带的比特数可能为 0

    对量化级别在 3、5、9 级时,采用“颗粒”优化。颗粒 = 3 个样本,根据颗粒选择量化水平

  4. 装帧
    数据压缩试验六:MPEG 音频编码

实验内容

理解程序设计的整体框架

理解感知音频编码的设计思想

理解心理声学模型的实现过程

理解码率分配的实现思路

输出音频的采样率和目标码率

选择三个不同特性的音频文件

输出某个数据帧的信息