当前位置:编程学习 > 网站相关 >>

MP3编码分析

目录

一、MP3文件格式解析....2

1、MP3文件及MPEG概述...2

二、MP3编码原理....4

1、MP3编码流程...4

2、子带滤波器排——编码流程图中编号为1......5

3、改良后的DCT(MDCT)——编码流程图中编号为2......7

4、声音心理学模型——编码流程图中编号为3......8

5、位元分配、量化和Huffman编码——4......12

三、SHINE程序分析....13

1、文件数据结构...13

2、编码前化工作...14

3、MP3编码...14

4、后处理...17

注:下面的资料参考网上论文整理而来

一、MP3文件格式解析
1、MP3文件及MPEG概述

MP3文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3 的全称应为MPEG1 Layer-3 音频文件。

MPEG(MovingPicture Experts Group),MPGE音频层指MPGE文件中的声音部分,根据编码质量和复杂程度分为3层,即Layer-1、Layer2、Layer3,对应MP1、MP2、MP3三种格式文件。

2、MP3文件结构

MP3文件分为TAG_V2(ID3V2),Frame, TAG_V1(ID3V1)共3部分。

 

(1)Frame格式

 

帧头为4个字节,其结构如下

typedef FrameHeader{

unsigned intsync:11;           //同步信息

unsigned intversion:2;          //版本

unsigned intlayer:2;            //层

unsigned intprotection:1;        // CRC校验

unsigned intbitrate:4;           //位率

unsigned intfrequency:2;        //采样频率

unsigned intpadding:1;          //帧长调节

unsigned intprivate:1;           //保留字

unsigned intmode:2;            //声道模式
unsigned int mode extension:2;    //扩充模式

unsigned intcopyright:1;          // 版权

unsigned intoriginal:1;            //原版标志

unsigned intemphasis:2;          //强调模式

}HEADER, *LPHEADER;

无论帧多长,每帧播放时间为26ms。MAIN_DATA长度为

Length(MAIN_DATA)=((version==MPEG1)?144:72)* bitrate / frequency + padding;

(2)ID3V1格式

ID3V1存放在MP3文件结尾,共128Bytes,各项信息都顺序存放,不足部分使用’\0’补足,可使用UltraEdit打开查看。

typedef struct tagID3V1
{

char Header[3]; /*标签头必须是"TAG"否则认为没有标签*/
char Title[30]; /*标题*/
char Artist[30]; /*作者*/
char Album[30]; /*专集*/
char Year[4]; /*出品年代*/
char Comment[28]; /*备注*/
char reserve; /*保留*/
char track;; /*音轨*/
char Genre; /*类型*/

}ID3V1,*pID3V1;

(3)ID3V2格式

ID3V2存放在MP3文件的首部,由1个标签头和若干标签帧组成。

标签头为10个字节,

char Header[3];          /*必须为"ID3"否则认为标签不存在*/
char Ver;                /*版本号ID3V2.3 就记录3*/
char Revision;            /*副版本号此版本记录为0*/
char Flag;               /*存放标志的字节,这个版本只定义了三位,稍后详细解说*/
char Size[4];             /*标签大小,包括标签头的10 个字节和所有的标签帧的大小*/

每个标签帧都有一个10个字节的帧头和至少一个字节的不固定长度的内容组成为,帧头的定义如下:

char FrameID[4];    /*用四个字符标识一个帧,说明其内容,稍后有常用的标识对照表*/
char Size[4];         /*帧内容的大小,不包括帧头,不得小于1*/
char Flags[2];        /*存放标志,只定义了6 位,稍后详细解说*/

 

二、MP3编码原理
1、MP3编码流程

 

MP3编码流程图

信号描述

(1)MP3编码输入信号:PCM(Pulse Code modulation)声音信号,有些.wav格式的音频文件为PCM信号。

(2)MP3编码输出信号:MP3格式码流

 

wav文件头格式

 

wav数据块

WAV格式文件所占容量= (取样频率X 量化位数X 声道)X 时间/ 8 (字节= 8bit)。

14H~15H的2个字节值为1时表示数据位PCM编码格式,可以作为MP3编码器的输入。

 

