<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時間:2012-01-04 來源:網(wǎng)絡 收藏

          使計算機、帶有人機交互的電器、儀表等能像人一樣開口“說話”是科技工作者多年的研究目標。語言是人與人交流信息的一種手段,文語轉(zhuǎn)換(Text To Speech)是自動將輸入文字轉(zhuǎn)換成語音輸出,并盡量使輸出的語音效率流暢、自然的一類技術(shù)。

          本文引用地址:http://www.ex-cimer.com/article/149878.htm

          系統(tǒng)主要需解決兩個問題:

          ①文本分析,即語言學分析。該任務是將以文本廣度輸入的字符串轉(zhuǎn)換成語言學的表述;

          ②語音合成。即根據(jù)語言學的內(nèi)在表述信息合成語音。

          系統(tǒng)中的語音合成方法分為時域和頻域兩大類:頻域方法主要有LPC參數(shù)合成及其振峰合成兩種,其實質(zhì)是在工程上實現(xiàn)語音生成模型,進而在終端特性上模擬發(fā)音器官。在目前階段,頻域方法形成的發(fā)音尚不自然,且需要的計算量很大,不適宜在低端的芯片上使用。波形編輯法是將較短的數(shù)字音頻段(即合成基元)拼接并進行段音平滑后生成連續(xù)語流的方法。這種方法占用的存儲空間大,但計算量小、計算速度快,而且合成語音自然度較高,顯然比較適合于芯片性能較弱的系統(tǒng)方面的應用。

            

            采用波形編輯法的TTS系統(tǒng)由于成本低、性能完善、自然度高,隨著波形修改算法的不斷提出以及微處理器和非易失性存儲介質(zhì)功能的不斷增強,正日益受到人們的關(guān)注。本系統(tǒng)即采用時域波形編輯技術(shù),采集GB2312漢字編碼字符集中所有字符發(fā)音作為原始材料,通過使用改進的游程編碼算法壓縮生成可適用于當前Flash存儲器的語音庫,并采用多重查找表設計及預存儲命令字技術(shù)有效地加快語音庫的尋址速度,在Atmel公司的AT89S52單片機上成功實現(xiàn)了一個TTS,經(jīng)測試取得了令人滿意的效果。該系統(tǒng)應用簡便,具有很小的尺寸和很低的功耗及通用的串行接口,可以廣泛用于有關(guān)的語音應用系統(tǒng)中。

            1 系統(tǒng)原理

            圖1為系統(tǒng)原理圖框圖以及主要操作流程。系統(tǒng)采用串行口與外界交互,任何具有標準串口的設備均可與本系統(tǒng)相連。欲發(fā)音漢字的國標碼(GB碼)由串口送入MCU,MCU將其映射為Flash存儲器地址表中對應項的地址,然后根據(jù)此地址取得對應項中的命令字,由MCU根據(jù)該命令字讀取該漢字發(fā)音對應的語音數(shù)據(jù),連續(xù)讀出語音數(shù)據(jù)并以游程碼解碼算法解碼后,按照語音采樣時的固定速率通過D/A轉(zhuǎn)換和功率放大播放。本文中語音采樣速率為11025B/s。為滿足應用需求,本文首先構(gòu)建易于快速解碼的語音庫,根據(jù)特定Flash存儲器的存儲格式,以快速多查找表尋址及命令字預先存儲的方式組織并存儲在Flash存儲器中,以滿足語音播放的實時要求。同樣,MCU的代碼也要優(yōu)先考慮速度而犧牲諸如模塊化、可讀性方面的要求。最后,出于實用性考慮,系統(tǒng)中需加入足夠的輸入緩沖區(qū)支持,以滿足一次輸入多個流字或整句的要求。

            原始語音數(shù)據(jù)的采集和處理

            本系統(tǒng)共采集了1335種發(fā)音,內(nèi)含1306個流字發(fā)音,26個英文字母發(fā)音及3個停頓音,語音采集卡AD轉(zhuǎn)換整編11025B/s,分辨率8位,樣本值域0~255,靜默值為80H。原始語音以WAV文件的格式保存在PC機中。

            

            圖2是“哎”音樣本的時域波形。所有的采集樣本除具有不同的波形包絡外,均具有大體相同的結(jié)構(gòu),即一個完整的漢字發(fā)音均由前后兩個靜音部分和中間的發(fā)音部分組成。靜音的采集值絕大多數(shù)為80H(一些輕微擾動可視為錄音過程中的噪聲,但尾音部分要另外處理),因而可將其統(tǒng)一為80H,以提高壓縮比。另由圖2可見,00H、01H、FFH、FEH這些邊緣值的出現(xiàn)概率是很小的,這個特性亦可用于語音的壓縮算法中。

            本文根據(jù)上述靜默值及邊緣值的分布特點,提出了一種改進的游程編碼用于語音數(shù)據(jù)的壓縮,具體做法是:用00H代表游程壓縮起始碼,其后是被編碼字符,再下一個字節(jié)是被編碼字符的重復碼,如:80 80 80 80 80可以表示為00 80 05。顯然,游程長度小于等于3時沒有編碼的必要,因而不會出現(xiàn)值為00H、01H和02H的重復碼。如上所述,在原始語音文件中,00H、01H這些邊緣值是基本上不出現(xiàn)的。因為大量出現(xiàn)這些邊緣值即意味著語音采集系統(tǒng)的動態(tài)范圍設置錯誤。盡管如此,為確保原始語音文件中沒有“多余”邊緣值,需要將語音文件略做處理,將可能存在的00H和01H都改為02H,顯然這樣的處理并不會影響語音的實際播放效果。處理后的00H、01H即可作為特殊控制字符使用。圖3是本文提出的改進流程壓縮編碼的流程圖。編碼前,1335種原始語音樣本的大小為14978622字節(jié),壓縮后為7767112字節(jié),壓縮比超過50%。該語音庫已經(jīng)可以裝入容量為8M字節(jié)的Flash存儲器中。

            3 語音庫的存儲結(jié)構(gòu)

            本文以8Mbit×8位NAND型Flash存儲器K9F6408U0B為例,描述本系統(tǒng)語音庫的存儲結(jié)構(gòu)。

            語音庫的基本內(nèi)容分為兩部分:前端是地址查找表,其后是壓縮后的語音數(shù)據(jù)。地址表中,每4個字節(jié)代表一個地址項。GB2312漢字編碼字符集中每個漢字在地址表中都有一個對應項,其內(nèi)容指向該漢字對應讀音的語音數(shù)據(jù)起始地址。GB碼字符集中共有94個區(qū),每區(qū)94個字符,總計8836個漢字、英文字母和其它符號,其中實際使用了7445個,余下的作為預留區(qū)。本系統(tǒng)亦保留了這些預留區(qū),以利于將來的擴充。這樣,地址表的大小為94×94×4=35344字節(jié)。語音數(shù)據(jù)區(qū)共存儲1335年發(fā)音,采用流程編碼壓縮存放,并在每段語音數(shù)據(jù)結(jié)尾添加01H作為結(jié)束控制符。

            對不同的Flash存儲器,語音庫需做一些針對性的處理。對于K9F6408U0B而言,要對其C區(qū)進行專門的處理。該芯片中,每個頁面(Page)都有A、B、C三個區(qū),其中A、B區(qū)各256字節(jié),而C區(qū)僅有16字節(jié)。本設計中沒有用到C區(qū),因而在制作寫入Flash的二進制政府間庫文件時必須注意對C區(qū)進行空白碼(FFH)填充??紤]C區(qū)填充后,地址表對應的二進制語音庫文件大小的計算方法改為:512×69+16=35344,表示當35344字節(jié)只占據(jù)A區(qū)和B區(qū)時共需69個頁面,多出16字節(jié)。這意味著有69個C區(qū)需要填充,即寫入Flash的地址表的實際大小應該是35344+69×16=36448。相應地,語音數(shù)據(jù)區(qū)需要進行同樣的處理。

            

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

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();