周 江,楊清學,梁桃華,孟奕峰
(成都職業技術學院 四川 成都 610041)
基于EPG3231的ADPCM解碼算法實現
周 江,楊清學,梁桃華,孟奕峰
(成都職業技術學院 四川 成都 610041)
16bit語音信號的ADPCM壓縮和解壓是傳統的經典方法,為了在漢語語言教學機上實現語音的合成,作者給出了8位單聲道語音信號算法,并在ELAN 8位單片機EPG3231上使用該算法用匯編語言實現了語音的實時解碼和回放。實驗結果表明,原始的語音數據和解碼后的數據相關性達0.999843,說明解碼后的數據失真率低,達到預期要求。
電子技術;ADPCM解碼;語音;EPG3231
筆者在研的四川省教育廳自然科學重點項目需要研究開發漢語語言教學機,該機主要是為小學語文教學而設計,其中有大量的語音內容需要存儲,主要包括漢語拼音的23個聲母、24個韻母、16個整體認讀音節、全部的普通話拼讀音節以及盡可能多的詞組和課文的讀音,需要的存儲空間比較大,因此有必要對語音進行壓縮后存儲,以節省存儲空間。另一方面,由于“漢語語言教學機”采用單片機為主控芯片,它需要實時地完成壓縮語音信息的解碼工作和語音的回放功能,因而解碼算法不能太復雜,所以在本課題中存儲的語音信息采用ADPCM(Adaptive Differential Pulse Code Modulation,自適應差分脈沖編碼調制)編碼[1]。
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:分別是當前預測值和前一個預測值。
目前大多數的文章都是針對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,代表文件結束。
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]。
用匯編語言在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],相鄰兩個采樣值間的幅度差值相對較大,所以壓縮后的信息損失較多,解碼后的失真也就相對大些。
在課題“漢語語言教學機”的研發中,利用本文所述的解碼算法,在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—),男,四川成都人,碩士,副教授、工程師。研究方向:單片機應用。