mp3解码算法原理详解

mp3解码算法原理详解

ID:40560025

大小:294.00 KB

页数:17页

时间:2019-08-04

mp3解码算法原理详解_第1页
mp3解码算法原理详解_第2页
mp3解码算法原理详解_第3页
mp3解码算法原理详解_第4页
mp3解码算法原理详解_第5页
资源描述:

《mp3解码算法原理详解》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、MPEG1Layer3(MP3)解码算法原理详解本文介绍了符合ISO/IEC11172-3(MPEG1AudiocodecLayerI,LayerIIandLayerIIIaudiospecifications)或ISO/IEC13818-3(BCAudioCodec)的音频编码原理。通过madlib解码库进行实现。1、程序系统结构 mp3解码流程图其中同步及差错检查包括了头解码模块在主控模块开始运行后,主控模块将比特流的数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码,根据它们的信息进行尺度因子解码及哈夫曼解码,得

2、出的结果经过逆量化,立体声解码,混淆缩减,IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的PCM码流,再由主控模块将其放入输出缓冲区输出到声音播放设备。2、主控模块主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。其中,输入输出缓冲区均由DSP控制模块提供接口。输入缓冲区中放的数据为原始mp3压缩数据流,DSP控制模块每次给出大于最大可能帧长度的一块缓冲区,这块缓冲区与上次解帧完后的数据(必然小于一帧)连接在一起,构成新的缓冲区。输出缓冲区中将存放的数据为解码出来的PCM数据,代表了声音的振幅。它由一块固定长度的缓冲区

3、构成,通过调用DSP控制模块的接口函数,得到头指针,在完成输出缓冲区的填充后,调用中断处理输出至I2S接口所连接的音频ADC芯片(立体声音频DAC和DirectDrive耳机放大器)输出模拟声音。3、同步及差错检测同步及差错检测模块主要用于找出数据帧在比特流中的位置,并对以此位置开始的帧头、CRC校验码及帧边信息进行解码,这些解码的结果用于后继的尺度因子解码模块和哈夫曼解码模块。Mpeg1layer3的流的主数据格式见下图:主数据的组织结构图其中granule0和granule1表示在一帧里面的粒度组1和粒度组2,channel0和channel1

4、表示在一个粒度组里面的两个通道,scalefactor为尺度因子quantizedvalue为量化后的哈夫曼编码值,它分为bigvalues大值区和count11值区CRC校验:表达式为X16+X15+X2+13.1 帧同步帧同步目的在于找出帧头在比特流中的位置,ISO1172-3规定,MPEG1的帧头为12比特的“111111111111”,且相邻的两个帧头隔有等间距的字节数,这个字节数可由下式算出:N=144*比特率/采样率如果这个式子的结果不是整数,那么就需要用到一个叫填充位的参数,表示间距为N+1。3.2 头信息解码头信息解码目的是找出这一

5、帧的特征信息,如采样率,是否受保护,是否有填充位等。头信息见下图:帧头信息结构图其长度为4字节,数据结构如下:typedefstruct tagHeader{unsignedintsync:11;//同步信息unsignedintversion:2;//版本unsignedintlayer:2;//层unsignedinterror2protection:1;//CRC校正unsignedintbit2rate2index:4;//位率索引unsignedintsample2rate2index:2;//采样率索引unsignedintpaddin

6、g:1;//空白字unsignedintextension:1;//私有标志unsignedintchannel2mode:2;//立体声模式unsignedintmodeextension:2;//保留unsignedintcopyright:1;//版权标志unsignedintoriginal:1;//原始媒体unsignedintemphasis:2;//强调方式}HEADER3.3 帧边信息解码帧边信息解码的主要目的在于找出解这帧的各个参数,包括主数据开始位置,尺度因子长度等。帧边信息如下图所示:帧边信息(side_infomation)

7、表3.4 main_data_beginmain_data_begin(主数据开始)是一个偏移值,指出主数据是在同步字之前多少个字节开始。需要注意的是,1.帧头不一定是一帧的开始,帧头CRC校验字和帧边信息在帧数据中是滑动的。2.这个数值忽略帧头和帧边信息的存在,如果main_data_begin=0,则主数据从帧边信息的下一个字节开始。参见下图:同步示意图3.5 block_typeblock_type指出如下三种块类型:block_type=0长块block_type=1开始块block_type=3结束块block_type=2短块在编码过程

8、中进行IMDCT变换时,针对不同信号为同时得到较好的时域和频域分辨率定义了两种不同的块长:长块的块长为18个样本,短块的块

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。