新聞中心

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

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

作者: 時間:2018-09-11 來源:網(wǎng)絡 收藏

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

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

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

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

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

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

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

  (3) 取得對應語音數(shù)據(jù)區(qū)數(shù)據(jù);

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

 

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

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


上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