APP下载

基于EPG3231的ADPCM解码算法实现

2017-07-12杨清学梁桃华孟奕峰

电子设计工程 2017年12期
关键词:流程图解码步长

周 江,杨清学,梁桃华,孟奕峰

(成都职业技术学院 四川 成都 610041)

基于EPG3231的ADPCM解码算法实现

周 江,杨清学,梁桃华,孟奕峰

(成都职业技术学院 四川 成都 610041)

16bit语音信号的ADPCM压缩和解压是传统的经典方法,为了在汉语语言教学机上实现语音的合成,作者给出了8位单声道语音信号算法,并在ELAN 8位单片机EPG3231上使用该算法用汇编语言实现了语音的实时解码和回放。实验结果表明,原始的语音数据和解码后的数据相关性达0.999843,说明解码后的数据失真率低,达到预期要求。

电子技术;ADPCM解码;语音;EPG3231

笔者在研的四川省教育厅自然科学重点项目需要研究开发汉语语言教学机,该机主要是为小学语文教学而设计,其中有大量的语音内容需要存储,主要包括汉语拼音的23个声母、24个韵母、16个整体认读音节、全部的普通话拼读音节以及尽可能多的词组和课文的读音,需要的存储空间比较大,因此有必要对语音进行压缩后存储,以节省存储空间。另一方面,由于“汉语语言教学机”采用单片机为主控芯片,它需要实时地完成压缩语音信息的解码工作和语音的回放功能,因而解码算法不能太复杂,所以在本课题中存储的语音信息采用ADPCM(Adaptive Differential Pulse Code Modulation,自适应差分脉冲编码调制)编码[1]。

1 ADPCM原理

ADPCM算法利用连续语音样本之间的高度相关性,对未来的样本值进行预测。ADPCM不是对语音样本直接编码,而是对预测样本与语音样本之间的差值进行编码。对差值编码需要的位数要比直接对原始语音样本编码所需的位数少,从而达到对信号压缩的目的。而且ADPCM中量化器和预测器均采用自适应方式,即量化器和预测器的参数能随输入信号的统计特性自适应于或接近于最佳的参数状态[2-4]。

ITU (International Telecommunication Union,国际电信联盟)(前身CCITT)的G.721 ADPCM算法是众所周知的,但该算法采用浮点和对数运算[5],在8位单片机上不易实时地实现。IMA(Interactive Multimedia Association,交互式多媒体协会)参考算法通过简化许多操作和使用查表方法[6-7],极大地降低了算法的复杂性。

本课题中的ADPCM压缩采用ELAN的ELAVoice Builder完成,解码要在ELAN的8位的单片机EPG3231上用汇编语言实现,所以解码算法是本文研究的重点。图1是ADPCM解码算法的原理框图。

图1 ADPCM解码原理框图

图中,q:量化器步长值(以下简称步长)

dq:量化差值

Sn+1、Sn:分别是当前预测值和前一个预测值。

2 ELAN ADPCM压缩文件格式

目前大多数的文章都是针对16bit语音信号的ADPCM压缩和解压的研究,对8bit语音信号的ADPCM压缩和解压的研究较少。而对一般的语音信号,8bit、22.05 kHz、单声道已经足够[8-12]。EPG3231 是ELAN的8位的单片机,其内部有8位的D/A[13],完全可以用于语音的合成。

语音信号的压缩用ELAN的ELA Voice Builder完成。该软件压缩后的ADPCM文件后缀为.adp,文件中的前3字节为文件头,其中第1个字节为02,表示是ADPCM文件,第2、3字节与原始的wav文件的采样率相关,其数值大约是采样周期(单位:ms)的2 000倍,采用小端模式存储,详见表一。

表1 用ELAN的ELA Voice Builder生成的ADPCM文件第2、3字节的含义

其后是压缩编码,每个字节包含两个编码,低四位对应第一个编码,高四位对应第二个编码。每个编码的四位中的最高位为符号位,0为正,1为负。如果前一个编码是0xf、后一个是6,代表静音,解码时直接插入63个与前一个预测值相同的数,这样的处理对于不连续的语音可以提高压缩比;如果前一个编码是0xf、后一个是7,代表文件结束。

3 在EPG3231上实现ADPCM解码

1)ADPCM解码总体流程图

如图2所示。该流程图主要展示了对ELAN的ADPCM文件中两种特殊编码 (静音和文件结束标志)的处理方法,解码中最核心的部分——ADPCM解码在该流程图中用黑体字标出,其流程见图3。

图2 ADPCM解压总体流程图

2)ADPCM解码流程图

ADPCM解码中需要计算预测值和更新步长值。根据ADPCM解压的原理,我们给出了步长索引修正表和步长表。

图3是ADPCM解码流程图,其右边是对左边流程的具体解释,即实际采用的算法。图中所称的编码即为ADPCM编码,它是一个4位的编码,最高位为符号位,0代表正,1代表负。

图3 ADPCM解码算法流程图

需要要注意的是,由于返回的预测值与wav文件的编码是一致的,都是无符号数 (即0是最低电平,0xFF是最高电平),而EPG3231的D/A输入是有符号数[13](即0x80是最低电平,0x7F是最高电平),所以程序中应将返回的预测值的最高位取反后送到D/A[14]。

4 解码算法的计算机模拟

用汇编语言在EPG3231按照以上的ADPCM解码算法编写程序,播放压缩后的adp声音文件,同时,也使用汇编语言在EPG3231上编程播放相同内容的wav文件,没能听出差别。笔者希望能将解码后的数据与原始的wav文件的数据做个对比,所以用C语言编程实现上述的ADPCM解码算法,并将解码后的数据与原始的wav文件的数据用图形进行对比。具体做法如下。

