《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 業(yè)界動(dòng)態(tài) > 適于語音處理的SDA80D51芯片及其數(shù)字錄放音系統(tǒng)

適于語音處理的SDA80D51芯片及其數(shù)字錄放音系統(tǒng)

2008-12-16
作者:柳 遠(yuǎn) 劉 加 劉潤生

  摘? 要: SDA80D51 UNISPEECH是Infineon公司新推出的具有DSP和單片機(jī)雙核的芯片。介紹了該芯片的組成框圖及各功能模塊,并且用該芯片完成一個(gè)硬件系統(tǒng),實(shí)現(xiàn)了語音的G.723.1編碼存儲和解碼放音。?

  關(guān)鍵詞: G.723.1? Sigma-Delta調(diào)制? 前后臺" title="前后臺">前后臺?

?

  目前市面上有很多語音錄放系統(tǒng),如錄放音玩具、錄音筆等,大多采用了單片機(jī)控制一個(gè)語音芯片,再接一個(gè)FLASH存儲器的結(jié)構(gòu)。由于語音芯片都是固定的編碼算法,使得系統(tǒng)用途單一,不利于進(jìn)一步改進(jìn),缺乏靈活性,如日本OKI公司的MSM6588只能完成ADPCM編碼。?

  用SDA80D51芯片實(shí)現(xiàn)的語音錄放音系統(tǒng),系統(tǒng)硬件簡單、工作可靠。所有的編解碼" title="編解碼">編解碼算法都由軟件來完成,設(shè)計(jì)者可以編制自己的軟件,完成不同的功能。它既可以作為簡單的數(shù)字錄放音系統(tǒng),也可以通過改變程序做語音識別、語音合成等多種系統(tǒng)。用途靈活、功能強(qiáng)大。該系統(tǒng)選用G.723.1語音編解碼算法來完成語音的錄放。?

1 SDA80D51芯片介紹?

  SDA80D51芯片是德國Infineon公司生產(chǎn)的適合語音處理的芯片,它采用0.18μm工藝,核的工作電壓為1.8V,I/O電壓為3.3V,模擬Codec部分電壓為2.5V,功耗是150mW。該芯片相當(dāng)于一個(gè)片上系統(tǒng)(SOC),內(nèi)部集成了許多功能模塊,如圖1所示。由于它集成了許多功能塊,幾乎只需要一片芯片就能完成語音處理和系統(tǒng)控制。?

?