2、子带滤波器排——编码流程图中编号为1

 

子带滤波器及MDCT处理

 

子带滤波过程

为多重相位相位滤波器,将PCM信号输入后,滤波器系统看做线性系统,则有

          

再将用32点进行下采样,得子带滤波器输出结果为

 

ISO-M标准给出了如下图所示的实现方法,我们的程序将按照该实现方法编写。

 

ISO-M给出的滤波器组的实现

将上图整个流程综合用表达式表示为

其中

为分析矩阵的系数。是窗函数的系数,共512个点,其值在ISO11172-3标准的 ANNEX_C.DOC文档中给出了,为子带序列号,范围为0~31,为第i个子带的样点,且t是取样间隔的整数倍。

3、改良后的DCT(MDCT)——编码流程图中编号为2

DCT变换的目的:进一步提高频谱解析度,将每一个子频带细分为18个次频带。

在正式DCT运算前,需要对子带信号进行加窗处理,有如下4中窗框,长窗框(Normal Window)、长短窗框(Start Window)、短窗框(Short Window)与短长窗框(Stop Window)。

长窗框具有高的频谱解析度,短窗框的时间解析度比较高。

然后进行DCT变换,变换表达式 如下,

 

为DCT变换前加窗处理后的结果,如果加短窗框,则DCT运算中的,若加长框,则DCT运算中的。

在提高频域解析度的同时,加长框后会有假象(混叠现象)产生,因为不同子带之间存在混叠的信号,加长框会对混叠的信号当做该子带内正常信号处理,一种避免的办法是减弱混叠信号的强度。

噢,现在我们是知道了,所谓改良的DCT只不过是,(1)DCT变换前加窗处理(2)DCT变换(3)长框假象的处理 这3个过程。

到这里,还有一个问题,那就是窗框的选择问题,该如何选择窗框?窄的窗框具有好的时间分辨率,宽的窗框具有好的频率分辨率。我们回到编码流程图,

请注意图中的标号3,3表示声音心理学模型,窗框的宽窄选择与声音心里学模型相关,下面来分析该模型。

4、声音心理学模型——编码流程图中编号为3

研究声音心理学模型用途有:

(1)研究模型的PE值决定做MDCT变换时使用长窗框还是短窗框

(2)研究模型的SMR值决定量化编码时的比特数分配

现在不明白以上2条用途没关系,我们先来分析几个重要的概念。

(1)SPL(Sound Pressure Level),表示声音强度的名词,SPL是评价听觉刺激强度的标准,也就是说,我们对外界声音的感觉强度完全由它决定,其单位为dB。

(2)静音门槛曲线

横轴为f(HZ),纵轴为SPL(dB),若声音强度(SPL)低于该曲线的值表示人听不到声音,如下图所示。从图中可以得出几条结论:

第一,人的听觉频率范围大约在10Hz~20KHz之间

第二,大约在3KHz到4KHz时SPL有最小值,也就是所人在该频率范围内的听觉最敏锐

 

(3)临界频带(Critical Bands)

因为人耳对不同频率的敏感程度不同,MPEG1/Audio将22KHz范围内可感知的频率范围划分为23~26个临界频带,如下图。

 

从表中能得出几条结论:

第一,当当中心频率值在500Hz以内时,不同临界频带的带宽()几乎相同,约100Hz

当中心频率值大于500Hz后,随着f值得上升,临界频带的带宽剧增

第二,从表中也可以看出,人耳对低频的解析度要比高频更好

(4)频域上的遮蔽效应

SPL较大的信号容易掩盖频率相近的SPL较小的信号,叫声音的遮蔽效应。就比如在机场很难听到打电话的声音。

 

如上图所示,Masking Threshold将大约在0.7kHz,1.6kHz和2.3kHz的信号遮蔽了,当然0.7kHz信号的SPL在静音门槛曲线之下,不被遮蔽也是听不到的。

在这里,涉及3个重要的量——SMR、SNR和MNR。

SMR(signal-to-maskratio):指在一个临界频带内,从masker到遮噪门槛值的距离。

SNR(signal-to-noiseratio):指

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,