新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 用SPCE061A設(shè)計(jì)的嵌入式語音通信平臺(tái)

用SPCE061A設(shè)計(jì)的嵌入式語音通信平臺(tái)

——
作者:張軍 古樂野 時(shí)間:2007-11-14 來源:單片機(jī)及嵌入式系統(tǒng)應(yīng)用 收藏

引言

    隨著數(shù)字信號(hào)處理技術(shù)的發(fā)展,語音交互的嵌入式和網(wǎng)絡(luò)化發(fā)展已日趨成熟。但由于嵌入式系統(tǒng)具有存儲(chǔ)空間小、顯示能力不足的特點(diǎn),要進(jìn)行廣泛而深入的嵌入式語音壓縮、語音通信方面的研究和分析,有一個(gè)與PC機(jī)相連的臺(tái)理而完善的語音通信平臺(tái)。本文基于臺(tái)灣凌陽公司的SPCE061A型號(hào)微控制器和ADPCM(自適應(yīng)差分脈沖編碼調(diào)制)的原理,闡述實(shí)現(xiàn)的方法,并提出有針對(duì)性的設(shè)計(jì)策略。

1平臺(tái)構(gòu)架

    圖1為平臺(tái)功能模塊,本文實(shí)現(xiàn)的語音網(wǎng)絡(luò)為星型網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),PC機(jī)服務(wù)器與多個(gè)語音終端通過MAX232串口相連,承擔(dān)著通信中介和實(shí)驗(yàn)數(shù)據(jù)分析的任務(wù)。


    在終端功能模塊中,中心控制和處理選用凌陽公司的SPCE061A。它的CPU內(nèi)核是凌陽最新推出的μ′SP 16位微處理器芯片,因而具有多功能微控制器和高速率微處理器的雙重特色。在音頻處理方面,它具有單通道聲音模/數(shù)轉(zhuǎn)換器,并內(nèi)置有具備自動(dòng)增益控制(AGC)的麥克風(fēng)放大器,從而簡化了語音處理系統(tǒng)的硬件組成。器件詳細(xì)資料見參考文獻(xiàn)。音頻輸入輸出模塊包括話筒輸入和耳機(jī)輸出兩個(gè)部分。話筒輸入到A/D采樣口之間月LM324N運(yùn)算放大器構(gòu)建一個(gè)兩級(jí)防混疊低通濾波器。在D/A口到耳機(jī)輸出之間使用SPY0030功率放大器,可提供最大500mW的輸出功率。電源管理模塊采用了SPY0029,可以提供3.14V的低功耗電壓標(biāo)準(zhǔn)。RS232通信接口主要負(fù)責(zé)與PC機(jī)的通信。這里采用MAX232芯片,可同時(shí)提供兩個(gè)通道的RS2.32通信連接。

    在PC機(jī)上軟件的功能模塊圖中,全部模塊由Visual C++實(shí)現(xiàn),具有友好的人機(jī)交互界面。其中通信模塊實(shí)現(xiàn)所有的通信任務(wù),語音算法模塊集成有各類語音壓縮、數(shù)字濾波、靜音檢測以及短時(shí)分析等算法;分析模塊可以提供圖形界面,顯示語音的波形圖和頻譜特征;語音算法模塊和分析模塊僅為研究數(shù)字語音算法提供方便。