?

  該芯片含有兩個(gè)處理器,分別是16位DSP(OAK)和8位MCU(M8051 E-Warp)。M8051 E-Warp核由美國Mentor Graphics公司設(shè)計(jì),它是與一般8051兼容的MCU,具有很多的增強(qiáng)功能,最高工作速度可達(dá)50MIPS(Million Instruction? per Second),是目前為止最快的增強(qiáng)8051。傳統(tǒng)8051的一個(gè)機(jī)器周期是12個(gè)時(shí)鐘周期,而這個(gè)核只需2個(gè)時(shí)鐘周期,速度是傳統(tǒng)8051的6倍。許多指令都能在一個(gè)機(jī)器周期內(nèi)完成。由于指令與8051兼容,使得程序員不用花許多時(shí)間學(xué)習(xí)新指令,而直接采用傳統(tǒng)的8051編程方式就行。芯片集成有JTAG口,用Mentor Graphics公司的FS2(First Silicon Solutions)仿真器就可以實(shí)現(xiàn)在線仿真。?

  OAK核是美國DSP Group公司設(shè)計(jì)的16位低功耗、低電壓和高速定點(diǎn)DSP。采用雙金屬CMOS,在0.6μm或0.5μm以下工藝生產(chǎn)。工作電壓范圍在2.7V~5.5V。在5V 80MHz工作條件下,消耗電流38mA;在3.3V 80MHz條件下,消耗電流25mA。該核采用Harvard總線結(jié)構(gòu),工作速度可達(dá)100MIPS。?

  Codec部分由I2S、ADC和DAC組成。I2S口可用來外接一些通用的模/數(shù)芯片。兩路的12位8kHz采樣率的ADC,可接峰峰值為1.03V的差分電壓。片內(nèi)有數(shù)字AGC,可放大0到42dB(8檔,6dB步長);模/數(shù)轉(zhuǎn)換采用Sigma-Delta調(diào)制技術(shù)并經(jīng)過一定的換算,得到16bit的PCM碼流,送往處理器。兩路11位8kHz采樣率的DAC可軟件調(diào)節(jié)增益,可放大0到-18dB(-6dB步長)。所有Codec部分可通過ASI接口連到OAK或M8051上。?

  SDA80D51芯片還有I2C、SPI和PWM接口模塊,可以通過M8051來控制。另外在不同版本的芯片上還有多達(dá)50到250之間的GPIO(通用的輸入輸出口),這可以保證系統(tǒng)控制的靈活性。?

  該芯片最有特點(diǎn)的功能模塊是存儲器管理單元MMU(Memory Manage Unit),它可以管理兩個(gè)核的存儲區(qū)映射。物理存儲器(RAM或ROM)被看成由多個(gè)塊組成,每個(gè)塊的大小在不同版本的芯片上定義是不同的,本系統(tǒng)中,塊的大小是16K字節(jié)(或8K字)。MMU既可以把塊(8K字)映射給OAK的程序區(qū)或數(shù)據(jù)區(qū),也可以把塊(16K字節(jié))映射給M8051的程序區(qū)或數(shù)據(jù)區(qū)。這些完全由寫M8051的特殊功能寄存器來完成。存儲空間的自由掛接使得完成兩個(gè)核之間的數(shù)據(jù)轉(zhuǎn)換變得非常容易。此外,程序裝載和啟動(dòng)也需要MMU的控制。?

  整個(gè)芯片的工作方式" title="工作方式">工作方式是M8051作為主控制芯片,完成對各種接口的控制和系統(tǒng)的配置。OAK作為協(xié)處理器,完成語音編解碼算法等計(jì)算。兩個(gè)核之間還有兩個(gè)64字深的FIFO。它們用于雙核通信。?

