一、实验原理
·理解程序设计的整体框架
·理解感知音频编码的设计思想
-两条线
如上图两个圆圈
一号线是一个标准的子带编码系统的流程。使信号具有高的时间分辨率,确保在短暂冲击信号情况下,编码的声音信号具有足够高的质量。
二号线的本质是为了帮助计算线性量化器的量化比特数,实现线性量化器这一块的优化。最为关键的部分是心理声学模型,它对去除冗余信息起到了极大的作用,其复杂度取决于所需要的压缩因子。
-时-频分析的矛盾!
一号线信号需要具有高的时间分辨率, 确保在短暂冲击信号情况下,编码的声音信号具有 足够高的质量。
二号线需要信号通过 FFT 运算具有高的频率分辨率, 因为掩蔽阈值是从功率谱密度推出来的。
FFT变换是无法同时保证时域和频域的精细度,增加时域的分辨力,频域的分辨力就会下降,反之亦然。
其他概念:
多相滤波器组(Polyphase Filter Bank):将PCM样本变换到32个子带的频域信号
如果输入的采样频率为48kHz,那么子带的频率宽度为48/(2*32)=0.75Hz
心理声学模型(Psychoacoustic Model):计算信号中不可听觉感知的部分计算噪声遮蔽效应
比特分配器(Bit Allocator):根据心理声学模 型的计算结果,为每个子带信号分配比特数
装帧(Frame Creation):产生MPEG-I兼容的 比特流
·理解心理声学模型的实现过程
-临界频带的概念
临界频带是指当某个纯音被以它为中心频率、且具有一定带 宽的连续噪声所掩蔽时,如果该纯音刚好被听到时的功率等 于这一频带内的噪声功率,这个带宽为临界频带宽度。
通常认为从 20Hz 到 16kHz 有 25 个临界频带,单位为 bark ,1 Bark = 一个临界频带的宽度
-掩蔽值计算的思路
·理解码率分配的实现思路
心理学模型 asmr
//心理学模型,计算asmr
if ((glopts.quickmode == TRUE) && (++psycount % glopts.quickcount != 0)) {
/* We're using quick mode, so we're only calculating the model every
'quickcount' frames. Otherwise, just copy the old ones across */
for (ch = 0; ch < nch; ch++) {
for (sb = 0; sb < SBLIMIT; sb++)
smr[ch][sb] = smrdef[ch][sb];
}
} else {
/* calculate the psymodel */
switch (model) {
case -1:
psycho_n1 (smr, nch);
break;
case 0: /* Psy Model A */
psycho_0 (smr, nch, scalar, (FLOAT) s_freq[header.version][header.sampling_frequency] * 1000);
break;
case 1:
psycho_1 (buffer, max_sc, smr, &frame);
break;
case 2:
for (ch = 0; ch < nch; ch++) {
psycho_2 (&buffer[ch][0]