预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共62页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://blog.csdn.net/jeffchenbiao/article/details/7332863"Mp3解码算法流程 第1章声明 本文档版权归属于 西安交通大学人工智能与机器人研究所 作者:李国辉HYPERLINK"mailto:ghli@aiar.xjtu.edu.cn"ghli@aiar.xjtu.edu.cn 第2章Mp3解码算法流程 MP3的全称为MPEG1Layer-3音频文件,MPEG音频文件是MPEG1标准中的声音部分,也叫MPEG音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer1、Layer2、Layer3,且分别对应MP1、MP2、MP3这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG音频编码的层次越高,编码器越复杂,压缩率也越高,MP1和MP2的压缩率分别为4:1和6:1-8:1,而MP3的压缩率则高达10:1-12:1。一分钟CD音质的音乐,未经压缩需要10MB的存储空间,而经过MP3压缩编码后只有1MB左右。不过MP3对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“心理声学模型”,即编码时先对音频文件进行频谱分析,然后再根据心理声学模型把谱线分成若干个阈值分区,并计算每个阈值分区的阈值,接着通过量化和熵编码对每个谱线进行编码,最后形成具有较高压缩比的MP3文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。 2.1.Mp3文件格式 MP3文件以一帧为一个编码单元,各帧编码数据是独立的。为了清晰而准确地描述mp3文件格式,下面采用位流语法描述,这种语法格式与c语言近似,易于理解,且描述清晰。其中粗体表示码流中的数据项,bslbf代表位串,即“Bitstring,leftbitfirst”,uimsbf代表无符号整数,即”unsingedinteger,mostsignificantbitfirst”,数字表示该数据项所占的比特数。 2.1.1.AudioSequence audiosequence() { while(true) { frame() } } 2.1.2.AudioFrame frame() { header() error_check() audio_data() ancillary_data() } 2.1.3.Header header() { syncword12bslbf ID1bslbf layer2bslbf protection_bit1bslbf bitrate_index4bslbf sampling_frequency2bslbf padding_bit1bslbf private_bit1bslbf mode2bslbf mode_extension2bslbf copyright1bslbf original/home1bslbf emphasis2bslbf } 2.1.4.ErrorCheck error_check() { if(protection_bit==0) crc_check16rpchof } 2.1.5.Audiodata,LayerIII audio_data() { main_data_begin9uimsbf if(mode==single_channel)private_bits5bslbf elseprivate_bits3bslbf for(ch=0;ch<nch;ch++) for(scfsi_band=0;scfsi_band<4;scfsi_band++) scfsi[ch][scfsi_band]1bslbf for(gr=0;gr<2;gr++) for(ch=0;ch<nch;ch++){ part2_3_length[gr][ch]12uimsbf big_values[gr][ch]9uimsbf global_gain[gr][ch]8uimsbf scalefac_compress[gr][ch]4bslbf window_switching_flag[gr][ch]1bslbf if(window_switching_flag[gr][ch]){ block_type[gr][ch]2bslbf mixed_block_flag[gr][ch]1uimsbf for(region=0;region<2;region++) table_select[gr][ch][region]5bslbf for(window=0;window<3;window++) subblock_gain[gr][ch][window]3uimsbf } else{ for(region=0;region<3;region++) t