MPEG音频编码实验
来源:互联网 发布:知行家 编辑:程序博客网 时间:2024/05/21 09:25
一、实验原理
mpeg的音频编码主要采用了心理声学模型
1. MPEG-I 心理声学模型
- 通过子带分析滤波器组使信号具有高的时间分辨率,确保在短暂冲击信号情况下,编码的声音信号具有足够高的质量。
- 又可以使信号通过FFT运算具有高的频率分辨率,因为掩蔽阈值是从功率谱密度推出来的。
- 在低频子带中,为了保护音调和共振峰的结构,就要求用较小的量化阶、较多的量化级数,即分配较多的位数来表示样本值。而话音中的摩擦音和类似噪声的声音,通常出现在高频子带中,对它分配较少的位数
2. MPEG-1音频编码器框架图
- 多相滤波器组(Polyphase Filter Bank):用来分割子带,将PCM样本变换到32个子带的频域信号
如果输入的采样频率为48kHz ,那么子带的频率宽度为48/ (2*32 )=0.75Hz - 心理声学模型(Psychoacoustic Model):计算信号中不可听觉感知的部分
计算噪声遮蔽效应 - 比特分配器(Bit Allocator):根据心理声学模型的计算结果,为每个子带信号分配比特数
- 装帧(Frame Creation):产生MPEG-I兼容的比特流
3. 临界频带(Critical Band)
临界频带是指当某个纯音被以它为中心频率、且具有一定带宽的连续噪声所掩蔽时,如果该纯音刚好被听到时的功率等于这一频带内的噪声功率,这个带宽为临界频带宽度。
掩蔽效应在一定频率范围内不随带宽增大而改变,直至超过某个频率值。通常认为从20Hz到16kHz有25个临界频带,单位为bark。
1 Bark = 一个临界频带的宽度
4. 比例因子的取值和编码
对各个子带每12个样点进行一次比例因子计算。先定出12个样点中绝对值的最大值。查比例因子表中比这个最大值的最小值作为比例因子。用6 比特表示。
第2 层的一帧对应36个子带样值,是第1层的三倍,原则上要传三个比例因子。为了降低比例因子的传输码率,采用了利用人耳时域掩蔽特性的编码策略。
每帧中每个子带的三个比例因子被一起考虑,划分成特定的几种模式。根据这些模式,1 个、2 个或3 个比例因子和比例因子选择信息(每子带2 比特)一起被传送。如果一个比例因子和下一个只有很小的差别,就只传送大的一个,这种情况对于稳态信号经常出现。
使用这一算法后,和第1层相比,第2层传输的比例因子平均减少了2 个,即传输码率由22.5Kb/s 降低到了7.5Kb/s。
MPEG-I 心理声学模型
MPEG-I 标准定义了两个模型
心理声学模型1: 计算复杂度低 、但对假设用户听不到的部分压缩太严重
心理声学模型2 :提供了适合Layer III编码的更多特征 、 实际实现的模型复杂度取决所需要的压缩 因子、如大的压缩因子不重要,则可以完全不用心理 声学模型。此时位分配算法不使用SMR ( Signal Mask Ratio ),而是使用SNR
心理声学模型I
1、将样本变换到频域、 32个等分的子带信号并不能精确地反映人耳的听觉特性。 引入FFT补偿频率分辨率不足的问题。采用Hann加权和DFT Hann加权减少频域中的边界效应此变换不同于多相滤波器组,因为模型需要更精细 的频率分辨率,而且计算掩蔽阈值也需要每个频率 的幅值模型1:采用512 (Layer I) 或1024 (Layers II and III)样本窗口 Layer I:每帧384个样本点,512个样本点足够覆盖 Layer II 和Layer III:每帧1152个样本点,每帧两次 计算,模型1选择两个信号掩蔽比(SMR)中较小的 一个
2、确定声压级别
3、考虑安静时阈值 也即绝对阈值。在标准中有根据输入PCM信号的采 样率编制的“频率、临界频带率和绝对阈值”表。 此表为多位科学家经多次心理声学实验所得。
4、将音频信号分解成“乐音(tones)” 和“非乐音/噪声” 部分:因为两种信号的掩蔽能力不同
5、音调和非音调掩蔽成分的消除 利用标准中给出的绝对阈值消除被掩蔽成分; 考虑在每个临界频带内,小于0.5Bark的距离 中只保留最高功率的成分
6、单个掩蔽阈值的计算 音调成分和非音调成分单个掩蔽阈值根据标 准中给出的算法求得。
二、代码分析
在主程序中修改:输出音频的采样率和目标码率 ;选择某个数据帧,输出该帧所分配的比特数 、 该帧的比例因子、 该帧的比特分配结果
adb = available_bits (&header, &glopts); if (frameNum == 20) { printf("每帧分配比特数 = %d\n", adb); } lg_frame = adb / 8;sample_encoding (*subband, bit_alloc, &frame, &bs); if (frameNum == 20) { printf("sample rate=%.1f kHz\n", s_freq[header.version][header.sampling_frequency]); printf("target rate=%d\n",bitrate[header.version][header.bitrate_index]); int a, b; for (a = 0; a<2; a++) { for (b = 0; b<frame.sblimit; b++) { printf("bit_alloc[%d][%d] =%d\n", a, b, bit_alloc[a][b]); } } } scale_factor_calc (*sb_sample, scalar, nch, frame.sblimit); if (frameNum == 20) { int a, b, c; for (a=0;a<nch;a++) { printf("channel[%d] = \n", a + 1); for (b=0;b<frame.sblimit;b++) { for (c=0;c<3;c++) { printf("scalar[%d][%d]= %d %d %d\n",b,c,scalar[a][0][b], scalar[a][1][b], scalar[a][2][b]); } } } }
三 、实验结果
采样率和目标码率
分配的比特数、比例因子
每个子带的3个比例因子相距很近,可以通过选择比例因子,来实现数据压缩。
另外,低频子带分配的比特数多,高频子带分配飞比特数少。
- MPEG音频编码实验
- MPEG音频编码实验
- MPEG音频编码实验
- MPEG音频编码实验
- MPEG音频编码实验报告
- 【数据压缩】MPEG音频编码实验
- 实验6 MPEG音频编码
- 实验六:MPEG音频编码实验
- 数据压缩实验六 MPEG音频编码实验
- 数据压缩实验六:MPEG音频编码实验
- 实验六—mpeg音频编码实验
- 实验六 MPEG音频编码实验
- 【实验七】MPEG音频编码实验
- 数据压缩 实验六 MPEG音频编码实验
- 数据压缩 实验六 MPEG音频编码实验
- 实验六——MPEG音频编码
- 数据压缩原理 实验六 MPEG音频编码
- 数据压缩实验六--MPEG音频编码
- chromium浏览器开发系列第一篇:如何获取最新chromium源码
- 智能指针学习总结
- 每日一算法之JS冒泡排序
- 腾讯云环境配置
- Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource
- MPEG音频编码实验
- UVA 10003 切割能量棒
- 关于java中的synchronized的用法
- 使用SQLServer导入Excel数据时报错
- 利用python生成caffe训练数集的txt文件
- Eclipse 快捷键大全
- Python学习随笔(一)
- BZOJ 1052 二分答案 解题报告
- Git合并特定commits 到另一个分支