ADPCM 音频压缩算法

本文介绍了ADPCM音频压缩算法,通过将16bit采样数据压缩到4bit,以实现音频数据的高效存储和传输。在STM32平台上,提供了ADPCM编码和解码的C语言实现,包括编码器和解码器的函数实现。文中代码实现了将16Bit音频数据压缩成4Bit,并以8Bit形式输出,解码时将压缩数据分开恢复为原始16Bit数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对 16bits( 或8bits或者更高) 声音波形数据的一种有损压缩算法,它将声音流中每次采样的 16bit 数据以 4bit 存储,所以压缩比 1:4. 而且压缩/解压缩算法非常简单,是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为 .AUD 的大多用ADPCM 压缩。
  ADPCM 主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的。

  8bits采样的声音人耳是可以勉强接受的,而 16bit 采样的声音可以算是高音质了。ADPCM 算法却可以将每次采样得到的 16bit 数据压缩到 4bit。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。

以上文字摘自http://blog.youkuaiyun.com/lxc1014/article/details/9316381

自己写该算法时参考了上述博客中的内容。但后来才知道STM32官方也有该算法的文档和程序,于是自己基于上面两份资料写了关于该算法的代码。当然还有很多不懂的,不对处望博友指正。我用的是STM32的ADC、DAC,它是12Bit采样,所以我稍微将传统的ADPCM给改了下。

typedef __packed struct
{
int16_t valprev;

int8_t index;
}_s_ADPCM;

int8_t index_adjust[16] = {-1,-1,-1,-1,2,4,6,8,-1,-1,-1,-1,2,4,6,8};
uint16_t step_table[89] = 

{
 7,8,9,10,11,12,13,14,16,17,19,21,23,25,28,31,34,37,41,45,
 50,55,60,66,73,80,88,97,107,118,130,143,157,173,190,209,230,253,279,307,337,371,
 408,449,494,544,598,658,724,796,876,963,1060,1166,1282,1411,1552,1707,1878,2066,
 2272,2499,2749,3024,3327,3660,4026,4428,4871,5358,5894,6484,7132,7845,8630,9493,
 10442,11487,12635,13899,15289,16818,18500,20350,22385,24623,27086,29794,32767
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奶盖红茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值