MPEG音频编码

实验原理

MPEG音频编码原理框图

在这里插入图片描述
MPEG-I 心理声学模型,根据人耳的听觉阈值和听觉掩蔽特性建立的模型,可以通过这个模型消除更多的冗余数据,计算信号中不可听觉感知的部分。

多相滤波器组(Polyphase Filter Bank):将PCM样本变换到32个子带的频域信号,如果输入的采样频率为48kHz,那么子带的频率宽度为48/(2*32)=0.75Hz
在这里插入图片描述
比例因子提取、比例因子选择:每个子带每12个样点为一个数据块,一个子带含有3个数据块,将这三个数据块的比例因子进行提取并比较。若相差不大,则使用统一的量化比特数;若相差较大,则根据比例因子选择信息,对3个数据块分别进行不同比特数的量化。

动态比特分配:根据目标码率和心理声学模型分析的结果,为子带分配最合理的量化比特数,使整帧和每个子带的噪掩比NMR最小的算法。(该信息需送至解码端,以供解码端完成解码)

线性量化器:根据动态比特分配给出的量化比特数,对子带的数据进行线性量化。

颗粒形成:将量化后的数据形成数据流。

动态比特分配原理

噪掩比(NMR)=信掩比(SMR)-信噪比(SNR)
每增加1bit的量化,信噪比增加6dB。对不同的频带,采用不同比特的量化,可以有效减少冗余。实例分析如下图:
在这里插入图片描述

代码分析和结果输出

  • 输出音频的采样率和目标码率
    代码部分为:
void print_config (frame_info * frame, int *psy, char *inPath,
		   char *outPath)
{
  frame_header *header = frame->header;

  if (glopts.verbosity == 0)
    return;

  fprintf (stderr, "--------------------------------------------\n");
  fprintf (stderr, "Input File : '%s'   %.1f kHz\n",
	   (strcmp (inPath, "-") ? inPath : "stdin"),
	   s_freq[header->version][header->sampling_frequency]);
  fprintf (stderr, "Output File: '%s'\n",
	   (strcmp (outPath, "-") ? outPath : "stdout"));
  fprintf (stderr, "%d kbps ", bitrate[header->version][header->bitrate_index]);
  fprintf (stderr, "%s ", version_names[header->version]);
  if (header->mode != MPG_MD_JOINT_STEREO)
    fprintf (stderr, "Layer II %s Psycho model=%d  (Mode_Extension=%d)\n",
	     mode_names[header->mode], *psy, header->mode_ext);
  else
    fprintf (stderr, "Layer II %s Psy model %d \n", mode_names[header->mode],
	     *psy);

  fprintf (stderr, "[De-emph:%s\tCopyright:%s\tOriginal:%s\tCRC:%s]\n",
	   ((header->emphasis) ? "On" : "Off"),
	   ((header->copyright) ? "Yes" : "No"),
	   ((header->original) ? "Yes" : "No"),
	   ((header->error_protection) ? "On" : "Off"));

  fprintf (stderr, "[Padding:%s\tByte-swap:%s\tChanswap:%s\tDAB:%s]\n",
	   ((glopts.usepadbit) ? "Normal" : "Off"),
	   ((glopts.byteswap) ? "On" : "Off"),
	   ((glopts.channelswap) ? "On" : "Off"),
	   ((glopts.dab) ? "On" : "Off"));

  if (glopts.vbr == TRUE)
    fprintf (stderr, "VBR Enabled. Using MNR boost of %f\n", glopts.vbrlevel);
  fprintf(stderr,"ATH adjustment %f\n",glopts.athlevel);

  fprintf (stderr, "--------------------------------------------\n");
}

以test.wav为例,输出test_n.mp2。
在这里插入图片描述
在这里插入图片描述
修改代码,使其可以输出某数据帧的相关内容
则增加代码部分为:

  int gr;
  FILE *out_txt=NULL;
  unsigned char *outTXT=NULL;
  out_txt=fopen("output.txt","w");
 fprintf(out_txt, "该音频声道数:%d\n", nch);
	fprintf(out_txt, "观测第 %d 帧\n", frameNum);
	fprintf(out_txt, "本帧比特预算:%d bits\n", adb);
	fprintf(out_txt, "该帧比例因子和比特分配表如下:\n");
	for (ch = 0; ch < nch; ch++)	//逐声道输出
	{
		fprintf(out_txt, "--- 声道%2d ----\n", ch + 1);
		for (sb = 0; sb < frame.sblimit; sb++)	//各子带
		{
			fprintf(out_txt, "子带[%2d]比例因子:\t", sb + 1);
			for (gr = 0; gr < 3; gr++)
			{
				fprintf(out_txt, "%2d\t", scalar[ch][gr][sb]);
			}
			fprintf(out_txt, "\n");
			fprintf(out_txt, "子带[%2d]比特分配表:\t%2d\n", sb + 1, bit_alloc[ch][sb]);
			fprintf(out_txt, "\n");
		}
	}
	free(outTXT);
  	fclose(out_txt);

