羅海濤
(廣東外語(yǔ)外貿(mào)大學(xué)信息學(xué)院,廣州 510420)
語(yǔ)言是人類交流的有力工具。通過聲電傳感器把語(yǔ)音轉(zhuǎn)換為電信號(hào),得到語(yǔ)音信號(hào),再通過采樣、量化等技術(shù)得到語(yǔ)音采樣數(shù)據(jù)。在現(xiàn)代信息化社會(huì),人們用計(jì)算機(jī)對(duì)語(yǔ)音采樣數(shù)據(jù)進(jìn)行存儲(chǔ)、傳送、識(shí)別、編碼和增強(qiáng)。
對(duì)語(yǔ)音信號(hào)的處理最早可以追溯到上世紀(jì)30年代末,上世紀(jì)40年代初語(yǔ)譜圖儀問世。語(yǔ)譜圖是語(yǔ)音的時(shí)域和頻域結(jié)合的視圖,其橫坐標(biāo)是時(shí)間,縱坐標(biāo)是頻率,坐標(biāo)點(diǎn)值為語(yǔ)音采樣數(shù)據(jù)的能量。語(yǔ)音信號(hào)的語(yǔ)譜圖又稱為聲紋,在語(yǔ)音信號(hào)處理、編碼、識(shí)別等方面有著重要的應(yīng)用??紤]到橫坐標(biāo)一個(gè)時(shí)間點(diǎn)采樣數(shù)據(jù)很難分析出各個(gè)頻率成分,橫坐標(biāo)一般采用一幀語(yǔ)音采樣數(shù)據(jù),這樣可以通過傅里葉變換得到該幀數(shù)據(jù)的頻譜,即縱坐標(biāo)。而縱坐標(biāo)各個(gè)頻率點(diǎn)的能量不同,如何在一個(gè)像素點(diǎn)反映這些不同能量?首先,能量的表示方法有很多種,有的采用幅頻的幅度絕對(duì)值作為該頻率點(diǎn)能量,有的采用幅頻的幅度平方作為該頻率點(diǎn)能量,等等。其次,為了在一個(gè)像素點(diǎn)反映不同的能量值,采用不同的灰度值方法,即把能量值由大到小按順序轉(zhuǎn)換為一個(gè)像素點(diǎn)的灰度值,能量越大,灰度值越大,顏色越深;反之,能量越小,灰度值越小,顏色越淺。
語(yǔ)音信號(hào)的頻譜不是均勻分布的,能量集中在低頻部分,頻率越高,其頻譜能量越小。為了消除這種不均勻帶來的影響,在處理之前,一般對(duì)音頻采樣數(shù)據(jù)進(jìn)行預(yù)處理。有效的預(yù)處理是預(yù)加重。預(yù)加重實(shí)際上是一個(gè)一階的數(shù)字濾波器,如公式(1)所示:
式中是一個(gè)常數(shù),一般取接近1的小數(shù)。容易求出該濾波器對(duì)應(yīng)的時(shí)域響應(yīng)是(0)=1以及(1)=-μ,這是一個(gè)有限沖激響應(yīng)濾波器FIR。
令=e,得到該濾波器的數(shù)字頻域響應(yīng)為:
式中參數(shù)是一個(gè)常數(shù),一般取接近1的小數(shù),是數(shù)字頻率。
該濾波器實(shí)際上是一個(gè)高通濾波器,它抑制語(yǔ)音信號(hào)低頻部分的幅度,而對(duì)高頻部分有增強(qiáng)作用,所以,總體上這種濾波器使語(yǔ)音信號(hào)的頻譜變得平坦。
為了得到語(yǔ)譜圖,需要對(duì)語(yǔ)音采樣信號(hào)進(jìn)行分幀。分幀實(shí)際上是在時(shí)域?qū)φZ(yǔ)音數(shù)據(jù)施加一個(gè)矩形窗進(jìn)行截?cái)?,其過程可用圖1來表示。
圖1 語(yǔ)音分幀示意圖
圖1中每幀語(yǔ)音采樣數(shù)據(jù)長(zhǎng)度都相同,幀移介于0到1之間。如果幀移為0,則前后兩幀語(yǔ)音完全重疊;如果幀移等于1,則前后兩幀語(yǔ)音完全沒有重疊的部分。分幀時(shí),可以采用多種窗,矩形窗是最簡(jiǎn)單的一種,其時(shí)域函數(shù)為
式(3)中是幀的長(zhǎng)度。對(duì)該窗函數(shù)作傅里葉變換,可以得到其頻域函數(shù)為
圖2 矩形窗的幅度與數(shù)字頻率的關(guān)系圖
除了矩形窗之外,巴特利窗在截?cái)嘈盘?hào)時(shí)有一段過渡,因?yàn)檫@種窗實(shí)際上是一個(gè)三角形的窗,其時(shí)域函數(shù)定義為
同樣對(duì)該窗函數(shù)作傅里葉變換,可以得到其頻譜。和矩形窗的頻譜相比,巴特利窗的主瓣寬度增加了,過渡帶也增加了,但旁瓣幅度降低很多。
其他窗函數(shù)還有漢寧窗,又叫升余弦窗,其時(shí)域函數(shù)為
這種窗的頻譜旁瓣更小,能量更加集中到主瓣。
對(duì)漢寧窗函數(shù)的系數(shù)0.5加以改變,即得到漢明窗,又稱為改進(jìn)的升余弦窗,其時(shí)域函數(shù)為
漢明窗幅度譜旁瓣更小,能量更加集中到主瓣。
上述幾種窗函數(shù)的頻譜中,漢明窗的旁瓣是最小的,主瓣內(nèi)的能量可達(dá)99.6%。
本文編程對(duì)wav音頻格式文件進(jìn)行數(shù)據(jù)獲取,再進(jìn)行語(yǔ)音信號(hào)處理。wav格式是微軟公司開發(fā)的一種聲音文件格式,也叫波形文件,是最早的數(shù)字音頻文件格式,它具有RIFF(resource interchange file format)格式。加窗分幀是在時(shí)域?qū)φZ(yǔ)音采樣進(jìn)行分段,分段后再對(duì)每一段采樣數(shù)據(jù)作離散傅里葉變換,以獲得該段語(yǔ)音的頻譜。離散傅里葉變換DFT是在時(shí)域和頻域都離散的變換,其結(jié)果是信號(hào)離散的頻譜,如式(8)所示:
離散傅里葉變換雖然使用計(jì)算機(jī)編程進(jìn)行,但是由于需要進(jìn)行很多的復(fù)數(shù)運(yùn)算,速度較慢。為了加快速度,通常采用快速傅里葉變換FFT。由于FFT要求數(shù)據(jù)個(gè)數(shù)必須是2的冪,所以運(yùn)算前,需檢查幀長(zhǎng)是否滿足這個(gè)要求。通常幀的長(zhǎng)度不是2的冪,需要對(duì)一幀數(shù)據(jù)補(bǔ)零,以達(dá)到2的冪,滿足FFT的要求才能進(jìn)行FFT運(yùn)算。設(shè)補(bǔ)零后幀長(zhǎng)=2。
FFT采用蝶形計(jì)算的辦法,先把輸入數(shù)據(jù)按二進(jìn)制的倒位序排列,輸入第1級(jí)蝶形進(jìn)行運(yùn)算。第1級(jí)蝶形運(yùn)算結(jié)果輸入到第2級(jí),依次類推,直到最后一級(jí)蝶形,即第級(jí)。該級(jí)運(yùn)算結(jié)果就是最后的FFT結(jié)果,也是該幀語(yǔ)音的頻譜。
語(yǔ)譜圖是一段語(yǔ)音信號(hào)的二維時(shí)域和頻域圖像,橫坐標(biāo)是時(shí)間次序,采用語(yǔ)音幀的順序編號(hào),即按照第1幀、第2幀的順序幀編號(hào)作為橫坐標(biāo);縱坐標(biāo)是對(duì)應(yīng)語(yǔ)音幀的頻譜,所以縱坐標(biāo)是頻率??紤]到需要在語(yǔ)譜圖的縱坐標(biāo)表示一幀語(yǔ)音的頻譜,所以需要把頻譜的幅度轉(zhuǎn)換為一個(gè)點(diǎn)的灰度來表示,而幅度又是復(fù)數(shù),所以采用復(fù)數(shù)絕對(duì)值來表示。本文實(shí)際編程時(shí),幅度有6種方式供選擇,分別是復(fù)數(shù)絕對(duì)值(默認(rèn))、復(fù)數(shù)實(shí)部和虛部的平方和、復(fù)數(shù)實(shí)部和虛部的平方和的平方根、復(fù)數(shù)實(shí)部和虛部的平方和的立方根、復(fù)數(shù)實(shí)部和虛部的平方和的四方根、以及復(fù)數(shù)實(shí)部和虛部的平方和的自然對(duì)數(shù),如圖3所示。
圖3 語(yǔ)譜圖的能量形式
綜上所述,語(yǔ)譜圖的形成過程如下:
(1)對(duì)語(yǔ)音的音頻數(shù)據(jù)加窗、分幀,幀長(zhǎng)取2的冪,不足補(bǔ)零;
(2)確定FFT要求的二進(jìn)制倒位序;
(3)取得第1幀數(shù)據(jù);
(4)按照倒位序重新對(duì)該幀數(shù)據(jù)排序;
(5)把重新排序的數(shù)據(jù)輸入到第1級(jí)蝶形,完成該級(jí)計(jì)算;
(6)蝶形級(jí)數(shù)加1;
(7)判斷級(jí)數(shù)是否等于,若等于,轉(zhuǎn)至第(9)步;
(8)計(jì)算結(jié)果輸入到下一級(jí)蝶形輸入端,完成該級(jí)計(jì)算,轉(zhuǎn)第(6)步;
(9)對(duì)計(jì)算得到的幀頻譜,按照?qǐng)D3所示,根據(jù)用戶的選擇計(jì)算能量值,記錄最大能量值;
(10)根據(jù)最大能量值和各點(diǎn)能量值,逐點(diǎn)把能量值轉(zhuǎn)換為像素灰度值,例如能量最大值的像素點(diǎn)灰度值為最大,取255(黑色),其他各點(diǎn)按照線性關(guān)系轉(zhuǎn)換為灰度值;
(11)循環(huán)根據(jù)該幀數(shù)據(jù)計(jì)算得到的各點(diǎn)灰度值,在縱坐標(biāo)依次畫出各點(diǎn)灰度像素;
(12)數(shù)據(jù)幀編號(hào)加1;
(13)判斷是否完成所有幀的計(jì)算,若是,結(jié)束;若否,轉(zhuǎn)第(4)步。
本文在Visual C++環(huán)境下,編程對(duì)一些英文語(yǔ)音音頻文件進(jìn)行分析計(jì)算,生成語(yǔ)譜圖。每個(gè)音頻文件是一個(gè)英文單詞的wav波形文件。
以英文單詞“important”為例,首先從音頻文件中讀取該單詞的采樣數(shù)據(jù),如圖4所示。
圖4 單詞important的音頻參數(shù)
從圖4可知,該音頻文件共46739個(gè)采樣數(shù)據(jù),每個(gè)采樣數(shù)據(jù)用16位二進(jìn)制表示,有兩個(gè)聲道,采樣頻率為44100Hz。后面是兩個(gè)聲道的每個(gè)采樣數(shù)據(jù),省略。在后面的分析計(jì)算中,只取其中一個(gè)聲道的數(shù)據(jù)。
下一步,進(jìn)行端點(diǎn)檢測(cè),去掉語(yǔ)音開始之前和結(jié)束之后的多余的采樣數(shù)據(jù),得到結(jié)果如圖5所示。
圖5 經(jīng)過端點(diǎn)檢測(cè)后得到的采樣數(shù)據(jù)
從圖5可知,經(jīng)過端點(diǎn)檢測(cè)后,實(shí)際剩下的采樣數(shù)據(jù)共39657個(gè),比之前的大為減少,也使后面的處理計(jì)算量大為減少。
再按照前面介紹的步驟和方式,計(jì)算得到語(yǔ)譜圖如圖6所示。其余單詞的語(yǔ)譜圖不再羅列。
圖6 單詞important的語(yǔ)譜圖
語(yǔ)言是人類交流的有力工具。通過傳感器把語(yǔ)音轉(zhuǎn)換為電信號(hào),再經(jīng)過離散采樣、量化等處理,得到離散的采樣數(shù)據(jù)。這些采樣適合用計(jì)算機(jī)進(jìn)行存儲(chǔ)、傳輸、編碼、增強(qiáng)等處理。語(yǔ)音信號(hào)的處理涉及數(shù)字信號(hào)處理,還有語(yǔ)音、語(yǔ)言學(xué)、認(rèn)知學(xué)和心理學(xué)等學(xué)科的內(nèi)容,是一門跨學(xué)科的新興學(xué)科。語(yǔ)譜圖是語(yǔ)音的聲紋,是語(yǔ)音信號(hào)的時(shí)域和頻域信息結(jié)合的圖像,在語(yǔ)音處理方面有著廣泛的應(yīng)用。本文采用C++編程,處理語(yǔ)音信號(hào),產(chǎn)生語(yǔ)譜圖。