關(guān) 閉

新聞中心

EEPW首頁 > 安全與國(guó)防 > 設(shè)計(jì)應(yīng)用 > 基于C語言的設(shè)計(jì)流優(yōu)化語音識(shí)別芯片結(jié)構(gòu)設(shè)計(jì)

基于C語言的設(shè)計(jì)流優(yōu)化語音識(shí)別芯片結(jié)構(gòu)設(shè)計(jì)

——
作者: 時(shí)間:2007-06-04 來源:汽車電子設(shè)計(jì) 收藏
據(jù)預(yù)測(cè),市場(chǎng)對(duì)語音控制應(yīng)用設(shè)備的需求將急劇增長(zhǎng),其推動(dòng)力來自電話機(jī)市場(chǎng)。電話機(jī)將更多地采用語音命令進(jìn)行控制。其他應(yīng)用領(lǐng)域包括玩具和手持設(shè)備如計(jì)算器、語音控制的安全系統(tǒng)、家用電器及車載設(shè)備(立體聲、視窗、環(huán)境控制、車燈和導(dǎo)航控制)。本文從可復(fù)用和優(yōu)化芯片空間的角度出發(fā)介紹設(shè)計(jì)的種種考慮,其思路有利于開發(fā)一系列其它芯片。       

新加坡Columns公司在便攜式語音控制產(chǎn)品應(yīng)用中起步較早,其中一個(gè)產(chǎn)品是執(zhí)行歐元與其他歐洲貨幣之間進(jìn)行兌換的“語音控制歐洲貨幣兌換器”。歐元兌換器的設(shè)計(jì)要求包括:1. 功率小,電池壽命至少為1年;2. 價(jià)格低廉,產(chǎn)品零售價(jià)不超過9美元;3.具有很強(qiáng)的靈活性,能用多種語言精確地識(shí)別并合成與說話人相關(guān)的語音;4. 整個(gè)語音控制核產(chǎn)品應(yīng)具備可復(fù)用的特性。 

本文介紹利用Frontier Design公司設(shè)計(jì)工具來開發(fā)歐元兌換器ASIC產(chǎn)品 的全過程。在ASIC中實(shí)現(xiàn)復(fù)雜DSP算法的要求通常極為苛刻,但采用Frontier的結(jié)構(gòu)合成工具A|RT Designer工具能迅速優(yōu)化RTL描述,該工具還允許自由選擇備用結(jié)構(gòu)以優(yōu)化應(yīng)用設(shè)計(jì)。 

通過應(yīng)用基于的設(shè)計(jì)流,能在結(jié)構(gòu)設(shè)計(jì)階段對(duì)新特性進(jìn)行設(shè)計(jì)和硬件優(yōu)化,這能降低50%的硅片面積,通過加快 原型硬件的設(shè)計(jì),可以進(jìn)一步擴(kuò)展設(shè)計(jì)的性能以滿足用戶對(duì)產(chǎn)品規(guī)格的嚴(yán)格要求。 

算法研究 

歐元兌換器的效率在一定程度上取決于語音命令與存儲(chǔ)數(shù)據(jù)庫(kù)的比較以及執(zhí)行命令的能力。開發(fā)出滿足最終產(chǎn)品要求的算法對(duì)設(shè)計(jì)的成功至關(guān)重要,因?yàn)闆]有人希望看到語音控制設(shè)備不能始終如一地識(shí)別命令,人們需要算法自始至終達(dá)到98%以上的識(shí)別精度。因此,目前面臨的難題包括檢測(cè)并清除背景噪聲、區(qū)分真實(shí)的命令字和其他噪聲(呼吸聲、微小靜電干擾聲及麥克風(fēng)聲響)、確定命令字的起始和終止以及將輸入與存儲(chǔ)的“聲紋譜”數(shù)據(jù)庫(kù)及隨后的命令字識(shí)別(圖1)進(jìn)行比較。 