自己选取三段音频分别为noise.wav music.wav music_noise.wav,依次得到输出如下:
noise.wav
在这里插入图片描述

该音频声道数:2
观测第 147 帧
本帧比特预算:4 bits
该帧比例因子和比特分配表如下:
— 声道 1 ----
子带[ 1]比例因子: 4 4 4
子带[ 1]比特分配表: 6

子带[ 2]比例因子: 12 12 12
子带[ 2]比特分配表: 3

子带[ 3]比例因子: 13 13 13
子带[ 3]比特分配表: 3

子带[ 4]比例因子: 11 14 24
子带[ 4]比特分配表: 4

子带[ 5]比例因子: 11 11 18
子带[ 5]比特分配表: 3

子带[ 6]比例因子: 10 14 18
子带[ 6]比特分配表: 4

子带[ 7]比例因子: 10 13 24
子带[ 7]比特分配表: 4

子带[ 8]比例因子: 10 10 21
子带[ 8]比特分配表: 4

子带[ 9]比例因子: 10 10 10
子带[ 9]比特分配表: 2

子带[10]比例因子: 11 11 11
子带[10]比特分配表: 3

子带[11]比例因子: 10 10 10
子带[11]比特分配表: 3

子带[12]比例因子: 12 12 12
子带[12]比特分配表: 1

子带[13]比例因子: 12 12 25
子带[13]比特分配表: 3

子带[14]比例因子: 13 13 13
子带[14]比特分配表: 3

子带[15]比例因子: 13 13 24
子带[15]比特分配表: 2

子带[16]比例因子: 13 16 25
子带[16]比特分配表: 2

子带[17]比例因子: 12 12 12
子带[17]比特分配表: 3

子带[18]比例因子: 13 13 21
子带[18]比特分配表: 2

子带[19]比例因子: 15 15 15
子带[19]比特分配表: 1

子带[20]比例因子: 15 15 15
子带[20]比特分配表: 1

子带[21]比例因子: 14 14 20
子带[21]比特分配表: 2

子带[22]比例因子: 14 17 22
子带[22]比特分配表: 1

子带[23]比例因子: 14 14 24
子带[23]比特分配表: 1

子带[24]比例因子: 14 14 14
子带[24]比特分配表: 1

子带[25]比例因子: 14 14 22
子带[25]比特分配表: 1

子带[26]比例因子: 14 14 24
子带[26]比特分配表: 1

子带[27]比例因子: 15 15 15
子带[27]比特分配表: 1

— 声道 2 ----
子带[ 1]比例因子: 4 4 4
子带[ 1]比特分配表: 6

子带[ 2]比例因子: 13 10 16
子带[ 2]比特分配表: 4

子带[ 3]比例因子: 12 12 12
子带[ 3]比特分配表: 3

子带[ 4]比例因子: 13 13 13
子带[ 4]比特分配表: 5

子带[ 5]比例因子: 11 11 11
子带[ 5]比特分配表: 4

子带[ 6]比例因子: 11 14 14
子带[ 6]比特分配表: 4

子带[ 7]比例因子: 11 11 22
子带[ 7]比特分配表: 4

子带[ 8]比例因子: 10 10 17
子带[ 8]比特分配表: 4

子带[ 9]比例因子: 12 12 12
子带[ 9]比特分配表: 2

子带[10]比例因子: 11 11 11
子带[10]比特分配表: 3

子带[11]比例因子: 10 10 10
子带[11]比特分配表: 3

子带[12]比例因子: 13 13 13
子带[12]比特分配表: 1

子带[13]比例因子: 13 13 21
子带[13]比特分配表: 3

子带[14]比例因子: 14 14 14
子带[14]比特分配表: 3

子带[15]比例因子: 13 13 23
子带[15]比特分配表: 2

子带[16]比例因子: 14 14 14
子带[16]比特分配表: 2

子带[17]比例因子: 12 12 25
子带[17]比特分配表: 3

子带[18]比例因子: 14 14 14
子带[18]比特分配表: 2

子带[19]比例因子: 13 13 13
子带[19]比特分配表: 1

子带[20]比例因子: 13 13 22
子带[20]比特分配表: 1

子带[21]比例因子: 13 13 24
子带[21]比特分配表: 2

子带[22]比例因子: 14 14 19
子带[22]比特分配表: 1

子带[23]比例因子: 14 14 14
子带[23]比特分配表: 1

子带[24]比例因子: 14 14 26
子带[24]比特分配表: 1

子带[25]比例因子: 12 12 12
子带[25]比特分配表: 1

