2019/12/23

MFCC 梅爾倒頻譜係數


MFCC是Mel-Frequency Cepstral Coefficients 梅爾頻率倒譜係數的縮寫,它是在1980年由 S.B. Davis和 Paul Mermelstein 提出來的,在語音辨識(Speech Recognition)和語者辨識(Speaker Recognition)方面,最常用到的語音特徵就是「梅爾倒頻譜係數」,此參數考慮到人耳對不同頻率的感受程度,因此特別適合用在語音辨識。


MFCC特徵提取包含兩個關鍵步驟:梅爾頻率分析和倒譜分析


在訊號處理(Signal Processing)中,梅爾倒頻譜(Mel-Frequency Cepstrum, MFC)係一個可用來代表短期音訊的頻譜,其原理根基於以非線性的梅爾刻度(mel scale)表示的對數頻譜(spectrum)及其線性餘弦轉換(linear cosine transform)之上。


梅爾倒頻譜係數 (Mel-Frequency Cepstral Coefficients, MFCC)是一組用來建立梅爾倒頻譜的關鍵係數。由音樂訊號當中的片段,我們可以得到一組足以代表此音樂訊號之倒頻譜,而梅爾倒頻譜係數即是從這個倒頻譜中推得的倒頻譜(也就是頻譜的頻譜)。與一般的倒頻譜不同 ,梅爾倒頻譜最大的特色在於,於梅爾倒頻譜上的頻帶是均勻分布於梅爾刻度上的,也就是說,這樣的頻帶會較一般我們所看到、線性的倒頻譜表示方法,和人類非線性的聽覺系統(audio system)更為接近。在音訊壓縮的技術中,常常使用梅爾倒頻譜來處理。


在語音識別(Speech Recognition)和話者識別(Speaker Recognition)方面,最常用到的語音特徵就是梅爾倒譜系數(Mel-scale Frequency Cepstral Coefficients,簡稱MFCC)。


人類聽覺特性


人耳對不同強度、不同頻率聲音的聽覺範圍稱為聲域。在人耳的聲域範圍內,聲音聽覺心理的主觀感受主要有響度、音高、音色等特徵和掩蔽效應、高頻定位等特性。其中響度、音高、音色可以在主觀上用來描述具有振幅、頻率和相位三個物理量的任何複雜的聲音,故又稱為聲音「三要素」;而在多種音源場合,人耳掩蔽效應等特性更重要,它是心理聲學的基礎。


  1. 響度


    又稱聲強或音量,它表示的是聲音能量的強弱程度,主要取決於聲波振幅的大小。聲音的響度一般用聲壓(達因/平方釐米)或聲強(瓦特/平方釐米)來計量,聲壓的單位為帕(Pa),它與基準聲壓比值的對數值稱為聲壓級,單位是分貝(dB)。對於響度的心理感受,一般用單位宋(Sone)來度量,並定義lkHz、40dB的純音的響度為1宋。響度的相對量稱為響度級,它表示的是某響度與基準響度比值的對數值,單位為口方(phon),即當人耳感到某聲音與1kHz單一頻率的純音同樣響時,該聲音聲壓級的分貝數即為其響度級。


    正常人聽覺的強度範圍為0dB—140dB(也有人認為是-5dB—130dB)。固然,超出人耳的可聽頻率範圍(即頻域)的聲音,即使響度再大,人耳也聽不出來(即響度為零)。在人耳的可聽頻域內,若聲音弱到或強到一定程度,人耳同樣是聽不到的。當聲音減弱到人耳剛剛可以聽見時,此時的聲音強度稱為「聽閾」。一般以1kHz純音為準進行測量,人耳剛能聽到的聲壓為0dB(通常大於0.3dB即有感受)、聲強為10-16W/cm2 時的響度級定為0口方。而當聲音增強到使人耳感到疼痛時,這個閾值稱為「痛閾」。仍以1kHz純音為準來進行測量,使 人耳感到疼痛時的聲壓級約達到140dB左右。


    人耳對3kHz—5kHz聲音最敏感,幅度很小的聲音信號都能被人耳聽到,而在低頻區(如小於800Hz)和高頻區(如大於5kHz)人耳對聲音的靈敏度要低得多。響度級較小時,高、低頻聲音靈敏度降低較明顯,而低頻段比高頻段靈敏度降低更加劇烈,一般應特別重視加強低頻音量。通常200Hz--3kHz語音聲壓級以60dB—70dB為宜,頻率範圍較寬的音樂聲壓以80dB—90dB最佳。

  2. 音高


    也稱音調,表示人耳對聲音調子高低的主觀感受。客觀上音高大小主要取決於聲波基頻的高低,頻率高則音調高,反之則低,單位用赫茲(Hz)表示。主觀感覺的音高單位是「美」,通常定義響度為40方的1kHz純音的音高為1000美。赫茲與「美」同樣是表示音高的兩個不同概念而又有聯繫的單位。


    人耳對響度的感覺有一個從聞閾到痛閾的範圍。人耳對頻率的感覺同樣有一個從最低可聽頻率20Hz到最高可聽頻率別20kHz的範圍。響度的測量是以1kHz純音為基準,同樣,音高的測量是以40dB聲強的純音為基準。


    實驗證明,音高與頻率之間的變化並非線性關係,除了頻率之外,音高還與聲音的響度及波形有關。音高的變化與兩個頻率相對變化的對數成正比。不管原來頻率多少,只要兩個40dB的純音頻率都增加1個倍頻程(即1倍),人耳感受到的音高變化則相同。在音樂聲學中,音高的連續變化稱為滑音,1個倍頻程相當於樂音提高了一個八度音階。根據人耳對音高的實際感受,人的語音頻率範圍可放寬到80Hz--12kHz,樂音較寬,效果音則更寬。

  3. 音色


    又稱音品,由聲音波形的諧波頻譜和包絡決定。聲音波形的基頻所產生的聽得最清楚的音稱為基音,各次諧波的微小振動所產生的聲音稱泛音。單一頻率的音稱為純音,具有諧波的音稱為複音。每個基音都有固有的頻率和不同響度的泛音,藉此可以區別其它具有相同響度和音調的聲音。


