MP3解码算法原理解析

本文详细介绍了MP3解码的整体结构,包括同步及差错检测、哈夫曼解码、逆量化、联合立体声转换等关键步骤。通过同步找到帧头,解码头信息获取采样率和比特率等,接着进行哈夫曼解码和逆量化,随后通过IMDCT、频率反转等处理,最终得到左右声道的PCM码流。整个过程涉及多种技术和算法,对音视频处理有深入理解的读者会受益匪浅。
摘要由CSDN通过智能技术生成

写在前面

如果大家对音视频技术感兴趣,可以订阅我的专题 视频播放器和音视频基础知识

一:MP3编解码整体结构介绍

MP3解码流程
看懵逼了是吧。这里面有很多概念需要一一讲解。

  • 比特流:比特流是一种内容分发协议。它采用高效的软件分发系统和点对点技术共享大体积文件(如一部电影或电视节目),并使每个用户像网络重新分配结点那样提供上传服务。(因为没有专业学过这方面的内容,我暂且把它理解为一段数据,里面的内容有时间再探讨)。

    • 同步及差错检查:mp3的数据流的传输和同步工作中都是以帧为单位的。帧是MP3最小的格式单元,它不可以再被分割。每一帧头部包含了当前帧的一些基本信息,其中就包括同步信息。同步信息的组成是包含连续的12比特的‘1’。mp3视频解码工作的第一步就是使解码器和输入数据流同步。在启动解码器之后,可以搜索数据中连续12个比特的‘1’来完成。在取得同步信息之后,帧头部后续的信息是:帧头信息,包括采样率、填充位、比特率等信息。

    • 哈夫曼解码:你可以这样理解,我把不同的数据通过一个表格进行一一对应,用这个对应的码来表示原来的信息,那么出现频率高的数,我用尽可能短的码来表示。出现频率低的数用长一点的码来表示。这样可以减少表示信息的内容量。而且传输过去之后,再按照这个对照码可以进行还原。大概原理就是这个。

    • 逆量化 量化过程的逆过程,想了解这个各位需要学习一下量化的过程。

    • IMDCT:IMDCT是缩写,全称是:Inverse Modified Discrete Cosine Transform(反向修正离散余弦变换)。在MP3中需要使用此算法将输入数据从频域变换到余弦域,对子带滤波进行补偿运算。使用逆向离散余弦变换的公式,对反量化得出的信号进行变换。IMDCT运算公式大概长这样:IMDCT运算公式IMDCT运算过程如下图:IMDCT运算过程
    • 频率反转:对逆向离散余弦变换的输出值中的奇数号子带(0到31号子带中的1,3,5,…,31)中的奇数号样本值(每个子带中的0到17号样本值的1,3,5,…,17号样本值)进行反相处理,用来补偿编码时为提高离散余弦变换效率而进行的频率反转。

针对以上的概念,如果有不清楚的,可以看我的另外一篇博客:MP3头帧解析,里面有一些和帧头信息相关的知识。

同步及差错检查包括了头部信息解码模块 在主控模块开始运行后,主控模块将比特流的数据缓冲区交给同步及差错检查模块,此模块包含两个功能,即头信息解码及帧边信息解码,根据它们的信息进行 尺度因子解码及哈夫曼解码,得出的结果经过逆量化,立体声解码,混淆缩减, IMDCT,频率反转,合成多相滤波这几个模块之后,得出左右声道的 PCM 码 流 , 再由主控模块将其放入输出缓冲区输出到声音播放设备(总之很复杂)。

2、主控模块

主控模块的主要任务是操作输入输出缓冲区,调用其它各模块协同工作。 其中,输入输出缓冲区均由 DSP 控制模块提供接口。

输入缓冲区中放的数据为原始 mp3 压缩数据流,DSP 控制模块每次给出大于最大 可能帧长度的一块缓冲区,这块缓冲区与上次解帧完后的数据(必然小于一帧) 连接在一起,构成新的缓冲区。

输出缓冲区中将存放的数据为解码出来的 PCM 数据,代表了声音的振幅。它

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值