2 ADPCM編解碼原理

    ADPCM是語音壓縮編碼中復(fù)雜度較低的一種方法。它利用語音信號(hào)的非平穩(wěn)特點(diǎn),使用自適應(yīng)預(yù)測和自適應(yīng)量化,能在32kb/s數(shù)碼率上達(dá)到64kb/s數(shù)碼率的語音質(zhì)量(MOS分為4.1),從而符合進(jìn)入公用網(wǎng)的要求。由于ADPCM具有這樣的優(yōu)越性能,目前它在電信長途傳輸系統(tǒng)中和各類音頻傳輸或處理系統(tǒng)中已得到了廣泛的應(yīng)ADPCM編碼原理如圖2所示。


    ADPCM的核心思想是:①利用自適應(yīng)的思想改變量化階的大小,即使用小的量化階(step-size)去編碼小的差值,使用大的量化階去編碼大的差值;②使用過去的樣本值估算下一個(gè)輸入樣本的預(yù)測值,使實(shí)際樣本值和預(yù)測值之間的差值總是最小。

    這里采用了后向自適應(yīng)量化和預(yù)測。其主要原理是,根據(jù)前一時(shí)刻量化器的輸出數(shù)字碼來確定量化器的量化間隔,并根據(jù)前一時(shí)刻的逆量化值來確定這一時(shí)刻預(yù)測器的輸出。

    量化算法符合Jayant算法,即△(k+1)=△(k)M(|I(k)|)其中,△(k+1)和△(k)分別為這一時(shí)刻和前一時(shí)刻的量化間隔,I(k)為前一時(shí)刻輸出的碼字,而M指以碼字為自變量的關(guān)系函數(shù),取值如下:

    |I(k)|值為1,2,3,4,5,6,7,8;

    M(|I(k)|)值為0.9,0.9,0.9,0.9,1.2,1.6,2.0,2,4。

    預(yù)測算法采用參數(shù)修正算法, 即Pred(k+1)=Pred(k)+D(k)+α△(k)其中,△(k)為前一時(shí)刻量化間隔,Pred(k)和Pred(k+1)分別為前一時(shí)刻和這一時(shí)刻的預(yù)測值,D(k)為前一時(shí)刻的差值,α是修正參數(shù)。

    ADPCM的具體數(shù)學(xué)推導(dǎo)可見參考文獻(xiàn)[2]和[3]。

3 的實(shí)現(xiàn)

3.1 語音編解碼實(shí)現(xiàn)策略


    這里的編解碼都在嵌入式系統(tǒng)上實(shí)現(xiàn)。為了提高語音編碼的速度,所有的編解碼運(yùn)算全部用匯編語言實(shí)現(xiàn):伹由對(duì)ADPCM的原理介紹可知,在編碼過程中,計(jì)算量化間隔涉及到小數(shù)乘法。這在定點(diǎn)微處理器中實(shí)現(xiàn)起來是比較復(fù)雜的:需要判斷差值的大小,再進(jìn)行相應(yīng)的小數(shù)變整數(shù)、乘除、整數(shù)變小數(shù)等一系列變換才能得到當(dāng)前量化間隔的值,算法復(fù)雜度比較高。針對(duì)這一情況,本文采用二級(jí)檢索的方法求量化間隔。具體算法如下:

    ①根據(jù)Jayant算法建立量化間隔表StepSizeTable[45]和量化間隔索引變化表IndexVariaty[8];

    ②設(shè)索引初值Index=0;

    ③利用當(dāng)前差值的量化絕對(duì)值Differ,查IndexVaria-tyTable[],得到索引的當(dāng)前變化量
IndexVariaty;

    ④用Index+lndexVanaty更新Index;

    ⑤再利用Index,查StepSizeTable[],最終得到當(dāng)前的量化間隔。

    之后的編碼求量化間隔就是③、④、⑤的循環(huán)。采用二級(jí)檢索方法的好處在于,在建立StepSizeTable表時(shí)就可以把乘法運(yùn)算、小數(shù)變整數(shù)等步驟預(yù)處理了,從而降低了編解碼過程的算法復(fù)雜度,減少了終端的處理延遲。