人耳的掩蔽效應


一個較弱的聲音(被掩蔽音)的聽覺感受被另一個較強的聲音(掩蔽音)影響的現象稱為人耳的「掩蔽效應」。被掩蔽音單獨存在時的聽閾分貝值,或者說在安靜環境中能被人耳聽到的純音的最小值稱為絕對聞閾。實驗表明,3kHz—5kHz絕對聞閾值最小,即人耳對它的微弱聲音最敏感;而在低頻和高頻區絕對聞閾值要大得多。在800Hz--1500Hz範圍內聞閾隨頻率變化最不顯著,即在這個範圍內語言可儲度最高。在掩蔽情況下,提高被掩蔽弱音的強度,使人耳能夠聽見時的聞閾稱為掩蔽聞閾(或稱掩蔽門限),被掩蔽弱音必須提高的分貝值稱為掩蔽量(或稱閾移)。


純音對純音、噪音對純音的掩蔽效應結論如下:


  • 純音間的掩蔽


    • 對處於中等強度時的純音最有效的掩蔽是出現在它的頻率附近。
    • 低頻的純音可以有效地掩蔽高頻的純音,而反過來則作用很小。
  • 噪音對純音的掩蔽噪音是由多種純音組成,具有無限寬的頻譜


若掩蔽聲為寬頻噪聲,被掩蔽聲為純音,則它產生的掩蔽門限在低頻段一般高於噪聲功率譜密度17dB,且較平坦;超過500Hz時大約每十倍頻程增大10dB。若掩蔽聲為窄帶噪聲,被掩蔽聲為純音,則情況較複雜。其中位於被掩蔽音附近的由純音份量組成的窄帶噪聲即臨界頻帶的掩蔽作用最明顯。


當我們改變窄頻帶聲音刺激(narrowband sound stimulus)時,其聲音成分若跨越某一頻率,則聽覺上會感到有差異,而在一頻率範圍內,則感覺不到差異,這個頻率範圍稱臨界頻帶(Critical Band)


  • 在人類聽覺範圍內 20Hz--16kHz範圍,可以分成24個臨界頻帶

根據人耳聽覺機理的研究發現,人耳對不同頻率的聲波有不同的聽覺敏感度。從200Hz到5000Hz的語音訊號對語音的清晰度影響對大。兩個響度不等的聲音作用於人耳時,則響度較高的頻率成分的存在會影響到對響度較低的頻率成分的感受,使其變得不易察覺,這種現象稱為掩蔽效應。當某個純音位於掩蔽聲的臨界頻帶之外時,掩蔽效應仍然存在。




掩蔽類型


  • 低頻的聲音傾向於遮蔽高頻的聲音


​ 掩蔽聲與被掩蔽聲同時作用時發生掩蔽效應,又稱同時掩蔽。這時,掩蔽聲在掩蔽效應發生期間一直起作用,是一種較強的掩蔽效應。通常,頻域中的一個強音會掩蔽與之同時發聲的附近的弱音,弱音離強音越近,一般越容易被掩蔽;反之,離強音較遠的弱音不容易被掩蔽。例如,—個1000Hz的音比另一個900Hz的音高18dB,則900Hz的音將被1000Hz的音掩蔽。而若1000Hz的音比離它較遠的另一個1800Hz的音高18dB,則這兩個音將同時被人耳聽到。若要讓1800Hz的音聽不到,則1000Hz的音要比1800Hz的音高45dB。一般來說,低頻的音容易掩蔽高頻的音;在距離強音較遠處,絕對聞閾比該強音所引起的掩蔽閾值高,這時,噪聲的掩蔽閾值應取絕對聞閾。


  • 聲音在聽覺器官中,傳遞時間延遲所造成的遮蔽現象,稱時間遮蔽


