一、实验原理
1. MPEG音频编码实现框架
2、各模块作用:
- 心理声学模型:依据人耳听觉阈值和听觉掩蔽特性建立,分析听阈曲线,保证满足人耳听觉感受的前提下,减少码率。
- 动态比特分配:根据目标码率和心理声学模型分析的结果,为子带分配最合理的量化比特数,使整帧和每个子带的噪掩比NMR最小的算法。
- 滤波器组:划分32个子带,每个子带对应一个频段,每个子带含有12个样点(MPEG-2为12*3=36个样点)。由于这些样点之间的间隔的时间较短,在取值上不会发生太大的变化,便于降低量化比特数。
- 比例因子提取、选择:每个子带的12个样点为一个数据块,则一个子带含有3个数据块,将这三个数据块的比例因子进行提取并比较。如果3个比例因子的相差不大,则可以使用统一的量化比特数;如果3个比例因子相差较大,则根据比例因子选择信息,对3个数据块分别进行不同比特数的量化。
- 线性量化器:根据动态比特分配给出的量化比特数,对子带的数据进行线性量化。
- 颗粒形成:将量化后的数据形成传输的数据流。
二、MPEG音频编码的代码实现
三、实验结果及分析
========== 基本信息 ==========
输入文件:music.wav
输出文件:music1.mp2
采样频率:44.1 kHz
输出文件码率:192 kbps
encode_init: using tablenum 1 with sblimit 30
声道数:2
目前观测第 9 帧
本帧比特预算:5016 bits
比例因子如下:
------ 声道1 ------
子带[ 1]: 9 8 9
子带[ 2]: 10 11 9
子带[ 3]: 9 12 7
子带[ 4]: 11 9 7
子带[ 5]: 9 11 11
子带[ 6]: 12 9 10
子带[ 7]: 9 10 9
子带[ 8]: 9 8 8
子带[ 9]: 9 11 9
子带[10]: 8 9 8
子带[11]: 11 9 9
子带[12]: 8 9 10
子带[13]: 10 10 9
子带[14]: 8 10 10
子带[15]: 9 11 8
子带[16]: 10 9 9
子带[17]: 8 9 11
子带[18]: 10 9 10
子带[19]: 11 10 9
子带[20]: 8 10 9
子带[21]: 9 7 10
子带[22]: 9 10 12
子带[23]: 9 10 10
子带[24]: 8 10 10
子带[25]: 10 8 12
子带[26]: 8 10 8
子带[27]: 11 9 12
子带[28]: 9 9 11
子带[29]: 9 10 11
子带[30]: 10 9 8
------ 声道2 ------
子带[ 1]: 9 10 10
子带[ 2]: 9 9 8
子带[ 3]: 8 10 9
子带[ 4]: 10 9 8
子带[ 5]: 9 10 10
子带[ 6]: 10 9 10
子带[ 7]: 12 8 10
子带[ 8]: 9 9 8
子带[ 9]: 8 9 8
子带[10]: 10 9 11
子带[11]: 10 9 11
子带[12]: 11 11 8
子带[13]: 9 11 10
子带[14]: 10 11 9
子带[15]: 11 11 8
子带[16]: 11 11 10
子带[17]: 9 8 10
子带[18]: 11 11 11
子带[19]: 11 10 9
子带[20]: 11 9 9
子带[21]: 9 8 11
子带[22]: 9 9 10
子带[23]: 9 12 9
子带[24]: 9 11 9
子带[25]: 10 9 9
子带[26]: 12 8 10
子带[27]: 9 9 12
子带[28]: 9 9 11
子带[29]: 11 10 8
子带[30]: 11 11 9
比特分配表如下:
------ 声道1 ------
子带[1]: 5
子带[2]: 4
子带[3]: 3
子带[4]: 5
子带[5]: 6
子带[6]: 4
子带[7]: 4
子带[8]: 3
子带[9]: 4
子带[10]: 3
子带[11]: 3
子带[12]: 3
子带[13]: 3
子带[14]: 3
子带[15]: 3
子带[16]: 2
子带[17]: 2
子带[18]: 3
子带[19]: 3
子带[20]: 1
子带[21]: 1
子带[22]: 1
子带[23]: 2
子带[24]: 2
子带[25]: 1
子带[26]: 1
子带[27]: 1
子带[28]: 1
子带[29]: 1
子带[30]: 1
------ 声道2 ------
子带[1]: 6
子带[2]: 3
子带[3]: 4
子带[4]: 4
子带[5]: 4
子带[6]: 3
子带[7]: 4
子带[8]: 4
子带[9]: 4
子带[10]: 3
子带[11]: 3
子带[12]: 3
子带[13]: 3
子带[14]: 3
子带[15]: 3
子带[16]: 2
子带[17]: 2
子带[18]: 3
子带[19]: 3
子带[20]: 1
子带[21]: 1
子带[22]: 1
子带[23]: 2
子带[24]: 2
子带[25]: 1
子带[26]: 1
子带[27]: 1
子带[28]: 1
子带[29]: 1
子带[30]: 1
Hit end of audio data
Avg slots/frame = 626.938; b/smp = 4.35; bitrate = 192.000 kbps
Done
total time is 1
========== 基本信息 ==========
输入文件:noise.wav
输出文件:noise1.mp2
采样频率:44.1 kHz
输出文件码率:192 kbps
encode_init: using tablenum 1 with sblimit 30
声道数:2
目前观测第 9 帧
本帧比特预算:5016 bits
比例因子如下:
------ 声道1 ------
子带[ 1]: 9 11 9
子带[ 2]: 9 8 10
子带[ 3]: 9 10 11
子带[ 4]: 11 9 11
子带[ 5]: 11 9 9
子带[ 6]: 9 10 10
子带[ 7]: 8 7 8
子带[ 8]: 10 9 9
子带[ 9]: 9 11 9
子带[10]: 8 11 10
子带[11]: 9 8 9
子带[12]: 11 10 9
子带[13]: 11 9 10
子带[14]: 11 10 11
子带[15]: 10 7 8
子带[16]: 10 9 11
子带[17]: 8 9 9
子带[18]: 9 12 10
子带[19]: 8 8 9
子带[20]: 11 10 11
子带[21]: 9 10 9
子带[22]: 7 10 8
子带[23]: 10 8 9
子带[24]: 11 10 8
子带[25]: 9 10 8
子带[26]: 10 8 10
子带[27]: 11 9 10
子带[28]: 9 12 11
子带[29]: 10 11 9
子带[30]: 10 10 13
------ 声道2 ------
子带[ 1]: 9 8 10
子带[ 2]: 10 11 10
子带[ 3]: 11 9 8
子带[ 4]: 8 9 10
子带[ 5]: 9 11 12
子带[ 6]: 10 12 11
子带[ 7]: 10 10 10
子带[ 8]: 10 8 10
子带[ 9]: 8 8 10
子带[10]: 9 9 8
子带[11]: 10 8 8
子带[12]: 10 11 8
子带[13]: 11 9 8
子带[14]: 11 10 10
子带[15]: 9 9 9
子带[16]: 9 9 12
子带[17]: 12 9 9
子带[18]: 11 15 10
子带[19]: 10 11 11
子带[20]: 8 8 10
子带[21]: 10 10 10
子带[22]: 8 8 10
子带[23]: 8 8 8
子带[24]: 9 12 7
子带[25]: 9 10 8
子带[26]: 8 8 9
子带[27]: 10 9 10
子带[28]: 9 10 10
子带[29]: 10 10 13
子带[30]: 10 11 8
比特分配表如下:
------ 声道1 ------
子带[1]: 4
子带[2]: 4
子带[3]: 3
子带[4]: 5
子带[5]: 6
子带[6]: 5
子带[7]: 4
子带[8]: 4
子带[9]: 4
子带[10]: 4
子带[11]: 3
子带[12]: 4
子带[13]: 3
子带[14]: 4
子带[15]: 4
子带[16]: 3
子带[17]: 4
子带[18]: 4
子带[19]: 3
子带[20]: 4
子带[21]: 2
子带[22]: 2
子带[23]: 3
子带[24]: 2
子带[25]: 1
子带[26]: 2
子带[27]: 2
子带[28]: 1
子带[29]: 2
子带[30]: 1
------ 声道2 ------
子带[1]: 4
子带[2]: 3
子带[3]: 3
子带[4]: 6
子带[5]: 6
子带[6]: 5
子带[7]: 4
子带[8]: 4
子带[9]: 4
子带[10]: 4
子带[11]: 3
子带[12]: 4
子带[13]: 3
子带[14]: 4
子带[15]: 4
子带[16]: 3
子带[17]: 4
子带[18]: 4
子带[19]: 3
子带[20]: 4
子带[21]: 2
子带[22]: 2
子带[23]: 3
子带[24]: 2
子带[25]: 1
子带[26]: 2
子带[27]: 2
子带[28]: 1
子带[29]: 2
子带[30]: 1
Hit end of audio data
Avg slots/frame = 626.882; b/smp = 4.35; bitrate = 191.983 kbps
Done
total time is 1
========== 基本信息 ==========
输入文件:noise_music.wav
输出文件:noise_music1.mp2
采样频率:44.1 kHz
输出文件码率:192 kbps
encode_init: using tablenum 1 with sblimit 30
声道数:2
目前观测第 9 帧
本帧比特预算:5016 bits
比例因子如下:
------ 声道1 ------
子带[ 1]: 12 10 9
子带[ 2]: 10 10 13
子带[ 3]: 8 10 9
子带[ 4]: 10 8 10
子带[ 5]: 9 10 11
子带[ 6]: 11 9 12
子带[ 7]: 10 12 13
子带[ 8]: 10 10 10
子带[ 9]: 9 10 11
子带[10]: 9 11 12
子带[11]: 9 11 10
子带[12]: 8 10 11
子带[13]: 9 9 11
子带[14]: 8 12 8
子带[15]: 11 9 8
子带[16]: 9 10 8
子带[17]: 10 11 9
子带[18]: 10 10 9
子带[19]: 10 9 8
子带[20]: 9 10 9
子带[21]: 9 8 10
子带[22]: 12 11 9
子带[23]: 8 10 10
子带[24]: 13 10 10
子带[25]: 8 9 8
子带[26]: 8 8 10
子带[27]: 8 9 9
子带[28]: 10 11 9
子带[29]: 9 10 12
子带[30]: 8 9 7
------ 声道2 ------
子带[ 1]: 10 8 10
子带[ 2]: 11 7 10
子带[ 3]: 11 10 8
子带[ 4]: 8 9 9
子带[ 5]: 9 11 10
子带[ 6]: 9 10 9
子带[ 7]: 9 9 11
子带[ 8]: 10 10 10
子带[ 9]: 7 9 10
子带[10]: 9 8 9
子带[11]: 11 9 9
子带[12]: 7 10 8
子带[13]: 8 11 11
子带[14]: 10 8 10
子带[15]: 10 10 10
子带[16]: 10 11 10
子带[17]: 10 10 9
子带[18]: 11 9 10
子带[19]: 9 10 9
子带[20]: 9 9 9
子带[21]: 9 9 10
子带[22]: 10 9 9
子带[23]: 10 10 11
子带[24]: 9 10 9
子带[25]: 9 11 9
子带[26]: 8 10 10
子带[27]: 9 11 9
子带[28]: 11 10 9
子带[29]: 9 10 11
子带[30]: 9 11 9
比特分配表如下:
------ 声道1 ------
子带[1]: 5
子带[2]: 4
子带[3]: 3
子带[4]: 5
子带[5]: 4
子带[6]: 3
子带[7]: 4
子带[8]: 4
子带[9]: 4
子带[10]: 3
子带[11]: 3
子带[12]: 4
子带[13]: 3
子带[14]: 4
子带[15]: 3
子带[16]: 2
子带[17]: 4
子带[18]: 3
子带[19]: 3
子带[20]: 2
子带[21]: 2
子带[22]: 1
子带[23]: 2
子带[24]: 2
子带[25]: 1
子带[26]: 1
子带[27]: 2
子带[28]: 1
子带[29]: 1
子带[30]: 1
------ 声道2 ------
子带[1]: 4
子带[2]: 4
子带[3]: 3
子带[4]: 4
子带[5]: 4
子带[6]: 4
子带[7]: 4
子带[8]: 3
子带[9]: 4
子带[10]: 3
子带[11]: 3
子带[12]: 4
子带[13]: 3
子带[14]: 4
子带[15]: 3
子带[16]: 2
子带[17]: 4
子带[18]: 3
子带[19]: 3
子带[20]: 2
子带[21]: 2
子带[22]: 1
子带[23]: 2
子带[24]: 2
子带[25]: 1
子带[26]: 1
子带[27]: 2
子带[28]: 1
子带[29]: 1
子带[30]: 1
观察上述实验结果,可以发现:
- 对于音乐来说,在高频部分所被分配的比特数较少,因为人类发声的语音范围有限。
- 对于噪音和含有噪声的音乐来说,各个子带所被分配到的比特数分布比较均匀,说明这种信号分布较为均匀。