ADPCM的matlab仿真精讲_第1页
ADPCM的matlab仿真精讲_第2页
ADPCM的matlab仿真精讲_第3页
ADPCM的matlab仿真精讲_第4页
ADPCM的matlab仿真精讲_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ADPCM编码与解码一、 实验原理与目的 目前,脉冲编码调制(PCM)的数字通信系统已经在大容量数字微波、光纤通信系统,以及市话网局间中继传输系统中获得广泛的应用。但是现有的PCM编码必须采用64Kbit/s的A律或律对数压扩的方法,才能符合长途电话传输语音的质量指标,其占用频带要比模拟单边带通信系统宽很多倍。这样,对于费用昂贵的长途大容量传输,尤其是对于卫星通信系统,采用PCM数字通信方式时的经济性很难和模拟相比拟。因此,人们一直致力于研究压缩数字化语音占用频带的工作,也就是努力在相同质量指标的条件下,降低数字化语音数码率,以提高数字通信系统的频带利用率。 自适应差值编码调制(ADPCM)是

2、在差值脉冲编码调制(DPCM)基础上逐步发展起来的。它在实现上采用预测技术减少量化编码器输入信号的多余度,将差值信号编码以提高效率、降低编码信号速率,这广泛应用于语音和图像信号数字化。CCITT近几年确定了64Kb/s32kb/s的变换体制,将标准的PCM码变换为32kb/s的ADPCM码,传输后再恢复为64Kb/s的PCM信号,从而使64Kb/s数字话音压缩速率一倍,使传输信道的容易扩大一倍。 ADPCM中的量化器与预测器均采用自适应方式,即量化器与预测器的参数能根据输入信号的统计特性自适应于最佳参数状态。通常,人们把低于64Kb/s数码率的语音编码方法称为语音压缩编码技术,语音压缩编码方法

3、很多,自适应差值脉冲调制(ADPCM)是语音压缩编码中复杂程度较低的一种方法。它能32kbit/s数码率上达到符合64kbit/s数码率的语音质量要求,也就是符合长途电话的质量要求。ADPCM是波形编码中非常有效的一种数字编码方式。在ADPCM系统中量化器和预测器均采用自适应方式,即量化器和预测器的参数能随输入信号的统计特性自适应于或接近于最佳的参数状态。与PCM系统相比,ADPCM的量化器和预测器都是根据前面出现的PCM抽样值并对下一个抽样值进行预测,将当前的抽样值和预测值进行求差,然后对差值进行编码。对差值编码需要的位数要比直接对原始语音信号编码所需的位数少,从而达到对信号压缩的目的,在这

4、里编码所包含的信息从原来的原始语音信号变为语音信号之间的变化。1.1 脉冲编码调制PCMPCM编码是Pulse Code Modulation的缩写,又叫脉冲编码调制,它是数字通信的编码方式之一,其编码主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化,同时将抽样值按分层单位四舍五入取整量化,同时将抽样值按一组二进制码来表示抽样脉冲的幅值。PCM编码的最大的优点就是音质好,最大的缺点就是体积大。我们常见的Audio CD就采用了PCM编码,一张光盘的容量只能容纳72分钟的音乐信息。 PCM方式是由取样,量化和编码三个基本环节完成的。音频信号经低通滤波器带限滤波后,由取样,量化,编

5、码三个环节完成PCM调制,实现A/D变化,形成的PCM数字信号再经纠错编码和调制后,录制在记录媒介上。数字音响的记录媒介有激光唱片和盒式磁带等。放音时,从记录媒介上取出的数字信号经解调,纠错等处理后,恢复为PCM数字信号,由D/A变换器和低通滤波器还原成模拟音频信号。将CDPCM数字信号变换还原成模拟信号的解码器称为CD-PCM解码器。脉冲调制就是把一个时间连续,取值连续的模拟信号变换成时间离散,取值离散的数字信号后在信道中传输.脉冲编码调制就是对模拟信号先抽样,再对样值幅度量化,编码的过程. 所谓抽样,就是对模拟信号进行周期性扫描,把时间上连续的信号变成时间上离散的信号.该模拟信号经过抽样后