命令字識(shí)別

以下幾種先進(jìn)的計(jì)算密集DSP算法適用于解決上述問題:1. Mel頻率聲譜(cepstral)系數(shù)(MFCC)算法,MFCC算法由快速傅立葉變換(FFT)功能譜、Mel定標(biāo)和log ii構(gòu)成;2. 反離散余弦變換(iDCT);3. 應(yīng)用多重估計(jì)和選擇算法連續(xù)識(shí)別并估計(jì)背景聲音和語音噪聲的連續(xù)噪聲電平估計(jì)程序;4. 在命令字有效期間及其附近對(duì)聲音能級(jí)實(shí)施詳盡分析的不精確和精確命令字邊界檢測(cè)算法;5. 對(duì)一系列不等長(zhǎng)度的向量進(jìn)行比較并在這些向量間比較持續(xù)時(shí)間變化的動(dòng)態(tài)時(shí)間扭曲算法(dynamic time warp)。 

該算法用浮點(diǎn)編程,為了調(diào)整并優(yōu)化參數(shù),浮點(diǎn)C代碼的編譯和仿真速度要足夠快以檢驗(yàn)算法的性能。最后,C語言代碼必須能在傳統(tǒng)的PC機(jī)上運(yùn)行,和合成算法的性能可在實(shí)際環(huán)境中進(jìn)行測(cè)試。最終的語音識(shí)別算法在450MHz奔騰機(jī)上測(cè)試,當(dāng)用該公司的內(nèi)部語音記錄庫(kù)進(jìn)行測(cè)試時(shí),可得到99%的識(shí)別精度。 

浮點(diǎn)算法向定點(diǎn)算法轉(zhuǎn)換 

芯片實(shí)現(xiàn)需要將浮點(diǎn)算法轉(zhuǎn)換為定點(diǎn)算法,要保證動(dòng)態(tài)范圍和精度并防止轉(zhuǎn)換后超越動(dòng)態(tài)極限。常規(guī)定點(diǎn)操作數(shù)的非優(yōu)化范圍可能導(dǎo)致操作數(shù)繞回(wrap around, 如(max+1)得到(min)),并引發(fā)嚴(yán)重的削波和誤碼。定點(diǎn)的精確度同等重要,特別是在重復(fù)的信號(hào)處理運(yùn)算中。當(dāng)精確度不夠時(shí),重復(fù)的信號(hào)處理算法將導(dǎo)致故障傳播和錯(cuò)誤累積,最終信號(hào)可能逐漸退化成白噪聲,這對(duì)于語音控制產(chǎn)品來說無疑是災(zāi)難性的錯(cuò)誤。 

Frontier工具擁有一個(gè)稱為A|RT庫(kù)的C++類庫(kù),它是分析C代碼定點(diǎn)性能的工具。該類庫(kù)支持多種定點(diǎn)數(shù)據(jù)類型,對(duì)多重溢出行為(如飽和和繞回)提供位真建模(bit-true modeling),并提供截?cái)嗪蜕崛肓愕榷嘀亓炕P?。原始?2位浮點(diǎn)語音識(shí)別算法支持?jǐn)?shù)據(jù)以8 KHz輸入,其典型信號(hào)帶寬為32位,內(nèi)存容量要求為幾千字節(jié),典型語音用戶接口的輸出以每秒幾字節(jié)的速率測(cè)量。 

代碼合并實(shí)現(xiàn)最終產(chǎn)品  