1)制作包含一个周期正弦波的wav文件(360个采样点),用ELA Voice Builder压缩,再按照上面的算法编写C语言程序进行解码,在EXCEL中对原始的wav文件的数据(去掉文件头)和解码后的数据分别生成图表(图4),并进行数据相关性分析[15],得到的相关系数是0.999 843,属高度相关。

图4 一周期正弦波的原始数据图表(左)和压缩后再解码得到的数据图表

2)用女声发音的汉语词组“爱惜”,同样用ELA Voice Builder将“爱惜.wav”压缩,再用C语言程序在计算机上进行解码运算[16],将解码得到的数据,按照wav文件的格式,加上文件头,用语音编辑软件录音大师打开原始的“爱惜.wav”和解码后得到的wav文件,其波形如图5所示。

图5 语音“爱惜”的波形图(上)和压缩后再解码得到的波形图

从图5中可以看出,语音波形包括3个部分,分别对应韵母“ai”、声母“x”、韵母“i”,其中声母“x”的失真略大,原因是声母的频率较高[17],相邻两个采样值间的幅度差值相对较大,所以压缩后的信息损失较多,解码后的失真也就相对大些。

5 结束语

在课题“汉语语言教学机”的研发中,利用本文所述的解码算法,在EPG3231单片机上用汇编语言实现了8bit、22.05 kHz、单声道ADPCM的实时解码和回放,与直接回放原始的wav文件几乎没有差别。

[1]徐晓亮,梁维谦.基于Ezairo DSP的ADPCM语音解码器设计[J].计算机应用,2015,35(S2):319-321.

[2]Microchip Technology Inc.Adaptive Differential Pulse Code Modulation using PIC16/17 Microcontrollers[EB/OL]. [2016-5-10].http://ww1.microchip.com/downloads/en/AppNotes/00643c.pdf.

[3]刘华.语音声码器模型及ADPCM声码器仿真[J].长春师范学院学报 (自然科学版),2013,32(3):22-24.

[4]裴志兵,胡平平.基于C8051F007的ADPCM语音编码系统设计[J].信息通信,2016(1):59-61.

[5]CCITT.Recommendation G.726 40,32,24,16kb/s Adaptive Diferential Pulse Code Modulation(ADPCM)[S].1990.

[6]蝈蝈俊.IMA-ADPCM算法[EB/OL].[2016-5-10].http://blog.csdn.net/ghj1976/article/details/3222.

[7]MediaWiki.IMA ADPCM[EB/OL]. (2011-7-15)[2016-5-10].http://wiki.multimedia.cx/index.php?title=IMA_ADPCM.

[8]柯俊霄.采用单片机压缩编码的数码录放系统设计[J].电子设计工程,2014,22(5):124-126

[9]宋毅琚,朱艳萍,宋耀良.基于分数阶滤波器的ADPCM预测误差信号处理[J].电声技术,2010,34(5):52-55,66.

[10]陈德宏,林加龙,胡兴柳.基于TMS320C55X的G.729语音压缩算法全汇编优化[J].安徽工业大学学报(自然科学版),2013,30(4):435-439.

[11]赵力.语音信号处理[M].2版.北京:机械工业出版社,2010.

[12]李涛,曾攀,肖功海.基于ADPCM的数字语音存储与回放系统[J].现代电子技术,2013,36(13):49-52.

[13]ELAN MICROELECTRONICS CORP.EPG3231-EM202 RISC II-2G Series Microcontroller Product Specification(V1.4) Datasheet[EB/OL].[2016-5-10].http://www.emc.com.tw/twn/database/Data_Sheet/PE/EPG3231-EM202.pdf.

[14]周江.基于EPG3231和闪存的声音播放器设计[J].电子设计工程,2010,18(5):129-131.

[15]陆元婕.EXCEL学习教程完全版[EB/OL].[2016-5-10].http://wenku.baidu.com/link url=Ps4Mi0Bvyb Ea6WfqjfDKYt3hbacBsn30hkFZaVSim0fnPEB6x93 C2Ru4k31vrnei7MLWv7-vz6HdijSZOcNsbIhP4sO-VIlOHD-5zIOeUgW.

[16]王堃,蔡强顺.电子束焊接熔池流场数值模拟研究[J].火箭推进,2015(1):98.

[17]王坤.基于SVPWM的STATCOM设计及实现[J].陕西电力,2011(1):11-15.

Implementation of ADPCM decoding algorithm based on EPG3231

ZHOU Jiang, YANG Qing-xue, LIANG Tao-hua, MENG Yi-feng
(Chengdu Polytechnic, Chengdu 610041,China)

The ADPCM compression and decompression of 16 bit speech signal is the classical method.In the paper,the algorithm of 8 bit mono speech signal is given to implement speech synthesis on the Chinese language teaching machine,and using the algorithm in Elan 8-bit MCU EPG3231 the real-time voice decoding and playback is realized by applying assembly language.The results show that,the correlation between the original voice data and the decoding data reach up to 0.999843,that indicated the rate distortion of decoding data is low,attaining the expectation.

electronic technology; ADPCM decoding; speech; EPG3231

TN912.33

B

1674-6236(2017)12-0175-03

2016-05-14稿件编号:201605135

2016年四川省教育厅自然科学重点项目(16ZA0394)

周 江(1966—),男,四川成都人,硕士,副教授、工程师。研究方向:单片机应用。

猜你喜欢

流程图解码步长
《解码万吨站》
基于Armijo搜索步长的BFGS与DFP拟牛顿法的比较研究
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
专利申请审批流程图
专利申请审批流程图
基于逐维改进的自适应步长布谷鸟搜索算法
宁海县村级权力清单36条
一种新型光伏系统MPPT变步长滞环比较P&O法