2 G.723.1語音編解碼?

  語音編解碼算法一般分為三類:波形編碼、參數(shù)編碼(聲碼器)和混合編碼。波形編碼技術(shù)是在不建立語音模型的情況下,直接對語音波形用編碼方式逼近,可有時(shí)域的脈沖編碼調(diào)制和變換域編碼;參數(shù)編碼是在一定的語音模型基礎(chǔ)上,在編碼端分析出該模型參數(shù),并選擇適當(dāng)?shù)姆绞綄ζ溥M(jìn)行高效率的編碼,而在解碼端利用這些參數(shù)和語音模型,用合適的激勵(lì)源(excitation)重新合成語音;混合編碼則保留了參數(shù)編碼的語音模型的假定,又利用了波形編碼的準(zhǔn)則優(yōu)化激勵(lì)信號。?

  G.723.1算法屬于混合編碼。語音模型是基于線性預(yù)測理論的全極點(diǎn)模型。輸入是16bit的PCM碼流,然后采用合成分析、矢量量化等方法,以感覺加權(quán)后的語音基音殘差信號能量最小為準(zhǔn)則進(jìn)行編碼。有兩種類型編碼方式,一種是6.3kb/s多脈沖最大似然量化方法(壓縮率" title="壓縮率">壓縮率20:1),另一種是5.3kb/s代數(shù)碼本激勵(lì)線性預(yù)測ACELP(壓縮率24:1)。后者的壓縮率高,編碼速率低,這可以降低系統(tǒng)存儲語音時(shí)所需存儲器的容量。而且解碼算法簡單,回放語音時(shí)不會有延遲感,語音清晰。?

3 語音錄放音系統(tǒng)硬件設(shè)計(jì)?

  語音錄放音系統(tǒng)硬件電路的系統(tǒng)框圖如圖2所示。由于芯片內(nèi)(虛線內(nèi))集成了許多功能模塊,使得電路的結(jié)構(gòu)變得非常簡單。?

?

?

  SDA80D51的RS232串行口通過MAX3222匹配電壓后,連接到計(jì)算機(jī)。?

  芯片的啟動(dòng)支持SPI、I2C和RS232串口三種方式。本系統(tǒng)采用I2C啟動(dòng)方式,選用ATMEL公司的24C64。上電后,片內(nèi)固化在ROM上的程序會從選定的I2C芯片拷貝256字節(jié)客戶啟動(dòng)程序到片內(nèi)程序區(qū)ff00h~ffffh處,最后把程序指針指向ff00h,開始執(zhí)行。?

  系統(tǒng)程序存在SST28LF040中,由啟動(dòng)芯片中的用戶啟動(dòng)程序把系統(tǒng)程序裝載到芯片內(nèi)部的RAM里,然后處理器會執(zhí)行RAM中的程序指令。?

  語音經(jīng)過編碼壓縮后存儲在三星公司的KM29U128T(16M×8bit)內(nèi)。它的尋址采用串行方式,即8根數(shù)據(jù)線既作地址線也作數(shù)據(jù)線,先輸入地址,再傳送數(shù)據(jù)。這樣,用很少的SDA80D51地址線就可尋址很大的空間,記錄大量的語音數(shù)據(jù)很方便。?

  用8根GPIO線實(shí)現(xiàn)一個(gè)4×4的小鍵盤,可用來作為控制接口。在錄放音時(shí),可以通過對鍵盤的掃描來決定下一步驟。?

4 軟件設(shè)計(jì)?

  由于要對芯片內(nèi)的功能模塊、系統(tǒng)控制和編解碼算法進(jìn)行編程,這使得軟件設(shè)計(jì)" title="軟件設(shè)計(jì)">軟件設(shè)計(jì)量比較大??紤]到本文的篇幅,這里只介紹總程序結(jié)構(gòu)和錄放音的控制部分。?

  總程序框架采用前后臺的工作方式。前臺輪尋各個(gè)任務(wù)引擎,判斷是否有任務(wù)需要處理。若有,切換狀態(tài)并執(zhí)行該任務(wù);若沒有,就繼續(xù)查詢。后臺主要完成對硬件的接口、中斷處理程序以及緩沖硬件數(shù)據(jù)。前臺和后臺的通訊是靠共享緩沖區(qū)來完成的。這種前后臺的工作方式可處理多任務(wù),每個(gè)任務(wù)只占用一個(gè)時(shí)間片。?

  數(shù)字錄放音程序在整個(gè)軟件設(shè)計(jì)中只是一個(gè)任務(wù),它提供一個(gè)任務(wù)引擎程序,由前臺來調(diào)用。具體工作過程是OAK接CODEC模塊,負(fù)責(zé)采集數(shù)據(jù)、編碼和解碼算法以及語音的回放;M8051負(fù)責(zé)配置系統(tǒng)工作寄存器和對FLASH的讀寫。兩個(gè)核之間通過FIFO發(fā)消息,消息的定義格式(C語言)如下:?

??? typedef union tag_FIFO_MESSAGE?

??? {?

??? ? struct?

??? ? {?

??????? struct?

??????? {?

??????????? BYTE bIdSource; //發(fā)送方ID?

??????? ??? BYTE bIdDest;? //接收方ID?

??????????? WORD wMsgType; //發(fā)送消息類型?

??????????? WORD wDataLen; //數(shù)據(jù)長度?

??????????? WORD wSeq;? //消息序號?

??????? } uHead; //消息頭?

??????? WORD wData[27];? //消息數(shù)據(jù)內(nèi)容?

??????? WORD wCRC;? //校驗(yàn)?

??? ?} uForm;?

??? ?WORD wBuf[32];?

??? } FIFO_MESSAGE;?

  兩個(gè)核的任務(wù)引擎程序分別用C語言編寫,程序結(jié)構(gòu)基本相同,都采用狀態(tài)跳轉(zhuǎn)的方式,即每個(gè)子程序模塊都是一個(gè)狀態(tài),滿足一定條件就跳到下一狀態(tài);若都不滿足,就退回到前臺輪尋程序。由前臺程序在下一時(shí)間片繼續(xù)調(diào)用停留在當(dāng)前狀態(tài)的程序。?

  如圖3所示,每個(gè)圓圈都是一個(gè)狀態(tài),兩個(gè)核之間的橫向的箭頭表示消息,向下的箭頭表示狀態(tài)的跳轉(zhuǎn)。?

?

?

  在錄音時(shí),M8051的“錄音初始化狀態(tài)”先做初始化并發(fā)送START消息,表明錄音開始,然后跳到“存語音數(shù)據(jù)狀態(tài)”,等待OAK的消息。OAK的“錄音初始化狀態(tài)”接收到START消息后,先做初始化,然后跳到“語音采集編碼狀態(tài)”,在這里會不停地采集語音并用G.723.1編碼,采滿8K字后,向M8051發(fā)送STORE消息。M8051收到消息后,用存儲器切換程序,拷貝數(shù)據(jù)到M8051的RAM區(qū),并存到FLASH里,這由“存語音數(shù)據(jù)狀態(tài)”來完成。若FLASH存滿,M8051會發(fā)送STOP消息,然后OAK和M8051都進(jìn)入“錄音結(jié)束狀態(tài)”。OAK結(jié)束后還會給M8051發(fā)送DONE消息,表明錄音結(jié)束。?

  在放音時(shí),M8051的“放音初始化狀態(tài)”打開FLASH的文件系統(tǒng)并發(fā)送START消息。OAK收到后,發(fā)送INIT消息,請求M8051傳送第一個(gè)數(shù)據(jù)包。M8051的“初始化確認(rèn)狀態(tài)”收到INIT消息后,從FLASH讀取一個(gè)數(shù)據(jù)包,傳送給OAK,若正確就發(fā)送ACK消息并跳轉(zhuǎn)到“讀語音數(shù)據(jù)狀態(tài)”。要是失敗的話,就發(fā)送STOP消息,這樣OAK和M8051都會結(jié)束放音。當(dāng)OAK收到ACK消息和一個(gè)語音數(shù)據(jù)包時(shí),會跳到“解碼放音狀態(tài)”,在這里不停的把數(shù)據(jù)解碼并發(fā)送給DAC。若放完這個(gè)語音數(shù)據(jù)包,就發(fā)LOAD消息,申請下一個(gè),不停循環(huán)。同時(shí)M8051會準(zhǔn)備語音數(shù)據(jù)包,并傳送給OAK,若沒有數(shù)據(jù)或按停止鍵,M8051會發(fā)STOP消息,結(jié)束發(fā)音。然后OAK會發(fā)FINISH消息,表明所有錄放音結(jié)束。接著M8051的“放音結(jié)束狀態(tài)”會關(guān)閉文件系統(tǒng),清空緩沖區(qū)。?

  由上面的描述可看出,整個(gè)數(shù)字錄放音的工作流程是M8051作主控制器,OAK作從控制器。M8051發(fā)起開始信號,收尾數(shù)字錄放音,而OAK主要負(fù)責(zé)編解碼。這種工作方式靈活可靠,程序很容易擴(kuò)展,例如狀態(tài)數(shù)的增加和消息類型的擴(kuò)展都很容易。?

  該系統(tǒng)的主要特點(diǎn)是充分利用SDA80D51的強(qiáng)大的功能集成,完成語音處理系統(tǒng)。完成一個(gè)大系統(tǒng),幾乎只需要一個(gè)芯片。相信該芯片在語音及相關(guān)領(lǐng)域一定會有很好的應(yīng)用前景。?

參考文獻(xiàn)?

1 易克初, 田 斌, 付強(qiáng).語音信號處理.北京:國防工業(yè)出版社,2000?

2 楊行峻,遲惠生. 語音信號數(shù)字處理.北京:電子工業(yè)出版社,1995?

3 Unispeech SDA80D51芯片介紹文檔(U1_0011.pdf). Infineon公司 Speech Interface Group(語音接口小組), 2001?

4 Dual rate speech coder for multimedia communications transmitting at 5.3 and 6.3kbit/s. ITU-T Recommendation G.723.1, 1996
本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。