吳 偉 張 禹
(中國電子科技集團(tuán)公司第二十八研究所 南京 210002)
?
基于FPGA與ML7204的音頻編解碼設(shè)計(jì)*
吳偉張禹
(中國電子科技集團(tuán)公司第二十八研究所南京210002)
摘要通信系統(tǒng)中的語音編解碼多基于DSP來實(shí)現(xiàn),采用相應(yīng)的DSP硬件設(shè)計(jì)及軟件算法,可以較方便地實(shí)現(xiàn)多路語音處理。而在某些小型的G.729格式的通信系統(tǒng)中,采用硬件編解碼的模式,結(jié)合FPGA來協(xié)同設(shè)計(jì),可以將語音編解碼更為方便地應(yīng)用在通信系統(tǒng)的終端設(shè)備中,大大減少了設(shè)備設(shè)計(jì)的復(fù)雜度。
關(guān)鍵詞編解碼; G.729; 音頻處理; PCM
Class NumberTN95
1引言
在通信系統(tǒng)中,需要將通信雙方的模擬信號(hào)通過數(shù)字化方式進(jìn)行傳輸、交換,然后送達(dá)對(duì)方再將數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào)。在這一過程中,由于系統(tǒng)帶寬的限制,需要對(duì)數(shù)字化以后的信號(hào)進(jìn)行編碼,以減少帶寬的占用,在語音通信系統(tǒng)中,常采用G.729的編解碼方式。在部分產(chǎn)品的開發(fā)設(shè)計(jì)中,利用ML7204硬件編解碼器(code and decode, CODEC)配合現(xiàn)場(chǎng)可編程門陣列(Field-Programmable Gate Array, FPGA)設(shè)計(jì),實(shí)現(xiàn)了實(shí)時(shí)與可靠的數(shù)據(jù)傳輸,充分控制了研發(fā)風(fēng)險(xiǎn),有效降低了設(shè)計(jì)成本,縮短了產(chǎn)品開發(fā)周期。
2ML7204簡(jiǎn)介
ML7204是OKI公司基于網(wǎng)絡(luò)電話(Voice over Internet Protocol,VoIP)的場(chǎng)景應(yīng)用開發(fā)的一款面向中小型系統(tǒng)的模塊,芯片支持雙路G.711-A/μ的編解碼或者單路G.729-A編解碼。其內(nèi)部信號(hào)處理的流程如下:模擬音頻信號(hào)通過模擬數(shù)字轉(zhuǎn)換器(Analog to Digital,AD)進(jìn)入CODEC,由數(shù)字帶通濾波器處理后生成16bits線性脈沖編碼調(diào)制(Pulse Code Modulation,PCM),進(jìn)入語音編碼模塊進(jìn)行G.711&G.729編碼,然后在接收Buffer中緩存生成的數(shù)字語音包;從上級(jí)接口進(jìn)入發(fā)送Buffer的數(shù)字語音包,送達(dá)語音解碼模塊進(jìn)行G.711&G.729解碼,然后通過數(shù)字低通濾波器,通過數(shù)字模擬轉(zhuǎn)換器(Digital to Analog,DA)還原為模擬信號(hào)。信號(hào)處理流程如圖 1所示。
另外,ML7204還提供了許多面向語音業(yè)務(wù)的附加功能,包括回聲抑制,頻移鍵控(Frequency-Shift Keying,F(xiàn)SK)、雙音多頻(Dual Tone Multi-Frequency,DTMF)和話音(TONE)的生成與檢測(cè)等。
圖1 CODEC內(nèi)部處理流程框圖
3硬件系統(tǒng)設(shè)計(jì)
硬件系統(tǒng)的設(shè)計(jì)采用了FPGA做處理芯片來完成ML7204的初始化配置及后續(xù)的數(shù)據(jù)收發(fā)等工作。
ML7204的控制接口為通用異步總線接口,可由中央處理器(Central Processing Unit,CPU)或者其他控制器進(jìn)行訪問。一般通過地址映射的方式,將CODEC內(nèi)部寄存器交由控制器讀寫控制,從而將系統(tǒng)需要的模式、 功能一一配置, 完成相關(guān)功能,同時(shí)收發(fā)語音數(shù)據(jù)。也可采用PCM接口來收發(fā)語音數(shù)據(jù),以方便和多通道緩沖串行接口(Multi-channel Buffering Serial Port,McBSP)等上級(jí)接口互聯(lián)。
硬件設(shè)計(jì)上,模擬與數(shù)字部分的電源、地線是分離的。在模擬部分,語音輸入信號(hào)為差分信號(hào),通過10uF電容進(jìn)行交流耦合,并采用模擬信號(hào)的地線引腳AVREF和1kΩ電阻網(wǎng)絡(luò)對(duì)信號(hào)進(jìn)行整流,以提高其信噪比。音頻信號(hào)輸出為單端信號(hào),也采用10uF電容隔斷直流分量;數(shù)字信號(hào)部分,根據(jù)硬件管腳的定義,先進(jìn)行工作模式硬件配置,然后將異步總線的16位數(shù)據(jù)、8位地址及控制線,PCM接口的信號(hào)線等連接至FPGA的輸入輸出(Input and Output,IO)管腳,完成FPGA與CODEC的硬件互聯(lián)。ML7204的硬件設(shè)計(jì)如圖2所示。
圖2 ML7204硬件原理圖設(shè)計(jì)
4軟件系統(tǒng)設(shè)計(jì)
為完成底層模擬信號(hào)與上層數(shù)字信號(hào)的轉(zhuǎn)換,通過Verilog硬件描述語言設(shè)計(jì)FPGA程序來實(shí)現(xiàn)對(duì)ML7204的控制,其中FPGA為主機(jī),ML7204為從機(jī)。
首先,對(duì)ML7204進(jìn)行初始化配置。ML7204內(nèi)部含有CR0-CR47等基本的控制寄存器以及通過CR寄存器的功能擴(kuò)展所映射的內(nèi)部數(shù)據(jù)空間。CODEC初始化所用的寄存器,除了CR0、CR5用來配合相關(guān)的延時(shí)、查詢等操作以控制芯片時(shí)序邏輯外,還需要將CR13、CR31、CR23以及CR10按照功能寫入配置字。上述寄存器對(duì)應(yīng)著編解碼格式和幀時(shí)長(zhǎng)、信號(hào)路徑的控制、編解碼器工作使能和語音輸出使能等功能控制。
在本次的設(shè)計(jì)中,依次配置如下:采用G.729-A率編解碼,10ms一幀的工作模式;規(guī)劃音頻0通道的模擬輸入信號(hào)傳遞路徑;使能CODEC-A編解碼器,關(guān)閉CODEC-B模塊;使能音頻0的模擬輸出信號(hào),關(guān)閉音頻1的模擬輸出信號(hào)。該部分的配置僅僅是實(shí)現(xiàn)芯片最基本編解碼功能,拓展的功能還需添加其他寄存器或內(nèi)部隨機(jī)訪問存儲(chǔ)器(Random Access Memory,RAM)區(qū)配置。
ML7204的初始化流程如圖3所示。
圖3 硬件CODEC軟件配置流程圖
其次,經(jīng)過上述對(duì)寄存器的配置,CODEC芯片已經(jīng)正常工作,并開始收發(fā)語音數(shù)據(jù)。當(dāng)編碼器從模擬端收到數(shù)據(jù),開始編碼并緩存10Bytes后,接收Buffer給出滿標(biāo)志,此時(shí)芯片的FR0引腳拉低,F(xiàn)PGA采集到該標(biāo)志后,執(zhí)行主機(jī)接收數(shù)據(jù)操作;當(dāng)Buffer從總線接口收到的10Bytes數(shù)據(jù),完全發(fā)送給解碼器后,發(fā)送Buffer給出空標(biāo)志,驅(qū)動(dòng)FR1引腳拉低,此時(shí)FPGA采集到該標(biāo)志,執(zhí)行主機(jī)發(fā)送數(shù)據(jù)操作。
為更簡(jiǎn)明便捷地驅(qū)動(dòng)CODEC工作及后續(xù)功能擴(kuò)展,設(shè)計(jì)了FPGA的狀態(tài)機(jī),并逐層封裝了信號(hào)驅(qū)動(dòng)和數(shù)據(jù)處理的底層操作。在頂層狀態(tài)機(jī)的設(shè)計(jì)上,除去為狀態(tài)機(jī)基本流程而設(shè)計(jì)的初始化態(tài)和空閑態(tài)以外,還分為功能調(diào)度、信息處理和底層驅(qū)動(dòng)三大應(yīng)用部分。
功能調(diào)度態(tài)的功能為:整合外部程序模塊產(chǎn)生的信息,適時(shí)調(diào)整調(diào)度優(yōu)先級(jí),產(chǎn)生信號(hào)量,從而控制FPGA完成狀態(tài)機(jī)在頂層狀態(tài)的遷移,并提供下一級(jí)狀態(tài)機(jī)跳轉(zhuǎn)方向。優(yōu)先級(jí)的動(dòng)態(tài)調(diào)整算法由程序的其他模塊處理。部分程序偽碼如下
mode_sched:
if((schd ==idle) && (work_seq!= null)) /*判斷是否有新的調(diào)度請(qǐng)求*/
mode_ status<= mode_proc;
else
mode_ status <= mode_schd;
case(schd_order)/*執(zhí)行調(diào)度,根據(jù)動(dòng)態(tài)調(diào)度算法產(chǎn)生的優(yōu)先級(jí)進(jìn)行響應(yīng),并給后一級(jí)狀態(tài)信息量賦值,選擇處理類型*/
order_pri1:
work_seq<= CODEC_initial;
信息處理態(tài)的作用是:結(jié)合CODEC芯片的初始化流程、數(shù)據(jù)收發(fā)流程設(shè)計(jì)數(shù)據(jù)的傳遞方式組合。狀態(tài)機(jī)執(zhí)行到該運(yùn)行態(tài),通過上層傳遞過來的信號(hào)量去選擇何種處理類型。處理類型分為CODEC_initial,CODEC_busy,CODEC_idle,CODEC_halt,DATA_send,DATA_recv等。以初始化進(jìn)程CODEC_initial狀態(tài)為例,部分程序偽碼如下:
mode_proc:
case(work_seq)
CODEC_initial:
case(CONF_seq)
CONF_seq1:
codec_cs<= CHIP_csX;
codec_addr <= CODEC_crX;
codec_sdata <=CONF_data;
work_mode <= mode_drv;
bus_ type<= BUS_wr;
CONF_seq <= CONF_seq2;
底層驅(qū)動(dòng)態(tài)接收上層狀態(tài)機(jī)傳遞過來的異步總線控制參數(shù),通過時(shí)序邏輯控制,完成數(shù)據(jù)讀寫的操作,控制時(shí)序分為BUS_rd和BUS_wr,通過CODEC_BUS_outen信號(hào)來控制總線的三態(tài)門。操作完畢后,返回上一級(jí)狀態(tài)機(jī),即信息處理態(tài)??偩€控制時(shí)序相對(duì)簡(jiǎn)單,本文不再細(xì)述,關(guān)鍵在于和狀態(tài)機(jī)的各級(jí)遷移信號(hào)結(jié)合,并逐層封裝起來,給上層狀態(tài)機(jī)邏輯模塊調(diào)用。
另外還需說明一點(diǎn)的就是先入先出存儲(chǔ)器(First In First Out,F(xiàn)IFO)的設(shè)計(jì)。系統(tǒng)在G.729音頻格式,10ms幀長(zhǎng)時(shí),每次中斷產(chǎn)生10Bytes數(shù)據(jù),而在G.711格式,20ms幀長(zhǎng)時(shí),每次產(chǎn)生160Bytes。由于CPU調(diào)度、底層驅(qū)動(dòng)資源分配等問題,在某些情況下,尤其是在多路CODEC并行工作,CPU負(fù)荷加重時(shí),會(huì)導(dǎo)致數(shù)據(jù)的丟失和時(shí)延的增大。為充分降低語音的時(shí)延和誤碼率,提高數(shù)據(jù)傳輸?shù)男?,本次設(shè)計(jì)采用FIFO進(jìn)行數(shù)據(jù)緩存,同時(shí)設(shè)計(jì)算法適時(shí)調(diào)整優(yōu)先級(jí),以保證語音的傳輸質(zhì)量。根據(jù)上文的配置,在CODEC側(cè)每10ms就會(huì)有一個(gè)語音數(shù)據(jù)幀產(chǎn)生,10Bytes,同時(shí)拉低FR0信號(hào)。狀態(tài)機(jī)在通過各級(jí)功能調(diào)度后,最終實(shí)現(xiàn)該功能的部分偽碼如下:
CONF_seq4:
if(fifo_num_cnt CONF_seq <= CONF_seq5; else CONF_seq <= CONF_seq8; CONF_seq5: codec_cs<= CHIP_csX; codec_addr <= CODEC_crX; codec_sdata <=CONF_data; work_mode <= mode_drv; bus_ type<= BUS_wr; CONF_seq <= CONF_seq6; CONF_seq6: fifo_recv_cnt <= fifo_recv_cnt+1; if(fifo_recv_cnt == 0) rxfifo_ery1<= codec_rdata; if(fifo_recv_cnt == 2) rxfifo_wq1<= 1; if(fifo_recv_cnt == 3) rxfifo_wq1<= 0; if(fifo_recv_cnt == 4) fifo_recv_cnt<= 0; CONF_seq<= CONF_seq7; CONF_seq7: fifo_num_cnt<= fifo_num_cnt + 1; CONF_seq <= CONF_seq4; CONF_seq8: fifo_num_cnt<= 0; CONF_seq<= CONF_seq1; work_status<= mode_schd; FIFO采用了FPGA自帶的IP核,配置為16Bit位寬,256-words深度。在IP核例化時(shí),讀寫接口時(shí)鐘分別根據(jù)FPGA主狀態(tài)機(jī)時(shí)鐘,F(xiàn)PGA與CPU接口控制時(shí)鐘來選定,同時(shí)FIFO的數(shù)據(jù)、控制接口對(duì)接到FPGA相應(yīng)狀態(tài)機(jī)的模塊。 當(dāng)然上述的程序模塊只描述了最基本的模塊實(shí)現(xiàn)和相互之間的應(yīng)用關(guān)系,在實(shí)際的產(chǎn)品工程化中,還牽涉到硬件CODEC更進(jìn)一步配置,模塊調(diào)度動(dòng)態(tài)調(diào)整算法以及PCM接口模塊的程序融合等設(shè)計(jì)。 5結(jié)語 FPGA由于并行處理,實(shí)時(shí)性高,所以在某些對(duì)時(shí)延較為敏感的場(chǎng)合尤為適用。本次設(shè)計(jì)并沒有像以前的產(chǎn)品案例中,加入FPGA軟核來工程實(shí)施,而是采用了Verilog語言來開發(fā),這樣對(duì)底層邏輯控制較好,適當(dāng)優(yōu)化數(shù)據(jù)通路后,能夠在一定程度上提高數(shù)據(jù)吞吐率,降低延時(shí)。對(duì)某款設(shè)計(jì)支持6路CODEC的產(chǎn)品進(jìn)行測(cè)試,以20ms,G.711-A的SIP系統(tǒng)為例,理想實(shí)驗(yàn)室環(huán)境下,話音時(shí)延約為50ms;在音頻質(zhì)量測(cè)試子項(xiàng)中,系統(tǒng)的總諧波失真(Total Harmonic Distortion,THD)為-40dB左右。 另外在低成本應(yīng)用場(chǎng)合,可能僅僅需要處理1到2路音頻數(shù)據(jù),且也不牽涉到混頻算法,數(shù)字信號(hào)處理器(Digital Signal Processor, DSP)多路編解碼的優(yōu)勢(shì)并沒有得到充分發(fā)揮,因此在高性價(jià)比設(shè)備設(shè)計(jì),相關(guān)算法技術(shù)開發(fā)人員不足卻需要快速推出市場(chǎng)應(yīng)用等場(chǎng)合,本次基于硬件CODEC的設(shè)計(jì)尤為適用,并已在產(chǎn)品應(yīng)用中產(chǎn)生了較好的經(jīng)濟(jì)效益。 參 考 文 獻(xiàn) [1] 楊曉東,鄭樹強(qiáng).語音編碼在IP調(diào)度系統(tǒng)中的應(yīng)用研究[J].計(jì)算機(jī)網(wǎng)絡(luò),2014(6):61-63. [2] 張忠慧,方元.語音編碼方案客觀評(píng)價(jià)[J].計(jì)算機(jī)應(yīng)用,2014,34(S1):265-267. [3] 于增貴.ITU-T 8kbps語音編碼標(biāo)準(zhǔn)介紹[J].通信技術(shù),1997(4):62-65. [4] 金靜,張?zhí)祢U,萬義龍等.TETRA與G.729語音編碼算法的比較研究[J].電視技術(shù),2013,37(15):168-172. [5] 楊貴新,谷志峰.G.729語音編碼算法研究及基于DSP的實(shí)現(xiàn)[J].單片機(jī)及嵌入式系統(tǒng)應(yīng)用,2012(5):9-12. [6] 郭俊利.數(shù)字集群通信系統(tǒng)的接入分析與容量估算[J].無線電通信技術(shù),2014,40(1):14-17. [7] 金輝,陳后金,孫江波.VoIP語音編解碼器的實(shí)現(xiàn)與優(yōu)化[J].北京交通大學(xué)學(xué)報(bào),2005,29(2):85-87. [8] 李志國,李喬.車載話音集中控制器中VoIP網(wǎng)關(guān)技術(shù)實(shí)現(xiàn)[J].指揮信息系統(tǒng)與技術(shù),2012,3(2):61-65. [9] 夏宇聞.Verilog數(shù)字系統(tǒng)設(shè)計(jì)教程[M].北京:北京航空航天大學(xué)出版社,2008:166-192. 收稿日期:2016年1月2日,修回日期:2016年2月11日 作者簡(jiǎn)介:吳偉,男,工程師,研究方向:嵌入式系統(tǒng)的軟硬件設(shè)計(jì),通信網(wǎng)和以太網(wǎng)接入設(shè)備。張禹,男,碩士,工程師,研究方向:模擬電路、電源技術(shù)研究,高速A/D、D/A。 中圖分類號(hào)TN95 DOI:10.3969/j.issn.1672-9730.2016.07.017 Speech CODEC Design Based on FPGA and ML7204 WU WeiZHANG Yu (The 28th Research Institute of China Electronics Technology Group Corporation, Nanjing210002) AbstractSpeech CODEC in voice communication system is usually processed by DSP. Designing DSP hardware circuitry and software arithmetic will solve speech of multi-channels more conveniently. However, in some G.729 format, low-cost information systems, a module of hardware CODEC cooperating with FPGA will realize Speech CODEC more easily in the communication terminal designing and reduce the complexity of embedded system engineering. Key WordsCODEC, G.729, speech process, PCM