实验目的
- 理解感知音频编码的基本思想
- 理解心理声学模型的实现过程
- 理解MPEG layer2音频编码器的整体框架
- 理解码率分配的实现思路
- 调试编码器,编码不同音频文件,选择一个音频帧并输出如下关键信息:
该帧分配的比特数
该帧的比例因子
该帧的比特分配结果
实验原理
子带编码
三个重要组成部分:
- 分析—综合滤波器组
- 比特分配机制
- 编码机制
不同子带运载不同数量的感知信息,不太重要的子带可以用较低码率下采样,且可以采用较粗糙的量化粗量化,运载最重要信息的子带用高质量编码。
MPEG layer2音频编码器的整体框架
感知音频编码
根据听觉特性,人在分辨声音时存在生理(能不能接收到)和心理(能不能感受到)上的感知极限。因此部分音频信号中的成分无法被听到,所以在音频编码压缩的过程中,针对不能被听到的部分可以不传送,而能被听到但不敏感的部分可以以较低质量传送,从而把有限的比特分配给较为敏感的信号,实现数据的压缩。
从MPEG layer2音频编码器框架中可以看出,整个系统由两个部分组成,分别是:滤波器组、块形成、量化器等组成的音频处理部分,负责根据比特分配实施对音频信号的子带编码;FFT变换、心理声学模型、动态比特分配、比例因子处理组成的比特分配部分,负责根据音频信号中的频率成分以及选定的心理声学模型计算每个子带的掩蔽阈值以及掩噪比;并根据该结果动态分配给相应子带。
其中,存在时域和频域分辨力的矛盾。由时域频域分辨力的关系可知,当时域分辨力较高时频域分辨率降低,反之亦然。为了克服这个矛盾,编码器的心理声学模型同时根据FFT结果和滤波器组输出的比例因子结果计算掩蔽阈值。子带分析滤波器组使信号具有高的时间分辨率,确保在短暂冲击信号情况下,编码的声音信号具有足够高的质量。同时信号通过1024点FFT运算具有高的频率分辨率,因为掩蔽阈值是从功率谱密度推出来的。
心理声学模型
人耳的听觉特性:
- 听觉系统中存在一个听觉阈值电平,低于这个电平的声音信号就听不到:听觉阈值的大小随声音频率的改变而改变;一个人是否听到声音取决于声音的频率,以及声音的幅度是否高于这种频率下的听觉阈值。
- 听觉掩蔽特性。即听觉阈值电平是自适应的,会随听到的不同频率声音而发生变化。
- 临界频带是指当某个纯音被以它为中心频率、且具有一定带宽的连续噪声所掩蔽时,如果该纯音刚好被听到时的功率等 于这一频带内的噪声功率,这个带宽为临界频带宽度。
通常认为从20Hz到16kHz有25个临界频带,单位为bark,1 Bark = 一个临界频带的宽度
人类听觉系统大致等效于在0Hz到20KHz频率范围内由25个重叠的带通滤波器组成的滤波器组,中心频率与信号频率相同的滤波器具有最大响应;中心频率偏离信号 频率较多的滤波器不会产生响应。
临界频带内掩蔽阈值的计算
计算思路:
根据Lutfi的研究结果,当两个信号重叠并落在一个临界频带中时,二者的掩蔽分量可以线性相加。
对于复杂音频信号可将其频谱分割成一系列离散段,每段就是一个掩蔽信号。各掩蔽音互不重叠,即以一个临界带为单位。各掩蔽音的声压级则通过将对应的临界频带上的短时功率谱密度线性相加得到。
MPEG-I心理声学模型1具体计算过程为:
- 将样本变换到频域,采用512 (Layer I) 或1024 (Layers II and III)样本窗口。
- 确定声压级别
- 考虑安静时阈值
根据“频率、临界频带率和绝对阈值”表。此表为多位科学家经多次心理声学实验所得。 - 将音频信号分解成“乐音(tones)” 和“非乐音/噪声” 部分
两种信号的掩蔽能力不同,根据音频频谱的局部功率最大值确定乐音成分,然后将本临界频带内的剩余频谱合在一起,组成一个代表噪声频率。 - 音调和非音调掩蔽成分的消除
利用标准中给出的绝对阈值消除被掩蔽成分;每个临界频带内,小于0.5Bark的距离中只保留最高功率的成分 - 单个掩蔽阈值的计算
音调成分和非音调成分单个掩蔽阈值根据标准中给出的算法求得。 - 全局掩蔽阈值的计算
- 每个子带的掩蔽阈值
- 选择出本子带中最小的阈值作为子带阈值。
- 计算每个子带信号掩蔽比
SMR = 信号能量 / 掩蔽阈值
NMR = SMR – SNR
SNR 由MPEG-I标准给定 (为量化水平的函数)
码率分配
循环进行比特分配,首先对最高NMR的子带分配比特,使获益最大的子带的量化级别增加一级,然后重新计算分配了更多比特子带的NMR。循环这个过程直到无剩余比特可用。
程序分析
数据帧的结构
第一层的一帧对应12个样值点,每12个样点进行一次比例因子计算。先定出12个样点中绝对值的最大值。查比例因子表中比这个最大值大的最小值作为比例因子。
每帧含384个样本数据。每帧由32个子带分别输出的12个样本值组成
48kHz采样,一帧长为32×12×20.83µs =8ms
第2层的一帧对应36个子带样值,是第1层的三倍。为了降低比例因子的传输码率, 采用了利用人耳时域掩蔽特性的编码策略。每帧中每个子带的三个比例因子被一起考虑,划分成特定的几种模式。根据这些模式,1个、2个或3个比例因子和比例因子选择信息(每子带2比特)一起被传送。
每帧包含1152个样本。低、中、高频段对比特分配不同,分别用4、3、2比特。比特流中增加了一个比特因子选择信息域,解码器根据这个域的信息可知道 是否需要以及如何共享比例因子。
MPEG音频层 1 的帧结构:
MPEG音频层 2 的帧结构:
32bit帧头格式:
- Sync:同步码,取值为 111111111111
- ID=1:MPEG
- Layer:00->reserved, 01->Layer 3, 10->Layer2, 11->Layer1
- Prot. bit:置位表示有 CRC校验
- Bitrate:码率索引,表示 15种固定的码率
- Frequency:取样频率
- Pad bit:填充指示位
- Priv. bit:应用特定
- Mode:通道模式
- Mode extesion:通道模式扩展,当通道模式为联合立体声时有效
程序框架
实验用的MPEG Layer2音频编码程序具体实现过程为
重要的结构体:
typedef struct
{
int version;
int lay;
int error_protection;
int dab_extension;
int dab_length;
int bitrate_index;
int sampling_frequency;
int padding;
int extension;
int mode;
int mode_ext;
int copyright;
int original;
int emphasis;
}
frame_header; //用于存放一个数据帧头的数据
typedef struct
{
frame_header *header; /* raw header information */
int actual_mode; /* when writing IS, may forget if 0 chs */
al_table *alloc; /* bit allocation table read in */
int tab_num; /* number of table as loaded */
int nch; /* num channels: 1 for mono, 2 for stereo */
int jsbound; /* first band of joint stereo coding */
int sblimit; /* total number of sub bands */
}
frame_info; //用于存放当前编码帧的相关信息
typedef struct
{
unsigned int steps;
unsigned int bits;
unsigned int group;
unsigned int quant;
}
sb_alloc, *alloc_ptr;
typedef sb_alloc al_table[SBLIMIT][16]; //存放比特分配信息
输出程序编码过程中的重要信息:
- int adb用于存放数据帧分配的比特数;
- static unsigned int scalar[2][3][32]用于存放2声道3个组每组12个样值的32个子带的比例因子;
- static unsigned int bit_alloc [2][32]用于存放每个声道32个子带的比特分配数;
实验结果
各输入音频文件及其第一个编码帧的相关信息为:
持续噪声:
Sample rate: 44.1 kHz
Target bitrate: 192 kbps
Available bit for this frame: 5008
Scalar factors:
– channel 0
---- group 0 scalar factors
----[ 12 20 22 23 23 24 23 25 28 26 30 29 28 26 29 29 30 27 29 30 27 30 28 31 28 29 31 31 29 33 0 0 ]
---- group 1 scalar factors
----[ 7 18 19 20 22 21 24 25 24 25 26 25 26 25 28 30 28 27 28 26 29 29 28 28 28 28 28 26 29 29 0 0 ]
---- group 2 scalar factors
----[ 7 17 17 20 24 24 22 23 26 22 25 24 28 25 28 27 27 27 26 27 29 27 28 27 29 29 28 28 28 29 0 0 ]
– channel 1
---- group 0 scalar factors
----[ 12 19 19 25 25 22 24 29 30 27 26 29 29 29 28 28 29 29 29 27 29 31 28 29 30 31 29 32 31 30 0 0 ]
---- group 1 scalar factors
----[ 7 16 19 21 20 24 22 24 25 25 24 27 27 25 28 29 29 26 29 28 28 27 28 29 28 29 28 29 28 29 0 0 ]
---- group 2 scalar factors
----[ 6 16 19 21 22 24 24 24 25 24 26 23 25 26 28 26 26 27 27 29 28 29 28 28 28 28 27 28 26 29 0 0 ]
Bit allocation
– channel 0 bit allocation
– [ 6 3 3 4 4 3 3 3 2 4 2 3 2 3 1 1 2 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 ]
– channel 1 bit allocation
– [ 6 4 3 4 4 3 3 3 2 3 3 3 2 2 1 1 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 ]
突发噪声:
Sample rate: 44.1 kHz
Target bitrate: 192 kbps
Available bit for this frame: 5008
Scalar factors:
– channel 0
---- group 0 scalar factors
----[ 54 54 54 53 57 52 54 54 54 54 56 53 54 53 55 53 54 54 54 56 54 57 53 56 52 55 52 53 54 56 0 0 ]
---- group 1 scalar factors
----[ 53 55 56 54 55 56 56 55 54 55 55 58 54 55 55 54 56 55 53 54 54 55 54 58 55 55 55 55 53 56 0 0 ]
---- group 2 scalar factors
----[ 52 53 54 57 55 53 53 56 54 55 55 57 54 56 54 55 54 56 56 56 56 56 54 55 53 53 56 56 52 54 0 0 ]
Bit allocation
– channel 0 bit allocation
– [ 6 6 6 9 8 9 9 8 8 8 7 7 6 6 6 6 5 4 4 2 1 0 0 0 0 0 0 0 0 0 0 0 ]
音乐:
Sample rate: 44.1 kHz
Target bitrate: 192 kbps
Available bit for this frame: 5008
Scalar factors:
– channel 0
---- group 0 scalar factors
----[ 31 39 39 43 42 45 43 44 45 44 47 44 47 44 46 44 47 45 46 45 44 47 44 47 44 47 44 46 45 48 0 0 ]
---- group 1 scalar factors
----[ 31 49 51 51 50 51 50 52 50 50 51 49 53 52 50 51 52 51 53 52 50 50 52 51 53 54 51 51 51 50 0 0 ]
---- group 2 scalar factors
----[ 31 48 49 50 50 49 48 50 51 52 51 52 51 51 50 49 51 51 50 51 52 50 52 49 53 51 52 51 51 51 0 0 ]
– channel 1
---- group 0 scalar factors
----[ 31 39 40 43 43 46 44 47 45 47 46 48 45 49 46 49 47 51 48 48 48 50 49 51 48 49 50 49 50 49 0 0 ]
---- group 1 scalar factors
----[ 31 49 50 48 50 53 48 48 51 51 50 49 50 51 51 50 50 48 50 52 51 50 50 49 49 50 51 52 52 51 0 0 ]
---- group 2 scalar factors
----[ 31 47 46 49 49 47 49 50 48 49 50 49 50 48 50 52 52 51 52 51 51 51 50 49 51 49 51 49 52 50 0 0 ]
Bit allocation
– channel 0 bit allocation
– [ 7 4 4 6 6 5 5 5 4 4 3 4 2 3 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
– channel 1 bit allocation
– [ 7 4 4 6 6 5 5 3 4 3 3 2 3 1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
带有噪声的音乐:
Sample rate: 44.1 kHz
Target bitrate: 192 kbps
Available bit for this frame: 5008
Scalar factors:
– channel 0
---- group 0 scalar factors
----[ 15 18 24 22 22 22 23 25 26 26 28 26 24 28 29 30 29 30 33 30 27 27 30 27 29 28 28 28 27 29 0 0 ]
---- group 1 scalar factors
----[ 10 17 20 22 24 23 24 25 25 25 28 25 25 27 25 28 28 28 29 26 28 28 30 27 28 29 29 30 30 28 0 0 ]
---- group 2 scalar factors
----[ 8 17 18 20 23 22 24 24 26 26 25 24 25 26 26 28 25 28 28 28 26 27 28 29 28 29 29 30 29 28 0 0 ]
– channel 1
---- group 0 scalar factors
----[ 15 18 22 24 20 23 25 27 24 24 28 27 28 25 29 28 29 28 29 29 28 29 28 27 30 29 32 31 30 30 0 0 ]
---- group 1 scalar factors
----[ 11 17 19 22 23 23 24 25 25 25 24 26 25 26 26 25 28 26 29 30 28 29 27 29 29 27 29 29 29 28 0 0 ]
---- group 2 scalar factors
----[ 8 16 20 20 21 25 23 25 27 24 24 26 24 26 25 27 28 29 27 27 27 26 28 28 27 29 29 30 29 28 0 0 ]
Bit allocation
– channel 0 bit allocation
– [ 5 3 3 4 4 3 3 3 2 3 3 3 2 2 2 1 2 2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 ]
– channel 1 bit allocation
– [ 5 3 3 4 4 3 3 3 3 3 3 2 3 2 2 1 1 2 1 1 1 1 0 0 0 0 0 0 0 0 0 0 ]
从上述结果可以看出由于音乐大部分频率分量都在相对低频的部分,所以较多高频部分的子带未分配比特。而噪音信号包含较多的高频成分,所以相对更多高频子带分配了比特。