`
wush121
  • 浏览: 13192 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

adpcm算法

阅读更多
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 ;       // 根据声音强度调整下次取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 & != 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;
        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
     }


分享到:
评论

相关推荐

    在大容量STM32F103xx上实现ADPCM算法

    1. **硬件准备**:首先,确保STM32F103xx微控制器的ADC(模拟数字转换器)功能正常工作,因为ADPCM算法需要对模拟音频信号进行采样。同时,根据需求配置GPIO端口,连接麦克风或其他音频输入设备。 2. **ADC配置**:...

    G.726 ADPCM算法在C语言上的实现代码

    在C语言中实现G.726 ADPCM算法,意味着开发者可以将这个压缩技术应用于资源受限的硬件环境,如嵌入式设备或物联网(IoT)设备。 G.726 ADPCM算法的基本工作原理包括以下几个步骤: 1. **采样**:首先,对模拟音频...

    AN2931_在大容量STM32F103xx上实现ADPCM算法.pdf

    ADPCM算法的核心优势在于它能实现较高的压缩比,通常情况下能够达到2:1到5:1的压缩率,从而大幅度降低所需的存储空间和传输带宽。ADPCM算法的实现可以采取多种量化方式,例如2位、3位、4位、5位量化等,以适应不同的...

    一个很好用ADPCM算法

    在ADPCM算法中,原始的模拟音频信号被转换为数字信号,通过差分编码的方式,只记录信号的变化而非绝对值,从而减少所需的数据位数。这个过程包括采样、量化和编码三个步骤: 1. **采样**:按照一定的频率,对音频...

    adpcmadpcm

    算法ADPCM 实现对数据的压缩

    ADPCM压缩算法程序

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

    IMA ADPCM编码算法实现

    ### IMA ADPCM编码算法实现 #### IMA ADPCM简介 IMA ADPCM(Interactive Multimedia Association Adaptive Differential Pulse Code Modulation)是一种高效的声音数据压缩技术。它主要用于压缩音频信号,特别是...

    STM32单片机FPGA毕设电路原理论文报告基于adpcm算法的汽车智能语音报警系统的设计

    STM32单片机FPGA毕设电路原理论文报告基于adpcm算法的汽车智能语音报警系统的设计本资源系百度网盘分享地址

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

    4. **配置参数**:ADPCM算法可能有可调整的参数,如量化步长表和初始指数,这些参数可以根据需要进行定制以优化压缩质量与存储空间之间的平衡。 5. **测试数据**:可能包含一些示例音频文件,用于测试程序的压缩...

    ADPCM压缩算法.doc

    通过分析这段代码,我们可以深入理解ADPCM算法的具体步骤和实现细节。 10. **优化与改进**: 为了进一步提高压缩性能,研究人员可能对ADPCM进行了各种优化,比如引入更复杂的预测模型、改进量化策略或者采用多级...

    ADPCM编码与解码原理

    ### ADPCM编码与解码原理 #### 一、前言 在数字信号处理领域,音频压缩技术至关重要。其中,ADPCM(Adaptive Differential Pulse Code Modulation,自适应差分脉冲编码调制)是一种广泛应用于音频数据压缩的技术,...

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

    STM32单片机被选中是因为其成本相对较低,性能能够满足实现ADPCM算法的需求,从而在不显著增加系统成本的同时,实现了高效的语音压缩编码。 知识点六:仿真实验结果 仿真实验结果表明,在压缩比为4:1的条件下,...

    adpcm.rar_adpcm_adpcm Visual

    在标题“adpcm.rar_adpcm_adpcm Visual”中,我们可以推测这是一个关于ADPCM算法的压缩包,可能包含了实现ADPCM算法的源代码(如adpcm.c)以及一个可视化的工具或文档,可能用于帮助用户理解和调试ADPCM编码过程。...

    基于ADPCM算法的汽车智能语音报警系统的设计

    ADPCM算法是一种利用声音信号的前后相关性,通过自适应量化和预测的方法对声音信号进行高效的压缩编码技术。相比于未压缩的声音数据,ADPCM可以显著减小数据量,使得存储和传输更加高效。在本设计中,ADPCM算法用于...

    汽车电子中的基于ADPCM算法的汽车智能语音报警系统的设计

    汽车电子中的基于ADPCM算法的汽车智能语音报警系统设计是一个重要的技术创新,旨在提高交通安全,减少因驾驶员未能及时响应警告信息而导致的交通事故。该系统利用数字语音处理技术,将各种报警信息进行数字化采集、...

    adpcm.rar_adpcm_adpcm.c

    描述中的"ADPCM算法"是指该压缩包主要探讨的是这一音频压缩技术。 ADPCM是一种数字音频编码技术,它通过利用音频信号的统计冗余来减少数据量,从而实现音频的高效压缩。这种技术在语音通信、音频存储和传输等领域...

Global site tag (gtag.js) - Google Analytics