分析表明,全局?jǐn)?shù)據(jù)類型(global data-type)和數(shù)組只需16位(1個(gè)符號(hào)位,10個(gè)動(dòng)態(tài)位,5個(gè)精度位)就足以保持算法的精度,而不會(huì)產(chǎn)生噪聲。但是,高度重復(fù)性的FFT子程序需要8個(gè)動(dòng)態(tài)位、7個(gè)精度位以及1個(gè)符號(hào)位。通常這種分析可用全局使用的19位字寬滿足任何操作的動(dòng)態(tài)位和精度位的最大要求。由于A|RT庫(kù)允許字寬動(dòng)態(tài)改變,而全局?jǐn)?shù)據(jù)類型定義了1個(gè)符號(hào)位、10個(gè)動(dòng)態(tài)位和5個(gè)精度位,F(xiàn)FT的MAC結(jié)果分配了1個(gè)符號(hào)位、8個(gè)動(dòng)態(tài)位和5個(gè)精度位,因此設(shè)計(jì)的字寬(包括總線)保持為16位。這樣可大大節(jié)省硅片面積。  

完成定點(diǎn)C算法轉(zhuǎn)換后,就可用常規(guī)C++編譯器編譯C代碼,并在PC機(jī)上運(yùn)行(也可在HP或SUN機(jī)器上運(yùn)行)。所有信號(hào)的位真定義(bit-true definition)保證了硬件映射的正確索引以及到其他數(shù)字部件如HDL編譯器和仿真器的直接接口。將定點(diǎn)識(shí)別代碼與歐元兌換器應(yīng)用程序的C代碼合并,就可得到完整的可執(zhí)行最終代碼。  

系統(tǒng)設(shè)計(jì)的考慮   

為了達(dá)到成本目標(biāo),單片SoC解決方案是唯一可行的方案。SoC必須將如下資源集成至不超過25,000門的芯片上:1. 語音識(shí)別與合成(SRS)識(shí)別核;2. 語音識(shí)別與合成(SRS)程序和歐元兌換器代碼(最大30KB);3. 語音合成實(shí)例(最大30KB);4. 用于存儲(chǔ)聲紋(voice print)并用作中間結(jié)果存儲(chǔ)器的RAM(最大30K字節(jié));5. AD/DA轉(zhuǎn)換器;6. 麥克風(fēng)接口;7. 揚(yáng)聲器接口。  

功耗也是要考慮的重要問題,電池壽命至少應(yīng)為1年半。要滿足這些苛刻的功率要求,系統(tǒng)必須具備省電模式、在RAM中存儲(chǔ)聲紋、處理器具有較低的時(shí)鐘頻率以及高效率的音頻放大器。  

SRS處理器結(jié)構(gòu)  

要給定所必需的處理和低功耗約束條件,選擇目標(biāo)時(shí)鐘頻率是首要任務(wù)。根據(jù)對(duì)初始功耗和處理計(jì)算的估計(jì),我們認(rèn)為2到4MHz時(shí)鐘頻率足以滿足要求。選擇3.579 MHz是因?yàn)樵擃l率是NTSC視頻系統(tǒng)的基礎(chǔ),而石英成本低廉。  

該算法需要檢測(cè)并去除背景噪聲。為了從奔騰機(jī)的450MHz時(shí)鐘得到3.5MHz時(shí)鐘,并保持芯片核門數(shù)小于25,000,SRS要采用專用結(jié)構(gòu)。 
  
設(shè)計(jì)專用處理器費(fèi)時(shí)費(fèi)力,要用HDL語言重寫算法以獲得最佳方案。A|RT Designer工具綜合了基于控制器的結(jié)構(gòu),并直接以高效能的C語言算法為基礎(chǔ)。設(shè)計(jì)工程師通過分析和優(yōu)化,然后轉(zhuǎn)化為Verilog或VHDL代碼。  

設(shè)計(jì)工程師使用A|RT Designer工具為語音識(shí)別算法合成適當(dāng)?shù)慕Y(jié)構(gòu),之后進(jìn)行RTL描述。該工具分配必需的數(shù)據(jù)通路資源(乘法器、加法器、ALU、I/O、RAM、ROM等),為這些資源分配算術(shù)運(yùn)算,并對(duì)運(yùn)算過程進(jìn)行調(diào)度。同時(shí)將自動(dòng)生成一個(gè)控制器、微代碼(用來控制資源分配和調(diào)度)及寄存器、多路轉(zhuǎn)換器和總線。  

