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):指
补充:综合编程 , 其他综合 ,