MPEG音频编码

实验原理

音频编码的核心:心理声学模型。 

子带编码:将原始信号分解为若干个子频带,对其分别进行编码处理后再合成为全频带信号。

人的感知特性:掩蔽(强音会屏蔽旁音的听域)。掩蔽可以分为四种情况:乐音对噪声的掩蔽,乐音对乐音的掩蔽,噪声对乐音的掩蔽,噪声对噪声的掩蔽。


频域掩蔽域随声压级变化曲线

音频输入源频率多样,每一个频率的声音都会有一个屏蔽曲线,上图仅仅是1kHZ的乐音如何屏蔽。问题在于如何分割频带,如何合成各个新的屏蔽曲线。于是引入临界频带,人耳频带被称为临界频带。由于人耳不能区分同一频带内同时发生的不同声音,并且掩蔽效应在临界频带内不会大起大伏,比较稳定。通常认为从20Hz16kHz25个临界频带,单位为bark,1 Bark = 一个临界频带的宽度 。心理声学模型进行数据分析的基本处理单位就是临界频带。掩蔽音和被掩蔽音的组合方式分四种:乐音对噪声的掩蔽,乐音对乐音的掩蔽,噪声对乐音的掩蔽,噪声对噪声的掩蔽。掩蔽效应有以下特点:乐音掩盖其他音的能力较弱,噪音掩盖其他音的能力较强;掩蔽时,对本身频率略高的频率掩蔽效果比对本身频率略低的掩蔽效果更好。一段声音由主频率与次要频率组成,最后的掩蔽曲线由所有频率的掩蔽曲线整合。

音乐与语音信号由一系列复杂的频谱分量构成 ,相应的这些多个掩蔽分量也会相互影响并最终获得一个整体的掩蔽阈值。对于多个掩蔽分量的综合掩蔽效果,目前有多种模型给出了描述方案 。Lutfi对多个掩蔽音同时存在时的综合掩蔽效果进行了研究:每个掩蔽音的掩蔽效果先独立变换然后再线性相加。 

问题:综合掩蔽效果与各掩蔽信号的声音级以及掩蔽信号的个数都有关系。如何整合掩蔽音?

1. 当两个信号重叠并落在一个临界频带中时,二者的掩蔽分量可以线性相加。

2. 对于复杂音频信号可将其频谱分割成一系列离散段,每段就是一个掩蔽信号。各掩蔽音互不重叠,即以一个临界带为单位。各掩蔽音的声压级则通过将对应的临界频带上的短时功率谱密度线性相加得到。 


对声音进行快速傅里叶变换FFT,频域的谱线越细越好。由于短时相关性,前后的相关的样本不能过多,才能抓住前后样本之间的瞬时关系。要提高时域的分解力,必须牺牲频域分解力,这就是时域和频域的矛盾所在。最后量化都是用一个量化表(查表)。最后输出帧包含信息:1、比特分配信息。2.比例因子信息。3.子带量化以后的量化样本。时域的高可变性,对应频域的高相关性,因此对频域信号可以预测。若信号比较平缓,比例因子查表,比例因子大小差不多,找到比最大值大的最小值,用2bit表示比例因子公用信息:00代表三个信号公用一个比例因子,01代表前两个信号用一个比例因子,10代表后两个信号公用一个比例因子,11代表三个信号用不同的比例因子。用32个带通滤波器,把音频分为32个子带。其中,每一个带通滤波器都由低通滤波器的调制得到。



输入声音信号经过一个多相滤波器组,变换到多个子带。同时经过“心理声学模型”计算以频率为自变量的噪声掩蔽阈值。量化和编码部分用信掩比SMR决定分配给子带信号的量化位数,使量化噪声<掩蔽域值。最后通过数据帧包装将量化的子带样本和其它数据按照规定的帧格式组装成比特数据流。

1.多相滤波器组(Polyphase Filter Bank):将PCM样本变换到32个子带的频域信号,如果输入的采样频率为48kHz,那么子带的频率宽度为48/(2*32)=0.75Hz

2.比例因子的取值和编码
*对各个子带每12个样点进行一次比例因子计算。先定出12个样点中绝对值的最大值。查比例因子表中比这个最大值大的最小值作为比例因子。用6比特表示。
*第2层的一帧对应36个子带样值,是第1层的三倍,原则上要传三个比例因子。每帧中每个子带的三个比例因子被一起考虑,划分成特定的几种模式。根据这些模式,1个、2个或3个比例因子和比例因子选择信息(每子带2比特)一起被传送。如果一个比例因子和下一个只有很小的差别,就只传送大的一个,这种情况对于稳态信号经常出现。

