新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式TTS漢語(yǔ)語(yǔ)音系統(tǒng)的解決方案

嵌入式TTS漢語(yǔ)語(yǔ)音系統(tǒng)的解決方案

作者: 時(shí)間:2010-03-15 來(lái)源:網(wǎng)絡(luò) 收藏

  在PC上制作寫(xiě)入的Flash的數(shù)據(jù)文件時(shí),首先將地址表放在最前面,其后將壓縮后的語(yǔ)音文件逐一寫(xiě)入,并將每個(gè)文件的起始地址轉(zhuǎn)換成對(duì)Flash存儲(chǔ)器操作的命令字寫(xiě)入地址表相應(yīng)項(xiàng)中,每寫(xiě)完一個(gè)文件要加上01H結(jié)束碼,并在寫(xiě)入過(guò)程中完成對(duì)C區(qū)的填充。在綜合完1335個(gè)語(yǔ)音文件、地址查找表、C區(qū)填充碼及文件結(jié)束碼之后,得到Flash存儲(chǔ)器的二進(jìn)制映像文件,其大小為8047776字節(jié)。寫(xiě)入后,Flash中尚余后333KB可用空間,聯(lián)合地址表中的預(yù)留項(xiàng),可用于對(duì)系統(tǒng)語(yǔ)音庫(kù)做進(jìn)一步的擴(kuò)充。上述語(yǔ)音庫(kù)的存儲(chǔ)結(jié)構(gòu)見(jiàn)圖4。

  4 碼字轉(zhuǎn)換及高效MCU代碼的實(shí)現(xiàn)

  本文中的碼字轉(zhuǎn)換有兩類(lèi)。一類(lèi)GB碼到語(yǔ)音庫(kù)起始字節(jié)數(shù)的轉(zhuǎn)換,用于MCU收到串口輸入的GB碼后,確定相應(yīng)讀音在地線(xiàn)表中對(duì)應(yīng)項(xiàng)的起始地址。該類(lèi)碼字轉(zhuǎn)換主要依據(jù)GB2312標(biāo)準(zhǔn)及語(yǔ)音庫(kù)地址表的結(jié)構(gòu)進(jìn)行。本文中,該碼制轉(zhuǎn)換的算法為:((GB碼高字節(jié)-161)×94+(GB)碼低字節(jié)-161))×4。另一類(lèi)是將上述地址轉(zhuǎn)換為Flash讀取數(shù)據(jù)的命令字。這類(lèi)轉(zhuǎn)換與語(yǔ)音庫(kù)存儲(chǔ)結(jié)構(gòu)及所用Flash存儲(chǔ)器的讀寫(xiě)操作及時(shí)序相關(guān)。由于在語(yǔ)音庫(kù)生成時(shí)已由PC機(jī)將語(yǔ)音數(shù)據(jù)的起始地址轉(zhuǎn)換為操作命令字并存儲(chǔ)到了地址表對(duì)應(yīng)項(xiàng)中,即大部分的計(jì)算及時(shí)序控制操作在使用PC制作Flash的二進(jìn)制映像文件時(shí)已經(jīng)完成,因而避免了系統(tǒng)運(yùn)行中的大量計(jì)算,從而保證了語(yǔ)音播放的實(shí)時(shí)性。計(jì)算命令字的方法與具體的Flash存儲(chǔ)器型號(hào)相關(guān)且較為繁瑣。限于篇幅,本文不再給出具體的算法。有興趣的讀者可以參閱K9F6408U0B的數(shù)據(jù)表。

  本文中的MCU型號(hào)為AT89S52,使用22.1484MHz的晶振。根據(jù)AT89S52數(shù)據(jù)表,每播放一個(gè)漢字,所需指令周期數(shù)為(1/11025)/(12/22.1184)=167.2。因此設(shè)置一個(gè)計(jì)時(shí)器中斷,中斷值為256-167=89,在每?jī)蓚€(gè)中斷之間完成如下工作:

 ?。?) 從緩沖區(qū)中取得GB碼并將之轉(zhuǎn)換為地址表對(duì)應(yīng)項(xiàng)地址;

  (2) 從地址表對(duì)應(yīng)項(xiàng)中取得對(duì)應(yīng)語(yǔ)音數(shù)據(jù)區(qū)存儲(chǔ)地址;

 ?。?) 取得對(duì)應(yīng)語(yǔ)音數(shù)據(jù)區(qū)數(shù)據(jù);

 ?。?) 完成游程解碼并播放。

 

  此外,由于完成有可能在語(yǔ)音播放過(guò)程收以輸入字符,因而串口亦應(yīng)工作于中斷方式,串口波特率為9600bps,其優(yōu)先級(jí)高于定時(shí)器中斷。本系統(tǒng)中,此緩沖區(qū)能滿(mǎn)足使用都 量多一次輸入60個(gè)漢字。以上操作均在約168個(gè)指令周期中完成,大約相當(dāng)84條雙周期指令。因而在代碼編寫(xiě)中,必須把代 碼效率放在第一位,靈活地運(yùn)用編程技巧來(lái)完成。

 本文給出了一種的實(shí)現(xiàn)方案。由于采用了易于解碼的改進(jìn)游程算法、多重查找表及Flash存儲(chǔ)器操作命令這了的預(yù)先存儲(chǔ)技術(shù),使得該方案可以在羅低要求的硬件平臺(tái)上實(shí)現(xiàn),以AT89S52 MCU為核心的系統(tǒng)不同于基于PC的,該系統(tǒng)體積小、功耗低、成本低廉、適用范圍很廣。經(jīng)測(cè)試其語(yǔ)音清晰、連貫,可發(fā)音字節(jié)涵蓋GB碼所有漢字、26個(gè)英文字節(jié),一次可輸入多達(dá)60個(gè)漢字的整句,足以滿(mǎn)足大部分應(yīng)用場(chǎng)合的需要。如以高檔MCU或ARM處理器為平臺(tái),還可以增加更多的算法,以進(jìn)一步改進(jìn)系統(tǒng)性能。

linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

存儲(chǔ)器相關(guān)文章:存儲(chǔ)器原理



上一頁(yè) 1 2 下一頁(yè)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