MPEG音频编码原理
感知音频编码
- 感知音频编码即基本思想:基于人对于声音在生理上以及心理上(通过心理声学模型分析出而得)不足,将声音不被人感知的部分看作冗余数据,不进行编码,以此来实现音频的压
- 感知音频编码的基本框架:
心理声学模型
- 心理声学模型分析基础简要说明:
- 人类的听域:20Hz~20000Hz
- 响度与频率:人耳听觉对不同频率有不同的敏感度,而且这种敏感度的不同随着响度的增加而变得不那么显著。
- 掩蔽效应:强音的出现会提高周围频率的听域,带来掩蔽效应。举个简单的例子:人会感觉到有些原来听得到的声音在强音出现后听不见了,这是因为听域提高了,原来的声音现在在听域之下
- 临界频带:若某个纯音被以它为中心频率,且具有一定带宽的连续噪声所掩蔽又刚好能被听到,此时该纯音的功率等于这一频带内噪声的功率,噪声的带宽成为临界频带宽度。总的来说,临界频带在低频的部分较窄,在高频的部分较宽
- 心理声学模型中掩蔽值的计算
1. 对样本做FFT变换将其转换到频域
2. 确定声压级别
3. 引入绝对听域曲线
4. 将音频划分为乐音和噪声:将临界频带的峰值看作乐音,其余都一概视为噪声
5. 根据标准计算出掩蔽阈值:乐音与噪音之间的掩蔽值
6. 计算全局的掩蔽阈值:此时需要考虑不同临界频带的乐音之间的相互影响(掩蔽扩散)
7. 子带的掩蔽阈值:选择最小的阈值作为当前自带的掩蔽阈值
8. 每个子带的信掩比SMR(signal-to-mask ratio)
SMR = 信号能量/掩蔽阈值
码率分配
-
确定可用于样值编码的有效比特数,有效比特数由比例因子、比例因子选择信息、比特分配信息以及辅助信息所需比特数共同决定。
-
分配算法:循环,退出条件为比特分配完毕
计算噪掩比NMR:NMR = SMR - SNR(dB)
将比特分配给NMR最高的子带
重新计算分配了比特子带的NMR
实验结果
输出音频的采样率和目标码率
从上图中可以读出当前分析的音频文件采样率为44.1kHz,目标码率为192.000kbps
分析三个不同性质音频文件的数据
在主函数中添加以下代码:
FILE* output;
output = fopen("output.txt", "w");
if (frameNum =&