6、还应当包含原信号中所有信息,也就是说能无失真的恢复原模拟信号.它的抽样速率的下限是由抽样定理确定的.在该实验中,抽样速率采用8Kbit/s. 所谓量化,就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示. 一个模拟信号经过抽样量化后,得到已量化的脉冲幅度调制信号,它仅为有限个数值. 所谓编码,就是用一组二进制码组来表示每一个有固定电平的量化值.然而,实际上量化是在编码过程中同时完成的,故编码过程也称为模/数变换,可记作A/D.1.2 差分脉冲编码调制DPCM差分PCM(Differential PCM)记录的不是信号的绝对大小而是相对大小。因为信号的

7、相对大小的变化通常要比信号本身要小,编码是所用的码位也就少。如果取样频率足够高,大多数连续的样值之间会有很大的相关性。差分系统就是利用这种信息的冗余,不记录信号的大小,而是记录相邻值之间的差值的大小。图2.1 DPCM编码器示意图差分编码采用预测编码技术,从输入中减去预测值,然后对预测误差进行量化,最终的编码就是预测值与实际值之间的差值。解码器用以前的数据对当前样值进行预测,然后用误差编码重构原始样值。这种方法使用的比特数较少,但它的性能决定于预测编码方法以及它对信号变化的适应能力。1.3 增量调制DMDPCM 对输入信号与预测值之差进行编码。当取样的频率提高时,样值之间的变化减小,样值之间的

8、相对性变强。增量调制DM(Delta modulation)是一种特殊简化的DPCM,只用了1 bit的量化器,它采用较高的取样频率和1比特的编码。因为只能用一个量化级来代表样值的变化,为了跟踪信号的变化,必须使用高的取样频率,一般要求在 200kHz以上。因此编码反映的只是差分本身,而不是原始的信号。而且在DM中,当语音波形幅度发生急剧变化时,译码波形不能充分跟踪这种急剧的变化而必然产生失真,这称为斜率过载。而在没有语音的无声状态时,或者信号幅度为固定值时,量化输出都将呈现0、1交替的序列。这种噪声称为颗粒噪声。1.4 自适应增量调制ADM一般情况下,人耳对过载量化噪声不是很敏感,而对颗粒噪

9、声较为敏感,所以要将的幅值取得足够小。但是取得小,过载噪声就会增大,因而这时必须增加采样频率,以减少信号量化过程中的过载噪声,然而如果提高采样频率,那么信息压缩的效果就会降低。兼顾这两方面的要求,应采用随输入波形自适应的改变大小的自适应编码方式,使值随信号平均斜率而变化:斜率大时,自动增大;反之则减小。这就是自适应增量调制ADM(Adaptive DM)。这个方法的原理是:在语音信号的幅值变化不太大的区间内,取小的值来抑制颗粒噪音;在幅值变化大的地方,取大的值来减小过载噪音。其增量幅度的确定方法为,首先在颗粒噪音不产生大的影响的前提下,确定最小的幅值。在同样的符号持续产生的情况下,将幅值增加到

10、原来的2倍。即当+、+这样持续增加时,如果下一个残差信号还是相同的符号,那么再将幅值增加一倍,如此下去,并且确定好某一个最大的幅值上限,只要在这个最大的幅值以内同样的符号持续产生,就将幅值继续增加下去。如果相反,残差信号值为异号时,就将前面的幅值设为原来的1/2,重新以/2为幅值。也就是说,如果同样的符号持续产生两次以上,在第三次时就将幅值增加一倍,如果产生异号,将幅值减小1/2。而且,当异号持续产生而减小幅值时,一直减小到以最初确定的最小的幅值为下限为止。这种ADM算法中,它的采样率至少是16 kHz。二、 仿真思路2.1编码原理自适应差分脉冲编码调制ADPCM(Adaptive Diffe

11、rential Pulse Code Modulation)用预测编码来压缩数据量。它结合了ADM的差分信号与PCM的二进制码的方法,是一种性能比较好的波形编码。它的核心想法是:利用自适应的思想改变量化阶的大小,即使用小的量化阶(step-size)去编码小的差值,使用大的量化阶去编码大的差值,使用过去的样本值估算下一个输入样本的预测值,使实际样本值和预测值之间的差值总是最小。图2.2 ADPCM原理框图编码的核心思想是对差值进行编码和预测,采用非均匀量化,并使不同幅值的信号信噪比接近一致,避免大幅值语音信号信噪比大而小幅值语音信号信噪比小。ADPCM编码过程如图2.2所示输示。输入是一个16

