打印
[51单片机]

振南对ADPCM音频编解码原理的通俗阐述 [附振南ADPCM解码源码]

[复制链接]
1621|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znmcu|  楼主 | 2016-6-16 23:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 znmcu 于 2016-6-16 23:48 编辑







在编写ZN-X开发板整板测试程序的后期,振南开始转向专注于ADPCM音频的解码算法。对于音视频的编解码,振南一直是很感兴趣的。
VS1003录音向外输出的数据是经过ADPCM编码的,所谓ADPCM编码是一种自适应差分脉码调制技术。它可以对音频数据在毫无损失的前提下,将数据量压缩为原来的1/4,这对于音频来说,意义是重大的。我很想深入去研究一下ADPCM,但因为没有时间,一直被搁置。
ADPCM源于微软的Windows,一般的WAV文件就是使用它来编码的,WAVWindows上的标准音频格式。ADPCM算法已经被标准化了,现行使用的是IMA-ADPCM,即IMA组织制订的ADPCM算法。这种算法比较简单,但却有较高的压缩比。
ADPCM编码的原理(我会尽量说的通俗的):
如果我们对一个声音信号进行采样,采用16位量化,比如采集53个点,如下图:
如果我们直接存储每一个点的16位的采样值,这样就需要53X16=848个位,大约是106字节。但我们换个思路,我们不存储采样值,而存储采样点两两之间的差值(采样值可能会很大,需要更多的位数来表达,比如16个位,但是两点之间一般来说是比较连续的,差值不会太大,所以这个差值只需要很少的几个位即可表达,比如4个位)。这样,我们只需要知道前一个点的值,又知道它与下一个点的差值,就可以计算得到下一个点了。这个差值就是所谓的“差分”!
这就是DPCM的主要思想精髓!!
“什么?DPCM?我们不是说ADPCM吗?”是的,DPCM是差分脉码调制,多一个A,就是自适应!为什么要自适应?
你有没有考虑到一个问题?如果取两点之差,这个差值超过了4个位可以表达的范围,该如何处理?音频信号虽然具有很高的连续性,但是我们并不能保证两点之间产生突变的可能!
前面的差值可能是35812,后面突然变成2040,甚至更大,这时4个位还够用吗?数据量的减少,不能以数据丢失和失真作为代价!!
如果有一种方法,可以把两点之间的差值变换到固定的几个位即可表达的范围内,那就好了!而且这种变换是实时的,并且具有自适应性和预测能力的。这就是ADPCM的基本思想。它定义了一些因子,这种算法如果发现两点之间差值变大之后,就会用差值去和相应的因子作除法,从而减小了差值,让它可以减少到几个位可表达的数值范围内。而选择哪一个因子来除它,这就是ADPCM编码要作的事情了。
ADPCM算法巧妙的利用了音频信号的特点,也就是音频信号上的点与它前面的若干个点是有一定的相关性的,从而可以对下一个点进行预测,从而预先估计这个差值,从而选取相应的除数因子,去把差值归化到数值范围内!!

以上就是ADPCM对音频信号进行编码大体思想和过程!!

我们从VS1003中读取到的,就是经过ADPCM编码后的数据,也就是音频信号采样点之间的差值!(只是这些差值并不能直接用来去计算下一个采样点,而需要与因子相乘,计算得到真正的差值,这与编码是一个相逆的过程。乘数因子就是编码时用的那个除数因子,解码时要根据当前的音频信号去预判,以便取合适的因子!!)

以上是对ADPCM编码音频的解码的方法,它适用于VS1003输出的音频数据,同样适用于使用ADPCM编码的WAV文件,以及所有使用ADPCM编码的声音数据!!!
【比如一些语音产品,像数字对讲机、数字广播等等,也都可以使用ADPCM编码,这样可以很好的降低数据带宽要求!!】

振南的ADPCM解码 源代码[已经加密处理,可联系振南QQ 987582714
振南的ADPCM解码 源代码: 【百度云盘】  【腾讯微云】


相关帖子

沙发
liuyimao485812| | 2016-6-26 09:29 | 只看该作者
非常不错,谢谢!

使用特权

评论回复
板凳
xwj| | 2016-6-26 11:09 | 只看该作者
ADPCM压缩能力太差,数据少不了多少。不带包头的话压缩比1:4。不过压缩/解压缩算法非常的简单,适合单片机。声音效果马马虎虎,频响不太好。

而高级点的应该去玩AAC

使用特权

评论回复
地板
znmcu|  楼主 | 2016-6-27 14:01 | 只看该作者
我做这个adpcm,主要源于vs1003录音出来是adpcm的

使用特权

评论回复
5
znmcu|  楼主 | 2016-6-27 20:44 | 只看该作者
adpcm还是很好的,基本是无损的,它可以还原16位音频。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:振南的znFAT -- 单片机上上的FAT32文件系统 www.znmcu.cn

4474

主题

5195

帖子

33

粉丝