3.2 實(shí)時(shí)通信的系統(tǒng)策略


    為了保證在發(fā)送端采樣和發(fā)送、接收端播放和接收的實(shí)時(shí)配合,本文利用凌陽豐富的時(shí)鐘中斷,采用了前后臺(tái)思想。前臺(tái)由計(jì)數(shù)器TlmerA中斷和異步通信UART中斷程序組成.TimerA定時(shí)為每l25μs中斷一次驅(qū)動(dòng)A/D或D/A進(jìn)行音頻的采樣、播放,而UART中斷則處理通信的發(fā)送和接收工作。由于傳輸波特率遠(yuǎn)高于采樣率,因此采樣的緊迫性要高于傳輸?shù)木o迫性,這樣就要設(shè)置TimerA中斷優(yōu)先級(jí)遠(yuǎn)高于UART,以保證在發(fā)送端的采樣、接收端的播放不被打斷。后臺(tái)則主要是編解碼程序的執(zhí)行、鍵盤控制命令的響應(yīng)處理。在語音編解碼算法時(shí)間復(fù)雜度足夠低的情況下,如已經(jīng)實(shí)現(xiàn)的ADPCM、CVSD(連續(xù)可變斜率增量調(diào)制)以及凌陽集成的軟模塊SACM_DVR(子帶編碼)等.這種系統(tǒng)可以得到很好的語音交互效果。

3.3 實(shí)時(shí)緩存實(shí)現(xiàn)策略


    基于實(shí)時(shí)通信思想,在接收端要做到一邊接收一邊播音就需要依賴于實(shí)時(shí)處理機(jī)制和緩存策略。

    在緩存方面,單片機(jī)SPCE061A中SRAM僅有2KB,這對(duì)于有線連接115kb/s波特率和播放數(shù)據(jù)率32Kb/s之間的差距而言是遠(yuǎn)遠(yuǎn)不夠的。因此,采用乒乓制雙體緩存策略,即將緩存分為兩個(gè)區(qū),每個(gè)區(qū)大小剛好為1幀數(shù)據(jù)量大小(114字節(jié)),通過兩個(gè)區(qū)的交替,很好地解決了數(shù)據(jù)率的匹配問題。首先設(shè)置一個(gè)應(yīng)答信號(hào),服務(wù)器以此為發(fā)送數(shù)據(jù)信號(hào),且1次只發(fā)送l幀。在PC機(jī)端的串口事件響應(yīng)代碼為:

    UINT stdcall Tlaread OnCommMscornml(PVOID pvParam){
    if(m etrlComm,GetCommEvent()==2){ //事件值為2,表示接收緩沖區(qū)內(nèi)有字符
    iffiRunState=State_Receive) //若為接收態(tài),就接收數(shù)據(jù)
    else if(iRuIiState==State_Send) //偌為發(fā)送態(tài)就表明收到應(yīng)答信號(hào)
    if(HaveSendedDataLen〈DataReadedLen)//緩沖區(qū)至少還有1幀數(shù)據(jù)
    SendOnePage(); //發(fā)送1幀數(shù)據(jù)
    }
  }

    在嵌入式終端的具體實(shí)現(xiàn)如圖3所示。

    這樣僅開了288字節(jié)的緩沖區(qū),就很好地解決了高速和低速的匹配問題。

結(jié)語

    本文構(gòu)建的平臺(tái)不僅可以應(yīng)用在ADPCM算法的語音通信中,基于凌陽微處理器的處理能力,還有較好的可擴(kuò)展性。如增量編碼、子帶編碼、參數(shù)編碼等都可以進(jìn)一步移植,無論在應(yīng)用還是在研究中都具有較好的借鑒價(jià)值。在應(yīng)用中,可以基于這種思想建立一個(gè)具有集中控制、處理能力的星型語音通信網(wǎng)絡(luò);而在研究中,可以在此平臺(tái)上對(duì)多種語音處理算法進(jìn)行直觀分析(波形、聽覺)或頻譜分析。在嵌入式終端所做的低復(fù)雜度算法(如各類波形編碼)可以將碼流或語音流傳送到PC機(jī),通過平臺(tái)提供的分析工具分析波形和頻譜變化,以對(duì)比各種算法對(duì)語音原始信號(hào)造成的損失程度;而在PC機(jī)上所做的高復(fù)雜度算法(如參數(shù)編碼),也可以將處理后的語音信號(hào)傳送到嵌入式系統(tǒng),聽到算法的效果。文中設(shè)計(jì)為進(jìn)一步對(duì)語音數(shù)字信號(hào)處理的研究和開發(fā)工作奠定了基礎(chǔ)。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