周 江,楊清學,梁桃華,孟奕峰
(成都職業(yè)技術(shù)學院 四川 成都 610041)
基于EPG3231的ADPCM解碼算法實現(xiàn)
周 江,楊清學,梁桃華,孟奕峰
(成都職業(yè)技術(shù)學院 四川 成都 610041)
16bit語音信號的ADPCM壓縮和解壓是傳統(tǒng)的經(jīng)典方法,為了在漢語語言教學機上實現(xiàn)語音的合成,作者給出了8位單聲道語音信號算法,并在ELAN 8位單片機EPG3231上使用該算法用匯編語言實現(xiàn)了語音的實時解碼和回放。實驗結(jié)果表明,原始的語音數(shù)據(jù)和解碼后的數(shù)據(jù)相關(guān)性達0.999843,說明解碼后的數(shù)據(jù)失真率低,達到預(yù)期要求。
電子技術(shù);ADPCM解碼;語音;EPG3231
筆者在研的四川省教育廳自然科學重點項目需要研究開發(fā)漢語語言教學機,該機主要是為小學語文教學而設(shè)計,其中有大量的語音內(nèi)容需要存儲,主要包括漢語拼音的23個聲母、24個韻母、16個整體認讀音節(jié)、全部的普通話拼讀音節(jié)以及盡可能多的詞組和課文的讀音,需要的存儲空間比較大,因此有必要對語音進行壓縮后存儲,以節(jié)省存儲空間。另一方面,由于“漢語語言教學機”采用單片機為主控芯片,它需要實時地完成壓縮語音信息的解碼工作和語音的回放功能,因而解碼算法不能太復(fù)雜,所以在本課題中存儲的語音信息采用ADPCM(Adaptive Differential Pulse Code Modulation,自適應(yīng)差分脈沖編碼調(diào)制)編碼[1]。
ADPCM算法利用連續(xù)語音樣本之間的高度相關(guān)性,對未來的樣本值進行預(yù)測。ADPCM不是對語音樣本直接編碼,而是對預(yù)測樣本與語音樣本之間的差值進行編碼。對差值編碼需要的位數(shù)要比直接對原始語音樣本編碼所需的位數(shù)少,從而達到對信號壓縮的目的。而且ADPCM中量化器和預(yù)測器均采用自適應(yīng)方式,即量化器和預(yù)測器的參數(shù)能隨輸入信號的統(tǒng)計特性自適應(yīng)于或接近于最佳的參數(shù)狀態(tài)[2-4]。
ITU (International Telecommunication Union,國際電信聯(lián)盟)(前身CCITT)的G.721 ADPCM算法是眾所周知的,但該算法采用浮點和對數(shù)運算[5],在8位單片機上不易實時地實現(xiàn)。IMA(Interactive Multimedia Association,交互式多媒體協(xié)會)參考算法通過簡化許多操作和使用查表方法[6-7],極大地降低了算法的復(fù)雜性。
本課題中的ADPCM壓縮采用ELAN的ELAVoice Builder完成,解碼要在ELAN的8位的單片機EPG3231上用匯編語言實現(xiàn),所以解碼算法是本文研究的重點。圖1是ADPCM解碼算法的原理框圖。
圖1 ADPCM解碼原理框圖
圖中,q:量化器步長值(以下簡稱步長)
dq:量化差值
Sn+1、Sn:分別是當前預(yù)測值和前一個預(yù)測值。
目前大多數(shù)的文章都是針對16bit語音信號的ADPCM壓縮和解壓的研究,對8bit語音信號的ADPCM壓縮和解壓的研究較少。而對一般的語音信號,8bit、22.05 kHz、單聲道已經(jīng)足夠[8-12]。EPG3231 是ELAN的8位的單片機,其內(nèi)部有8位的D/A[13],完全可以用于語音的合成。
語音信號的壓縮用ELAN的ELA Voice Builder完成。該軟件壓縮后的ADPCM文件后綴為.adp,文件中的前3字節(jié)為文件頭,其中第1個字節(jié)為02,表示是ADPCM文件,第2、3字節(jié)與原始的wav文件的采樣率相關(guān),其數(shù)值大約是采樣周期(單位:ms)的2 000倍,采用小端模式存儲,詳見表一。
表1 用ELAN的ELA Voice Builder生成的ADPCM文件第2、3字節(jié)的含義
其后是壓縮編碼,每個字節(jié)包含兩個編碼,低四位對應(yīng)第一個編碼,高四位對應(yīng)第二個編碼。每個編碼的四位中的最高位為符號位,0為正,1為負。如果前一個編碼是0xf、后一個是6,代表靜音,解碼時直接插入63個與前一個預(yù)測值相同的數(shù),這樣的處理對于不連續(xù)的語音可以提高壓縮比;如果前一個編碼是0xf、后一個是7,代表文件結(jié)束。
1)ADPCM解碼總體流程圖
如圖2所示。該流程圖主要展示了對ELAN的ADPCM文件中兩種特殊編碼 (靜音和文件結(jié)束標志)的處理方法,解碼中最核心的部分——ADPCM解碼在該流程圖中用黑體字標出,其流程見圖3。
圖2 ADPCM解壓總體流程圖
2)ADPCM解碼流程圖
ADPCM解碼中需要計算預(yù)測值和更新步長值。根據(jù)ADPCM解壓的原理,我們給出了步長索引修正表和步長表。
圖3是ADPCM解碼流程圖,其右邊是對左邊流程的具體解釋,即實際采用的算法。圖中所稱的編碼即為ADPCM編碼,它是一個4位的編碼,最高位為符號位,0代表正,1代表負。
圖3 ADPCM解碼算法流程圖
需要要注意的是,由于返回的預(yù)測值與wav文件的編碼是一致的,都是無符號數(shù) (即0是最低電平,0xFF是最高電平),而EPG3231的D/A輸入是有符號數(shù)[13](即0x80是最低電平,0x7F是最高電平),所以程序中應(yīng)將返回的預(yù)測值的最高位取反后送到D/A[14]。
用匯編語言在EPG3231按照以上的ADPCM解碼算法編寫程序,播放壓縮后的adp聲音文件,同時,也使用匯編語言在EPG3231上編程播放相同內(nèi)容的wav文件,沒能聽出差別。筆者希望能將解碼后的數(shù)據(jù)與原始的wav文件的數(shù)據(jù)做個對比,所以用C語言編程實現(xiàn)上述的ADPCM解碼算法,并將解碼后的數(shù)據(jù)與原始的wav文件的數(shù)據(jù)用圖形進行對比。具體做法如下。
1)制作包含一個周期正弦波的wav文件(360個采樣點),用ELA Voice Builder壓縮,再按照上面的算法編寫C語言程序進行解碼,在EXCEL中對原始的wav文件的數(shù)據(jù)(去掉文件頭)和解碼后的數(shù)據(jù)分別生成圖表(圖4),并進行數(shù)據(jù)相關(guān)性分析[15],得到的相關(guān)系數(shù)是0.999 843,屬高度相關(guān)。
圖4 一周期正弦波的原始數(shù)據(jù)圖表(左)和壓縮后再解碼得到的數(shù)據(jù)圖表
2)用女聲發(fā)音的漢語詞組“愛惜”,同樣用ELA Voice Builder將“愛惜.wav”壓縮,再用C語言程序在計算機上進行解碼運算[16],將解碼得到的數(shù)據(jù),按照wav文件的格式,加上文件頭,用語音編輯軟件錄音大師打開原始的“愛惜.wav”和解碼后得到的wav文件,其波形如圖5所示。
圖5 語音“愛惜”的波形圖(上)和壓縮后再解碼得到的波形圖
從圖5中可以看出,語音波形包括3個部分,分別對應(yīng)韻母“ai”、聲母“x”、韻母“i”,其中聲母“x”的失真略大,原因是聲母的頻率較高[17],相鄰兩個采樣值間的幅度差值相對較大,所以壓縮后的信息損失較多,解碼后的失真也就相對大些。
在課題“漢語語言教學機”的研發(fā)中,利用本文所述的解碼算法,在EPG3231單片機上用匯編語言實現(xiàn)了8bit、22.05 kHz、單聲道ADPCM的實時解碼和回放,與直接回放原始的wav文件幾乎沒有差別。
[1]徐曉亮,梁維謙.基于Ezairo DSP的ADPCM語音解碼器設(shè)計[J].計算機應(yīng)用,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語音編碼系統(tǒng)設(shè)計[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]柯俊霄.采用單片機壓縮編碼的數(shù)碼錄放系統(tǒng)設(shè)計[J].電子設(shè)計工程,2014,22(5):124-126
[9]宋毅琚,朱艷萍,宋耀良.基于分數(shù)階濾波器的ADPCM預(yù)測誤差信號處理[J].電聲技術(shù),2010,34(5):52-55,66.
[10]陳德宏,林加龍,胡興柳.基于TMS320C55X的G.729語音壓縮算法全匯編優(yōu)化[J].安徽工業(yè)大學學報(自然科學版),2013,30(4):435-439.
[11]趙力.語音信號處理[M].2版.北京:機械工業(yè)出版社,2010.
[12]李濤,曾攀,肖功海.基于ADPCM的數(shù)字語音存儲與回放系統(tǒng)[J].現(xiàn)代電子技術(shù),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和閃存的聲音播放器設(shè)計[J].電子設(shè)計工程,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]王堃,蔡強順.電子束焊接熔池流場數(shù)值模擬研究[J].火箭推進,2015(1):98.
[17]王坤.基于SVPWM的STATCOM設(shè)計及實現(xiàn)[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—),男,四川成都人,碩士,副教授、工程師。研究方向:單片機應(yīng)用。