隨著數字信號處理技術的發展,語音交互的嵌入式和網絡化發展已日趨成熟。但由于嵌入式系統具有存儲空間小、顯示能力不足的特點,要進行廣泛而深入的嵌入式語音壓縮、語音通信方面的研究和分析,有一個與PC機相連的臺理而完善的語音通信平臺。本文基于臺灣凌陽公司的SPCE061A型號微控制器和ADPCM(自適應差分脈沖編碼調制)的原理,闡述實現嵌入式語音通信平臺的方法,并提出有針對性的設計策略。 1平臺構架 圖1為平臺功能模塊,本文實現的語音網絡為星型網絡拓撲結構,PC機服務器與多個語音終端通過MAX232串口相連,承擔著通信中介和實驗數據分析的任務。 在終端功能模塊中,中心控制和處理選用凌陽公司的SPCE061A。它的CPU內核是凌陽最新推出的μ′SP 16位微處理器芯片,因而具有多功能微控制器和高速率微處理器的雙重特色。在音頻處理方面,它具有單通道聲音模/數轉換器,并內置有具備自動增益控制(AGC)的麥克風放大器,從而簡化了語音處理系統的硬件組成。器件詳細資料見參考文獻。音頻輸入輸出模塊包括話筒輸入和耳機輸出兩個部分。話筒輸入到A/D采樣口之間月LM324N運算放大器構建一個兩級防混疊低通濾波器。在D/A口到耳機輸出之間使用SPY0030功率放大器,可提供最大500mW的輸出功率。電源管理模塊采用了SPY0029,可以提供3.14V的低功耗電壓標準。RS232通信接口主要負責與PC機的通信。這里采用MAX232芯片,可同時提供兩個通道的RS2.32通信連接。 在PC機上軟件的功能模塊圖中,全部模塊由Visual C++實現,具有友好的人機交互界面。其中通信模塊實現所有的通信任務,語音算法模塊集成有各類語音壓縮、數字濾波、靜音檢測以及短時分析等算法;分析模塊可以提供圖形界面,顯示語音的波形圖和頻譜特征;語音算法模塊和分析模塊僅為研究數字語音算法提供方便。 2 ADPCM編解碼原理 ADPCM是語音壓縮編碼中復雜度較低的一種方法。它利用語音信號的非平穩特點,使用自適應預測和自適應量化,能在32kb/s數碼率上達到64kb/s數碼率的語音質量(MOS分為4.1),從而符合進入公用網的要求。由于ADPCM具有這樣的優越性能,目前它在電信長途傳輸系統中和各類音頻傳輸或處理系統中已得到了廣泛的應ADPCM編碼原理如圖2所示。 ADPCM的核心思想是:①利用自適應的思想改變量化階的大小,即使用小的量化階(step-size)去編碼小的差值,使用大的量化階去編碼大的差值;②使用過去的樣本值估算下一個輸入樣本的預測值,使實際樣本值和預測值之間的差值總是最小。 這里采用了后向自適應量化和預測。其主要原理是,根據前一時刻量化器的輸出數字碼來確定量化器的量化間隔,并根據前一時刻的逆量化值來確定這一時刻預測器的輸出。 量化算法符合Jayant算法,即△(k+1)=△(k)M(|I(k)|)其中,△(k+1)和△(k)分別為這一時刻和前一時刻的量化間隔,I(k)為前一時刻輸出的碼字,而M指以碼字為自變量的關系函數,取值如下: |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。 預測算法采用參數修正算法, 即Pred(k+1)=Pred(k)+D(k)+α△(k)其中,△(k)為前一時刻量化間隔,Pred(k)和Pred(k+1)分別為前一時刻和這一時刻的預測值,D(k)為前一時刻的差值,α是修正參數。 ADPCM的具體數學推導可見參考文獻和。 3 嵌入式語音通信平臺的實現 3.1 語音編解碼實現策略 這里的編解碼都在嵌入式系統上實現。為了提高語音編碼的速度,所有的編解碼運算全部用匯編語言實現:伹由對ADPCM的原理介紹可知,在編碼過程中,計算量化間隔涉及到小數乘法。這在定點微處理器中實現起來是比較復雜的:需要判斷差值的大小,再進行相應的小數變整數、乘除、整數變小數等一系列變換才能得到當前量化間隔的值,算法復雜度比較高。針對這一情況,本文采用二級檢索的方法求量化間隔。具體算法如下: ①根據Jayant算法建立量化間隔表StepSizeTable[45]和量化間隔索引變化表IndexVariaty; ②設索引初值Index=0; ③利用當前差值的量化絕對值Differ,查IndexVaria-tyTable[],得到索引的當前變化量IndexVariaty; ④用Index+lndexVanaty更新Index; ⑤再利用Index,查StepSizeTable[],最終得到當前的量化間隔。 之后的編碼求量化間隔就是③、④、⑤的循環。采用二級檢索方法的好處在于,在建立StepSizeTable表時就可以把乘法運算、小數變整數等步驟預處理了,從而降低了編解碼過程的算法復雜度,減少了終端的處理延遲。 3.2 實時通信的系統策略 為了保證在發送端采樣和發送、接收端播放和接收的實時配合,本文利用凌陽豐富的時鐘中斷,采用了前后臺思想。前臺由計數器TlmerA中斷和異步通信UART中斷程序組成.TimerA定時為每l25μs中斷一次驅動A/D或D/A進行音頻的采樣、播放,而UART中斷則處理通信的發送和接收工作。由于傳輸波特率遠高于采樣率,因此采樣的緊迫性要高于傳輸的緊迫性,這樣就要設置TimerA中斷優先級遠高于UART,以保證在發送端的采樣、接收端的播放不被打斷。后臺則主要是編解碼程序的執行、鍵盤控制命令的響應處理。在語音編解碼算法時間復雜度足夠低的情況下,如已經實現的ADPCM、CVSD(連續可變斜率增量調制)以及凌陽集成的軟模塊SACM_DVR(子帶編碼)等.這種系統可以得到很好的語音交互效果。 3.3 實時緩存實現策略 基于實時通信思想,在接收端要做到一邊接收一邊播音就需要依賴于實時處理機制和緩存策略。 在緩存方面,單片機SPCE061A中SRAM僅有2KB,這對于有線連接115kb/s波特率和播放數據率32Kb/s之間的差距而言是遠遠不夠的。因此,采用乒乓制雙體緩存策略,即將緩存分為兩個區,每個區大小剛好為1幀數據量大小(114字節),通過兩個區的交替,很好地解決了數據率的匹配問題。首先設置一個應答信號,服務器以此為發送數據信號,且1次只發送l幀。在PC機端的串口事件響應代碼為: UINT stdcall Tlaread OnCommMscornml(PVOID pvParam){ if(m etrlComm,GetCommEvent()==2){ //事件值為2,表示接收緩沖區內有字符 iffiRunState=State_Receive) //若為接收態,就接收數據 else if(iRuIiState==State_Send) //偌為發送態就表明收到應答信號 if(HaveSendedDataLen〈DataReadedLen)//緩沖區至少還有1幀數據 SendOnePage(); //發送1幀數據 } } 在嵌入式終端的具體實現如圖3所示。 這樣僅開了288字節的緩沖區,就很好地解決了高速和低速的匹配問題。 結語 本文構建的平臺不僅可以應用在ADPCM算法的語音通信中,基于凌陽微處理器的處理能力,還有較好的可擴展性。如增量編碼、子帶編碼、參數編碼等都可以進一步移植,無論在應用還是在研究中都具有較好的借鑒價值。在應用中,可以基于這種思想建立一個具有集中控制、處理能力的星型語音通信網絡;而在研究中,可以在此平臺上對多種語音處理算法進行直觀分析(波形、聽覺)或頻譜分析。在嵌入式終端所做的低復雜度算法(如各類波形編碼)可以將碼流或語音流傳送到PC機,通過平臺提供的分析工具分析波形和頻譜變化,以對比各種算法對語音原始信號造成的損失程度;而在PC機上所做的高復雜度算法(如參數編碼),也可以將處理后的語音信號傳送到嵌入式系統,聽到算法的效果。文中設計為進一步對語音數字信號處理的研究和開發工作奠定了基礎。 |