由於頻率較低的聲音在內耳蝸基底膜上行波傳遞的距離大於頻率較高的聲音,故一般來說,低音容易掩蔽高音,而高音掩蔽低音較困難。在低頻處的聲音掩蔽的臨界頻寬較高頻要小。


時域掩蔽是指掩蔽效應發生在掩蔽聲與被掩蔽聲不同時出現時,又稱異時掩蔽。異時掩蔽又分為導前掩蔽和滯後掩蔽。若掩蔽聲音出現之前的一段時間內發生掩蔽效應,則稱為導前掩蔽;否則稱為滯後掩蔽。產生時域掩蔽的主要原因是人的大腦處理信息需要花費一定的時間,異時掩蔽也隨著時間的推移很快會衰減,是一種弱掩蔽效應。一般情況下,導前掩蔽只有3ms—20ms,而滯後掩蔽卻可以持續50ms—100ms。


所以,人們從低頻到高頻這一段頻帶內按臨界頻寬的大小由密到疏安排一組帶通濾波器,對輸入訊號進行濾波。將每個帶通濾波器輸出的訊號能量作為訊號的基本特徵,對此特徵經過進一步處理後就可以作為語音的輸入特徵。


梅爾刻度是一種基於人耳對等距的音高(pitch)變化的感官判斷而定的非線性頻率刻度。當在梅爾刻度上面上是均勻分度的話,對於的赫茲之間的距離將會越來越大。梅爾刻度的濾波器組在低頻部分的解析度高,跟人耳的聽覺特性是相符的,這也是梅爾刻度的物理意義所在。


由於這種特徵不依賴於訊號的性質,對輸入訊號不做任何的假設和限制,又利用了聽覺模型的研究成果。因此,這種引數比基於聲道模型的LPCC相比具有更好的魯邦性,更符合人耳的聽覺特性,且信噪比降低時仍然具有較好的識別效能。


梅爾刻度與頻率的關係可用下式近似表示, f 為頻率,單位為 Hz。


\(Mel(f) = 2595 * log(1 + \frac{f}{700}) = 1125*ln(1+\frac{f}{700})\)