子带[26]比例因子: 13 13 13
子带[26]比特分配表: 1

子带[27]比例因子: 15 15 22
子带[27]比特分配表: 1

music.wav
在这里插入图片描述

该音频声道数:2
观测第 616 帧
本帧比特预算:2 bits
该帧比例因子和比特分配表如下:
— 声道 1 ----
子带[ 1]比例因子: 4 7 14
子带[ 1]比特分配表: 5

子带[ 2]比例因子: 12 15 15
子带[ 2]比特分配表: 4

子带[ 3]比例因子: 12 12 21
子带[ 3]比特分配表: 3

子带[ 4]比例因子: 12 15 15
子带[ 4]比特分配表: 4

子带[ 5]比例因子: 13 13 18
子带[ 5]比特分配表: 5

子带[ 6]比例因子: 13 13 21
子带[ 6]比特分配表: 5

子带[ 7]比例因子: 13 16 16
子带[ 7]比特分配表: 4

子带[ 8]比例因子: 12 15 25
子带[ 8]比特分配表: 5

子带[ 9]比例因子: 10 17 21
子带[ 9]比特分配表: 5

子带[10]比例因子: 12 20 20
子带[10]比特分配表: 4

子带[11]比例因子: 9 17 26
子带[11]比特分配表: 5

子带[12]比例因子: 14 22 22
子带[12]比特分配表: 3

子带[13]比例因子: 13 20 25
子带[13]比特分配表: 4

子带[14]比例因子: 12 20 28
子带[14]比特分配表: 5

子带[15]比例因子: 14 20 26
子带[15]比特分配表: 3

子带[16]比例因子: 15 23 23
子带[16]比特分配表: 4

子带[17]比例因子: 14 19 28
子带[17]比特分配表: 4

子带[18]比例因子: 14 21 21
子带[18]比特分配表: 4

子带[19]比例因子: 15 20 24
子带[19]比特分配表: 3

子带[20]比例因子: 15 19 29
子带[20]比特分配表: 3

子带[21]比例因子: 13 23 23
子带[21]比特分配表: 3

子带[22]比例因子: 18 21 31
子带[22]比特分配表: 1

子带[23]比例因子: 16 24 24
子带[23]比特分配表: 0

子带[24]比例因子: 12 25 34
子带[24]比特分配表: 1

子带[25]比例因子: 13 24 27
子带[25]比特分配表: 1

子带[26]比例因子: 15 25 25
子带[26]比特分配表: 0

子带[27]比例因子: 16 21 25
子带[27]比特分配表: 0

— 声道 2 ----
子带[ 1]比例因子: 4 7 14
子带[ 1]比特分配表: 5

子带[ 2]比例因子: 11 15 15
子带[ 2]比特分配表: 4

子带[ 3]比例因子: 13 13 13
子带[ 3]比特分配表: 3

子带[ 4]比例因子: 12 12 18
子带[ 4]比特分配表: 5

子带[ 5]比例因子: 11 16 16
子带[ 5]比特分配表: 5

子带[ 6]比例因子: 11 14 23
子带[ 6]比特分配表: 5

子带[ 7]比例因子: 14 17 17
子带[ 7]比特分配表: 4

子带[ 8]比例因子: 13 13 21
子带[ 8]比特分配表: 5

子带[ 9]比例因子: 10 16 21
子带[ 9]比特分配表: 5

子带[10]比例因子: 12 18 18
子带[10]比特分配表: 4

子带[11]比例因子: 10 16 26
子带[11]比特分配表: 5

子带[12]比例因子: 13 20 20
子带[12]比特分配表: 3

子带[13]比例因子: 14 19 23
子带[13]比特分配表: 4

子带[14]比例因子: 14 19 25
子带[14]比特分配表: 5

子带[15]比例因子: 15 22 22
子带[15]比特分配表: 3

子带[16]比例因子: 15 21 31
子带[16]比特分配表: 4

子带[17]比例因子: 14 25 25
子带[17]比特分配表: 4

子带[18]比例因子: 16 25 32
子带[18]比特分配表: 4

子带[19]比例因子: 15 27 27
子带[19]比特分配表: 3

子带[20]比例因子: 14 25 33
子带[20]比特分配表: 3

子带[21]比例因子: 15 26 29
子带[21]比特分配表: 3

子带[22]比例因子: 14 25 31
子带[22]比特分配表: 1

子带[23]比例因子: 18 25 30
子带[23]比特分配表: 0

子带[24]比例因子: 14 26 29
子带[24]比特分配表: 1

子带[25]比例因子: 13 24 34
子带[25]比特分配表: 1

子带[26]比例因子: 15 27 27
子带[26]比特分配表: 0

子带[27]比例因子: 16 25 32
子带[27]比特分配表: 0