3.1024点FFT
引入FFT补偿频率分辨率不足的问题。

4.心理声学模型(Psychoacoustic Model):计算信号中不可听觉感知的部分,计算噪声遮蔽效应
*听觉系统中存在一个听觉阈值电平,低于这个电平的声音信号就听不到,听觉阈值的大小随声音频率的改变而改变。
一个人是否听到声音取决于声音的频率,以及声音的幅度是否高于这种频率下的听觉阈值。听觉掩蔽特性即听觉阈值电平是自适应的,会随听到的不同频率声音而发生变化。
*利用心理声学模型可以消除更多的冗余数据,人耳听不见的部分和引入的低于听觉阈值量化噪声不编码,主要声音成分用较多的比特数表示,从而获得更大的压缩效率。

5.比特分配器(Bit Allocator):根据心理声学模型的计算结果,为每个子带信号分配比特数
*在调整到固定的码率之前
        先确定可用于样值编码的有效比特数,这个数值取决于比例因子、比例因子选择信息、比特分配信息以及辅助数据所需比特数。
*比特分配的过程
 对每个子带计算掩蔽-噪声比MNR,即:MNR = SNR –SMR 其中SNR是信噪比 ,SMR是信掩比;对最低MNR的子带分配比特,使获益最大的子带的量化级别增加一级;重新计算分配了更多比特子带的MNR,循环,直到没有比特可用。


6.装帧(Frame Creation):产生MPEG-I兼容的比特流


代码分析

m2aenc.c

int main (int argc, char **argv)  
{...//add  7.1  
  FILE *output;  
  char temp[50] = "frame_infomation.txt";  
  output = fopen(temp, "w");  
   if (output == NULL)  
   {  
     printf("Creating output txt file failed.\n");  
     exit(1);  
   }  
   //end  
......  
#else  
   
    //add 7.1  
    if(frameNum==50)    
{    
   
    fprintf(output,"sampling rate=%.1f khz\n",s_freq[header.version][header.sampling_frequency]);    
    fprintf(output,"bits rate=%d kbps\n", bitrate[header.version][header.bitrate_index]);    
    fprintf(output,"the %d frame\n",frameNum);    
    fprintf(output,"available bits num=%d\n",adb);    
    fprintf(output,"scale factors:\n");    
    for(k=0;k<nch;k++)    
    {    
        fprintf(output,"channel[%d]\n",k);    
        for(i=0;i<frame.sblimit;i++)    
        {    
            fprintf(output,"subband[%d]:",i);    
            for(t=0;t<3;t++)    
            {    
                fprintf(output,"%d\t",scalar[k][t][i]);    
            }    
            fprintf(output,"\n");    
        }    
    }    
    
}    
    //add end  
    transmission_pattern (scalar, scfsi, &frame);  
    main_bit_allocation (smr, scfsi, bit_alloc, &adb, &frame, &glopts);  
    //add 7.1  
    if(frameNum==50)    
{    
    int k,i;   
    fprintf(output,"bits allocation:\n");    
    for(k=0;k<nch;k++)    
    {    
        fprintf(output,"channel[%d]\n",k);    
        for(i=0;i<frame.sblimit;i++)          
            fprintf(output,"subband[%d]:%d\n",i,bit_alloc[k][i]);    
                     
    }    
}    
    //add end  
    if (error_protection)  
      CRC_calc (&frame, bit_alloc, scfsi, &crc);  
    encode_info (&frame, &bs);  
    if (error_protection)  
      encode_CRC (crc, &bs);  
    encode_bit_alloc (bit_alloc, &frame, &bs);  
    encode_scale (bit_alloc, scfsi, scalar, &frame, &bs);  
    subband_quantization (scalar, *sb_sample, j_scale, *j_sample, bit_alloc,  
              *subband, &frame);  
    sample_encoding (*subband, bit_alloc, &frame, &bs);  
      
#endif

实验结果






  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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音频编码技术是一种高效而先进的音频压缩技术,具有出色的压缩效率和音质表现,在各类音频应用中有着广泛的应用和普及。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值