搜索
您的当前位置:首页正文

动态ADPCM原理

来源:星星旅游
动态ADPCM语音压缩原理

标准ADPCM压缩基本原理:对当前数据与前一数据(前一数据为量化处理后的值)之差进行编码。用较少的bit量化出数据差,进而达到压缩的目的。 动态ADPCM与标准ADPCM的编码原理基本相同,最大的区别在于标准ADPCM用固定的bit位数来进行语音压缩;而动态ADPCM用浮动的bit位数来进行语音压缩,进而达到比标准ADPCM更大的压缩比和较小的量化误差。 下面就对动态ADPCM语音压缩原理进行介绍。 压缩过程: 假定对第k个数据进行压缩。 初始数据条件: 1.待压缩数据:ss[k] 2.前一次解码数据sp[k-1] 2.标尺:step[k] 3.码格式:code_format[k] STEP1:计算与前一数据之差 求数据差:diff[k]=abs(ss[k]-sp[k-1]) 求符号 :sign=sig(ss[k]-sp[k-1]) STEP2:量化差分(编码)

根据code_format[k]指定的格式(bit位数),用step[k]对diff[k]进行量化编码得出压缩码code[k],以及code[k]的解码差分值vpdiff[k]。 差分公式例举:3bit码数据位为2位,能表达4个值a,b,c,d解码差分值公式分别是: a= step[k]>>2; b=(step[k]>>1)+ (step[k]>>2); c= step[k]+(step[k]>>2);

d= step[k]+(step[k]>>1)+(step[k]>>2);

例:code_format[k]指定码格式为3bit, step[k]为10,量化表如下: 由上列公式得 a=2; b=7; c=12; d=17;

Code[k] 码绝对值

00 01 10 11 差分值

Code[k]量化差分 2 7 12 17 vpdiff[k] diff[k]=0-4 00 2 diff[k]=5-9 diff[k]>14 01 7 11 17 diff[k]=10-14 10 12 STEP3:求得解码值 Sp[k]=sp[k-1]+ sign*vpdiff[k] STEP4:标尺更新及码格式更新

标尺更新:

step[k+1] =(vpdiff[k]*coff1+step[k]*coff2)*coff3 注:coff1为动态权系数,coff2为惯性权系数, 都为经验值

coff3为码值系数,coff3=g(Code[k]),当code[k]为较大值时说明当前的step(k)相对vpdiff[k]已经是一个小数此时coff3应大于1,以调整step[k+1] 以适应可能的更大的diff[k+1];

码格式更新: code_format[k+1]=f (step[k]) 例:abs(code)<0x02时 step[k+1] =(vpdiff[k] +step[k])/2;

abs(code)>=0x02时 step(k+1) =(vpdiff [k]+step[k])3/4; 边界A为8,边界B为16,边界C为32时 (边界定义见下页) code_format[k]指定码格式为3bit

step[k]为10

vpdiff[k]为上表的取值

以下为step[k+1],与code_format[k+1]的真值表

vpdiff[k]

2 7 12 17

Step[k+1] Step[k+1] Step[k+1] Step[k+1]

Code=00 Code=01 Code=10 Code=11 6 6 9 9 8 8 12 12 11 11 16 16 13 13 19 19 code_format[k+1] 2bit 2bit 3bit 3bit code_format[k+1] 2bit 2bit 3bit 3bit code_format[k+1] 3bit 3bit 3bit 3bit code_format[k+1] 3bit 3bit 4bit 4bit STEP5:完成压缩过程。

ADPCM语音解压原理与压缩原理相同,在这里只作一个简单介绍。 解压过程: 假定对第k个压缩码进行解码。 初始数据条件: 1.前一次解码数据sp[k-1] 2.标尺:step[k] 3.码格式:code_format[k] STEP1:读取码值 根据code_format[k]指定的bit位数读取code 例:code_format[k]指定下一个code为3 bit ,则读取3bit 的数据 STEP2:解码 根据code_format[k]指定的格式,用step[k]对code进行解码得出差分值vpdiff[k]。 例:code_format[k]指定码格式为3bit, step[k]为10, 解码表如下:

Code 码绝对值

00 01 10 11 vpdiff[k] 2 7 12 17 STEP3:求得解码值,同压缩。

STEP4:标尺更新及码格式更新,同压缩。 STEP5:完成压缩过程。

边界定义:

边界A:2bit压缩码与3bit压缩码的切换界线,也就是说现在的压缩码为2bit格式,而由标尺预测器得到的标尺大于此边界值时,就预测(决定)出下一个压缩码为3bit,否则下一个压缩码格式仍旧为2bit;如果此时的压缩码为3bit格式而标尺预测器得到的标尺小于等于此边界值时,就预测(决定)出下一个压缩码为2bit,否则下一个压缩码格式仍旧为3bit。

边界B:3bit压缩码与4bit压缩码的切换界线。 边界C:4bit压缩码与5bit压缩码的切换界线。

注:解码模块中step的更新有所不同,并加入1bit码格式。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top