music_noise.wav
在这里插入图片描述

该音频声道数:2
观测第 622 帧
本帧比特预算:10 bits
该帧比例因子和比特分配表如下:
— 声道 1 ----
子带[ 1]比例因子: 8 8 8
子带[ 1]比特分配表: 5

子带[ 2]比例因子: 22 13 63
子带[ 2]比特分配表: 4

子带[ 3]比例因子: 23 15 63
子带[ 3]比特分配表: 3

子带[ 4]比例因子: 24 13 63
子带[ 4]比特分配表: 5

子带[ 5]比例因子: 23 14 63
子带[ 5]比特分配表: 5

子带[ 6]比例因子: 25 15 63
子带[ 6]比特分配表: 4

子带[ 7]比例因子: 24 15 63
子带[ 7]比特分配表: 4

子带[ 8]比例因子: 26 15 63
子带[ 8]比特分配表: 4

子带[ 9]比例因子: 24 17 63
子带[ 9]比特分配表: 4

子带[10]比例因子: 25 18 63
子带[10]比特分配表: 3

子带[11]比例因子: 24 16 63
子带[11]比特分配表: 4

子带[12]比例因子: 25 19 63
子带[12]比特分配表: 3

子带[13]比例因子: 24 20 63
子带[13]比特分配表: 4

子带[14]比例因子: 25 19 63
子带[14]比特分配表: 3

子带[15]比例因子: 25 20 63
子带[15]比特分配表: 3

子带[16]比例因子: 23 23 23
子带[16]比特分配表: 2

子带[17]比例因子: 26 23 63
子带[17]比特分配表: 3

子带[18]比例因子: 25 25 25
子带[18]比特分配表: 3

子带[19]比例因子: 26 26 63
子带[19]比特分配表: 1

子带[20]比例因子: 25 25 25
子带[20]比特分配表: 1

子带[21]比例因子: 25 28 63
子带[21]比特分配表: 2

子带[22]比例因子: 25 25 25
子带[22]比特分配表: 0

子带[23]比例因子: 24 24 63
子带[23]比特分配表: 0

子带[24]比例因子: 25 25 63
子带[24]比特分配表: 0

子带[25]比例因子: 25 25 63
子带[25]比特分配表: 0

子带[26]比例因子: 25 25 63
子带[26]比特分配表: 0

子带[27]比例因子: 25 29 63
子带[27]比特分配表: 0

— 声道 2 ----
子带[ 1]比例因子: 8 8 8
子带[ 1]比特分配表: 5

子带[ 2]比例因子: 24 13 63
子带[ 2]比特分配表: 4

子带[ 3]比例因子: 22 14 63
子带[ 3]比特分配表: 3

子带[ 4]比例因子: 24 13 63
子带[ 4]比特分配表: 5

子带[ 5]比例因子: 25 14 63
子带[ 5]比特分配表: 5

子带[ 6]比例因子: 24 16 63
子带[ 6]比特分配表: 4

子带[ 7]比例因子: 25 16 63
子带[ 7]比特分配表: 4

子带[ 8]比例因子: 26 15 63
子带[ 8]比特分配表: 4

子带[ 9]比例因子: 25 17 63
子带[ 9]比特分配表: 4

子带[10]比例因子: 25 19 63
子带[10]比特分配表: 3

子带[11]比例因子: 25 18 63
子带[11]比特分配表: 4

子带[12]比例因子: 25 19 63
子带[12]比特分配表: 3

子带[13]比例因子: 25 19 63
子带[13]比特分配表: 4

子带[14]比例因子: 25 21 63
子带[14]比特分配表: 3

子带[15]比例因子: 26 20 63
子带[15]比特分配表: 3

子带[16]比例因子: 25 22 63
子带[16]比特分配表: 2

子带[17]比例因子: 26 19 63
子带[17]比特分配表: 3

子带[18]比例因子: 25 19 63
子带[18]比特分配表: 3

子带[19]比例因子: 26 21 63
子带[19]比特分配表: 1

子带[20]比例因子: 25 22 63
子带[20]比特分配表: 1

子带[21]比例因子: 25 20 63
子带[21]比特分配表: 2

子带[22]比例因子: 26 22 63
子带[22]比特分配表: 0

子带[23]比例因子: 25 25 63
子带[23]比特分配表: 0

子带[24]比例因子: 25 25 25
子带[24]比特分配表: 0

子带[25]比例因子: 25 25 25
子带[25]比特分配表: 0

子带[26]比例因子: 27 23 63
子带[26]比特分配表: 0

子带[27]比例因子: 25 20 63
子带[27]比特分配表: 0

可以看出,对于只有噪声和混合了噪声的音乐比特分配较为均匀;而纯音乐比特分配较为不均,高频部分比特数较少,这主要是因为人的发声语音范围有限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值