MFCC 的計算過程



  1. 預強調(Pre-emphasis):將語音訊號 s(n) 通過一個高通濾波器:\(H(z)=1-a*z^{-1}\) 其中 a 介於 0.9 和 1.0 之間。若以時域的運算式來表示,預強調後的訊號 \(s_2(n)\) 為 \(s_2(n) = s(n) - a*s(n-1)\) 。這個處理目的就是為了消除發聲過程中聲帶和嘴唇的效應,來補償語音信號受到發音系統所壓抑的高頻部分。(另一種說法則是要突顯在高頻的共振峰。)


    經過了預強調之後,聲音變的比較尖銳清脆,但是音量也變小了

  2. 音框化(Frame blocking):先將 N 個取樣點集合成一個觀測單位,稱為音框(Frame),通常 N 的值是 256 或 512,涵蓋的時間約為 20~30 ms 左右。為了避免相鄰兩音框的變化過大,所以我們會讓兩相鄰因框之間有一段重疊區域,此重疊區域包含了 M 個取樣點,通常 M 的值約是 N 的一半或 1/3。通常語音辨識所用的音訊的取樣頻率為 8 KHz或 16 KHz,以 8 KHz 來說,若音框長度為 256 個取樣點,則對應的時間長度是 256/8000*1000 = 32 ms。

  3. 漢明窗(Hamming window):將每一個音框乘上漢明窗,以增加音框左端和右端的連續性(請見下一個步驟的說明)。假設音框化的訊號為 \(S(n), n = 0,…N-1\)。那麼乘上漢明窗後為 \(S'(n) = S(n)*W(n)\),此 W(n) 形式如下:


    \(W(n, a) = (1 - a) - acos(2pn/(N-1)),0≦n≦N-1\)


    不同的 a 值會產生不同的漢明窗


    一般都取 a = 0.46

  4. 快速傅利葉轉換(Fast Fourier Transform, or FFT):由於訊號在時域(Time domain)上的變化通常很難看出訊號的特性,所以通常將它轉換成頻域(Frequency domain)上的能量分佈來觀察,不同的能量分佈,就能代表不同語音的特性。所以在乘上漢明窗後,每個音框還必需再經過 FFT 以得到在頻譜上的能量分佈。


    乘上漢明窗的主要目的,是要加強音框左端和右端的連續性,這是因為在進行 FFT 時,都是假設一個音框內的訊號是代表一個週期性訊號,如果這個週期性不存在,FFT 會為了要符合左右端不連續的變化,而產生一些不存在原訊號的能量分佈,造成分析上的誤差。當然,如果我們在取音框時,能夠使音框中的訊號就已經包含基本週期的整數倍,這時候的音框左右端就會是連續的,那就可以不需要乘上漢明窗了。但是在實作上,由於基本週期的計算會需要額外的時間,而且也容易算錯,因此我們都用漢明窗來達到類似的效果。

  5. 三角帶通濾波器(Triangular Bandpass Filters):將能量頻譜能量乘以一組 20 個三角帶通濾波器,求得每一個濾波器輸出的對數能量(Log Energy)。必須注意的是:這 20 個三角帶通濾波器在「梅爾頻率」(Mel Frequency)上是平均分佈的,而梅爾頻率和一般頻率 f 的關係式如下:


    \(Mel(f) = 2595 * log(1 + \frac{f}{700}) = 1125*ln(1+\frac{f}{700})\)


    梅爾頻率代表一般人耳對於頻率的感受度,由此也可以看出人耳對於頻率 f 的感受是呈對數變化的。


    • 在低頻部分,人耳感受是比較敏銳
    • 在高頻部分,人耳的感受就會越來越粗糙

    三角帶通濾波器有兩個主要目的:


    • 對頻譜進行平滑化,並消除諧波的作用,突顯原先語音的共振峰。(因此一段語音的音調或音高,是不會呈現在 MFCC 參數內,換句話說,以 MFCC 為特徵的語音辨識系統,並不會受到輸入語音的音調不同而有所影響。)
    • 降低資料量
  6. 離散餘弦轉換(Discrete cosine transform, or DCT):將上述的 20 個對數能量 Ek帶入離散餘弦轉換,求出 L 階的 Mel-scale Cepstrum 參數,這裡 L 通常取 12。


    離散餘弦轉換公式如下:\(C_m=\sum_{k=1}^{N}cos[m*(k-0.5)*p/N]*E_k, m=1,2, ..., L\) 其中 \(E_k\) 是由前一個步驟所算出來的三角濾波器和頻譜能量的內積值,N 是三角濾波器的個數。由於之前作了 FFT,所以採用 DCT 轉換是期望能轉回類似 Time Domain 的情況來看,又稱 Quefrency Domain,其實也就是 Cepstrum。又因為之前採用 Mel- Frequency 來轉換至梅爾頻率,所以才稱之Mel-scale Cepstrum。

  7. 對數能量(Log energy):一個音框的音量(即能量),也是語音的重要特徵,而且非常容易計算。因此我們通常再加上一個音框的對數能量(定義為一個音框內訊號的平方和,再取以 10 為底的對數值,再乘以 10),使得每一個音框基本的語音特徵就有 13 維,包含了 1 個對數能量和 12 個倒頻譜參數。(若要加入其他語音特徵以測試辨識率,也可以在此階段加入,這些常用的其他語音特徵,包含音高、過零率、共振峰等。)

  8. 差量倒頻譜參數(Delta cepstrum):雖然已經求出 13 個特徵參數,然而在實際應用於語音辨識時,我們通常會再加上差量倒頻譜參數,以顯示倒頻譜參數對時間的變化。它的意義為倒頻譜參數相對於時間的斜率,也就是代表倒頻譜參數在時間上的動態變化,公式如下:


    \(△C_m(t) = \frac{𝜕 C_m(t)}{𝜕t} = [\sum_{t=-M}^{M}C_m(t+t)t] / [\sum_{t=-M}^{M}t^2] \)


    這裡 M 的值一般是取 2 或 3。因此,如果加上差量運算,就會產生 26 維的特徵向量;如果再加上差差量運算,就會產生 39 維的特徵向量。


    一般在 PC 上進行的語音辨識,就是使用 39 維的特徵向量。


References


梅爾倒頻譜 wiki


語音特徵引數MFCC提取過程詳解


聲學特徵提取:梅爾頻率倒譜係數MFCC


Kaldi的MFCC特徵提取代碼分析


梅爾倒頻譜係數.ppt


聲音聽覺理論概述


chap11 speaker identification


Audio Signal Processing and Recognition (音訊處理與辨識) Roger Jang (張智星)


MFCC


語音處理中MFCC(Mel頻率倒譜系數)對應的物理含義是什麼?它計算出的那幾個系數能反映什麼樣特徵?


語音特徵參數MFCC提取過程詳解


聲學特徵(二) MFCC特徵原理


Day 25:自動語音識別(Automatic Speech Recognition) -- 觀念與實踐


Building a Dead Simple Speech Recognition Engine using ConvNet in Keras

沒有留言:

張貼留言