`
he91_com
  • 浏览: 399334 次
文章分类
社区版块
存档分类
最新评论

ADPCM压缩算法

 
阅读更多

 ADPCM(Adaptive Differential Pulse Code Modulation),是一种针对16bits(或8bits或者更高)声音波形数据的一种有损压缩算法,它将声音流中每次采样的16bit数据以4bit存储,所以压缩比1:4.而且压缩/解压缩算法非常简单,所以是一种低空间消耗,高质量高效率声音获得的好途径。保存声音的数据文件后缀名为.AUD的大多用ADPCM压缩。
  ADPCM主要是针对连续的波形数据的,保存的是波形的变化情况,以达到描述整个波形的目的,由于它的编码和解码的过程却很简洁,列在后面,相信大家能够看懂。
  8bits采样的声音人耳是可以勉强接受的,而16bit采样的声音可以算是高音质了。ADPCM算法却可以将每次采样得到的16bit数据压缩到4bit。需要注意的是,如果要压缩/解压缩得是立体声信号,采样时,声音信号是放在一起的,需要将两个声道分别处理。

ADPCM压缩过程

  首先我们认为声音信号都是从零开始的,那么需要初始化两个变量

    int index=0,prev_sample=0;

  下面的循环将依次处理声音数据流,注意其中的getnextsample()应该得到一个16bit的采样数据,而outputdata()可以将计算出来的数据保存起来,程序中用到的step_table[],index_adjust[]附在后面:

    int index=0,prev_sample:=0;

    while (还有数据要处理)
    {
      cur_sample=getnextsample();        //得到当前的采样数据
      delta=cur_sample-prev_sample;       //计算出和上一个的增量
      if (delta<0) delta=-delta,sb=8;      //取绝对值
      else sb = 0 ;               // sb保存的是符号位
      code = 4*delta / step_table[index];    //根据steptable[]得到一个0-7的值
      if (code>7) code=7;            //它描述了声音强度的变化量
      index += index_adjust[code] ;       //根据声音强度调整下次取steptable的序号
      if (index<0) index=0;           //便于下次得到更精确的变化量的描述
      else if (index>88) index=88;
      prev_sample=cur_sample;
      outputode(code|sb);            //加上符号位保存起来
    }

 

ADPCM解压缩过程

  接压缩实际是压缩的一个逆过程,同样其中的getnextcode()应该得到一个编码,,而outputsample()可以将解码出来的声音信号保存起来。这段代码同样使用了同一个的setp_table[]和index_adjust()附在后面:

    int index=0,cur_sample=0;

    while (还有数据要处理)
    {
        code=getnextcode();                       //得到下一个数据
        if ((code & 8) != 0) sb=1 else sb=0;
        code&=7;                            //将code分离为数据和符号
        delta = (step_table[index]*code)/4+step_table[index]/8;     //后面加的一项是为了减少误差
        if (sb==1) delta=-delta;
        cur_sample+=delta;                       //计算出当前的波形数据
        if (cur_sample>32767) output_sample(32767);
        else if (cur_sample<-32768) output_sample(-32768);
        else output_sample(cur_sample);
        index+=index_adjust[code];
        if (index<0) index=0;
        if (index>88) index=88;
     }

附表

     int index_adjust[8] = {-1,-1,-1,-1,2,4,6,8};

     int 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
     }

算法介绍:http://www.mp3-tech.org/programmer/docs/adpcm.pdf

分享到:
评论

相关推荐

    ADPCM压缩算法程序

    ADPCM压缩算法程序ADPCM压缩算法程序ADPCM压缩算法程序

    adpcm压缩算法演示程序,adpcm压缩算法演示程序.zip

    在这个“adpcm压缩算法演示程序,adpcm压缩算法演示程序.zip”中,我们可以期待找到一个用C#编写的ADPCM压缩算法的实现。这个程序可能是为了教学或研究目的而创建的,它可能包含以下组成部分: 1. **源代码**:源...

    adpcm压缩算法演示程序,adpcm压缩算法演示程序.rar

    **ADPCM压缩算法基本原理** 1. **预测编码**:在ADPCM中,当前样本值是基于前一时刻样本的预测值。预测器会根据过去的样本计算一个预测值,这个预测值通常是由线性或非线性函数得到的。 2. **差分编码**:实际的...

    ADPCM压缩算法.doc

    此文档"ADPCM压缩算法.doc"可能包含了ADPCM的基本原理、实现细节以及应用实例等内容。以下是关于ADPCM压缩算法的一些关键知识点: 1. **基本原理**: ADPCM的核心思想是通过预测下一个采样值并与实际值进行比较,...

    IMA ADPCM编码算法实现

    IMA ADPCM由互动多媒体协会(IMA)制定,作为一种有损压缩算法,它能够将原始音频数据压缩至四分之一大小,同时保持较高的音质。 #### ADPCM工作原理 ADPCM的工作原理基于两个关键概念:**差分编码**和**自适应...

    门锁语音低成本方案:ADPCM压缩解压算法,DAC播放WAV语音,语音下载至SPI Nor Flash

    通过选择合适的ADPCM压缩算法、低功耗DAC以及经济型SPI Nor Flash,可以在保证功能的前提下,降低硬件成本,使得智能门锁这样的设备能够更加广泛地应用于各种场景。 总结起来,这个方案利用ADPCM压缩技术减少存储...

    ADPCM的压缩、解压缩算法

    ADPCM的压缩、解压缩算法;Intel/DVI ADPCM coder/decoder.

    纯软件实时实现ADPCM语音压缩算法

    纯软件实时实现ADPCM语音压缩算法纯软件实时实现ADPCM语音压缩算法

    adpcmadpcm

    算法ADPCM 实现对数据的压缩

    基于ADPCM的语音压缩算法研究

    基于ADPCM的语音压缩算法研究基于ADPCM的语音压缩算法研究

    ADPCM.rar_adpcm

    "ADPCM压缩算法.htm"和"ADPCM压缩算法_files"可能包含了更详细的理论解释和可能的源代码示例。 总之,ADPCM是一种强大的语音压缩技术,它结合了高效压缩和自适应特性,广泛应用于各种通信和音频处理领域。理解并...

    基于STM32的光话机ADPCM压缩编码算法与实现.pdf

    文章《基于STM32的光话机ADPCM压缩编码算法与实现》讨论了针对特定环境下,即山区、森林等无线信号较差的条件下,进行光纤铺设和维护工作时面临的通话问题,并提出了一种解决办法。该办法主要通过采用一种简化的语音...

    基于STM32的光话机ADPCM压缩编码算法与实现.zip

    标题中的“基于STM32的光话机ADPCM压缩编码算法与实现”是一个关于嵌入式系统中的音频处理技术的主题,特别关注了在STM32微控制器上实现的ADPCM(自适应差分脉冲编码调制)压缩算法。STM32是意法半导体推出的一种...

    wave文件格式解析

    | Format Chunk | 2 | WORD | wFormatTag | Format类型,在采用Intel IMA-ADPCM压缩算法时为0x0011 | | Format Chunk | 2 | WORD | nChannels | 通道数 | | Format Chunk | 4 | DWORD | nSamplesPerSec | 采样率 | |...

    DSP或者ARM实现实时语音压缩算法G726压缩算法

    G.726压缩算法的核心在于Adaptive Differential Pulse Code Modulation (ADPCM),这是一种自适应差分脉冲编码调制技术。该算法通过预测当前采样值并计算预测误差来减少数据量,然后使用量化器将误差编码为有限数量的...

    I pcm to adpcm_音频压缩_

    在文件"I pcm to adpcm"中,可能包含了实现这一过程的代码示例、算法描述或者单片机编程指南。通过学习这些内容,开发者可以了解如何在有限的硬件资源下实现高效的音频压缩,这对于嵌入式系统和物联网设备的设计尤其...

    ADPCM压缩解压缩(音频解码)

    7. **代码实现**:提供的代码可能是实现ADPCM压缩和解压缩的示例,可以作为理解ADPCM工作原理的参考,也可以直接用于实际项目中。 总之,ADPCM是一种自适应的音频压缩技术,通过差分编码、自适应步长调整和预测器...

Global site tag (gtag.js) - Google Analytics