实验报告6_MPEG音频编码

来源:互联网 发布:12345打字软件下载 编辑:程序博客网 时间:2024/06/16 07:37

一.实验原理

主要利用了心理声学模型

(一)多相滤波器组



(二)量化和编码

对各个子带每12个样点进行一次比例因子计算。先定出12个样点中绝对值的最大值。查比例因子表中比这个最大值大的最小值作为比例因子。用6比特表示。
-第2层的一帧对应36个子带样值,是第1层的三倍,原则上要传三个比例因子。为了降低比例因子的传输码率,采用了利用人耳时域掩蔽特性的编码策略。
-每帧中每个子带的三个比例因子被一起考虑,划分成特定的几种模式。根据这些模式,1个、2个或3个比例因子和比例因子选择信息(每子带2比特)一起被传送。如果一个比例因子和下一个只有很小的差别,就只传送大的一个,这种情况对于稳态信号经常出现。
-使用这一算法后,和第1层相比,第2层传输的比例因子平均减少了2个,即传输码率由22.5Kb/s降低到了7.5Kb/s。

(三)码率分配

1.在调整到固定的码率之前
-先确定可用于样值编码的有效比特数
-这个数值取决于比例因子、比例因子选择信息、比特分配信息以及辅助数据所需比特数
2.比特分配的过程
-对每个子带计算掩蔽-噪声比MNR,是信噪比SNR –信掩比SMR,即:MNR = SNR –SMR

3.算法:使整帧和每个子带的总噪声—掩蔽比最小
-计算掩蔽-噪声比(mask-to-noise ratio, MNR):
 MNR = SNR –SMR (dB)
 其中SNR 由MPEG-I标准给定(为量化水平的函数)
 MNR:表示波形误差与感知测量之间的误差,子带信号可压缩到MNR

4.算法:循环,直到没有比特可用:
-MNR = SNR –SMR (dB)
-对最低MNR的子带分配比特,使获益最大的子带的量化级别增加一级
-重新计算分配了更多比特子带的MNR


二.实验流程

1.理解程序设计的整体框架
-理解感知音频编码的设计思想
-两条线
-时-频分析的矛盾!
-理解心理声学模型的实现过程
-临界频带的概念
-掩蔽值计算的思路
-理解码率分配的实现思路

2.输出音频的采样率和目标码率
-选择某个数据帧,输出
-该帧所分配的比特数
-该帧的比例因子
-该帧的比特分配结果


三.关键代码

m2aenc.c

输出文件:

FILE *output_txt;char temp[100] = "hyw_frame_info"; 

主函数中:

output_txt = fopen(temp, "w");if (output_txt == NULL)    printf("Creating output txt file failed.\n");

#ifdef NEWENCODE    ...#else    scale_factor_calc (*sb_sample, scalar, nch, frame.sblimit);    pick_scale (scalar, &frame, max_sc);    int sb, gr, ch;    if (frameNum == 11)       {                 fprintf(output_txt, "采样频率为 %d kHz. \n 目标码率为 %d kbps.\n",            header.sampling_frequency, bitrate[header.version][header.bitrate_index]);        fprintf(output_txt, "输出的为第 %d 帧\n", frameNum);         fprintf(output_txt, "分配的比特数为 %d\n", adb);        fprintf(output_txt, "比例因子为:\n");         for (ch = 0; ch < nch; ch++)        {            fprintf(output_txt, "channel[%2d] \n", ch + 1);             for (sb = 0; sb < frame.sblimit; sb++)             {                fprintf(output_txt, "subband[%2d]:    ", sb + 1);                  for (gr = 0; gr < 3; gr++)                 {                    fprintf(output_txt, "%2d\t", scalar[ch][gr][sb]);                }                fprintf(output_txt, "\n");            }        }    }    ...  }


四.实验结果




原创粉丝点击