語音識別及其定點(diǎn)DSP實(shí)現(xiàn)
2.2 系統(tǒng)的硬件結(jié)構(gòu)
在構(gòu)成語音識別電路時(shí),我們采用了ADSP2181的主從結(jié)構(gòu)設(shè)計(jì)方式,通過IDMA口由CPU裝載程序。語音識別系統(tǒng)的硬件結(jié)構(gòu)如圖2所示。
在這種結(jié)構(gòu)中,PC機(jī)為主CPU,ADSP2181為從CPU,由PC機(jī)通過IDMA口將程序裝載到ADSP2181的內(nèi)部存儲器中。PC機(jī)總線通過CPLD譯碼,形成IRD,IWR,IAL,IS等控制信號,與ADSP2181的IDMA口相連。這樣,在ADSP2181全速運(yùn)行時(shí),主機(jī)可以查詢從機(jī)的運(yùn)行狀態(tài),可以訪問到ADSP2181內(nèi)部所有的程序存儲器和數(shù)據(jù)存儲器。這對程序的編譯和調(diào)試,以及語音信號的實(shí)時(shí)處理帶來了極大的方便。
3 語音識別的DSP實(shí)現(xiàn)技術(shù)
3.1 浮點(diǎn)運(yùn)算的定點(diǎn)實(shí)現(xiàn)
在語音識別的算法中,有許多的浮點(diǎn)運(yùn)算。用定點(diǎn)DSP來實(shí)現(xiàn)浮點(diǎn)運(yùn)算是在編寫語音識別程序中需要首先解決的問題。這個(gè)問題可以通過數(shù)的定標(biāo)方法來實(shí)現(xiàn)。數(shù)的定標(biāo)就是決定小數(shù)點(diǎn)在定點(diǎn)數(shù)中的位置。Q表示法是一種常用的定標(biāo)方法。其表示機(jī)制是:
設(shè)定點(diǎn)數(shù)是J,浮點(diǎn)數(shù)是)/,則Q法表示的定點(diǎn)數(shù)與浮點(diǎn)數(shù)的轉(zhuǎn)換關(guān)系為:
浮點(diǎn)數(shù))/轉(zhuǎn)換為定點(diǎn)數(shù)x:x= (int)y×2Q;
定點(diǎn)數(shù)z轉(zhuǎn)換為浮點(diǎn)數(shù)y:y =(float)x×2-Q。
3.2 數(shù)據(jù)精度的處理
用16b的定點(diǎn)DSP實(shí)現(xiàn)語音識別算法時(shí),雖然程序的運(yùn)行速度提高了,但是數(shù)據(jù)精度比較低。這可能由于中間過程的累計(jì)誤差而引起運(yùn)算結(jié)果的不正確。為了提高數(shù)據(jù)的運(yùn)算精度,在程序中采用了以下的處理方法:
(1)擴(kuò)展精度
在精度要求比較高的地方,將計(jì)算的中間變量采用32b,甚至48b來表示。這樣,在指令條數(shù)增加不多的情況下卻使運(yùn)算精度大大提高了。
(2)采用偽浮點(diǎn)法來表示浮點(diǎn)數(shù)
偽浮點(diǎn)法即用尾數(shù)+指數(shù)的方法來表示浮點(diǎn)數(shù)。這時(shí),數(shù)據(jù)塊的尾數(shù)可以采用Q1.15數(shù)據(jù)格式,數(shù)據(jù)塊的指數(shù)相同。這種表示數(shù)據(jù)的方法有足夠大的數(shù)據(jù)范圍,可以完全滿足數(shù)據(jù)精度的要求,但是需要自己編寫一套指數(shù)和尾數(shù)運(yùn)算庫,會額外增加程序的指令數(shù)和運(yùn)算量,不利于實(shí)時(shí)實(shí)現(xiàn)。
以上兩種方法,都可以提高運(yùn)算精度,但在實(shí)際操作時(shí),要根據(jù)系統(tǒng)的要求和算法的復(fù)雜度,來權(quán)衡考慮。
評論