12、bit二进制补码语音数据,其范围在32767到-32767之间。预测采样值,与线性输入的差值为d。量化器对差值进行量化产生一个有符号的4位编码数据I,这个数据的表示范围在7到-7之间,最高位为符号位。编码时,首先计算16位的二进制补码的当前采样值和上一预测采样值之间的差值d,这个差值的量化编码即输出4位ADPCM值I。在算法实现中,定义一个结构变量存储预测采样和量化步长索引,并制定了两个表。一个表为索引调整表,其输入为差值量化编码I,用来更新步长索引。另一个表为步长调整表,其输入为步长索引,输出为步长q。编码时,首先用上一个采样点的步长索引查步长调整表求出步长q。如果当前采样值和采样预测值之间

13、的差值d为负,则I的D3位置1。如果该差值绝对值大于步长q,则I的D2位置1。如果d-q大于q/2,则I的D1位置1,如果d-q-q/2大于q/4,则I的D0位置1。如果以上条件不满足,则相应位置0。这样就确定了编码值I。然后编码值I作为索引调整表的输入,查表输出索引调整,并和结构变量中原步长索引相加,产生新的步长索引,在下一个采样值的编码中使用。编码输出I后,编码还需要重复进行和解码完全一样的计算过程,求出新的预测采样值。图2.3 解码原理框图2.2解码原理解码是编码的逆过程,ADPCM的解码过程如图2.3所示。解码输入即编码输出I,逆量化器将I逆量化成差值。差值与预测采样相加得到解码输出。

14、解码过程同编码过程中求预测采样的原理是一样的,当编码端的能很好的跟踪上时,解码端的也能同样再现。这里涉及算法本身的时延和实现平台、实现方法的实时性等因素。解码时首先通过步长索引查步长调整表得到量化步长,差值量化编码I经逆量化器得到语音差值,这是求I的逆过程;然后与前次预测值一起重建当前语音信号,最后用固定预测,更新预测采样,用I更新量化步长索引值。三、 程序代码MATLAB程序如下:ADPCM编码:function adpcm_y = adpcm_encoder(raw_y)IndexTable = -1, -1, -1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2,

15、4, 6, 8;%索引调整表StepSizeTable = 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,

16、 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;%步长索引表prevsample = 0;previndex = 1;Ns = length(raw_y);n = 1;raw_y = 32767 * raw_y; % 降输入信号变为16bitwhile (n &

17、lt;= Ns)predsample = prevsample;%预测值传递index = previndex;%索引指针step = StepSizeTable(index);diff = raw_y(n) - predsample;%信号现在值与预测值差if (diff >= 0)%如果差值大于0,则负号位为0,否则为1code = 0;elsecode = 8;diff = -diff;%取正值endtempstep = step;%步长,量化级if (diff >= tempstep)code = bitor(code, 4);%按位或运算,将第三位编码为1diff = d

18、iff - tempstep;endtempstep = bitshift(tempstep, -1);%二进制移位操作,目的是变成1/2if (diff >= tempstep)code = bitor(code, 2);%按位或运算,第二位编码为1diff = diff - tempstep;endtempstep = bitshift(tempstep, -1);if (diff >= tempstep)code = bitor(code, 1);%第一位编码为1enddiffq = bitshift(step, -3);if (bitand(code, 4)%按位与运算,提

19、取第三位diffq = diffq + step;endif (bitand(code, 2)diffq = diffq + bitshift(step, -1);endif (bitand(code, 1)diffq = diffq + bitshift(step, -2);endif (bitand(code, 8)predsample = predsample - diffq;elsepredsample = predsample + diffq;endif (predsample > 32767)predsample = 32767;elseif (predsample <

20、 -32768)predsample = -32768;endindex = index + IndexTable(code+1);if (index < 1)index = 1;endif (index > 89)index = 89;endprevsample = predsample;previndex = index;adpcm_y(n) = bitand(code, 15);%adpcm_y(n) = code;n = n + 1;endADPCM解码:function raw_y = adpcm_decoder(adpcm_y)IndexTable = -1, -1,

21、-1, -1, 2, 4, 6, 8, -1, -1, -1, -1, 2, 4, 6, 8;StepSizeTable = 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, 11

22、66, 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;prevsample = 0;previndex = 1;Ns = length(adpcm_y);n = 1;while (n <= Ns)predsample = prevsample;index = previndex;step = StepSizeTable(index);code = adpcm_y(n);diffq = bitshift(step, -3);if (bitand(code, 4)diffq = diffq + step;endif (bitand(code, 2)diffq = diffq + bitshift(step, -1);endif (bitand(code, 1)diffq = diffq + bitshift(step, -2);endif (bit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论