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