語音識別技術中提取的聲音特徵的參數具體指什麼?
01-08
1.這裡所講的語言識別技術對於說話聲音的參數提取,可是每個人說同一句話的頻率都不一樣,這個過程是如何實現的呢?2.語言提取技術是根據頻譜上所顯示的特徵來提取的嗎?如上圖所示,比如英文讀音「pass",不同人說出這個單詞在頻譜所顯示的圖是有規律可循的嗎?這也是我現在想不通的問題,頻譜圖中的深淺不一的圖像到底與聲音特性的什麼有關,有人回答說頻譜顏色深淺的圖像與聲音頻率關係不大,是表現的音強,可是如果是這樣,不同人說同一個字或詞的音強一定是不一樣的,那語言識別技術又從中找到哪些對應文字的規律呢?
上面有人給出了語音識別中最基礎、最常用的MFCC特徵的提取步驟。我來解釋一下每一步為什麼要這樣做。
1. Take the Fourier transform of (a windowed excerpt of) a signal.
這一步其實說了兩件事:一是把語音信號分幀,二是對每幀做傅里葉變換。要分幀是因為語音信號是快速變化的,而傅里葉變換適用於分析平穩的信號。在語音識別中,一般把幀長取為20~50ms,這樣一幀內既有足夠多的周期,又不會變化太劇烈。每幀信號通常要與一個平滑的窗函數相乘,讓幀兩端平滑地衰減到零,這樣可以降低傅里葉變換後旁瓣的強度,取得更高質量的頻譜。幀和幀之間的時間差(稱為「幀移」)常常取為10ms,這樣幀與幀之間會有重疊,否則,由於幀與幀連接處的信號會因為加窗而被弱化,這部分的信息就丟失了。傅里葉變換是逐幀進行的,為的是取得每一幀的頻譜。一般只保留幅度譜,丟棄相位譜。2. Map the powers of the spectrum obtained above onto the mel scale, using triangular overlapping windows.
這一步做的事情,是把頻譜與下圖中每個三角形相乘並積分,求出頻譜在每一個三角形下的能量:這一步有如下幾個效果:
1) 傅里葉變換得到的序列很長(一般為幾百到幾千個點),把它變換成每個三角形下的能量,可以減少數據量(一般取40個三角形);2) 頻譜有包絡和精細結構,分別對應音色與音高。對於語音識別來講,音色是主要的有用信息,音高一般沒有用。在每個三角形內積分,就可以消除精細結構,只保留音色的信息。當然,對於有聲調的語言來說,音高也是有用的,所以在MFCC特徵之外,還會使用其它特徵刻畫音高。3) 三角形是低頻密、高頻疏的,這可以模仿人耳在低頻處解析度高的特性。3. Take the logs of the powers at each of the mel frequencies.
這一步就是取上一步結果的對數。簡單點理解,它是對縱軸的放縮,可以放大低能量處的能量差異;更深層次地,這是在模仿倒譜(cepstrum)的計算步驟。倒譜又是另一個話題,此處不展開講了。
4. Take the discrete cosine transform of the list of mel log powers, as if it were a signal.
求倒譜時這一步仍然用的是傅里葉變換。計算MFCC時使用的離散餘弦變換(discrete cosine transform,DCT)是傅里葉變換的一個變種,好處是結果是實數,沒有虛部。DCT還有一個特點是,對於一般的語音信號,這一步的結果的前幾個係數特別大,後面的係數比較小,可以忽略。上面說了一般取40個三角形,所以DCT的結果也是40個點;實際中,一般僅保留前12~20個,這就進一步壓縮了數據。上面整個過程的結果,就把一幀語音信號用一個12~20維向量簡潔地表示了出來;一整段語音信號,就被表示為這種向量的一個序列。語音識別中下面要做的事情,就是對這些向量及它們的序列進行建模了。我所看過的介紹mfcc最清晰的一篇Practical Cryptography(雖然我也沒看過幾篇= =), 作為一篇tutorial, 它已經很優秀了。
MFCC就是頻率特徵,還有個GMCC用的濾波器不同而已
推薦閱讀: