MPEG音频编码实验

MPEG音频编码实验

MPEG标准主要有以下五个,MPEG-1、MPEG-2、MPEG-4、MPEG-7及MPEG-21等。该专家组建于1988年,专门负责为CD建立视频和音频标准,而成员都是为视频、音频及系统领域的技术专家。及后,他们成功将声音和影像的记录脱离了传统的模拟方式,建立了ISO/IEC11172压缩编码标准,并制定出MPEG-格式,令视听传播方面进入了数码化时代。因此,大家现时泛指的MPEG-X版本,就是由ISO (InternationalOrganization for Standardization) 所制定而发布的视频、音频、数据的压缩标准。

MPEG-1 Audio LayerII编码器原理

流程框图如下:
在这里插入图片描述

多相滤波器组

多相滤波器组(Polyphase Filter Bank),可以将PCM样本变换到32个自子带的频域信号。

如果输入的采样频率为48kHz,子带的频带宽度就是 48 2 × 32 = 0.75 k H z \frac{48}{2 \times 32} = 0.75kHz 2×3248=0.75kHz

图示如下:

在这里插入图片描述
首先需要对窗口的512个样本 X [ i ] , i = 0 , 1 , 2...511 X[i],i = 0,1,2...511 X[i],i=0,1,2...511进行计算:
Z [ i ] = C [ i ] × Z [ i ] , i = 0 , 1 , 2 , . . . , 511 Z[i] = C[i] \times Z[i],i = 0,1,2,...,511 Z[i]=C[i]×Z[i],i=0,1,2,...,511
其中标准中为我们规定了512个系数 C [ i ] C[i] C[i]
样本点分成64个组,计算64个 Y k Y_k Yk值:
Y [ k ] = ∑ j = 0 7 Z [ k + 64 j ] Y[k] = \sum^7_{j=0}Z[k+64j] Y[k]=j=07Z[k+64j]
计算32个子带样本:
S [ i ] = ∑ k = 0 63 Y [ k ] × M [ i ] [ k ] S[i] = \sum^{63}_{k = 0}Y[k] \times M[i][k] S[i]=k=063Y[k]×M[i][k]
总计算公式:

S [ i ] = ∑ k = 0 63 ∑ j = 0 7 M [ i ] [ k ] ( C [ k + 64 j ] X [ k + 64 j ] ) S[i] = \sum^{63}_{k=0}\sum^7_{j=0} M[i][k](C[k+64j]X[k+64j]) S[i]=k=063j=07M[i][k](C[k+64j]X[k+64j])

  • 其中分析矩阵 M [ i ] [ k ] = c o s ( ( 2 i + 1 ) ( k − 16 ) π 64 ) M[i][k] = cos(\frac{(2i+1)(k-16)\pi}{64}) M[i][k]=cos(64(2i+1)(k16)π)
  • 共需要 512 + 32 × 64 512+32\times{64} 512+32×64次乘法
  • 每个子带的带宽为 π 32 T \frac{\pi}{32T} 32Tπ,中心为带宽奇数倍。

同时多相滤波器的公式还可以写成卷积公式:
S t [ i ] = ∑ n = 0 511 X [ n − t ] h i [ n ] S_t[i] = \sum^{511}_{n=0}X[n - t]h_i[n] St[i]=n=0511X[nt]hi[n]
其中 h i [ n ] = h [ n ] × c o s ( ( 2 i + 1 ) ( k − 16 ) π 64 ) h_i[n] = h[n] \times cos(\frac{(2i+1)(k-16)\pi}{64}) hi[n]=h[n]×cos(64(2i+1)(k16)π)
n 64 \frac{n}{64} 64n的整数部分为奇数时, h ( n ) = − C ( n ) h(n) = -C(n) h(n)=C(n),反之, h ( n ) = C ( n ) h(n) = C(n) h(n)=C(n)

多相滤波器同时存在一些缺点:

  • 等带宽的滤波器组与人类听觉系统的临界频带不对应。在低频区域,单个子带会覆盖多个临界频带。
    在这里插入图片描述
  • 滤波器组与其逆过程不是无失真的
  • 子带间频率有混叠

心理声学模型(Psychoacoustic Model)

通过子带分析滤波器组使信号具有高的时间分辨率,确保在短暂冲击信号情况下,编码的声音信号具有足够高的质量。又可以使信号通过FFT运算具有高的频率分辨率,因为掩蔽阈值是从功率谱密度推出来的。在低频子带中,为了保护音调和共振峰的结构,就要求用较小的量化阶、较多的量化级数,即分配较多的位数来表示样本值。而话音中的摩擦音和类似噪声的声音,通常出现在高频子带中,对它分配较少的位数。而如何实现这一分配方式,就需要参考心理声学模型和比特预算。

MPEG-1标准定义了两个模型:

  • 心理声学模型1:
    • 计算复杂度低
    • 对于假设用户听不到的部分压缩太严重
  • 心理声学模型2:
    • 提供了适合Layer III编码的更多特征

但实际实现的模型复杂度取决所需要的压缩因子。如大的压缩因子不重要,则可以完全不用心理声学模型。此时位分配算法不使用SMR(Signal Mask Ratio),而是使用SNR。

心理声学模型Ⅰ
  1. 将样本变换到频域
    32个等分的子带信号不能精确地反映人耳的听觉特性,所以我们引入FFT补偿频率分辨率不足的问题。

    • 采用Hann加权和DFT
      • Hann加权减少频率中的边界效应。
      • 此变换不同于多相滤波器组,因为模型需要更精细的频率分辨率,而且计算掩蔽阈值也需要每个频率的幅值。
    • 模型1:采用512(Layer Ⅰ)或者1024(Layer Ⅱ and Ⅲ)样本窗口:
      • Layer Ⅰ:每帧384个样本点,512个样本点足够覆盖。
      • Layer Ⅱ and Ⅲ:每帧1152个样本点,每帧两次计算,模型1选择两个信号掩蔽比(SMR)中较小的一个。
  2. 确定声压级别
    子带 n n n中的声压级别 L s b L_{sb} Lsb计算如下:
    L s b ( n ) = M A X [ X ( k ) , 20 × l o g 10 ( s c f m a x ( n ) × 32768 ) − 10 ] d B L_{sb}(n) = MAX[X(k),20\times log_{10}(scf_{max}(n)\times32768)-10]dB Lsb(n)=MAX[X(k),20×log10(scfmax(n)×32768)10]dB
    其中 X ( k ) X(k) X(k)是在子带 n n n中的频谱线的声压级别, s c f m a x ( n ) scf_{max}(n) scfmax(n)是在一帧中子带 n n n的三个缩放因子最大的一个。

  3. 考虑安静时阈值,也即绝对阈值
    也即绝对阈值。在标准中有根据输入PCM信号的采样率编制的“频率、临界频带率和绝对阈值”表。此表为多位科学家经多次心理声学实验所得。

  4. 将音频信号分解成“乐音(Polyphase Filter Bank)tones)” 和“非乐音/噪声”部分
    在这里插入图片描述

    模型1:根据音频频谱的局部功率最大值确定乐音成分。局部峰值为乐音,然后将本临界频带内的剩余频谱合在一起,组成一个代 表噪声频率(无调成份)。
    要列出谱线 X ( k ) X(k) X(k)的有调和无调,需执行下面的三个步骤:

    • 标明局部最大;如果 X ( k ) X(k) X(k)比相邻的两个谱线都大,则 X ( k ) X(k) X(k)为局部最大值。
    • 列出有调成分,计算声压值。如果 X ( k ) − X ( k + j ) ≥ 7 d B X(k)-X(k+j) \ge 7dB X(k)X(k+j)7dB,则 X ( k ) X(k) X(k)为有调成分。j随谱线的位置不同而不同。
    • 列出无调成分,计算功率。在每个临界频带内将所有余留谱线的功率加起来形成临界频带内无调成分的声压级。并列出以下参数:最接近临界频带几何平均值的谱线标记k,声压级以及无调指示。
  5. 音调和非音调掩蔽成分的消除
    利用标准中给出的绝对阈值消除被掩蔽成分;考虑在每个临界频带内,小于0.5Bark的距离中只保留最高功率的成分。

  6. 单个掩蔽阈值的计算
    音调成分和非音调成分单个掩蔽阈值根据标准中给出的算法求得。

  7. 全局掩蔽阈值的计算
    在这里插入图片描述
    还要考虑别的临界频带的影响。一个掩蔽信号会对其它频带上的信号产生掩蔽效应。这种掩蔽效应称为掩蔽扩散。

  8. 每个子带的掩蔽阈值
    选择出本子带中最小的阈值作为子带阈值。

  9. 计算每个子带信号掩蔽比(signal-to-mask ratio, SMR),将SMR传递给编码单元
    SMR = 信号能量 / 掩蔽阈值。

LayerⅠ编码

码率分配

在调整到固定的码率之前,先确定可以用于样值编码的有效比特数,这个数值取决于比例因子、比例因子选择信息、比特分配信息和辅助数据所需bit数。

  • 比特分配过程
    对每个子带计算掩蔽-噪声比MNR,是信噪比-信掩比,即 M N R = S N R − S M R MNR = SNR - SMR MNR=SNRSMR

  • 算法:使整帧和每一个子带的总噪声-掩蔽比NMR最小。

    • 计算NMR: N M R = S M R − S N R NMR = SMR - SNR NMR=SMRSNR。其中SNR由MPEG-1标准给定。
      在这里插入图片描述
  • 算法:循环,直到没有比特可用:

    • NMR = SMR - SNR(dB)
    • 对最高NMR的子带分配比特,使获益最大的子带的量化级别增加一级
    • 重新计算分配了更多比特子带的NMR
      在这里插入图片描述
装帧

在这里插入图片描述
帧头格式:
在这里插入图片描述

Layer Ⅱ编码

和Ⅰ类似但是有所加强。

  • 帧结构

    • 3 组/帧 x 12个样本/子带 x 32个子带/帧 = 1152个样本/帧
    • 每个样本的overhead更少
  • 缩放因子(比例因子)一般从低频子带到高频子带出现连续下降,每个子带的3个组尽可能共用缩放因子

    • Layer Ⅰ: 1个/12个样本
    • 1个/(24/36)个样本
    • 1/2/3个缩放因子和缩放因子选择信息(scale factor selection information, SCFSI) (每子带2比特)一起传送。
      • 如果缩放因子和下一个只有很小的差别,就只传送大的一个,这种情况对于稳态信号经常出现
      • 如果要给瞬态信号编码,则要在瞬态的前、后沿传送两个或所有三个比例因子
  • 量化

    • Layer I:每个子带从相同的量化集合中选择,每个子带取共14个量化器中的一个
    • Layer II:根据采样和码率量化,不同子带可以从不同的量化器集合中选择,某些(高频)子带的比特数可能为0。对量化级别在3、5、9级时,采用“颗粒” 优化。颗粒= 3 个样本,根据颗粒选择量化水平。
  • 装帧
    在这里插入图片描述

实验记录

重要参数解释

参数名含义
window_subband子带滑动窗口
filter_subband子带滤波器
combine_LR结合左右声道
_scale_factor_calc缩放因子计算
psycho_i心理声学模型1
psycho_ii心理声学模型2
_main_bit_allocation比特分配
_CRC_calcCRC循环冗余校验
_encode_bit_alloc编码bit分配
_encode_scale编码比例因子
transmission_pattern传送图样
_subband_quantization子带量化
_sample_encoding采样编码

输出音频的采样率和目标码率

m2aenc.c中加入下面代码:

//add by qzl from CUC
FILE* output;
char temp[20] = "info.txt";
//end

并对main进行修改:

	//add by qzl from CUC
	if (frameNum == 1) {
		fprintf(output, "采样频率为 %d kHz.\n 目标码率为 %d kbps. \n", header.sampling_frequency, bitrate[header.version][header.bitrate_index]);
	}

得到的结果如下:
在这里插入图片描述

输出某一帧分配的比特数、比例因子和比特分配结果

加入如下代码:

fprintf(output, "输出的为第 %d 帧\n", frameNum); //输出数据帧
fprintf(output, "分配的比特数为 %d\n", adb);
fprintf(output, "比例因子为:\n");  //输出比例因子
for (ch = 0; ch < nch; ch ++) {
	fprintf(output, "通道%d\n", ch + 1);
	for (int i = 0; i < frame.sblimit; i ++) {
		fprintf(output, "子带%d:", i + 1);
		for (int j = 0; j < 3; j++)
		{
			fprintf(output, "%d\t", scalar[ch][j][i]);
		}
		fprintf(output, "\n");
	}
}
...
	//add by qzl from CUC
if (frameNum == 10) {
	fprintf(output, "\n分配的bit数:\n");
	for (int i = 0; i < nch; i++) {
		fprintf(output, "通道%d:\n", i + 1);
		for (int j = 0; j < frame.sblimit; j++) {
			fprintf(output, "子带%d:%d\n", j, bit_alloc[i][j]);
		}
	}
}
//end
噪声

在这里插入图片描述
有两个通道,这里只展示一个通道的信息。
在这里插入图片描述在这里插入图片描述

音乐

在这里插入图片描述
只有一个通道
在这里插入图片描述在这里插入图片描述

混合

在这里插入图片描述
此时有两个通道,这里也只展示一个:
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: AAC(Advanced Audio Coding)是一种数字音频编码格式,它是一种有损压缩技术,可以将音频数据压缩到较小的文件大小,同时保持相对较高的音频质量。AAC是MPEG-2和MPEG-4标准的一部分,是一种广泛使用的音频格式,可以用于音乐、电影、电视节目、视频游戏和其他数字媒体应用。相比其他有损音频编码格式,如MP3,AAC具有更高的编码效率和更好的音频质量。 ### 回答2: AAC(Advanced Audio Coding)音频编码技术是一种高效的音频压缩格式,它是MPEG-2和MPEG-4标准的一部分。AAC采用了声学模型、静态和动态音频掩蔽效应以及其他人类听觉特性的理论基础,通过去除听觉上不可察觉的频率成分和冗余数据来实现对音频的压缩。 与传统的音频编码格式相比,如MP3,AAC能够在相同的比特率下提供更高的音质。这是因为AAC使用了更高级的算法,能够更准确地保留音频细节,并在同样的文件尺寸下提供更高的音频品质。同时,AAC还针对音频编码中的特定问题进行了改进,例如提高了对低比特率下音频的表现和解决了编码延迟问题。 AAC广泛应用于各种音频存储和传输场景,如数字音乐、互联网音频流媒体、手机铃声、音频广播等。许多音频播放器、流媒体平台和移动设备都支持AAC格式,使得用户可以享受高质量的音频体验。此外,AAC也是iTunes Store音乐的默认编码格式,这进一步证明了它在音频领域的重要性和受欢迎程度。 总之,AAC音频编码技术是一种高效的音频压缩格式,能够在保持较高音质的同时减小文件尺寸,广泛应用于音乐、流媒体和广播等领域,为用户提供更好的音频体验。 ### 回答3: AAC音频编码技术,全称为Advanced Audio Coding,是一种高效的音频压缩编码标准。它是MPEG-2和MPEG-4标准中的一部分,经过多年的研发和完善,逐渐成为广泛应用于音频压缩领域的主流技术之一。 AAC采用了一系列先进的算法和技术,能够在相对较低的比特率下实现高质量的音频编码。相比其他音频编码技术,如MP3,AAC具有更好的压缩效率和更高的音质表现。它能够在不同的比特率下进行编码,以适应不同的传输环境和设备要求。 AAC音频编码技术的核心思想是通过剔除人耳难以察觉的音频信号部分,达到良好的压缩效果。它采用了多种技术,如频域限制、动态音频处理和声学模型等,来提高压缩的效率和音频的还原度。同时,AAC还支持多种编码模式,如立体声、环绕声和多声道编码,以满足不同的音频需求。 AAC音频编码技术在音频和视频应用中得到广泛应用。它被广泛使用于各类数字音频播放器、流媒体服务、音频传输和互联网电话等领域。与此同时,随着智能手机和移动互联网的普及,AAC编码技术为人们提供了高质量的音频体验,成为数字音频压缩的首选标准之一。 总之,AAC音频编码技术是一种高效而先进的音频压缩技术,具有出色的压缩效率和音质表现,在各类音频应用中有着广泛的应用和普及。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CUCKyrie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值