將SRS算法映射到硬件結(jié)構(gòu)的關(guān)鍵參數(shù)是:以3.5MHz目標(biāo)時(shí)鐘頻率運(yùn)行完整的SRS代碼,且不超過最大25,000門的約束條件。使用A|RT Designer的“負(fù)載視圖(load view)”,設(shè)計(jì)工程師識(shí)別出代表性能瓶頸的幾個(gè)多周期運(yùn)算(multiple cycle operation)。視圖上出現(xiàn)瓶頸的位置將顯示相關(guān)C代碼,設(shè)計(jì)工程師因而能識(shí)別產(chǎn)生瓶頸的原因并試驗(yàn)備選解決方案。  

最明顯的瓶頸是MEL運(yùn)算中的密集FFT計(jì)算,它占據(jù)了實(shí)時(shí)處理周期80%的時(shí)間。通過增加一個(gè)二級(jí)加法器和專用地址計(jì)算單元ACU (address calculation unit),F(xiàn)FT就能優(yōu)化到只占原始運(yùn)算周期的10%。這雖然增加了硬件設(shè)備,但付出的代價(jià)只是4,000個(gè)門,正好在硬件預(yù)算以內(nèi)。即便如此改進(jìn),所用周期的總數(shù)目實(shí)在太高,難以達(dá)到3.5MHz的時(shí)鐘頻率。   

進(jìn)一步分析表明,可以改進(jìn)對(duì)數(shù)函數(shù)的計(jì)算。當(dāng)在RISC DSP (NSC CR16B)上運(yùn)行C語言算法時(shí),該運(yùn)算占用大約1,000個(gè)周期,約為實(shí)時(shí)運(yùn)算需求的15%。添加專用的特定應(yīng)用單元ASU (application specific unit)進(jìn)一步將這些功能的循環(huán)周期降至3個(gè)周期,而只增加200個(gè)門。上述結(jié)構(gòu)上的改變使最小時(shí)鐘頻率為1.5MHz,少于目標(biāo)頻率的一半。 

對(duì)門電路數(shù)目和語音識(shí)別核功耗的優(yōu)化可以降低寄存器觸發(fā)器的數(shù)目。觸發(fā)器的開銷很大(每個(gè)需要10個(gè)門電路),并消耗很大的功率。A|RT Designer的“壽命視圖(life-time view)”用來分析組成每個(gè)變量壽命的周期數(shù)目及變量被使用的頻率。通過在RAM中存儲(chǔ)不常使用但長(zhǎng)期有效的變量,即可降低寄存器的總數(shù),進(jìn)一步減小所需的硅片面積和功率。該措施節(jié)約了50%的寄存器門電路,同時(shí)為運(yùn)算周期預(yù)算留下充足的開銷空間。 

RAM壓縮的實(shí)現(xiàn) 

在設(shè)計(jì)初期,我們已經(jīng)明確30KB的RAM空間太緊張。參考SRS C代碼的每個(gè)聲紋譜(約為1秒鐘的語音)字占用大約1-2KB,相當(dāng)于30條命令,這樣幾乎沒給中間結(jié)果SRAM留下任何空間。由于30KB的RAM占用了硅片相當(dāng)大的面積,因此在硅片預(yù)算中無法添加更多的RAM(圖2)。 

      

整個(gè)芯片使用標(biāo)準(zhǔn)的0.35μm CMOS工藝制造,解決RAM空間問題的唯一解決方案是采用某些形式的語音壓縮。 

