自适应差值脉冲编码调制ADPCM介绍.doc

自适应差值脉冲编码调制ADPCM介绍.doc

ID:56265514

大小:39.50 KB

页数:4页

时间:2020-06-04

自适应差值脉冲编码调制ADPCM介绍.doc_第1页
自适应差值脉冲编码调制ADPCM介绍.doc_第2页
自适应差值脉冲编码调制ADPCM介绍.doc_第3页
自适应差值脉冲编码调制ADPCM介绍.doc_第4页
资源描述:

《自适应差值脉冲编码调制ADPCM介绍.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、ADPCMAdaptiveDifferentialPulseCodeModulation自适应差值脉冲编码调制  分  类:传输与接入  解  释:一种新型的脉冲编码技术,它是利用自适应技术和差值编码技术相结合的一种编解码技术。可以使64kbit/s的脉冲编码(PCM)信号进一步压缩为32kbit/s的脉冲编码数据。使传输脉冲编码所需要的带宽减少一半,提高了信道的利用效率,并且还可以使脉码调制系统的通信质量得到提高。  ADPCM的基本原理是利用对过去的几个抽样值来预测当前输入的样值,并使预测电路具有自适应的预测功能与实际检测值进行比较,随时对测得的差值自动进行量化级差的

2、处理,使之始终保持与信号同步变化。这种ADPCM技术已广泛地应用于电话通信网。 IMA-ADPCM(ADPCMAdaptiveDifferentialPulseCodeModulation),是一种针对16bit声音波形数据的一种有损压缩算法,它将声音流中每次采样的16bit数据以4bit存储,所以压缩比1:4.而压缩/解压缩算法非常的简单,所以是一种低空间消耗,高质量声音获得的好途径.著名的WestWood在它的许多游戏里都使用了这个技术,DUNEII,C&C,RA等等,保存声音的数据文件后缀名为.AUD的大多用IMA-ADPCM压缩.ADPCM主要是针对连续的波形数据

3、的,保存的是波形的变化情况,以达到描述整个波形的目的.本文并不想详细介绍ADPCM算法原理,那些是数学知识,有高等数学基础的朋友可以自己研究,云风数学马马虎虎,这里也讲不清楚,但是它的编码和解码的过程却很简洁,列在后面,相信大家能够看明白一般游戏中用到的声音有两种不同性质的,一是波形数据,是经过事先声音采样录制下来的,采样时一般按每秒8千到4万次的频率(8Khz~44.4Khz)记录每次采样时的声音强度,在播放时,再以同一频率,按样本声音的强弱变化触发扬声器,声音就被重现了,如果你将采样数据流标在坐标纸上,就会发现是一条波形曲线,如果采样时将声音信号强弱分为256级,1就

4、是我们说的8bit采样,如果分为65536级,就是16bit采样了;另一是MIDI类的,它是将各种乐器的声学性质都事先记录下来,而数据流中仍旧是按一定频率记录,但不是每秒数千上万次了,大约只有几Hz到几十Hz,将几种乐器按某一音频和强度触发描述下来,经过声卡合成为波形信号就可以播放了.  8bit采样的声音人耳是可以接受的,比如Win95启动的音乐,而16bit采样的声音可以算是高音质了,现代游戏中也多采用它.(将声音强度分的更细没有太多的意义,通常都是提高采样频率来近一步提高音质)ADPCM算法却可以将每次采样得到的16bit数据压缩到4bit;-)需要注意的是,如果要

5、压缩/接压缩立体声信号,请注意采样时,声音信号是放在一起的,需要将两个声道分别处理.OK,下面列出了其中的奥妙,请细细品味:IMA-ADPCM压缩过程首先我们认为声音信号都是从零开始的,那么需要初始化两个变量intindex=0,prev_sample:=0;下面的循环将依次处理声音数据流,注意其中的getnextsample()应该得到一个16bit的采样数据,而outputdata()可以将计算出来的数据保存起来,程序中用到的step_table[],index_adjust[]附在后面:intindex=0,prev_sample:=0;while(还有数据要处理)

6、{cur_sample=getnextsample();//得到当前的采样数据delta=cur_sample-prev_sample;//计算出和上一个的增量if(delta<0)delta=-delta,sb=8;elsesb=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;//便于

7、下次得到更精确的变化量的描述elseif(index>88)index=88;prev_sample=cur_sample;outputode(code

8、sb);//加上符号位保存起来}IMA-ADPCM解压缩过程1  接压缩实际是压缩的一个逆过程,同样其中的getnextcode()应该得到一个编码,而outputsample()可以将解码出来的声音信号保存起来.这段代码同样使用了同一个的setp_table[]和index_adjust()附在后面:intindex=0,cur_sample:=0;while(还有数据要处

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。