新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于嵌入式TTS的漢語語音系統(tǒng)的方案設計

基于嵌入式TTS的漢語語音系統(tǒng)的方案設計

作者: 時間:2012-01-04 來源:網絡 收藏

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

本文引用地址:http://butianyuan.cn/article/149878.htm

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

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

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

 ?。?) 從緩沖區(qū)中取得GB碼并將之轉換為地址表對應項地址;

  (2) 從地址表對應項中取得對應語音數據區(qū)存儲地址;

 ?。?) 取得對應語音數據區(qū)數據;

  (4) 完成游程解碼并播放。

 

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

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

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

上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