用EP7211實(shí)現傳呼信息實(shí)時(shí)語(yǔ)音合成和播放
關(guān)鍵詞:PDA G.729 語(yǔ)音庫 語(yǔ)音合成
引言
PDA(Personal Digital Assitant,個(gè)人數字助理)是近年來(lái)繼尋呼機和移動(dòng)電話(huà)之后,在國內市場(chǎng)迅速崛起的便攜式電子產(chǎn)品。就其擴展意義來(lái)講,它能夠集成移動(dòng)計算、電話(huà)和網(wǎng)絡(luò )等多種功能。根據不同的應用需求,它可以管理個(gè)人信息、提供名片存儲和日程安排,也可以接收各種尋呼信息(如股市、天氣預報等)。如果是集成通信模塊,還可以作為移動(dòng)電話(huà)使用,進(jìn)行無(wú)線(xiàn)網(wǎng)絡(luò )互聯(lián)。廣義的PDA包括簡(jiǎn)單的電子記事本、電子辭典和功能強大的掌上電腦,它們的主要區別表現在操作系統、存儲能力、運算速度和數據交換能力等方面。
目前國內傳統PDA產(chǎn)品經(jīng)過(guò)幾年的高速發(fā)展后,市場(chǎng)基于飽和,銷(xiāo)售額出現負增長(cháng)。不過(guò)由于PDA產(chǎn)品的靈活性,有針對性的行業(yè)應用作為一個(gè)新亮點(diǎn),開(kāi)始為人們所關(guān)注。經(jīng)過(guò)行業(yè)應用尾后的PDA產(chǎn)品,已經(jīng)在國內市場(chǎng)大顯身手。文曲星展現超強的語(yǔ)言釋譯能力,比較適合于大學(xué)生和語(yǔ)言翻譯者使用;藍火系列能實(shí)時(shí)接收股市信息和專(zhuān)家點(diǎn)評,適合工薪階層的炒股者。國家信息產(chǎn)業(yè)部已經(jīng)鼓勵PDA產(chǎn)品在交通、警務(wù)、保險等領(lǐng)域的行業(yè)應用和推廣。
分析市場(chǎng)需求,我們研發(fā)了集成傳呼功能的、專(zhuān)門(mén)面向鐵路交通行業(yè)應用的鐵路交通信息系統PDA。本PDA系統除了具備傳統PDA的個(gè)人名片管理和辭典檢索等功能外,同時(shí)提供交通行業(yè)應用的民航航班查詢(xún)、鐵路列車(chē)時(shí)刻表查詢(xún)等功能。
本PDA的尋呼系統實(shí)現如下功能:能夠通過(guò)尋呼對列車(chē)時(shí)刻表、列車(chē)晚點(diǎn)信息、列車(chē)剩票額、股道信息等行業(yè)數據進(jìn)行動(dòng)態(tài)更新。作為另一個(gè)特色,當接收到個(gè)人尋呼時(shí),能夠將尋呼內容實(shí)時(shí)地轉換成語(yǔ)音并播放。
下面重點(diǎn)介紹本PDA系統中使用嵌入式處理呂EP7211實(shí)現個(gè)尋呼內容的實(shí)時(shí)語(yǔ)音轉換和播放。該功能的實(shí)現包含前后相關(guān)的3個(gè)部分:字符語(yǔ)音庫的建立、字符的語(yǔ)音合成算法和Codec語(yǔ)音中斷服務(wù)例程。
1 實(shí)現條件和要求
PDA屬于嵌入式應用系統,其同一般PC機有很大差別。硬件方面,嵌入式處理器基于RISC體系結構,一般工作頻率在幾十MHz,甚至更低;系統內存容量一般在幾百KB~幾MB之間;一般使用容量小的ROM或者Flash作為硬盤(pán)來(lái)存儲可執行程序序和數據。軟件方面,PDA系統一般有專(zhuān)用的嵌入式操作系統和軟件開(kāi)發(fā)調試移植環(huán)境。
個(gè)人傳呼信息的特點(diǎn)是單條傳呼信息長(cháng)度變化較大,20~50個(gè)字符不等。最為常見(jiàn)的是“請回電話(huà)***”;傳呼信息涉及到的字符數量較大,字符語(yǔ)音合成時(shí)運算量大,單字符合成后語(yǔ)音數據占用的存儲空間多;需要事先建立字符語(yǔ)音庫等。
由于具體硬件環(huán)境的限制、傳呼信息的特點(diǎn)和語(yǔ)音合成的要求,該功能能夠實(shí)現的前提有:語(yǔ)音庫占用的空間??;字符合成時(shí)速度更快;采用前臺進(jìn)行字符語(yǔ)音合成時(shí),以后臺中斷方式進(jìn)行合成語(yǔ)音的播放來(lái)保證其實(shí)時(shí)性和連續性。
2 具體實(shí)現
下面分別介紹字符語(yǔ)音庫的建立、字符語(yǔ)音合成算法、本PDA系統的框架結構和語(yǔ)音中斷服務(wù)例程。
2.1 建立字符語(yǔ)音庫
我們選用G.729語(yǔ)音壓縮編碼標準來(lái)建立語(yǔ)音庫。該標準采用的算法是共軛結構的代數碼激勵線(xiàn)性預測(CS-ACELP),是基于CELP(碼激勵線(xiàn)性預測)編碼模型的算法。這種編碼規范的嚴格性使性能達到或超過(guò)了32Kbps的G.726 ADPCM編碼,具有很高的語(yǔ)音質(zhì)量;同時(shí),它是在語(yǔ)音信號8KHz取樣的基礎上得到16bit線(xiàn)性PCM后進(jìn)行編碼的,壓縮后的數據速率僅為8Kbps,具有相當于8:1的高壓縮率。其算法延遲少于16ms。由于G.726編解碼器能夠實(shí)現很高的語(yǔ)音質(zhì)量和很低的算法延時(shí),因此被廣泛地應用。
字符語(yǔ)音庫是一個(gè)單字發(fā)音語(yǔ)音數據的集合,中段數據之間相互獨立,不具有相關(guān)性。語(yǔ)音庫包含了國標一、二級字庫中的所有6763個(gè)漢字、10個(gè)阿拉伯數字和26個(gè)英文字符的標準普通話(huà)語(yǔ)音數據。每個(gè)漢字或字符發(fā)音時(shí)長(cháng)為0.65s,采用8KHz抽樣頻率,使用了G.729A語(yǔ)音編碼算法對上述的語(yǔ)音數據進(jìn)行壓縮,壓縮后數據速率為8Kbps,相當于具有8:1的高壓縮率。在漢字中,同音字占了相當大的比例,而在語(yǔ)音合成中對于同音字的處理是沒(méi)有區別的,故近7000個(gè)漢字,我們只存儲1123個(gè)不同的發(fā)音。經(jīng)過(guò)同音字處理和采用G.729標準壓縮字符語(yǔ)音數據,則最終建立的語(yǔ)音庫文件大小為729 950字節,完全符合本PDA系統的數據存儲要求;否則,語(yǔ)音庫數據量太大,本PDA系統不能接受!
建立一個(gè)語(yǔ)音壓縮數據庫的具體步驟如下:
*將數字和常用漢字的標準發(fā)音獨立地錄入到數據文件中,作為基礎數據。使用cooledit2000軟件完成語(yǔ)音的錄入。
*對于輸入數據,按照每幀10ms(80個(gè)樣點(diǎn))的長(cháng)度,將A_law語(yǔ)音通過(guò)簡(jiǎn)單換算變成16bit PCM數據,作為編碼算法的輸入。
*按照G.729A算法標準,對數據進(jìn)行編碼。
*將編碼后的數據轉換為二進(jìn)制比特流,寫(xiě)入語(yǔ)音庫文件中。壓縮后數據速率為8Kbps,具有相當于8:1的高壓縮率。
用C語(yǔ)言實(shí)現這一過(guò)程的程序流程如圖1所示。
字符語(yǔ)音庫的建立是在Windows平臺及Visual C++編程環(huán)境下實(shí)現的,最終壓縮處理后數據量的大小為729 950字節,每個(gè)字符語(yǔ)音數據的大小是650字節。
2.2 語(yǔ)音合成
當收到個(gè)人傳呼信息時(shí),語(yǔ)音合成程序首先從指定位置獲取傳呼信息數據,然后在語(yǔ)音庫中查找每個(gè)漢字、阿拉伯數字或者英文字符的發(fā)音,重組一個(gè)數據文件。解碼程序對該文件進(jìn)行解碼并且輸出原始語(yǔ)音。語(yǔ)音合成流程如圖2所示。
語(yǔ)音合成過(guò)程首先是當前字符在語(yǔ)音庫的定位。對于10個(gè)阿拉伯數字和26個(gè)英文字符,將其放在語(yǔ)音庫開(kāi)頭。這些字符的查找比較方便。漢字是2字節存儲,我們依居其區位碼來(lái)作為語(yǔ)音庫中的定位索引。字符語(yǔ)音檢索結束后的語(yǔ)音壓縮數據作為該字符解碼過(guò)程的輸入。
數據解碼過(guò)程可以分為參數解碼和重構信號后處理2部分。首先要從輸入的數據中提取參數符號,對這些符號解碼之后,可以獲得相應于10ms話(huà)音幀的編碼器參數。這些參數包括線(xiàn)性預測系數、自適應碼本矢量、固定碼本矢量以及它們的增益。解碼之后的參數用來(lái)計算重建語(yǔ)音信號。得到重構語(yǔ)音信號只有通過(guò)后處理過(guò)程來(lái)對該信號進(jìn)行放大,包括后向濾波、高通濾波以及按比例因子擴大,最后得到原始的語(yǔ)音數據。
字符解碼器原理如圖3所示。
2.3 PDA系統的體系結構
PDA系統中嵌入式處理器EP7211進(jìn)行數據處理,傳呼解碼芯接收傳呼信息并進(jìn)行解碼,LCD提供數據輸出顯示,觸摸屏提供用戶(hù)輸入接口,Flash用來(lái)存儲應用程序和數據,SRAM為程序運行提供內存空間,電源電路為嵌入式處理器和外圍設備提供所需要工作電壓。
嵌入式處理器EP7211是Cirrus Logic公司專(zhuān)門(mén)為低成本、超低功耗的嵌入式應用設計的,包含ARM7TDMI處理器內核和豐富的外圍接口。外圍接口有CODEC音頻接口、SPI串行A/D接口、單色LCD接口、DRAM接口、紅外接口、2個(gè)PWM接口、實(shí)時(shí)時(shí)鐘RTC以及電源檢測接口。EP7211的內核電路工作在2.5V,而外圍電路工作在3.3V;可根據具體情況對內核的時(shí)鐘進(jìn)行動(dòng)態(tài)編程控制,可工作在18、36、49和74MHz。另外EP7211還有3種基本供電模式:正常操作(operating)、空閑(idle)和等待(standby)。在等待模式,主時(shí)鐘被關(guān)斷,整個(gè)CPU及相關(guān)外圍(除中斷和RTC)也關(guān)斷,但可通過(guò)中斷或按鈕來(lái)喚醒。
系統軟件開(kāi)發(fā)平臺采用了我們自主開(kāi)發(fā)研制的、專(zhuān)門(mén)面向嵌入式應用系統開(kāi)發(fā)的XGW平臺。XGW開(kāi)發(fā)平臺采用消息驅動(dòng)機制,是C語(yǔ)言開(kāi)發(fā)。它功能強大、模塊化設計、擴展性強、產(chǎn)品升級容易,總體框架如圖5所示。
圖5全面反應了XGW開(kāi)發(fā)平臺的體系結構,包括事件消息驅動(dòng)機制、內存管理、字符和圖形顯示輸出、圖形組件庫等。圖形組件庫中的編輯框、列表框、按鈕等為用戶(hù)應用程序開(kāi)發(fā)提供系統應用編程接口A(yíng)PI。不過(guò),XGW平臺對于系統硬件的中斷響應沒(méi)有提供統一的入口和出口,需要開(kāi)發(fā)人員單獨處理。XGW開(kāi)發(fā)平臺的消息分為鼠標消息、鍵盤(pán)消息和定時(shí)器消息等3類(lèi)。
2.4 語(yǔ)音中斷服務(wù)例程
嵌入式處理EP7211本身提供的外設語(yǔ)音錄放Codec(coder/decoder)芯片可以實(shí)現語(yǔ)音的錄入和播放功能。該模塊提供2個(gè)獨立的16字節長(cháng)的數據發(fā)送和接緩沖區(FIFO),其為全雙工模式,數字據點(diǎn)發(fā)速率是64kbps。芯片自身提供工作時(shí)鐘、定時(shí)脈沖以及數據串/并和并/串轉換功能。編程人員通過(guò)設置EP7211相應的控制寄存器使能這些項功能,則每當數據收發(fā)緩沖區半慢或者半空時(shí)(8字節),芯片自身就會(huì )產(chǎn)生一次中斷信號供外部處理。理論計算芯片中斷速率是1ms/次。
語(yǔ)音播放中斷服務(wù)例程主要完成的工作是,當產(chǎn)生語(yǔ)音中斷時(shí),仍然有數據需要播放,則向語(yǔ)音數據發(fā)送緩沖區FIFO中寫(xiě)入指定數據,剩下的工作由Codec芯片本身來(lái)完成。中斷服務(wù)例程ISR的偽代碼如下(因為具體實(shí)現代碼沒(méi)有通用性,故此處用偽碼描述):
void IRQ_Codec_Handler(void)
{
while(檢測系統狀態(tài)寄存器,發(fā)現語(yǔ)音芯片數據發(fā)送緩沖區FIFO非滿(mǎn))
{
if(已經(jīng)播放過(guò)的語(yǔ)音數據長(cháng)度給定的需要播放的語(yǔ)音數據長(cháng)度)
{
向語(yǔ)音芯片發(fā)送數據緩沖區FIFO寫(xiě)入指定數據;
調整已經(jīng)播放過(guò)的語(yǔ)音數據長(cháng)度;
if(已經(jīng)播放過(guò)的語(yǔ)音數據長(cháng)度>=給定的需要播放的語(yǔ)音數據長(cháng)度)//結束
{
禁止數據發(fā)送緩沖區中斷;
復位各相關(guān)的全局變量;
程序返回;
}
}
else
{
向語(yǔ)音芯片發(fā)送數據緩沖區FIFO寫(xiě)入默認數據
0XFF;
}
}
}
3 試驗結構和分析
由于在設計階段充分考慮過(guò)語(yǔ)音合成算法的大運算量和系統的實(shí)時(shí)性要求,故我們在具體實(shí)現的時(shí)候也采取了一些措施,比較突出的有:用ARM匯編語(yǔ)言來(lái)實(shí)現關(guān)鍵性的函數代碼;語(yǔ)音合成時(shí)提高處理器EP7211的工作頻率(處理器正常工作頻率是18MHz);對于一些常用的三角函數計算,采用查表的方式等來(lái)加快程序執行速度。在PDA樣機測試中,單字符合成時(shí)間在650ms左右,基本上能夠滿(mǎn)足實(shí)際應用需求。數據語(yǔ)音庫經(jīng)過(guò)處理之后,占用了729 560字節也能夠滿(mǎn)足本PDA系統的存儲的要求。
當PDA系統收到1條個(gè)人傳呼信息時(shí),在語(yǔ)音庫的支持下,立刻啟動(dòng)語(yǔ)音合成算法,逐個(gè)進(jìn)行字符語(yǔ)音合成。當第1個(gè)字節語(yǔ)音合成結束后,立刻啟動(dòng)語(yǔ)音中斷服務(wù)例程進(jìn)行語(yǔ)音播放。這樣收到的個(gè)人傳呼信息,前臺逐個(gè)字符解碼時(shí),其后臺語(yǔ)音播放也在進(jìn)行。根據實(shí)際測試參數,基本上滿(mǎn)足了系統的實(shí)時(shí)性要求。
從一定角度看,單字符650 ms的語(yǔ)音合成時(shí)間基本能夠滿(mǎn)足實(shí)際應用需要,但還是希望能夠進(jìn)一步減小這個(gè)值。這由于我們對ARM算是器的使用還處在研究階段。ARM本身提供了16位的Thumb指令集和32位的ARM指令集,而且兩者在某些方面表現出較大差別。一般來(lái)講,Thumb代碼長(cháng)度是ARM代碼長(cháng)度的65%,而執行效率要經(jīng)后者高出60%。但在某些方面,32位ARM指令集也會(huì )表現出其優(yōu)于16位Thumb指令集的強大功能;同時(shí)該處理器系統支持ARM指令庥和Thumb指令集混合編程模式。隨著(zhù)對二者差別和各自?xún)?yōu)勢的深入理解,結合本系統的硬件體系結構,采用有效的指令集混合編程模式將會(huì )使程序執行效率進(jìn)一步提高,從而使實(shí)時(shí)性得到進(jìn)一步加強。
評論