聲紋數(shù)據(jù)可用兩種方法壓縮:無損壓縮或有損壓縮。目前存在幾種以現(xiàn)有的標(biāo)準(zhǔn)C代碼源程序?yàn)榛A(chǔ),用C語言實(shí)現(xiàn)的無損壓縮方法。聲紋采樣數(shù)據(jù)可用作參考,最佳的無損算法可得到30%的壓縮率。采用有損壓縮,還能再壓縮20%,并且不明顯降低識(shí)別質(zhì)量。有損壓縮完全可以縮放,從而獲得依賴于實(shí)際聲紋長(zhǎng)度或詞匯表大小的可變壓縮率。由此得到的C代碼算法共500行,并對(duì)聲紋得到50%的壓縮率。下一步就可以集成語音壓縮和語音識(shí)別IP塊了。 

然后只需將這500行代碼與10,000行SRS代碼合并,得到一個(gè)新功能子程序,在存儲(chǔ)聲紋或讀取RAM中的聲紋時(shí)調(diào)用。但程序的計(jì)算量相當(dāng)大,初始計(jì)算后約需要150萬個(gè)時(shí)鐘周期,這與SRS處理所需的時(shí)間相當(dāng)。幸運(yùn)地是,有效時(shí)鐘頻率留出的近2.5 MHz能解決這個(gè)進(jìn)程問題,而無需進(jìn)一步優(yōu)化。此壓縮方案將RAM需求降低到20-25KB,留出至少5KB用于處理器的中間結(jié)果存儲(chǔ)器之用。

RAM壓縮的實(shí)現(xiàn)

揚(yáng)聲器接口的實(shí)現(xiàn) 

單電池電源管理偏置網(wǎng)絡(luò)、數(shù)模轉(zhuǎn)換器(DAC)和模擬放大器的要占用較大的芯片面積,而直接用C語言實(shí)現(xiàn)脈寬調(diào)制(PWM)揚(yáng)聲器驅(qū)動(dòng)程序可以解決這個(gè)問題。 

揚(yáng)聲器如何發(fā)音?C代碼可使用該公司的A|RT Builder “C-到-HDL”轉(zhuǎn)換工具直接轉(zhuǎn)換為VHDL。然后使用Exemplar的Leonardo Spectrum加以合成,并映射到Xilinx的Virtex FPGA,采用Xilinx FPGA主板,就能將揚(yáng)聲器同2個(gè)數(shù)字輸出直接相連,啟動(dòng)開關(guān),即可測(cè)聽音效了。 

RTL描述的生成 

當(dāng)工程人員對(duì)語音識(shí)別SoC的性能和結(jié)構(gòu)感到滿意時(shí),就可使用A|RT Designer工具自動(dòng)生成用于最終硅片的RTL VHDL語言描述。該工具自動(dòng)為控制器生成RTL代碼及微代碼、RAM、ROM和數(shù)據(jù)通路功能。另外A|RT Designer工具在設(shè)計(jì)流的每個(gè)階段自動(dòng)生成測(cè)試基準(zhǔn),因此原始的浮點(diǎn)算法仿真可與浮點(diǎn)C和HDL方案中的仿真媲美。VHDL仿真與原始的浮點(diǎn)C代碼嚴(yán)格對(duì)應(yīng),這意味著SoC具有與浮點(diǎn)算法相同的精度。 

最終結(jié)構(gòu) 

SRS ASIC所需的全部功能都集成在單芯片上(圖2)。另外所有為該SoC開發(fā)的IP都可復(fù)用。SRS算法目前應(yīng)用于CR16B RISC核的DECT電話語音識(shí)別器上。數(shù)據(jù)壓縮功能也可復(fù)用,以進(jìn)一步增強(qiáng)專用可變位率ADPCM音頻壓縮代碼(VADPCM)。VADPCM同樣可用于SRS核,在不利用模擬元件的條件下,PWM算法及方案仍然能實(shí)現(xiàn)高品質(zhì)的音頻輸出。SRS實(shí)現(xiàn)方案本身在下一代產(chǎn)品中還可以修改。



評(píng)論


相關(guān)推薦

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

關(guān)閉